Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   595 / 838
(#) yohnsee válasza Cicow hozzászólására (») Márc 23, 2014 / 1
 
Helló!
DDRD=0b0001111;
Így lesz output a PORTD 0-3 pinekből.
(#) Cicow válasza yohnsee hozzászólására (») Márc 23, 2014 /
 
nagyon gáz de már zsong az agyam a bitektől, köszi
(#) yohnsee válasza Cicow hozzászólására (») Márc 23, 2014 /
 
Ha azt szeretnéd, hogy a PORTD-n ezek a lábak (PD0-PD3) legyenek rákötve a belső felhúzóellenállásokra, akkor a PORTD=0b1110000; bitjeit is meg kell fordítanod:
PORTD=0b0000111;
(#) Cicow válasza yohnsee hozzászólására (») Márc 23, 2014 /
 
(PD0-PD3) outputok - nem kell felhúzni,
az inputok PD4-PD6 huznám fel

PORTD=0b1110000;
(#) Massawa válasza Cicow hozzászólására (») Márc 23, 2014 /
 
Ez sem jo, mert 0b01110000 kellene.
(#) Cicow válasza Massawa hozzászólására (») Márc 23, 2014 /
 
0b1110000 = 0b01110000 szerintem de ha fontos a syntaxis akkor kiírom inkább.
(#) yohnsee válasza Cicow hozzászólására (») Márc 23, 2014 / 1
 
Ennek szerintem működnie kellene.
Leírom egybe, hogy egy helyen legyenek

DDRD=0b0001111; //PD0-PD3 pinek kimenetek, a többi bemenet
PORTD=0b1110000; //PD0-PD3 pinek alacsony logikai szinten, a többi magason
(#) killbill válasza Cicow hozzászólására (») Márc 23, 2014 / 1
 
Nem fontos, pont jo ugy, ahogy irtad. Stilisztikailag sokszor jobban mutat, ha ilyen esetekben kiirod mind a 8 szamjegyet, de egyeb jelentosege nincs. Viszont, ha decimalis szam ele irsz 'feleslegesen' egy nullat, akkor az oktalis szam lesz a C nyelvben:

33 = az decimalis (tizes szamrendszer) harmincharom
033 = az oktális (nyolcas szamrendszer) 33, ami decimalis 27.
(#) Istvanpisti válasza Massawa hozzászólására (») Márc 23, 2014 /
 
Ha a CKDIV8 be van kapcsolva akkor - előosztás nélkül - 1 us az oszcillátor jele, amit 65.536-tal osztva 65.536us, azaz 65,534 ms adódik, akkor jó a 60ms körüli megszakítás hívás, amit mérsz, még sincs vele gond.
A tegnap esti 22:42-e hozzászólásodban azt írtad, hogy ki van kapcsolva a CKDIV8.
(#) Massawa válasza Istvanpisti hozzászólására (») Márc 23, 2014 /
 
Azt csak késöbb vettem észre, mert eddig a beállitásokkal nem csináltam semmit, minden beállitás gyári állapotban van kivéve az eepromot.

Az a 60 ms nekem nagyon lassunak tünik. Kapcsoljam ki a ckdiv8-t?
A hozzászólás módosítva: Márc 23, 2014
(#) Cicow válasza Cicow hozzászólására (») Márc 23, 2014 /
 
következő kérdésem: szeretném egy 2 bytos változoba összerakni az input biteket alábbi módon:

változó=PD6,PD5,PD4,PA1,PA0,PB7,PB6,PB5,PB4,PB3,PB2,PB1,PB0

az én megoldásom:

változó= PINB + ((PINA & 0x03)<<8)+((PIND&0b1110000)<<6);

szerintetek igy jó van-e elegánsabb megoldás?
(#) Massawa válasza Massawa hozzászólására (») Márc 23, 2014 /
 
Átkapcsoltam. Felgyorsult, de még mindig nem értem ezt az interrupt nyavaját. A fenti kodban megirtam, hogy mikor szakitsa meg a progit.
Egy másik helyen elkezdtem irni az megszakitások parancsait:

  1. Sei
  2. Lds mt, t1_msb
  3. Tst mt
  4. Brpl bg1.  ; ez elsö még üres irq
  5. Andi mt, $0f
  6. Sts t1_msb,mt
  7. Rcall t1msb
  8. Call keybrd  ; a gombok rutinjai
  9. Call lcdbg    ; a display rutinjai
  10. Ret


A progi ha léptetem szépen megy és azt teszi amit kell, ha betöltöm a chipbe akkor egyik másik gomb azt teszi amit kellene a többi meg összezavarja az LCD kiirását.
(#) Massawa válasza Massawa hozzászólására (») Márc 23, 2014 /
 
Azt hiszem egy hibát megtaláltam. Most már ugy ahogy megy a szerkezet, még itt -ott csinál valami váratlant, ( nem oda ugrik, ahova kellene) de alapjában véve most már sokkal jobb, mint eddig valaha volt. Ha gyorsitom akkor zavarodik, lassitani meg már nem lehet, mert a változás kb. 2 mp után jelenik meg a kijelzön. Ezen még gyorsitani kell, mert igy zavaro lehet.
(#) killbill válasza Cicow hozzászólására (») Márc 23, 2014 / 1
 
Max. annyit csinalnek maskepp, hogy nem + hanem |, mivel nem osszeadni akarod oket, hanem csak orolni. Igy garantaltan nem fordit 16 bites osszeadast, akarmilyen C forditod is legyen. De osszeadassal is teljesen jo, csak orral talan szebb. Ezen felul meg annyival lehet szebbre (elegansabbra) megirni, hogy ugy irod oket sorba, ahogy a helyiertekek is adjak, azaz nagyjabol ugy, ahogy felul is irtad: valtozo = ((PIND&0b1110000)<<6) | ((PINA & 0x03)<<8) | PINB;
(#) Massawa válasza Massawa hozzászólására (») Márc 23, 2014 /
 
Össze kellene számolni a lépések idötartalmát az irq hurokban, mert csak 2 instrukcio okoz némi zavart a másik 4 nem?
(#) Istvanpisti válasza Massawa hozzászólására (») Márc 23, 2014 /
 
Szia !
Alapszabály, hogy megszakításban nem csinálunk semmi időigényes dolgot, csak pl. megnézzük egy portláb állapotát, ennek függvényében beállítunk egy változót 1-re vagy 0-ra, és ezt a változót figyelve a főprogramban végezzük el, mondjuk az LCD frissítést, nyomógomb megnyomásra való reagálást, de előtte visszaállítjuk a változó értékét, azért, ha közben jön az új megszakítás, akkor arra is lehessen reagálni.
Nem érdemes/szabad megszakításban delayt használni, LCD-t frissíteni, számítás (gépidő igényes műveletet végezni) erre ott a főprogram. Más logikát kíván a megszakítások használata, mint a "polling" használata, de érdemes vele foglalkozni és megérteni a működését, mert sokkal flexibilisebb programot lehet írni.
(#) Massawa válasza Istvanpisti hozzászólására (») Márc 23, 2014 /
 
Delay nincs benne, az LCD-t még megnézem de szerintem az ki van hagyva. Persze a gombok ne egészen vannak igy kezelve, lehet, hogy ott kéne valamit müvészkednem. Most a nyomogomb lekérdezö hurokbol kiugrok az adott gombnál a subrutinba elvégezni a feladatokat.
(#) Massawa válasza Massawa hozzászólására (») Márc 24, 2014 /
 
Eljátszottam a szerkezettel.
Ha ovatosan nyomkodom a gombokat, adok idöt a belsö processzeknek, akkor hibátlanul müködik. Akkor zavarodik meg, ha nem adok idöt a belsö lépések ( matematikai formulák, display frissitése stb), azaz a gomb megnyomása által elinditott folyamat eredménye még nem jelent meg az LCD-n (1-3 sec). Ha kivárom, akkor jol megy. Ezen még el kell rágodnom
(#) Kid hozzászólása Márc 24, 2014 /
 
Sziasztok ! Érettségi előtt vagyok, és munkámnak 1 itt megtalálható atmega16-os mikrovezérlővel vezérelt propeller kijelzőt választottam. Meg is rendeltem ezt a hozzá ajánlott programozót :

http://www.hestore.hu/prod_10024859.html

Olyan gondom van , hogy az AVR Studio 4-el nem tudom csatlakoztatni a gépemhez a programozót és ez miatt nem tudom rátölteni az IC-re a programot. Valaki nem tudna segiteni ? SÜRGŐS LENNE.

Előre is köszönöm !
(#) Cicow válasza Kid hozzászólására (») Márc 24, 2014 /
 
Miért nincs USB-d?Akkor másik gép kell....

Vagy van USB és nem ismeri fel?Akkor szerintem a mikrokontrollerel való csatlakozás a gond, próbáld végig multiméterrel a MISO, MOSi, SCK,RESET, GND,VCC lábakat ha nincs szakadás akkor menni kell azonnal felugrik az ablak ahol már tudsz dolgozni.
(#) videokartyab hozzászólása Márc 25, 2014 /
 
Sziasztok

Vettem Ebay-en egy USB JTAG ICE programozót.
AVR JTAG ICE
Az első nagy probléma a driver volt amit nagynehezen találtam egy kínai fórumon.
Most viszont hogy összeraktam és egy atmega 16 -ost szeretnék programozni csak egy hibaüzit kapok. A neten található rajzok alapján kötöttem össze őket.

A JTAG-et így kötöttem be.
TCK->SCK
TDO->MISO
TMS->PB1(T1)
VSUPP->5V
TDI->MOSI
a két GND lábat ->GND
VTREF->5V

Az atmega 16-os kap 5V ot a VCC(10),AREF(32),AVCC(30) keresztül. GND-k 11 és 31 es láb.
Reset lábat egy 10k ellenállással felkötöttem tápra és vele párhuzamosan egy kapcsolóval GND-re. XTAL1-2(12,13) közé tettem egy 16MHz-es kvarcot és a lábait 100nF-os kondikkal földre kötöttem. Elvilekben mennie kéne.
A hibaüzi amit kapok:

problem.JPG
    
(#) pluto válasza videokartyab hozzászólására (») Márc 25, 2014 /
 
Szia!

Ha valóban úgy kötötted a 16MHz-es kvarcot 100nF kondival ahogy írod, akkor az egy igazi csoda lenne, ha működne. Jelenleg a processzorod tetszhalott. A megfelelő kondenzátor értékek: 12pF - 22pF. (kéretik adatlapot olvasni!)
(#) kapu48 válasza videokartyab hozzászólására (») Márc 25, 2014 /
 
És a Fusebit K-t: Ext Crystal/Resonato High Freq-re állítottad?
Különben alapból belső 8MHz -ról megy.
(#) videokartyab válasza pluto hozzászólására (») Márc 25, 2014 /
 
Itt egy bekötési rajz így kötöttem be a kvarcot csak nem volt itthon 22pF.
kép
(#) videokartyab válasza kapu48 hozzászólására (») Márc 25, 2014 /
 
Alapesetben belső órajelről megy, vagy már első használatkor várja a kvarcot ?
Csak mert elég sokáig nélküle próbálkoztam és ugyanez volt a hiba.


Hol tudom állítani a fuse biteket ?
(#) kiborg válasza videokartyab hozzászólására (») Márc 25, 2014 /
 
Szia!
Ha szűz M16-ról van szó, akkor alapból belső 1MHz-ról akar indulni (nem vagyok biztos a 8MHz-ben). Tehát ha nem állítottál fuse biteket, akkor még mindig arról jár. Csatlakozásokat ellenőrizd.
Banális kérdés: a kapcsolód alapból zárt vagy nyitott? Mert ha zárt, akkor resetben tartod a procit és azért nem indul. Mérj rá multival a reset lábra, ha 5V van, akkor lehet tovább gondolkodni.
(#) pluto válasza videokartyab hozzászólására (») Márc 25, 2014 /
 
Ez így jó is. A 22pF-al kellene működnie. Ha viszont még nem állítottad a biztosíték biteket, akkor a belső órajellel működnie kellene, mint ahogy kapu48 is említette.
(#) videokartyab válasza kiborg hozzászólására (») Márc 25, 2014 /
 
A kapcsolóm alapból nyitott. És alapesetben 5V van a reset lábon.
(#) videokartyab hozzászólása Márc 25, 2014 /
 
A jelenlegi helyzet:
Video
(#) Massawa válasza videokartyab hozzászólására (») Márc 25, 2014 /
 
Nekem is voltak ilyen gondjaim a mega644-el. A gyári fejlesztömodulon simán ment a JTAG (azt hiszem ugyanez volt az üzenet). Az általam csinált raszternyákon bedrotozott NYAK-on meg sem nyikkant a JTAG - pedig vagy 100x átmértem. Amikor átraktam ugyanazt az IC-t a fehér duggaszolos protoboardra, azon akkor ment, ha jol emlékszem a TCK lábat, leterheltem. Elég volt kézzel hozzáérni. Késöbb 1 MOhm-s ellenállás is megtette.
Mai napig nem tudtam kideriteni mi a kinja. Igy most a DRAGONban vagy a gyári fejlesztömodulon programozom, majd átdugom a másik NYÁKba. (az általam épitett NYÁKon a JTAG nem ismeri fel).
Következő: »»   595 / 838
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem