You are here

ATMEL mikrokontorllerekről szeretnék megtudni egy-két dolgot.

8 posts / 0 new
Last post
Isaac
Isaac picture

Sziasztok!
Az alábbi problémám lenne.

SPIEN opció a HIGH fusebit beállításoknál található. Ahogy olvastam az adatlapokon az az ISP programozás hozzáférés engedélyezés/tiltása.
De ezzel az a gáz hogy nekem ez az opció NULLÁN van mind a 4 mikrokontrollernél, és csak az egyikből tudom visszaolvasni a tartalmat (ATmega8)

A másik 3-nál pedig ha az alap beállításokkal írom a procikat utána bármikor tudom törölni/újraírni. Az-az hozzáférhető.
De ha a fuse biteket beállítom, mert muszáj hogy működjenek a procik, és úgy írom meg őket, akkor utána nem tudom őket olvasni/írni.
Pedig SPIEN funkcióhoz nem is nyúltam. Maradt az alap beállítás (0).
Ha az adatlapokat megnézitek ott is 0 az alapbeállítás (engedélyezve van).

Itt vannak a FUSE BIT beállításaim:
ProgISP-t használok írásra.
Az alap az azt akarja jelenteni hogy a progi beállít egy alap beállítást a fusebitekhez (opcionális beállítás)

ATmega8515
Alap->LOW:E1 HI:D9
Beállított->LOW:DF HI:D9

ATmega8
Alap->LOW:E1 HI:D9
Beállított->Maradt az alap beállítás!

ATTiny2313
Alap->LOw:62 HI:DF
Beállított->LOW:DF HI:D9

ATmega16
Alap->LOW:E1 HI:99
Beállított->LOW:CF HI:19

De a procikat újra lehet írni más hardverrel (párhuzamos) csak nem ISP-n keresztül.
És nem halottak.

Ha tud valaki valamit az jelentkezzen.
Megköszönném mert még csak kezdő vagyok a területen.

Comments
Jibaro
Jibaro picture

Szia Isaac!

Ott lesz a gond, hogy a programozód nem ad órajelet a chipnek.
Soros programozáshoz szükség van a CKSEL bitekkel kiválasztott
órajelforrásra is -- kivéve persze, ha a belső óraoszcillátort
választottad, ami az alapbeállítás.

Ezt a tényt az adatlapok is megemlítik, bár jól eldugva (én is
csak akkor találtam meg, amikor már kerestem...):

> Depending on CKSEL fuses, a valid clock must be present.

Nálad viszont (pont a működő ATmega8-at kivéve) mindegyik chip
low fuse bitjei "külső kvarc"-ra vannak állítva. (Kvarc híján
ilyenkor azt is megteheted, hogy TTL szintű négyszögjelet adsz
az X1 lábra. De ha egyik sincs, akkor a soros programozás nem
működik, a szoftver valószínűleg fel sem ismeri a chipet.)

Ha nincs ilyen lehetőség a programozódon, tegyél a programozód
és a chip közé egy foglalatot, és forrassz rá egy 1 MHz körüli
kvarcot (az X1 és X2 lábakra), vagy hajtsd meg az X1 lábat egy
1 MHz-es jellel. Ezzel már mennie kell.

Még egy tipp: az órajel frekvenciája legyen legalább háromszor
akkora, mint a soros programozó ütemjele (SCK). Ez csak akkor
szokott gondot okozni, ha 100 kHz alá merészkedik az ember, de
a legtöbb programozó fel van készítve erre (pl. avrdude -i).

Sok sikert!

Jibaro

0

Isaac
Isaac picture

Szia!
Szóval akkor ha kapcsolási rajzon szerepel kvarc, akkor mindenképp kell az íráshoz és a visszaolvasáshoz is. Mert a fuse bitek is úgy vannak beállítva hogy a kűlső kvarcot használja. Az Atmega8-asnál pedig nincs kűlső kvarc a kapcsolásban. Igaz pedig erre figyelmeztettek még régebben, csak nem is gondoltam rá így hirtelen.

0

Jibaro
Jibaro picture

Szia Isaac!

Azt megteheted, hogy amíg csak fejleszted a chip szoftverét, a
belső oszcillátort használod (viszonylag bőséges a választék),
és csak akkor programozod át a fuse biteket, amikor már "kész"
a szoftver. (Kész szoftver persze nincs. :-))

Sokan úgy kerülik meg a problémát, hogy nem építenek különálló
AVR-programozót, hanem ISP-csatlakozót (in-system programming)
terveznek az áramkörbe. Igaz, ilyenkor oda kell figyelni arra
a bizonyos három lábra (MISO, MOSI, SCK), így viszont egyrészt
nem kell átdugdosni az IC-t a programozóba, másrészt az órajel
programozás és működés közben ugyanúgy rendelkezésre áll.

Az első AVR-programozómról én is lefelejtettem az órajelet, de
azóta építettem egy másikat: ezen egy 28 MHz-es oszcillátor és
egy 74HC4040 dolgozik, így jumperekkel lehet beállítani a chip
órajelét, széles határok között.

Jibaro

0

Isaac
Isaac picture

Szia!
Tegnap este fontolóra vettem hogy inkább ISP-n keresztűl kellene felprogramozni a procikat, mert így legalább körülötte van minden ami kell.

A te megoldásod az órajel beállítására azt esetleg elkérhetném?
Megköszönném!

0

Jibaro
Jibaro picture

Szia Isaac!

Nagyon egyszerű az egész -- összesen egy oszcillátorból és egy
sokbites bináris számlálóból áll, amit frekvenciaosztó gyanánt
használok. Az oszcillátor kimenetét a számláló órabemenetére,
a számláló sok kimenetét pedig egy sor jumperre kötöttem (úgy,
mint egy sokállású kapcsolóra): az első jumperen így az órajel
frekvenciájának fele jelenik meg, a másodikon a negyede stb.

A jumperek másik lábait összekötöttem és az AVR chip X1 lábára
vezettem. Persze mindig csak egy átkötést szabad feltenni; az
így kiválasztott kimenet adja az AVR chip órajelét. (Ha egyik
jumper sincs átkötve, akkor ugyanúgy nincs órajel, mint a sima
programozóknál; ez akkor lehet hasznos, ha tényleg I/O-lábként
működtetjük az X1-et.)

Oszcillátort százféleképpen lehet építeni, én egy kis fémtokos
kvarcoszcillátort használtam (mert az volt otthon); 10 MHz-től
30 MHz-ig nagyjából bármi megfelel.

A számláló sem kritikus: sokfokozatút érdemes választani, hogy
minél többféle órajel közül válogathass; a 74HC4040-es például
12-fokozatú. De ugyanúgy megfelel a 74HC4024, sőt 74LS393-mal
vagy más számlálókkal is működnie kell.

Küldhetek kapcsolási rajzot is, de nem akarlak megsérteni. ;-)

Sok sikert!

Jibaro

0

Isaac
Isaac picture

Hali!

Hát azért elfogadnám a rajzot.
Próbálkoztam összerakni a EAGLE-ben, de a TTL ic-s témát még soha nem bolygattam.

Ja és megpróbáltam az egyik chip-et ISP-n keresztül (mert elkészült a panel).
És frankón működik. (ATmega16-os chippel szerelt).

Ja és esetleg tudsz valami oldalt ahol a fuse bitekkel részletesen foglalkoznak? (Leírás)
Vagy ha esetleg neked valami?

0

Jibaro
Jibaro picture

Szia Isaac!

Lásd a csatolmányt! (Fülesmester után szabadon. ;-))

Az AVR-programozó "érdemi" részét nem rajzoltam le, csak magát
az óragenerátort; elvileg bármilyen programozóhoz használható.
Mindkét IC-nek megfelel az 5 voltos táp, amit érdemes mindjárt
a tok vagy a foglalat alatt szűrni egy-egy 100 nF-os kondival.
(Ugyanezt tedd a mikrovezérlővel is, ha még nincs neki.)

A nem használt inverterek bemenetét kösd a földre, mert a CMOS
bemenetek nem szeretnek lebegni. (Nem "egytokos" oszcillátort
rajzoltam, mert elég drága, de ha van kéznél ilyened, az egész
kvarcos-inverteres kapcsolást helyettesítheted vele.)

> esetleg tudsz valami oldalt ahol a fuse bitekkel részletesen
> foglalkoznak?

Pontosan mire vagy kíváncsi? Ha az alapok érdekelnek, azt pl.
itt megtalálod (bár ezekkel szerintem már tisztában vagy):

http://www.ladyada.net/learn/avr/fuses.html
http://electrons.psychogenic.com/modules/arms/art/14/AVRFusesHOWTOGuide.php

Bevezetőnek ez elég, de az aprólékos részleteket mindig a chip
adatlapjából kell kikeresni. Még a népszerű fuse calculatorok
eredményét se vedd készpénznek; inkább számold ki kézzel azt a
néhány bitet, és csak ellenőrzésre használd a calculatort.

Még egy-két apró meglepetés, amire érdemes felkészülni:

http://www.ladyada.net/library/ucannoyances.html
http://www.avrfreaks.net/wiki/index.php/Documentation:Things_That_Are_Br...

Gratula az ATmega16-hoz! :-)

Jibaro

File csatolás: 

0