Fórum témák
» Több friss téma |
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
Sziasztok.
Most ismerkedek az AVRekkel. Olvasgatom az AVR-es cikkeket, elemezgetem a kódokat. Az 1. 8 lábbal cikkben a ledes villogónál van egy sor amihez lenne kérdésem.
Értem, hogy a PINB3 és a PINB4 kimenet lesz, mert 1es lesz a regiszterben. Miért nem
Köszönöm a választ. A hozzászólás módosítva: Okt 12, 2012
Üdv!
Én is kezdő vagyok ezen a téren szóval ha nagy ostobaságot írom kérem javítsatok ki. Ha jól tudom mind két megoldást lehet használni, ha compiler ismeri. Tehát ha "szabványos", vagy definiáltad.
vagy
Kezdőként ezt javasolnám neked: Microcontroller Tutorial - A Beginners Guide Nekem sokban segített. icserny: Mitől szörnyű amit írtam? Annyit beismerek, hogy érthetőbb lenne, ha ezt írnám:
És ha később másik típusú(avr->avr) vezérlőre szeretném feltenni, akkor nem az egész kódot kell átírnom, "csak" a #define részben kell matatni.
A PINB3 -ra találsz egy #define -t az egyik header fileban.
Valami ilyesmi:
Igazából ezt is lehete írni:
Sőt a preprocessor eleve az utóbbi formában adja át a C fordítónak a forrásod.
Ez szép és jó, de gyakorlatban kevesen használják ezt így.
Nem kellene oltani szegényt, ha nem így csinálja, ahogyan te. Turkálj bele bátran bármilyen open source AVR projektbe és látni fogod, hogy ezzel kisebbségben lennél. Persze ízlések és pofonok.
Perifériáknál a bitek neveit szokás használni, például:
I/O portoknál meg a sorszámot, azaz nem "PB3" meg hasonlók:
A hozzászólás módosítva: Okt 13, 2012
Értem már akkor az összefüggést, sejtettem, hogy valami ilyenről lehet szó.
Lehet tévedek, de akkor elméletileg írhatnám ezt is:
(Még ha lehetne is, akkor is hülyeség és értelmetlen.)
Számomra ez a mód a legvilágosabb, esetleg bináris formában. Mi suliban a 8051est tanuljuk, de sulin túl AVRezek. Hexa kódban szoktuk írni.
Miért nem elég csak =, miért kell az or is? (Remélem nem zavarok senkit a buta kérdéseimmel)
Persze, hogy írhatnád azt is, hogy EEAR3 vagy KUTYAFULE3.
Definiálás kérdése. |= azért van mert a regiszteren belül egyetlen bit értékét szeretnéd csak módosítani. A hozzászólás módosítva: Okt 13, 2012
Hali
3310-es kijelzőre szeretnék menüt csinálni switch case utasítással de nem tudom hogyan hozzam össze úgy hogy gombokkal oda - vissza lépkedjek. Valaki tudna ebben segíteni? mert neten nem sok mindent találtam erről a témáról. Előre is köszönöm.
Ne mond már! Tele van vele a net: Bővebben: Link
Amit megtaláltam az nem működött mert nem lépett tovább az LCD csak a case1 utasítás futoot le.
Ha lenne kód akkor biztos lenne aki segít. Ez szerintem kódolási hiba és független az alkalmazott kijelzőtől.
Ez kell neked a menü struktúrához:
Micromenu
Hát, nálam a kijelző be sem fért be a memóriába és úgy is sikerült menüt csinálnom (grafikus LCD, ami nem támogatta a visszaolvasást).
A működése: - 8x8-as cellákra bontod a képernyőt 1 biten tudsz egy 8x8-as cellát érvényteleníteni (újrarajzolás) - létrehoztam egy tömböt, amibe renderer függvényeket lehetett bepakolni (szövegdoboz, keret, grafikus kép,...) - amikor érvénytelenítesz egy cellát, az összes olyan renderer függvényt meghívja sorrendben, amelyik tartalmazza a cellát Példa: háttérkép + lekerekített ablak keret + menü 1. a 8x8-as cellába belerajzolja a háttérképet (függvény) 2. belerajzolja a keretet tartalmazó részt (függvény) 3. belerajzolja a menü szövegét tartalmazó részt 4. átküldi az LCD panelnek a 8x8-as cellát Nem tárolsz biteket, nem tárolsz tartalmat, ha valami változik újraszámolsz mindent. A hozzászólás módosítva: Okt 15, 2012
Köszi!
Mit adjak meg kezdőpozíció értéknek?
Annyira nem akarom túlbonyolítani, törlöm az egész kijelzőt és kiírom rá az új adatokat. Csak nem tudom megcsinálni, hogy a case utasítások között lépkedjek gombokkal. Rájöttem hogy ha a switch változójának értéke megegyezik a case utasítás számával akkor az fut le, csak a változó értékét nem tudom változtatni. Legalábbis ha jól értelmeztem így működik,de felrakom a komplett kódot.
Megnézted a micromenu -s linkemet?
Az pont azt csinálja amit szeretnél, csak nem case switch ekkel, hanem function pointerekkel.
Igen nézegettem köszi
![]()
Sziasztok!
Van egy projektem: Lehetőleg Motorola G24 /G30/ GSM modemet SMS kommunikáció, vezérlés céljából, egy ATMEGA128 mikrokontrollerhez. Főleg hardveres illesztés megvalósításához kérném a segítségeteket, milyen SIM foglalat, illesztő, bekötés...stb. /Az I2C foglalt más kommunikáció miatt/ Adatlapok: Motorola G24/G30: ATMEGA128: Segítségeteket előre is köszönöm.
Üdv!
Építettem egy sakkórát, és majdnem minden tökéletes. Egyetlen gondom, hogy az egyik váltó gomb, ami int1-re van kötve, furán működik. Prell nincs, azt hardveresen kiszűrtem, és az int0-ra kötött gomb is teszi a dolgát.(Szkóppal nézve is minden rendben). Az int1-re kötött viszont lenyomott állapotban generál egy int0-t, és csak amikor elengedem, hajtja végre a hozzá tartozó kódot. A gombokat megcserélve sem változik a dolog, ebből gondolom, hogy szoftveresen lehet valami gond. Mellékelem a programot, amiből mindent kidobtam, csak a két ledet váltogatja a két nyomógomb lenyomásának függvényében. A kapcsolás lelke egy atmega8 8MHz-es belső oszcillátorról hajtva, de próbáltam már visszavenni az órajelből, az se használ. Van valakinek ötlete?
Üdv!
Írtam egy kis megszakító kódot azzal a céllal, hogy felfüggessze az avr működését, majd ismét megnyomva az interrupt gombot a feladatát folytassa. Valahogy így néz ki:
Ez így jó?
Nem. Ha belep a megszakitasba, akkor letiltja a megszakitasokat, igy nem hivja meg a fuggvenyt ismet, ha ujra megnyomod a gombot.
A stop valtozonak volatile-nak kell lennie, mert kulonben nem irodik vissza az erteke a memoriaba es az ujra meghivodo fuggveny meg mindig 0-nak fogja latni. A hozzászólás módosítva: Okt 18, 2012
Nem tartom kizártnak a hw hibát, de már több dolgot teszteltem, és azok jónak tűnnek.
Mellékelem a kapcsolási rajzot, a hw ez alapján készült, és valóban egyezik is vele. Kétcsatornás szkóppal nézve a két gomb (player1, player2) teljesen függetlenül működik egymástól. Mit nézzek még? A hozzászólás módosítva: Okt 18, 2012
És megtaláltam a hibát. A 40106n bármely két egymás mellett levő kapuján produkálja a hibát, de ha kihagyok egyet, vagy a két ellentétes oldalon használom az egymás utániakat, akkor már tökéletesen működik. Gyakorlatilag az 1-2, 2-3, 4-5, 5-6 triggerek nem használhatók együtt. Két ilyen ic-m van, mindkettő így viselkedik, viszont az adatlapon nem találtam erre utalást....
Igazabol a kapcs rajz is jonak tuni. Ez valami erdekes hiba lesz. Szerintem toltsd fel a leforditott kodot, es majd este megnezem, hogy visszafejtve helyes-e a program.
(Ugye az ADC-t nem hasznalod belso referenciarol? Ha nem haszalod az ADC-t akkor egyszerubb nem bekotni az AREF labat, viszont igy, ha engedelyezed az alapbeallitasokkal, akkor helybol zarlat lesz a belso referencia es az 5V kozott.) A hozzászólás módosítva: Okt 18, 2012
Reggie nagyon köszönöm a segítséged. Az ablakozáshoz amit javasoltál milyen kezdőpozíciót kell adjak meg?
Feltettem az egész projektet, benne van a hex is. AVR studio 4-gyel készült. Ez a program csak egy kibelezett csontváz, kizárólag az interrupt tesztelésére. A hw ugyanaz természetesen, bár az eredetihez képest annyit változtattam, hogy a 40106n 1-5 triggereit használom az 1-2 helyett. Így szinte tökéletes, de azért ha sokat nyomkodom gyorsan egymás után, akkor képes produkálni az eredeti problémát.
Az ADC itt egyáltalán nem lesz használva.
Sziasztok!
Óra és naptár alkalmazáshoz DS1337 IC-t rendeltem. Viszont ennek nincs VBAT lába mint a 1307-nek. Viszont én szeretném, hogy áramszünet esetén se "menjen el" az idő beállítás. 1337-et nem tudom elemről üzemeltetni? Ill. úgy tápot adni neki, hogy áraszünet esetén 3V-ról működjön és az AVR ebből ne kapjon?
0-rol mehet, aztan ha a vegere ertel, akkor megint kezd elolrol. Ez egy gyurus puffer.
A hozzászólás módosítva: Okt 18, 2012
|
Bejelentkezés
Hirdetés |