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
Megpróbáltam külső oszcillátorral életre kelteni.... ééééés működik! :nyes: Végre
Úgy tűnik mégse az oszcillátor volt a megoldás, a villogó program rátöltődött, azóta is villog (bár 200ms helyett 8s a led áll.váltásának ideje, 8MHz volt a Makefile-ban, nem tudom ez hogy jön ki), de megint ugyanaz a hiba, se írni, se olvasni nem lehet. Mindenesetre fut a program, szóval belső órajel van. A kábelt kicseréltem csatlakozóba dugott drótokra, így se jó. :bummafejbe:
ha van soros portod akkor esetleg megpróbálhatod EZT a kapcsolást. Egyszerű és működik. Igaz hogy PonyProg alól kell vele programozni de szerintem megteszi. Ha jobban szeretnél foglalkozni az AVR programozással akkor pedig mindenképp megéri építeni egy USB-s programozót. De visszatérve. Jó portot állítottál be a programban a programozónak? Biztos hogy nem egy másik porton van? Elő szokott fordulni hogy két LPT portot tesznek az alaplapra csak az egyik nincsen kivezetve(régi alaplapoknál). Használsz valamilyen átalakítót (soros portól párhuzamos portra)?
Fejlemények: Egyik kimeneten volt egy led, amit villogtatott. Kivettem a ledet, erre a "drótos" programozóval (a csatlakozóba dugdosott drótok) sikerült programozni. Leddel nem akart működni. Visszatettem a programozómat, megint nem ment. Megint visszatettem a drótokat, most már leddel is működik. Logikát nem látok benne, de ha működik, akkor mindegy. Beállítottam az órajelet 1MHz-re, most már jó az időzítés is. USB-s-sel lehet, hogy jobban jártam volna, csak kicsit drágább
Szóval vagy a csatlakozó érintkezőivel van kontakthiba, vagy az ellenállásokat kell kivenni, érdekes. Fuse biteket is elkezdtem közben nézegetni, az avrdude gui-n nem sikerült elmenni, akármit akarok beolvastatni, mindig egy 6 számjegyű hex adatot dob ki, amit akárhogy nézek, sehogy se egyezik az 1MHz INT RC oszc. beállítással. PonyProgban a configuration bitek viszont jónak tűnnek, ezzel néztem egyébként, a Manual fuse bits configuration táblázat ugyanúgy néz ki, mint pony-ban. Sok helyen hallottam, hogy könnyű vele elállítani az avr-t, de ha a linkelt kalkulátor jól működik, akkor azalapján remélem nem lesz gond, egyelőre azért nem próbálkozok.
Szerintem abszolút megéri építeni egy USB-s programozót mivel ott megkíméled magad a sok kínlódástól. Valamint az AVR studio is támogatja tehát az alól is tudsz vele programozni és nem kell semmilyen más szoftver hozzá. Mindenesetre örülök hogy működik és remélem nem lesz vele több gond. Ha tudod akkor a csatit cseréld ki és kifogástalanul fog működni esetleg kiderítheted programozás közben mozgatással hogy melyik tüske a hibás.
Szerintem ott lehetett a gond, hogy az a led az egyik programozó által is használt lábon volt. Így a led leterhelte azt a szálat(amúgy sem tud túl nagy áramerősséget a nyomtatóport), meg ellenállás is volt ott és így az avr lábára már nem jutott elég feszültség. Ez a leglogikusabb válasz a jelenségre.
Nem azon volt, a komplett D port kimenetre van állítva, annak az egyik bitjére van kötve, ráadásul utána meg már működött azzal is. Egyébként egyszer a villogás is leállt, fesz. mérővel rámértem egy másik kivezetésére (D port másik bitje), amint hozzáértem, megint elindult... vannak itt érdekességek.
Közben lepucoltam a csatlakozót, de továbbra sem működik, úgyhogy úgy néz ki az ellenállások okozzák a problémát, pedig csak 220 ohm-osak.
Helló. Azt szeretném megkérdezni, hogy hogyan tudom egy láb állapotát lekérdezni úgy, hogy az utasítás akkor teljesüljön ha a láb 0-ra van húzva?
Hello!
NEM! Idézek: Idézet: „amint hozzáértem, megint elindult” Még mindig kvarckristályról megy? Ha igen, akkor ez a kettő mindenképp kell: - Van kondi a tápfeszlábakon? - A tápfeszlábak össze vannak kötve a másik oldalon lévő párjukkal(VCC-AVCC; GND-AGND)? Ezek nélkül nem csoda, ha "érintésre" elindul, illetve bizonytalan időnként(de főleg programozás alatt) meghülyül a rendszer! Tapasztalat: ha egy panelre épített cuccnál odanyúlok a kristálykivezetésekre, pontosan ilyenek történnek! És ez természetesen az időzítéseknek is betesz, képes az órajel lelassulni, ha pedig odaszorítom az ujjamat akkor szinte meg is tudom állítani...
Ez egyszer fordult elő, azóta szerencsére nem volt vele ilyen gond, amúgy a belső RC oszcillátorról működik (eddig is erről ment, csak mivel nem adott életjelet ezt nem tudtam biztosan, és próbálkoztam). A gond a programozással volt, ami megoldódott: bedugtam a szabvány 25 pólusú D-SUB aljzatba a szabvány dugót, és egész egyszerűen nem érintkeztek rendesen -mint utólag kiderült. Egy csavarhúzóval kicsit elhajlítgattam a csatlakozó tűit, és azóta működik. Elég bosszantó, hogy ilyen apróság miatt másfél napot szívtam vele, remélem több baj nem lesz vele.
AVCC-re amúgy nincs a tápfesz rákötve, annak nem az ADC-nél van szerepe? A blokkdiagramon legalábbis ezt látom, de még nem tanulmányoztam át részletesen a lelki világát. Idézet: „annak nem az ADC-nél van szerepe?” Igen, de attól az még az egy ugyanolyan tápláb mint a VCC. AVR-eknél az AVCC egyben az analóg kivezetésekkel bíró portnak is a tápfeszültsége nem csak ADC, hanem I/O módban is. Ha nincs bekötve, akkor egy belső diódán keresztül kap a VCC-ről tápot, ez magyarázza hogy bizonyos esetekben a port által leadható áramerősség kisebb mint a többié. Én anno a legelső Knight Rider villogómnál jöttem rá, ugyanis a PORTC-n(ATMega48) lógó nagyonerős flux LED-ek picivel halványabban világítottak... Szóval: ha nem használsz ADC-t akkor érdemes az AVCC-t is bekötni a tápfeszre. Nem kötelező, csak ajánlott.
Ha pl. A PORTA 2-es lába a kérdés, akkor pl így:
Javaslom olvasd el az adatlap ide vonatkozó részét.
Gondolom negálva gondoltad ezt Te is, lemaradt egy felkiáltójel...
Ige a felkiáltójel kimaradt.
Pedig gondolhattam volna arra a felkiáltójelre.
Kotelezo az AVCC-t bekotni, akkor is, ha nem hasznalod az ADC-t.
Sziasztok !
Én próbálkoznék egy kis ISPvel egy ATmega8-cal meg egy 74HC595-ös shiftregiszterrel de nem nagyon jön össze a dolog SPI használata AVR-rel c. cikk első részét próbálnám reprodukálni de a futófény helyett teljesen más sikerül pedig a kódot másoltam Az elején elindul de a harmadik vagy a negyedik váltás után az összes LED kigyullad és semmi nem lesz az egészből. Remélem tudtok valami okosat mondani, hogy hol rontottam el valamit köszi u.i. megpróbálok egy videót mellékelni a működéséről Video
Az órajelet helyesen állítottad be a fuse bitekkel?
Illetve a ckdiv8 fuse nincsen beégetve? Ez jól jöhet ilyenkor: Fuse Calculator
Hát nem vagyok benne biztos számomra még elég szűz ez a terep .
De itt vannak a beállítások: (képen)
Hali. Támadt egy kis gondom a switch-case utasításokkal. Próbáltam mindenképpen de sehogy sem akart menni. A kód a következő:
Az a gond, hogy az egész switch lejátszódik tehát nem választja ki azt az utasítást a case amit neki kellene. Az i váltózót static unsigned char-ként hoztam létre de próbáltam a static nélkül is. A case utasításokban a számokat próbáltam szimpla idézőjelek ('0') közé tenni de úgy sem volt jó. Nem tudom hogy mi lehet a baja olyan mint ha az i automatikusan növekedne eggyel pedig csak akkor szabadna ha a gombot megnyomom. A másik kérdésem hogy az EEPROM memóriába kellene elmentenem egy 4 számjegyű számot mint pl a 6549. De szét kell választanom két-két számjegyre mert nem fér el egy címen. A szétválasztást már megoldottam de az összeállítását már nem tudom hogyan megoldani. Valakinek van valami ötlete hogy miképp tudnám ezt megoldani?
Hianyzik a "break" utasitas. Minden ag vegere, ahol ki akarsz lepni, tedd be. kb igy:
A break az ott volt csak és elfelejtettem odaírni. Azzal sem működik.
A fuse bitek jónak tűnnek. Már ami azt illeti, neked 8MHz-en jár az AVRed, a cikknél 7,3728 MHz -en. Nos nem néztem meg a shift regiszter adatlapját, de azt javaslom, hogy állítsd át az órajeled belső 4Mhz-re.
erre: Int. RC Osc 4Mhz... Lehet, hogy a shift regiszternek túl nagy sebesség az amit kap (bár erre kicsi az esély). Ha ez így van, akkor 4Mhz-en tuti helyesen kellene mennie.
Szerintem eloptimalizálja a kódod a fordító. Szimulátorban nézd meg, hogy tudsz-e breakpointot betenni a lcd_putstr sorába. Ha nem, akkor az a sor nem is kerül be a programodba.
Helló. Próbáltam tenni breakpoint-ot de nem sikerült. Mit jelent az hogy eloptimalizálja valamit nem úgy fordít le ahogyan kéne? Ez ellen hogyan lehet fellépni?
A break nelkul a vegrehajtast folytatja a kovetkezo erteknel, amig ki nem lep a vegen. Azert hasznalunk break utasitast, hogy csak az a case ag legyen vegrehajtva, amire eppen szukseg van. Ez nem AVR tulajdonsag, ez Ansi C tulajdonsag. Az AVR C-nek kovetnie kell(ene) az Ansi C szabvanyt. Az meg hogy kioptimalizal egy fvenyt, azt nem hiszem. Meg kellene nezni (ha lehet) az ASM kimenetet. Persze ha csinal a fordito.
A break utasítás tudom mire szolgál és az ott is volt csak itt a fórumon nem írtam oda. Assembly kimenet nincs. Hogyan tudom megadni a fordítónak, hogy készítsen asm kimenetet?
Nem tudom en csak PIC-eket programozok, viszont a C nyelvet ismerem.
A gombnyomas milyen szintet hoz letre a PD1 labon ?
Hello!
Hardver hibád lesz, az tuti! 74HC595-nél pár dologra oda kéne figyelni. Kb. 3 éve építettem először ilyen áramkört, akkor nekem is csak kb. 10-edikre ment és ha mostanság úgy dobok össze valamit akkor is sűrűn elszúrok valamit. 0. hibalehetőség: nyugalmi állapotban egyik bemeneti láb sem lóghat, kivéve a DATA! 1. hibalehetőség: /MR lábat tessék a tápra(VCC) kötni! 2. hibalehetőség: /OE lábat a földre(GND) kell kötni, kivéve ha az ST-vel kötöd össze. 3. hibalehetőség: ST lábat nyugalmi állapotban le kell húzni a földre(10k ellenállás) Ajánlott lábtakarékos bekötés: az ST és a /OE lábakat össze kell kötni, és egy 10k ellenállással a tápra(VCC) húzni. Ez pont az ellentéte a 2-es és 3-as pontban leírtaknak, de a lábmegtakarítás mellett van egy olyan előnye hogy amikor az AVR inaktív vagy bekapcsoláskor éppen feléled, a kimenetek nagyimpedanciásak lesznek egészen addig, amíg az AVR a legelső bájtot át nem küldi a shift regiszternek. Ezáltal a /MR nyugodtan a tápra(VCC) köthető.
avr-objdump -w -d
Ha van ra lehetoseged, akkor a switch-et rakd at kulon fuggvenybe, mert ugy konnyebb megtalalni a forrasban. De szerintem a problema ott kezdodik, hogy a
Velemenyem szerint eloszor azt probald meg, hogy a switchen kivulre, pl. a switch ele, rakjal egy ellenorzest, hogy ha az i erteke mondjuk eleri a 40-et, akkor irjon ki valamit. Ha ezt a valamit kiirja, akkor tuti nem a switch-el van baj, hanem az, hogy folyamatosan no az i erteke. |
Bejelentkezés
Hirdetés |