[ fibra @ 27.10.2008. 11:50 ] @
Narucio sam USBtinyISP http://www.ladyada.net/make/usbtinyisp/ i isprogramirao firmware uspesno pomocu avrdude ali mikrokontroler ne radi kako treba i nekako sporo reaguje na ulaze pa kontam da je problem sa fuse-ovima i clockom. Nista nisam setovao samo sam sprzio hex. Fuse-ovi treba da budu setovani na sledeci nacin:

• brown out detection at 4.3v
• preserve eeprom through chip erase cycle
• boot size equals 256
• boot reset vector enabled
• external oscillator greater than 8mhz 16k clock plus 65ms

sve ostalo ne treba da se setuje

Uz pomoc AVR fuse kalkulatora

http://www.engbedded.com/cgi-b...;B_BODLEVEL0=P&B_BOOTRST=P

...sam dobio sledeci rezultat:

• Low: FD
• High: B4
• Ext: F9

Kad sam pokusao da izmenim fuse-ove u avrdude sledecom komandom:

avrdude -c usbtiny -p atmega162 -U lfuse:w:<0xFD>:m
avrdude -c usbtiny -p atmega162 -U hfuse:w:<0xB4>:m
avrdude -c usbtiny -p atmega162 -U efuse:w:<0xF9>:m

...ovaj mi je javio: "The system cannot find the file specified"

Ima li neko pojma sta je problem i kako da ga resim. Do sada sam programirao samo PIC-ove gde nema nikakvog smaranja a sa AVR-om nemam nikakvog iskustva.

Unapred hvala

[ branko_g @ 27.10.2008. 14:49 ] @
Pogledaj prvo avrdude dokumentaciju, na strani 8 stoji:
m162 ATmega162
znaci samo izmeni u tvojoj komandi ATmega162 sa m162 i trebalo bi raditi.
[ fibra @ 29.10.2008. 11:06 ] @
Hm, cudno... samo programiranje mi je proslo sa punim nazivom i komandom:
avrdude -c usbtiny -p atmega162 -U flash:w:x0xb0x.hex
Bar mi je avrdude prijavio da je sve OK. Pokusacu sa m162 kad dodjem kuci. Hvala na odgovoru
[ branko_g @ 29.10.2008. 15:05 ] @
Citat:
avrdude -c usbtiny -p atmega162 -U lfuse:w:<0xFD>:m
avrdude -c usbtiny -p atmega162 -U hfuse:w:<0xB4>:m
avrdude -c usbtiny -p atmega162 -U efuse:w:<0xF9>:m


Zar ne bi trebalo da hex vrednost bude "čista", bez "<>"?
Pogledaj uostalom dokumentaciju, na strani 16 imaš primer:

Citat:
% avrdude -p m128 -u -U flash:w:diag.hex \
> -U eeprom:w:eeprom.hex \
> -U efuse:w:0xff:m \
> -U hfuse:w:0x89:m \
> -U lfuse:w:0x2e:m
[ fibra @ 31.10.2008. 14:48 ] @
Tacno, hex vrednost ipak treba da bude cista. Hvala Branko.
Ovo mi je dozvolilo da izmenim fuse-ove ali ni nakon ovoga masina ne radi a MCU ne moze da se inicijalizuje pa cak ni reprogramira. Procesljao sam uputstvo za avrdude ali mi nije bas pomoglo da resim problem.

Moze li neko da mi razjasni malo ove AVR-ove i fuse-ove... da li se uvek prvo sprzi hex pa tek onda menjaju fuse-ovi ili to zavisi od programatora odnosno software-a za programiranje?
[ branko_g @ 01.11.2008. 21:37 ] @
Izgleda da taj kalkulator ima Bug.
Po toj semi sa 12MHz kvarzom bi trebalo da je lfuse FE ili FF.
Pogledaj uostalom Datasheet.

Probaj da taj ATmega ozivis nekim kvarzom od 3 do 8MHz, mislim zameni ga.
[ branko_g @ 03.11.2008. 12:03 ] @
Saša evo da ponovimo još jednom šta si ustvari napisao:
Citat:
Fuse-ovi treba da budu setovani na sledeci nacin:

• brown out detection at 4.3v


Taj brown out generiše reset ako je napon napajanja manji od 4,3V, tu ne treba da si napravio grešku.

Citat:

• preserve eeprom through chip erase cycle

To isto ne bi trebalo da pravi problema.
Citat:

• boot size equals 256

Jesi li siguran da si baš to želeo?
Naime, posle reseta se izvrašava BOOT program, a ne GLAVNI program?
Taj BOOT program fabrički nije upisan nego ga moraš sam pisapi i Flash-ovati.
Citat:

• boot reset vector enabled

Ovo je još problematičnije, ta konfiguracija menja VECTOR tabelu!
To je samo za one koji tačno znaju šta rade!
Citat:

• external oscillator greater than 8mhz 16k clock plus 65ms

To sav već napisao u predhodnom postu.

U principu su ti Fuse registri jedna slabost AVR-a.
Ako ne znaš tačno šta radiš možeš da "zaglaviš" mikrokontroler tako da se više "ne odaziva".
Ja obično ne menjam stanje svih Fuse registara preko komande nego idem prvo u Termilal modus:
Code:
avrdude -p m128 -u -c stk500 -t


Kada je program u "Terminal Mode" javlja se sa:
Code:
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1e9702
avrdude: current erase-rewrite cycle count is 52 (if being tracked)
avrdude>



Onda ispitujem stanje pojedinih Fuse registra:
Code:
avrdude> d hfuse
>>> d hfuse
0000 99


I menjam ih sa:
Code:
avrdude> w hfuse 0 0x89
>>> w hfuse 0 0x89


Pa ponovo kontrolišem šta je programator uradio:
Code:
avrdude> d hfuse
>>> d hfuse
0000 89


Pre svega toga DOBRO prekontrolišem šta ću upisati u Fuse, je ako tu pogrešim onda moram da "spašavam" sistem
tako što ću da dovedem spoljni CLOCK na XTAL1 ili mi je Bog na pomoći.

[Ovu poruku je menjao branko_g dana 03.11.2008. u 14:11 GMT+1]
[ RADE_BGD @ 03.11.2008. 14:40 ] @
Probao sam pre dosta vremena da se poigram sa avrdude i imao sam problem sa fuse programiranjem ali se vise nesecam u cemu su sve bili problemi.Posle zrtvovanja 10-tak tiny2313 vratio sam se na kanda200-300 i codevision,tu bar osnovni fuse-ovi tipa brownout,svi clock-ovi itd rade bez problema
[ RADE_BGD @ 03.11.2008. 14:41 ] @
A da,imam dosta iskustva sa atmelom tako da nisam grsio oko vrednosti fuse-ova
[ fibra @ 10.11.2008. 15:00 ] @
Evo, da javim da sam uspeo da izmenim sve fuse-ove. Naime, nakon menjanja high fuse-a MCU ocekuje externi clock pa sam morao da nalemim keramicki rezonator na ICSP adapter i uspeo sam da izmenim i ostala dva fuse-a bez problema. Iako resih problem, i dalje mi se vise dopadaju PIC-ovi i programiranje iz windowsa. ;)
Hvala svima na pomoci i sugestijama.
[ radoz @ 28.11.2008. 23:43 ] @
Nešto slično. Treba da isprogramiram Atiny2313. Programator je cuveni paralelni sa 74HC244. Ranije sam programirao par Atmega8515 preko ISP-a i tu nije bilo problema. Fuses su bili dati preko hex vrednosti i preko Fuse Calculatora sam to ubacio u ponyprog.
Kod ovog 2313 osigurači su trebali da budu CKDIV8=1, CKSEL 1111 i BodLevel 100. Iće će uz oscilator od 16 MHz. Nov Attiny sam lepo učitao, međutim, kod upisa sam nešto zabrljao pošto više ne mogu da ga učitam nikako. Samo još da dodam da ovaj AVR nisam programirao preko ISP-a, već samostalno i to tako što sam dodao dva kondenzatora i kristal od 4Mhz i naravno napajanje. Da li postoji način da se on ipak učita i da se promene osigurači.
Oni me stalno zbunjuju i da li gornje vrednosti znače da treba da obrišem sve (uncheck) i onda čekiram samo BODLEVEL1 i BODLEVEL2?

[Ovu poruku je menjao radoz dana 29.11.2008. u 01:15 GMT+1]

[Ovu poruku je menjao radoz dana 29.11.2008. u 01:15 GMT+1]
[ branko_g @ 29.11.2008. 22:03 ] @
Citat:
Programator je cuveni paralelni sa 74HC244.

Taj je verovatno STK200 kompatibilan.
Citat:
Iće će uz oscilator od 16 MHz.

Ovim si nam sve rekao;-)
Koji oscilator? Budi precizniji.
Eksterni oscilator, kvarcni kristal ili keramicki rezonator?
Citat:
međutim, kod upisa sam nešto zabrljao pošto više ne mogu da ga učitam nikako

Verovatno si Fuse inverzno programirao, tamo gde treva 1 zapisao si 0 i obrnuto.
Ne zaboravi, 1 znaci da Fuse bit NIJE PROGRAMIRAN.
Citat:
Samo još da dodam da ovaj AVR nisam programirao preko ISP-a, već samostalno i to tako što sam dodao dva kondenzatora i kristal od 4Mhz i naravno napajanje

Daj prevedi tu recenicu na tehnicki razumljiv jezik. Sta je "samostalno"?

Procitaj jos jednom dokumentaciju tvog ponyprog-a, tu sve stoji.
[ radoz @ 01.12.2008. 06:34 ] @
Citat:
Taj je verovatno STK200 kompatibilan.

Jeste.

Citat:
Koji oscilator? Budi precizniji.

Kvarcni kristal

Citat:
Verovatno si Fuse inverzno programirao, tamo gde treva 1 zapisao si 0 i obrnuto.

To sam ustanovio kasnije.

Citat:
Daj prevedi tu recenicu na tehnicki razumljiv jezik. Sta je "samostalno"?

Nisam AVR stavio na pločicu gde će inače biti (16Mhz) već sam na podnožje zalemio dva kondenzatora od 27 pf, 4 Mhz kristal i doveo napajanje na AVR.
Kad sam postavio osigurače kako treba jedan avr sam lepo isprogramirao, ali kasnije nisam mogao da ga pročitam. Onda sam stavio eksterni oscilator od 16 Mhz i nakon toga jedan AVR bez problema čita i u upisuje, a drugi se i dalje ponaša čudno - nekad može da se pročita, nekad da neke čudne vrednosti, javlja grešku pri verifikaciji upisa i slično. Da li moguće da je taj drugi "sam po sebi" neispravan, ili sam ga ja negde sredio?
[ branko_g @ 01.12.2008. 06:49 ] @
Citat:
javlja grešku pri verifikaciji upisa i slično. Da li moguće da je taj drugi "sam po sebi" neispravan


Pre da je problem u tajmingu, to se i meni dešava, ali sa avrdude.
Rešenje bi bilo da probaš da tu vezu nekako usporiš, ako postoji takva opcija kod ponyprog.
[ Nije bitno @ 12.08.2012. 20:08 ] @
Izvinjavam se sto pokrecem veoma staru temu,ali bolje nego da otvaram novu,jer je ovo tacno ono sto mi treba.

Imam ATMEGA16,sa WinAVR-om isprogramiram sta treba,dobijem ovo:

Citat:
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e9403
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (15468 bytes):

Writing | ################################################## | 100% 5.98s

avrdude: 15468 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex auto detected as Intel Hex
avrdude: input file main.hex contains 15468 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 5.48s

avrdude: verifying ...
avrdude: 15468 bytes of flash verified

avrdude done. Thank you.


Dakle,AVR je ovim 'flashovan' ali nisu podeseni fuse-ovi?

Naime,imam problem u tome sto ne mogu da procitam nista sto sacuvam u flash ROM-u cipa,iako se sve uredno sacuva. F_CPU mi je 8 Mhz,koliko ja kapiram,tako treba da podesim fuse-ove na ovom kalkulatoru:

http://www.engbedded.com/fusecalc/

U sustini,sve mogu da ostavim na default vrijednostima,podesim fekvenciju na 8Mhz (+64s) samo me buni ovaj red:

--------Boot Reset vector Enabled (default address=$0000); [BOOTRST=0]--------

Dakle,ja NE zelim da zakljucam cip,hocu da ga koristim i dalje.Da li da cekiram ili da ostavim necekiranu ovu stavku?


Hvala puno unaprijed na pomoci!



[ shpiki @ 13.08.2012. 21:25 ] @
Kako mislis ne mozes da procitas?
Sta to upisujes pa ne mozes da procitas?
Podesi samo kristal koji koristis i ostatak ostavi na "default" u onom kalkulatoru i programiraj...
Lepo se vidi "verifying" opcija u AVRDude consoli, znaci da programator komunicira sa cipom i da sve prolazi ok...
[ Nije bitno @ 14.08.2012. 00:39 ] @
uC je povezan sa LCD-om i tastaturom.Tekst koji kucam,a prikazuje se na LCD-u treba da se sacuva,da ga posle mogu otvoriti/izmijeniti.On se sacuva,ali kad ga otvorim prikaze samo prazan LCD.

Dobro,je li default opcija ova koja je tu kad se otvori kalkulator,dakle NECEKIRANO Boot Reset vector Enabled?
To znaci da posle opet mogu da programiram cip?

Ovo je stanje fuse-ova sad:



ali tu ne mogu da vidim sta je podeseno za Boot Reset vector,jer me usmjerava na datasheet.

[ branko_g @ 14.08.2012. 14:03 ] @
Citat:
uC je povezan sa LCD-om i tastaturom.Tekst koji kucam,a prikazuje se na LCD-u treba da se sacuva,da ga posle mogu otvoriti/izmijeniti.On se sacuva,ali kad ga otvorim prikaze samo prazan LCD.

???
Jel ti to ozbiljno postavio pitanje i ocekujes odgovor?
Sacuvati? od koga/cega?
Prikaci kod.
[ shpiki @ 14.08.2012. 14:27 ] @
Ni meni nije jasno kako mislis da cuvas text koji unosis sa tastature?
Jedini nacin je da ga smestas u Eeprom i odatle iscitavas/menjas/ispisujes na LCD...

Ili okaci kôd, ili budi malo precizniji sa pitanjem...
[ Nije bitno @ 14.08.2012. 15:56 ] @
Pa smjesta se na flash ROM,to je slicno EEPROM-u,ne vidim u cemu je tu problem?

Evo o cemu se radi:

http://www.avrfreaks.net/index..._id=3537&item_type=project

[ Nije bitno @ 14.08.2012. 19:35 ] @
Analizirao sam low i high fuse bitove,jedan po jedan i zakljucio da je tu sve u redu.

LOW: (0 programirano,1 neisprogramirano)

1 (bod level) 0 (bod) 1 (sut1) 0 (sut0) 0 (cksl3) 1 (cksl2) 0 (cksl1) 0 (cksl0)

HIGH: (0 programirano,1 neisprogramirano)

1 (ocd) 1 (jtag) 0 (spi) 1 (ckopt) 0 (eesave) 1 (boot size1) 1 (bootsize0) 1 (bootrst)


CKSL bitovi podesavaju frekvenciju internog oscilatora,0100 je 8Mhz,dakle to je ok.JTAG nije ukljucen,dakle PORTC se koristi za normalne funkcije,a u mom kodu se bas koriste 4 pina na C koji mijenjaju funkciju aktiviranjem ovoga.

Ovdje sam nasao dobar tutorijal,fino je objasnjena svaka stavka:

http://www.engineersgarage.com/tutorials/avr-atmega16-fuse-bits

E sad,s obzirom da su fuse-ovi ocigledno podeseni kako treba,ne znam sta da radim. LCD funkcionise dobro ocigledno, tastatura nije bitna,dakle ocigledno je problem sa memorijom. Da li ne radi upis ili ucitavanje iz nje, to ne znam.

Dakle,da blize objasnim:

Kad se ukljuci napajanje,na LCD-u se pojave opcije NEW,OPEN i EDIT. Izaberem NEW,otkucam 'blablabla',sacuvam to u flash memoriji pod odgovarajucim ID brojem.Onda udjem u OPEN,ukucam taj broj i da mi samo prazan LCD.Isto to se desava i sa opcijom EDIT.Kod je dobar,tu nisam nista dirao,kod lika koji ga je napisao sve radi ok.



[ goran_68 @ 15.08.2012. 10:42 ] @
Upisi nesto postupkom koji si opisao (NEW ...) pa procitaj sadrzaj flash-a programatorom. Nadji tekst i ukoliko ga ima, uporedi da li se nalazi na lokaciji na kojoj treba da bude. Tako ces znati da li ti radi upis i da li citas sa dobrih lokacija. Ako mozes zakaci kod ili bar deo koda koji radi upis i citanje ovde.
[ Nije bitno @ 15.08.2012. 10:59 ] @
Ali nemam hardverski programator...ako si na to mislio?

Evo ovdje cijeli kod: http://www.avrfreaks.net/index...&func=viewFile&id=4818
Pisanje i čitanje je u main.c

[ goran_68 @ 15.08.2012. 11:30 ] @
Ma moja greska za programator. avrdude valjda moze da procita sadrzaj flash-a. Na to sam mislio.
[ shpiki @ 15.08.2012. 11:54 ] @
Kako nemas programator? Cime programiras uC?
[ Nije bitno @ 15.08.2012. 13:42 ] @
Pa to je najobicnije povezivanje uC-a preko paralelnog porta,ne znam vec kako se to zove,ali racunam da je poprilicno jednostavno da bi se zvalo programator :)

Ok,pogledacu sta se desava sa upisom/citanjem,samo da izguglam komande za to.

Nasao sam na par mjesta da Boot Loader ipak ima veze sa ovim.Posto je memorija podijeljena na aplication i data dio,ovom data dijelu se ne moze valjda prici bez Boot Loader i njegovog aktiviranja,odnosno mijenjanja 3 najniza bita high fuse-a.

Poprilicno mi je nejasno ovo na 246 strani datasheet-a:

http://www.avrfreaks.net/index...ile&id=1232&showinfo=1

U svakom slucaju,najbolje je kao sto rece goran,prvo locirati sta ne radi kako treba,tako da cu prvo to da vidim sad.
[ Nije bitno @ 16.08.2012. 19:29 ] @
Opravdano sam sumnjao na 3 zadnja bita kod high fuse-a.

Probao da izmijenim BOOTSZ1 i BOOTSZ0 (bili 11) na 00 i sad radi kako treba.Nulti bit BOOTRST je ostao neisprogramiran (na 0) i ocigledno nije bitan za ovo,ali ova dva,koja definisu velicinu rijeci jesu.

Dakle to je rijeseno!

Imam samo jednu neodumicu u vezi koda,pa ajde kad sam ovdje vec poceo.


Kako mogu da definisem pojedinacne data pinove LCD-a,dakle svaki posebno?

U ovom kodu koji imam,to izgleda ovako:

Citat:
#define DATA_PORT C //Port connected to MSB 4-bit data(D4-D7) of LCD module

#define DATA_POS 2 //Location of D4



#define E_PORT C //Port and

#define E_POS 1 //position of E pin of LCD



#define RS_PORT D //Port and

#define RS_POS 7 //position of RS pin of LCD



#define RW_PORT C //Port and position of

#define RW_POS 0 //R/W pin of LCD module (if R/W is not necessary connect it to GROUND)


Dakle,DB4 displeja ide na C2 mikrokontrolera,DB5 na C3,DB6 na C4 i DB7 na C5.

Ovdje se definise ovaj prvi (DB4) i onda ostali idu redom.

Ali meni treba ovako:

A1 - DB7
A2 - DB6
A4 - DB5
A3 - DB4

E sad,definitivno ne moze da idu nikakvim redom,mora svaki pojedinacno...