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
Ahogy Kovidivi is írta, úgy elég szemléletes a kapcsolgatás. A kedvedért elrondítottam azt a kódot tessék:
A hozzászólás módosítva: Szept 25, 2015
Sziasztok!
Végső elkeseredésemre szeretnék egy kis segítséget kérni tőletek. AVR Atmega32-őt használok. Szeretném megoldani, hogy a sleep módból felkeljen a proci több perc alvás után. Külső interruptról már szépen működik, de a timer2-őt nem tudom úgy be konfigolni, hogy felébredjen magától egy idő elteltével. Watch Dog-ot nem szeretnék erre használni mert számolnia kell egy felfutó élt, tehát nem jó ha újraindul a proci. Rengeteg mintakódot néztem. Valaki csinált már ilyet? Segítsen valaki legyen szíves.
A Watchdog ha jól tudom, nem csak resetelni tud, hanem simán interruptot hív meg, és ha kell, resetel is utána. Nézd meg az adatlapban, hogy melyik alvási módból tud a timer2 interrupt ébreszteni, mert vannak olyan lehetőségek, amikor nem ébreszt.
Idle mód jöhet szóba és a power-save mód,de ez utóbbi csak akkor,ha a timer2 aszinkron módban van.
Szia!
A Timer2-ről csak aszinkron módban ébred fel, de ekkor 32,768kHzes kvarc kell a bemenetre és belső oszcillátorról kell járjon az eszköz. Ekkor max 8sec lehet az alvási periódus, mert 1024-es osztót lehet beállítani és az OVF miatt van még 256-os osztás. A uC leírásában nézd meg mire kell figyelni, mert elég háklis üzemmód, csak figyelni kell pár dologra. . Az alábbi kód mutatja mit kell beállítani a timer beállításánál.
Köszönöm a sok infót mindenkinek! A PWR_SAVE módot szeretném használni mert nagyon lényeges a fogyasztás. A 8sec az még nekem kevés lenne, legalább egy percig kéne, hogy aludjon, majd utána felébredne mérne uart-on küldene adatokat és visszaaludna. Nem lehet, egy számlálóval valahogyan túllépni azt a 8sec-et?
Akkor felejtsd el a 8 Bites AVRt!
Használj inkább 32 Bites ARMot.
Növelsz egy számlálót, utána egy if, ha nem igaz a feltétel, akkor alvás, ha igaz, akkor furhat a főprogram. Az a pár órajel nem fogyaszt sokat.
Máris kipróbálom a számlálót! De előtte felvázolom, hogy mi ez tulajdonképpen, és akkor jobban képbe lesz mindenki. Ez egy időjárás állomás lelke lesz ami méri a szélsebességet, szélirányt, esőmennyiséget, relatív páratartalmat, légköri nyomást, levegő hőmérsékletet, talajhőmérsékletet, és megvilágítást ir és látható tartományban. Ezeket az adatokat leméri a proci aztán alszik egy percet. Eközben a szélsebesség és az esőmennyiség mérőktől ha jön jel akkor az külső megszakításként kezelném felkelne növelne egy változót és visszaaludna. Hiszen ha alvás közben fúj a szél akkor is kell mérni. Ezeket az infókat vezeték nélkül elküldi egy ARM-nak (STM32F4 Discovery Board) ami színes érintős TFT-vel velfegyverkezve várja az adatokat, hogy szépen kirajzolhasson karakterisztikákat és egyéb dolgokat "jósoljon"
![]() Az AVR egyszerűsége miatt (és azért mert a lux-mérőn kívül minden szenzor kész kb.) használnám egy kis napelemes akkumulátoros modullal. Csak tényleg altatni kéne a procit mert akkor 6uA-t eszik méréseim szerint. Vezeték nélküli modulnak is egy 3,3V-os RFM modult használok ami pár 10mA-t vesz fel csak küldésnél egy pillanatra. Szóval máris tesztelem először a 8sec-es felébredést, aztán majd bővítjük. Először csak szép lssan ahogy írtátok megpróbálom megcsinálni. Először is a 20MHz-s kvarcot levettem, helyére raktam egy órakvarcot. Átállítottam a FUSE biteket gyári állapotra. (belső 1MHz 64ms-os indulási késleltetéssel). Ezek után ha asszinkron módba állítom stb.. akkor működni fog a kód amit Istvanpisti bemásolt. Remélem. Hamarosan jelentkezem, remélem jó hírekkel
Egyelőre nem túl sok siker élményem van. Az xtal1 és xtal2-re most egy órakvarcot tettem, fuse bitek jól vannak beállítva szerintem. Mellékeltem egy képet amin mutatom, hogy van beállítva. (csak szimulátor de meg tudom nézni a hex-ből hogy mit takar). A LED nem villog szerintem az a gond hogy más regiszterek vannak ebben a prociban.
Próbáltam másképpen is, hogy több mindent beállítok pl sei(); cli(); látom sok mintakódban de akkor sem jó. :/ Szerintetek?
Szia!
Az F_CPU=1000000 legyen, mert a kontroller 1 MHz-ről jár. A sleep_mode(); sor után kellene valami kis késleltetés, mert a leírás írja, hogy legalább egy órajelnyi időnek (a TIMER2 órajeléről van szó, ami 32,768kHz) el kell telni a felébredés és az újra elalvás után, különben sosem ébred fel. Erre írtam, hogy egy kicsit háklis üzemmód. Ez lehet pl._delay_ms(10);, vagy ez a három sor a sleep_mode(); sor után.
A hozzászólás módosítva: Szept 26, 2015
Ha kikapcsolom a sleep-et és a while-t ahol írtam, akkor fut csak a főprogram while-ja. Mellékeltem egy mérést amin látszik a PORTD0 és PORTD1.
A TCCR2A és TCCR2B regiszterek nincsenek meg ebben az avr-ben ahelyett TCCR2-őt írtam. Szerintem ez is lehet probléma.
Én ezt úgy küszöböltem ki, hogy várok, amíg a TCNT2=0. Amint átvált, már megyek is aludni. Előtte mindent elvégzek, amit kell.
A set_sleep_mode nem biztos, hogy elküldi aludni a procit, az csak beállítja az alvás módját. Az igazi altató parancs a sleep_mode(); . Kikapcsolni sem kell a sleep_disable(); -vel, ez automatikusan megtörténik, amint lefut egy interrupt. Tehát minden mp-ben, amikor a Timer2 felébreszti. Én így altatok a leggyorsabban:
A hozzászólás módosítva: Szept 26, 2015
Értem amit mondasz de sajnos a ISR(TIMER2_OVF_vect) sem fut már le ha kikapcsolom a sleep dolgokat akkor se. Van valami a timer beállításánál amit kifelejtek de nem jövök rá hogy mit..
Ha sikerül elindítanom sleep nélkül akkor kipróbálom ahogy mondtad. A hozzászólás módosítva: Szept 26, 2015
Lehet, hogy nem megy az órakvarccal a TIMER2. Én is jártam már így, kipróbáltam többet, míg megoldódott.
Raktál-e rá kondenzátorokat a kvarc ás a föld közé?
Igen van két 22pF-os kondi. És nem próbapanelen csinálom hanem, egy saját minimum board-on szóval az érintkezési hiba is kizárva. Viszont gyanús hogy a kvarc lábain nem mérek frekit. Viszont ha ugyan azt a kvarcot átteszem egy elemes gyári rtc modulra akkor ott simán mérhető a 32kHz. Nem hiszem hogy a 22pF sok lenne. A legvalószínűbbnek én is azt látom, hogy nem megy a kvarc miatt, hiszen nincs órajele. Ugyan úgy kell rákötni mintha egy normál kvarcot kötnék?
Azt írja a doksi, hogy nem szükséges ilyenkor külső kapacitás.
Emiatt be sem indul a rezgés. Így van.
Leforrasztottam a kondikat, és direktbe ráforrasztottam a kvarcot a panelre (eddig precíziós tüske volt hogy cserélhető legyen, de most nem bíztam Mörfire). Az eredmény egyelőre ugyan az. Arra jöttem még rá, hogy ha assinkron módba van a proci akkor a timer2 megáll. Ha nem kapcsolom át assinkronra akkor megy mindkét timer és a while-is szépen fut.
Találtam még valamit. Bár ettől csak az interrupttal lesz baj, de az oszcillátornak menni kellene.
Ezt érdemes lenne kipróbálni,csak pár regiszternevet kell módosítani.
Üdv!
PIC írta: Idézet: „Sziasztok! Végső elkeseredésemre szeretnék egy kis segítséget kérni tőletek. AVR Atmega32-őt használok.” Idézet: „Az xtal1 és xtal2-re most egy órakvarcot tettem,” Ha atmega32-ről van szó, akkor a 32,768Hz-es kristálynak az xtal1/2 helyett nem a TOSC1/2 lábakon kellene lennie? A hozzászólás módosítva: Szept 26, 2015
PIC:
Idézet: „Arra jöttem még rá, hogy ha assinkron módba van a proci akkor a timer2 megáll. Ha nem kapcsolom át assinkronra akkor megy mindkét timer és a while-is szépen fut.” Ez is erősíti a gyanúmat, hogy rossz helyen van a kristály.
Kijött a studio 7.Jól gurul,szelektív lett a telepítés ,érdemes váltani.
Igazad van, ez lehet a baj.
Jó híreim vannak. Átraktam a kvarcot és a kvarc lábán gyönyörűen ott van az órajel
![]() Még jobb ezek után működött egyből a kód sleep-móddal együtt... Úgyh mindenkinek nagyon köszönöm a segítséget, most nagyon örülök Megígérem hogy még elvileg ma, ha megírom szépen a kódot, hogy mondjuk 8sec-ig sleep-módban legyen akkor mellékelem a kódomat ÉS a kapcsrajzot fuse bitekkel... Csak mert tudom milyen segítség ha épp valaki ilyesmit szeretne csinálni mint én. Estefele jelentkezem, most sajnos kicsit el kell mennem de inkább elkések de ezt meg akartam nézni. Megérte ![]() Szép napot mindenkinek!
Sziasztok.
Van 1 mápna pc , 1 atmega 328-pu . 3.3v kap a málnáról. És 1 höérzékelő , ami valamiért többet mér mint kellene. Ha 5 v kötöm az avr-t. Uart ugyanúgy 3,3 v fog komunikálni? ( Txd Rxd ) Vagy ellenálásozni kell? |
Bejelentkezés
Hirdetés |

















