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
Ha jól emlékszem itt hobbin volt egy cikk ahol valaki avr rel és lcd vel épített karórát ami andoridos telóval kommunikált, nem tudná valaki a linket elküldeni?
De!
Bővebben: Link
Szeretnék elkezdeni komolyabban foglalkozni Avrekkel. Az lenne a kerdesem, hogy milyen programozo\debuggert ajanlotok lehetoleg nem tul dragan??? Avr dragonnal van valakinek tapasztalata???
Én ezt használom, szerintem teljesen jó: Bővebben: Link
Bár bevallom férfiasan én megvettem mert előbb kezdtek el érdekelni az AVR-ek mint maga az elektronika... Ha meg össze akarod rakni még cikk is van belőle.
És ez működik atmel studio 6-al? valamint van rendes debug??
Studio6-al csak JTAGICE MK2/3 illetve AVR Dragon tud debuggolni. Studio4 alól JTAG ICE (MK1) is.
De nem értem miért a debuggal kezd valaki programozni? Én sok-sok éve AVR-ezek de igazából nem volt debugra szükségem, csak az egyetemen erőltették (de hiába).
Csak meg tudom erösiteni a szavaid. Én is Dragonnal dolgozok, de csak az AVR Studio4-el, jobban tetszik, egyszerübb és a barátom (immár 50 éve profi programozo) is ezt ajánlotta és használja, igy könnyebb vele szot érteni és a segitségét kérni.......
Debuggerre nekünk sem volt eddig tul gyakran szükségünk, igy ez aligha lehet döntö a használathoz.
Helló!!
A következő problémával fordulnék hozzátok. Van egy OV7670 típusú kameramodulom, nem olyan amin rajta van a FIFO és az oszcillátor. Ezen nincs semmi. A kérdésem az lenne hogy mi az az eszköz amit például a mellékletben lévő rajzon is bekötöttek oszcillátor ként mert típus az nincs rajta és biztos hogy nem egy sima kvarc. 24MHz-es oszcillátor kell az üzemeltetéséhez. Valamint érdekelnének mások tapasztalatai akik már használták ezt az eszközt. Én ugyan egy Stelaris panellal akarom meghajtani ami 3,3V-os de a kamara maximum csak 3V-ot fogad a digitális bemenetein az adatlap szerint így jól jönne néhány szintillesztési tanács stb. Az általam használt modulról is teszek fel egy képet. A segítséget előre is köszönöm.
Nekem is némi segitség kellene.
Van egy nagy táblázatom (10x4), amiben 3 minden esetben változik a negyedik azonban mindössze 3 konstans értéket vehet fel. Kb igy néz ki:
Ahol az x csak egy a három konstans értéket veheti fel x,xx,xxx. ( az egyik sajnos nagyobb, mint 255, igy egy byte-l nem lehet ( vagy nem tudom, de szeretném) elintézni. Van valakinek ötlete, hogyan kezeljem. ( az elsö 3 változoval mez1,2,3 a program már megy, csak a 4. Változot is be kell valahogyan rakni. Az volna a legjobb, ha az x,xx,xxx egy-egy tárhelyre mutatna, ahol az odavágo érték van, igy talán nem kellene erre az értékre 2 byte-t elpazarolní és talán egyszerübb lenne a kod. Kösz
Timer 0 : Arduinoban _kötött_. Nem átírható.
Rengeteg ilyen programot találsz, csak kicsit kellene keresgélned!
Pl.: AVRCalc Ha beállítgatod az értékeidet! Megmutatja a 8 és16 bites számláló regisztereibe szükséges értékeket.
Akkor keress adatlapot!
ATmega328P http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-AT...et.pdf 16. 16-bit Timer/Counter1 with PWM 16.11.5 OCR1AH and OCR1AL – Output Compare Register 1 A Jól láthatóan itt 2 bytes regiszterek vannak.
Szia!
A TIMER1 az 16 bites, a TIMER0 pedig 8 bites. A beállítható üzemmódok kódjai is mások, ezért ad a TIMER1 - a TIMER0-hoz hasonló beállítással - PWM jelet. Ha 20MHz-es jelből szeretnél 1 Hz-es interruptot, akkor 1024-es előosztás kell, és OCR1A-ra pedig 19530-at kell beállítani. A CTC üzemmód beállítását nem a TCCR1A, hanem a TCCR1B regiszterben kell végezni.
Régen rossz, neked, ha kioktatásnak veted a tanácsaimat!
Istvanpisti-töl megkaptad a sült galambot! „nem értem a működésüket!” Így soha nem is fogod megérteni!
Közel sem vagyok vérprofi!
Csak ha érdekel valami, én próbálom meg keresni a megoldást. Mert úgy jobban megmarad a fejemben, mint ha valaki más meg teszi helyettem.
Szia!
Látom én kellek ide. Alvin koncert után kicsit nehéz a koránkelés... ATMega328: az időzítők pontosan úgy működnek ahogy a kisebb testvéreiben, de még a vele lábkompatíbilis ATMega8-ban is. Egyedül ASM-ben kell odafigyelni az interrupt címekre, de látom C-ben vagy. Szóval: 20MHz az IC, ebből 1MHz megszakítás kell. Sajnos a legnagyobb előosztó(1024) nem jó mert nem egész osztója 20M-nak. Marad a 256: 20000000/256=78125. Sajnos ez meg már nagyobb mint 65536(ennyit tud max. a 16 bites timer), ezért a kódban némi kompromisszumot kell kötni. Ettől még lesz 1Hz-es megszakításod, ne félj! Ehhez a programkódban egy segédváltozót(utóosztó) kell bevezetni, amit a megszakításban növelsz. Az utóosztó egész osztója lesz a 78125-nek, és fontos hogy az így kapott érték 65536 alatti legyen. Ezért legyen 5. Ha az utóosztó elérte a maximumát, akkor lenullázza és továbblépsz az 1Hz-es megszakítás kódra. Valahogy így:
Az utóosztó egyébként 8 bites időzítőknél is használatos. Az "u"-t (mivel nem volatile) ne próbáld meg elérni más függvényekből, az kizárólag a megszakításból használható. A hozzászólás módosítva: Márc 16, 2014
Ha hardveres PWM jelet akarsz 1Hz-es jellel akkor további trükköket kell bevetni. Egy nem használt időzítővel(pl. Timer2) előállítasz egy hardveresen előosztott jelet, majd ezt rávezeted az 1-es timer "T1" lábára ami már a beállított értékre leosztja és PWM-et generál neked. Ha szimmetrikus 1Hz-es négyszögjel kell akkor a T1-re kötött frekinek alapból páros Hz-nek kell lennie. Most csak az elméletet írom le: Timer2-vel előosztó 64: 20000000/64=312500; Az OCR2A értéke 124 lesz (125-tel oszt: 312500/125=2500). Az OCR2B-t pedig beállítod "valahol" a felére(ezt nem kell pontosan), majd az OC2B kimenetre beállítod hogy PWM kimenet legyen, így az időzítő is természetesen PWM módba lesz. Az OC2B-t összekötöd a T1-el, így a 16 bites Timer1 egy 2500Hz-es jellel fog dolgozni. Sajnos előosztót ilyenkor nem tud, de nem is annyira lényeges, mert a 2500 már bőven 65536 alatt van. Most annyi a változás hogy az ICR1-et 2499-re kell állítani, az OCR1A (vagy OCR1B) értékét PONTOSAN (2500/2)-1=1249 értékre! A megfelelő lábat(OC1A vagy OC1B) pedig beállítod PWM-es kimenetnek...
A ".db" és ".dw" az a kódszegmensbe ír, az adatok fixen vannak. Te az adatszegmensbe
akarsz írni, ne keverd a kettőt! Most kiragadok egy példát egy régi kódomból:
Utóbbiak mind 64 bitesek, ezért a "byte 8"!!! A hozzászólás módosítva: Márc 16, 2014
Kösz, de nekem más a problémám:
A mez1,2,3 egy-egy adatot ( mez1) ad a mez2-höz, és ezt a mez3 helyre irja. Ez eddig megy, a mez1,2,3 adatoknak 10-10-10 értékük van ( azaz egy algoritmusban olvasom be a 3 egymással összefüggö adatot - 6 byte - fenti táblázat alapján. Ebbe az algoritmusba most be kellene vinnem még egy összehasonlitást a mez1 és a mez2 eredményéhez viszonyitva, azaz amennyiben a mez1+mez2 > mint x,xx vagy xxx, attol függ, hogy éppen, hogy mit tartalmaz a mez1 ill mez2, de az x-k csak 3 konstans értéket vehetnek fel (3599,200 ill.1), és amennyiben a mez1+mez2>x, akkor ne történjen semmi. Beirhatnám minden táblázati blokkba az x valos értékét, de akkor oda is egy 2 bytes register kellene, azaz a 6 helyett 8.
Az egyszerű dolgokból születnek a nagyszerű dolgok, a bonyolultakból meg csak káosz. Amit itt leírtál, az nekem nagyon érthetetlenül hangzik. Ne próbáld meg még jobban elmagyarázni, úgyse fogja érteni senki. A konkrét problémát kellene leírni, fogadok hogy 2-3 sorba belefér.
Talan meg egyszer, ( többet már nem foglak strapalni )
A feladat: A+B= Z Ha Z>X. akkor nem történik semmi Z beirni a C helyre Az A,B,C változok (10 különbözö csomag), ezeket olvasom be a táblázatból, és ezt kéne kiegésziteni az X-l. Az X is változo, de csak 3 különbözö konstans ( az érték a C függvénye) Képzelj egy C fiokot aminek a rekeszeibe 1,2 ill 3 jegyü számot lehet berakni, azaz az adott müvelethez mindig tartozik egy X hely, amit változtatni kell a C függvényében. ( a C-nek 10 értéke van az X-nek csak 3.)
Sziasztok!
A Topi féle dallamcsengőt szeretném reprodukálni kevés sikerrel. Dugdosós panelon össze van rakva ATmega8 avr-rel. Sajnos nem tudom lefordítani a forráskódot. A "Nyolc lábbal" cikkben lévő villogót, a csipogót és a közlekedési lámpát simán le tudtam fordítani és működik is. A dallamcsengővel nem boldogulok. A WinAVR mindig hibát ír. Tudna valaki segíteni? Előre is köszönöm! A hozzászólás módosítva: Márc 16, 2014
Ahogy elnézem a kódot és a hibaüzenetet(AVR Studio 4 - ből), a PCIE-vel lesz a gond.
Úgy néz ki hogy Topi nagyon kedveli a "Pin Change" interruptos cuccokat. Ez sajnos az ATMega8-ban nincs meg, de az ATMega48/88/168/328 vonalon igen. Szintén az ATMega8 ellen szól, hogy a Timer0 (amit Topi használ) csak nagyon minimális funkcionalitással bír az ATMega8-ban, azaz nem alkalmas PWM jel generálására. Ez a része kicsit bonyolultabb mint a nyomógomb érzékelés, egy teljesen más progi kéne hozzá. Ha nem akarsz éjszakákon át kísérletezni vagy új programot írni, jobb lesz ha veszel egy 8 lábút... A hozzászólás módosítva: Márc 16, 2014
Sziasztok. Az AVR közvetlenül a kazán mellett üzemel, a tápegység is ott van bedugva. Amikor a kazán be- vagy kikapcsol, hajlamos hülyeségeket írni az LCD-re, vagy épp elállítódni a kurzor, de volt már olyan is, hogy egy változó értéke szállt el. Nyilván kap valami zavart a kazán kapcsolásánál, mert máskor sosem jelentkezik a hiba. Hogy lehetne ezt elkerülni? Nem értek az elektronikához, de gondolom valami kondenzátor kellene az AVR táplábai közé. Jól sejtem? Ha igen, mekkora értékű?
A hozzászólás módosítva: Márc 18, 2014
A kazán keverőszivattyúját kapcsolja, relén keresztűl? Lehet ajánlatos egy árnyékolt dobozba szerelni, vagy kéne valami hálózati zavarszűrőt alkalmazni az AVR tápegység primerjénél. (Mint ami van a PC tápegységek primer részénél, (a kinaiból sajnos kihagyják manapság) )
Ha akkor sem szűnik akkor, opto-s megoldással kéne kapcsolgatni a keverő-szivattyút.(pl. optotriac szilárdtest relé) A hozzászólás módosítva: Márc 18, 2014
Nem, nem, semmi köze a kazánhoz, egy keltetőt vezérel, csak épp a kazánnál került elhelyezésre Amúgy egy sima mezei 1,5V-12V-os állítható univerzális tápegységről működik, (persze az AVR előtt van van egy MC33269D-5.0 feszültségstabilizátor). Akkor az univerzális tápegység elé kell tennem valamit? Tudsz hozzá adni egy kapcs. rajzot? Mert most hirtelen felindulásból az AVR táplábai közé tettem egy 220 mikrós kondenzátort, úgy tűnik, hogy megszűnt a hiba, viszont akkor ezek szerint csak véletlen, nem itt van a kutya elásva.
Szerintem az avr tápját kellene megszűrni rendesen, valami nagyobb értékű puffer a tápra, meg 100 nF-os kerámiakondi az avr táplábai közé a lehető legrövidebb bekötéssel.
Sziasztok,
Elég érdekes a problémám, és már feladtam, hogy tovább agyaljak rajta, mert egyszerűen nem áll össze mi lehet a probléma. Több témakört is megjelöltem mivel nagy valószínűséggel én vagyok tudatlan és valamilyen alapvető elektronikai jelenséggel nem vagyok csak tisztában. Szóval a problémám az adott: a csatolt áramkör. Nagyon egyszerű, a feladata az, hogy 1 percig engedje rá direktbe a tápfeszültséget az akkumulátorra, azaz egy egyszerű bikázó. 5V a tápfesz, az akkumulátor kapcsaira a tranzisztor vesztesége miatt kb. 4V kerül, ami pont ideális egy 4,2V-os akkumulátor bikázására. Amíg nem teszek rá terhelést, azaz az akkumulátor nincs rajta a tranzisztor kollektorán, minden tökéletesen működik, viszont ha rajta van a terhelés az 1 perc letelte után, amikor az adott IO pint amivel vezérelem a tranzisztort átbillentem 0-ba a mikrokontroller újraindul... De fogalmam sincs hogy miért. Próbáltam már az adott lábat bemenetnek állítani mielőtt lenullázom, engedi bemenetnek állítani, majd visszaállítom kimenetnek, lenullázom és azonnal újra is indul a programsor. Terhelés nélkül viszont semmi baj. Remélem érthetően írtam le a dolgot. Ami biztos a terhelés nem nagy, nem akkora, hogy a feszültség leessen annyira, hogy a mikrokontroller újrainduljon. Valamiféle visszahatása lehet a tranzisztornak terhelt állapotban az áramkörre, de fogalmam sincs hogy mi. Valami ötlet? |
Bejelentkezés
Hirdetés |