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... ![]()
É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
![]()
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 |