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
A GND-t mindenhova vezetnék - persze kerülve a hurkot. A Vcc-t akkor, ha nagyobb fogyasztás várható - sok kimenet sok (nagyobb) fogyasztot kapcsol.
Alapszabály, hogy az összes táplábat be kell kötni - nem tudhatod, melyik domaint melyik láb táplálja. Nem feltétlen vannak belül összekötve ugyanis. Meg a költői kérdés: ha nem kéne mindet bekötni, minek vannak?
A 100nF-os kondi "ökölszabály", a tápintegritás nevű műfaj foglalkozik azzal, hogy a kapcsolási tranziensek ne befolyásolják a helyes működést. Érdemes rakni mindenhova, ha elfér, általában elegendő ezen a szinten.
Megválaszolom magamnak...
Sikerült megoldani a dolgot. Neten nem nagyon találtam használható megoldást. Végül is AVR Studioban beállítottam a projekt tulajdonságainál,h több egységben kezelje a memóriát és a képeket ezekben a szegmensekben tárolom. Amikor pedig használom őket akkor a "pgm_read_byte_far" fv-el olvasom be őket a flashből úgy, hogy eltolom a címeket statikusan. 256 k flash van benne ugye. Az alsó 128-ban a program van(most kb 70 k). 129-192-ig van egy egyben kezelhető szegmens és 193-256-ig a másik. Ezekben tárolom a bmp képeket. Végül is működik, csak kis odafigyelés kell. Márió
Azt irod, hogy azt vizsgalod amikor a foldre huzod a labat. A kododban megis azt vizsgalod, amikor magasan van. Rapillantva szerintem itt lesz a hiba.
Hulyeseget ne beszeljunk. Belul termeszetesen ossze vannak kotve a taplabak.
Blackdog: Kondit mindig minden taplabhoz erdemes tenni. De az igazi okolszabaly megiscsak ez: kovessuk az adatlapok tanacsait, es a kulonbozo tervezesi ajanlasait a gyartonak. Elofordulhat, hogy nem 100nF os kondit javasolnak, hanem mas meretet.
Nos jól összezavartatok. Szívem szerint bekötnék minden VCC/GND lábat, de jelen esetben bajban vagyok a huzalozással.
Másik felmerült probléma a huzalozás/tervezés közben: Feltétlenül szükséges a RESET gomb? Nem elég, ha csak 10k felhúzó ellenállás van rajta? Végülis, ha elveszem tőle a tápot és visszaadom akkor is újra indul az AVR.
Általánosan írtam, nem konkrétan a 3 táplábú AVR-re.
Vannak olyan procik, ahol különböző táplábak különböző domaineket táplálnak meg - core, IO, memória, PLL, periféria. Biztos vagyok benne, hogy ezt Te is tudod. Ezek pedig nincsenek összekötve, de adatlapból is úgy jön le, mintha a párszáz lábú BGA két sarkán lévő VDD sem lenne direkt kontaktban vagy bizonyos tápok diódázva lennének egymás felé. Én erre gondoltam, bár nem néztem meg szemüveggel a die-t. És légyszíves, ne kezeld le más véleményét ilyen nagyvonalúan, mert azon túl, hogy nem szép dolog, még lehet hogy amúgy egyetértetek, csak a megfogalmazás a fórum hobbi jellege miatt nem korrekt. Üdv, Thomy
Kösd be mindet, ha tutira akarsz menni. Lehet, hogy ha nem kötöd be mindet, menni fog, de lehet, hogy megmagyarázhatatlan hibákat fog néha produkálni vagy bizonyos perifériák nem lesznek működőképesek.
Nos eléggé döcögve haladok.
Arra törekszem, hogy minden VCC/GND láb be legyen kötve és szűrve is legyen. Azt is belátom, hogy reset gomb nem létkérdés. De ismét egy új helyzet: ATMEGA128-nak van |PEN lába. Az adatlap szerint: Idézet: „PEN is a programming enable pin for the SPI Serial Programming mode, and is internally pulled high . By holding this pin low during a Power-on Reset, the device will enter the SPI Serial Programming mode. PEN has no function during normal operation.” Ezek szerint csak akkor tudom feltölteni a programot az AVR-re, ha PEN láb bekapcsoláskor alacsony szinten van? Mi van akkor, ha ezt a lábat fixen GND-re kötöm vagy be sem kötöm sehova? Jól értem, ha magas szinten van akkor nem tudom programozni és futás közben ezen nem tudok változtatni csak reset/újraindításkor dől el, hogy akarok programozni-e vagy sem? Mire jó valójában ez a láb?
Meg a költői kérdés: ha nem kéne mindet bekötni, minek vannak?
Költöi válasz: mert néha kell a masszivabb áramodavazetés, amit csak több láb bevonásával lehet megoldani (föleg belül, ahol a chipet az aranyhuzalokkal kötik a lábakhoz.
Köszönöm!
Viszont a |PEN lábbal nem tudom mit kezdjek. amúgy kicsit böngésztem az ATMEL oldalán az app.note-ok között. Tetemes anyag van ott
Köszönöm az észrevételt, kijavítottam a sort :
Sajnos így a ledek már abszolút nem villannak fel, tehát máshol lehet a hiba. :no:
Wazzeg azért lehetnél egy kicsit interaktívabb a mai világban. Bővebben: Link különösen az első találatokat ajánlom.
Jogos, igazad van. Ez különösen jól jött: Bővebben: Link[off]
Mentségemre szóljon, hogy amin a napokban keresztül megyek elég rossz. Kevés energiám marad gondolkodni. Konkrétan a bankom épp felmondta a lakásunk hitelszerződését. Szóval az interktív energiák most másra mennek el, de próbálok kikapcsolódni és ekkor titeket kérdezgetlek. Lenne még egy kérdésem is, de inkább hagyom a fenébe.
Amikor ilyen dologgal állok szemben, akkor rögtön a guglihoz fordulok, mert elég egyetemes a felvetés főleg hogy atmega128-ról van szó, ami igen csak elterjedt. Míg ha PERL-ben kellene keresni a win32 key capture-t vagy system environment variable létrehozást az már nem ennyire evidens
Akkor kérdezz wazzeg . Ehh, az nagyon nem jó.
Igazából ez az első ilyen 'nagy' AVR-em. Tervezési irányelvek érdekelnek. Mindenhol az olvasom, hogy kristály és tápszűrő kondi a lehető legközelebb. De mégis mennyire? Most átkötésekkel megoldottam, hogy a 100nF szűrő kondik közvetlen a táp lábaknál legyenek, de a kristály az kb. 2cm-re van. Nem bírom közelebb tenni. Aztán azon is elbizonytalanodtam, hogy külső felhűzó ellenállás mikor kell. A nyomógombok kb. 20 cm-re lesznek az AVR-től szalagkábellel. Én úgy gondolom erre még elegendő a belső felhúzó ellenállás, de biztos ami biztos alapon keresem a helyét a külső ellenállásoknak.
Aztán ezt a számomra "kifordított" logikát sem értem. Alapból minden bemenet magas szinten van és esemény hatására lesz alacsony. Reléket vezérlek opton keresztül. Most nyugalmi helyzetben az opto magas szintet ad. Esemény hatására lesz low. De mi van, ha elszáll az egyik opto? Kapásból alacsony szintre mehet és a relém indokolatlanul behúz és úgy is marad.
Én amikor a próba panelemet csináltam, akkor összesen 1 db 100 nF-ost tettem a 7805-höz, ami nem éppen az atmega16-nál volt. Alapvetően az atmegák elég stabil jószágok. Egyik fanatikus tanárunk ívhegesztett közvetlenül az uC felett, és nem igazán hibázott. Hány MHz-es a kvarc? 2 cm nem a világ vége. Természetesen minél közelebb van annál jobb. Programozási probléma, hogy fordított logika. Én ilyenkor így írom fel:
vagy valami ilyesmi, és innentől kezdve el is felejtettem, hogy fordított logika van. Nem követtem, hogy eddig mit csináltál, de általában az optot úgy kötöd, ahogy nem szégyelled. Ha FC kapcsolásban akkor ponált, ha FE kapcsolásban akkor negált a működése. Miért szállna el az egyik opto? Ha ilyet sejtesz, akkor csinálj visszacsatolást. Egyéb óhaj sóhaj?
Visszacsatolást nem kívánok készíteni mert alapból van 13db opto-m. Ehhez, jön a 16db relé és sok más. Arról már nem is beszélek, hogy kötött a panel fizikai mérete.
Amúgy én 'is' oda jutottam, hogy definiálok egy változót és nem zavar össze az , hogy L szint esemény H szint nyugi. Csak azért zavar mert baj esetén minden megy, adott esetben bekapcsoláskor L szinten maradhat. A kvarc 16MHz. Van itthon jó pár gyári panel és egy-kettő elképesztő módon nem foglalkozik a távolságokkal. Én hosszú életű kapcsolást szeretnék építeni
Sziasztok
Nem találkozott valaki ezzel a hibával? - 'USRT_BAUDRATE' was not declared in this scope
A felső sorra hozza. Egyszerűen nem tudok mit kezdeni vele. Nem tudom beállítani az UBRR regisztert. Ez egy ATtiny2313-on lenne. Már próbáltam az adatlapi példával is, szedtem netről is sokfajtát és egyiket se kajálja meg az AVR studio 6. Van valami ötletetek? Üdv:Suncorgo Idézet: „if(!(PINA & (1< Ilyen csunya szavakat hasznalni...
Szia!
Kifogástalanul működik a studio6, a hiba nálad van, le is írtad. Az "USRT_BAUDRATE" nincs deklarálva, ezért problémázik a fordító. A legegyszerűbb megoldás beállítani a baudrate-ot, ha célzottan feltöltöd a regisztereket, pl. ennek a segítségével: Baud Rate Calculator Szerintem
Tegnap megoldódott. Egyszerűen restartolni kellett a gépet... Nem értem én ezt a technikát
Köszi az oldalt
Sziasztok,
egy ATMega16-tal építettem áramkört. Olyan érdeles hibajelenséget tapasztalok, hogy C portja abszolút nem működik a kontrollernek. Minden port (A,B,D) működik kifogástalanul, de a C port tetszőleges lábán még a LED villogtatása sem megy. Ez már a harmadik mikrokontroller amivel próbálom, és mindig ugyan ez a hiba. Próbáltam már 16A-val és 16L-lel is. Van esetleg ötletetek, hogy mi lehet a baj? Az AVR minden táplába be van kötve, és meg is van rajta az 5V (vagy épp a 0). Kezdek tanácstalan lenni
JTAG alapban engedélyezett.
Ez a C2..C5 láb. Fusebitek közt: disable jtag.
És működik Hogy ezzel mit szenvedtem... Köszönöm szépen, sokat segítettél!
már csak a topik fejlécét kéne elolvasni egyszer...
Sziasztok!
Ismét egy nyák tervezési kérdés. STK500 programozóm van. Kétféle csatlakozás "szabványos" az ATMEL-től. ISP6 ISP10. Az utóbbit egyáltalán nem is értem minek. Én ISP6 szerint tervezem/tervezném a nyákot, de nagyon nyakatekertek lesznek a vezetősávok. Mennyi szokás eltérni ezektől? Én szíven szerint eltérnék, hogy áttekinthetőbb és egyszerűbb legyen a nyák aztán készítek egyedi programozó kábelt.
ISP10: stabilabb, zavarvédettebb.
ISP6: elterjedtebb, kisebb nyákot foglal. Eltérni tőle: Ön és szívatás. Emlkészel rá 1 év múlva?
Mivel teljesen egyedi dolgról van szó tudni fogom, hogy ehhez egyedi programozó kábel kell.
Ezek szerint, ha legalább 1 méteres vezetéket szeretnék akkor inkább ISP10? |
Bejelentkezés
Hirdetés |