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
Itt egy link az angol nyelvű adatlappal...EADOGL128-6 grafikus LCD
Használd egészséggel !
Sziasztok!
Csatlakoztam az AVR-el foglakozok lelkes táborához. Nemrég kezdtem vele foglakozni, lassan, de biztosan jutok előrébb. Kis villogó már megy Lenne azonban egy számotokra talán egyértelműnek tűnő kérdésem. Honnan tudja az avr, hogy égetni szeretném vagy csak jeleket küldök neki, ha ugyanazok a lábak be/kimenetek mint amin a programot küldjük át neki? A másik kérdésem az lenne, hogy az atiny soroztal is meg lehet csinálni, hogy soros porton komikáljon a pc-vel, nem programozás szempontjából hanem adatokat küldjön a pc? Mert mindehol eddig az atmegát láttam. Meg a leirásokban amik a soros kapcsolatról szolnak c-ben vagy bascom-ban vannak a programok. Assemblyben hol lehet elérni a soros port regisztert?
Szia,
Az Attyny45 ben nincs UART, amivel könnyű lenne RS 232 kommunikációt csinálni. (a legtöbbször ezt azzal magyarázzák, hogy túl sok lábat köt le a UART, és nem marad másra.) Szoftveresen emulálni a uartot sem túl népszerű. ATTyny45-ben SPI van viszont arra nincs közvetlen megoldás a PC-vel való összekötésre. (viszont cserébe akár flash memóriával kommunikál csont nélkül) Lehetőség van még az USB-re, de abban még nem tudok segíteni, mert most rágom át rajta magam. Hátha valaki más.
Szia,
Kicsit tovább olvasgattam, és van egy atmel application notes erről, ezen rágom át magam. Hát nem tűnik egyszerűnek... Ha lesz valami, itt
Kösz!
Azt nem tudod, hogy attiny26-ban van-e? Annak elég sok lába van. Az van nekem itton. Vagy kell vennem egy atmega ic-t? Mit keresek az adatlapon?
Idézet: „Honnan tudja az avr, hogy égetni szeretném vagy csak jeleket küldök neki, ha ugyanazok a lábak be/kimenetek mint amin a programot küldjük át neki?” Reset állapotban tudja programozni.
ok, ez így logikusnak tünik, de a reset láb egyben i/o port is akkor honnan tudja, hogy reset állapotban van vagy csak kap egy bemeneti jelet?
Ezért szokták mondani, hogyha I/O -nak használod (=annak állítod be) a resetet, utána nem tudod majd sima égetővel írni.
Sziasztok! Szeretnék segítséget kérni, mert anyagilag és idegileg is rá megyek erre a kapcsolásra
Megépítettem és elsőre gyönyörűen, hangosan szólt minden féle mellék zörej nélkül. Ami a problémám az hogy lassan szól, nyújtva. megpróbáltam fuse biteknél a felprogramozásnál a frekvenciát variálni, és már elsőre kizártam magam belölle. (vettem másikat) Hol hibáztam? Mit csináltam rosszul, hogy lassan szól? Én a felprogramozásra gondolok az AVR studióval csináltam, és hagytam mindent alapállapotba ugy ahogy az avr studió beállította. Ami még eltér az eredetitől hogy attiny13-al csináltam, ehez a programban annyi változást csináltam hogy 20db dallam helyett csak kettőt tettem bele, mert csak ennyi fért rá. Várom a megoldást, köszönöm
CKDIV8- ból ki kell venni a pipát, hogy ne ossza 8-cal az órajelet.
Sziasztok!
Megkertek ra hogy segitsek az alabbi weboldalon levo kapcsolas megepitesenel. Bővebben: Link Az a gondom, hogy en Winavr-t hasznalok, a Bascom-hoz nem ertek. Le tudna ezt a basic programot valaki forditani nekem hex-re? Elore is koszi a segitseget!
Fizikusnak: Próbáltam avrStudioval lefordítani, de nem csinált semmit (Fatal error).Viszont nekem lenne egy kérésem, minden c-t használó emberhez:a mellékelt txt-ben egy olyan forráskód van, ami 150Hz-ig növeli, majd csökkenti a frekvenciát. De nekem a hex 12kb ezért nem fér rá az attiny45-re és azt szeretném megtudni, hogy mit módosítsak rajta, hogy a hex kisebb legyen?
Sajnos egyáltalán nem értek a C-hez, csupán érdeklődnék attól, aki tudja... Egy ilyen pár soros kódból hogy lesz 12kB-os gépi kód?
A float adattípus, azzal történő osztás és szorzás műveletek miatt.
Szia,
Azt hiszem nem voltam elég pontos, mert USI (egy egység) van a Attyny45 ben, és abból lehet SPI-t (egy funkciót ) csinálni. (és még egyebeket ..) Sajna a Attyny 26-ban is csak ez van... U(S)ART hiányában az egyszerű RS232 kilőve. Adatlapot nézegetve, a lábkiosztásnál gyorsan kiderül, mert a U(S)ART-os AVR-knek van TX, és RX lábuk is. Szerintem...
Úgy van, ahogy Norberto mondja.
Ciklushoz nem kell float-ot használni, hisz egész számokkal számolsz.
Igen, ATmega8. Koszi szepen a gyors valaszt! :worship:
Így még nagyobb lett...(15kb) Lövésem sincs, hogy mi lehet a baja. Igaz, még nem igazán értek az avrekhez, de a példaprogramokat tekintve nem hiszem, hogy ez a két változó, meg a két számolás okozná a bajt...Ha valaki, aki ért a témához, venné a fáradságot, hogy otthon lefordítja és megnézné, hogy mekkora hex ugrott ki, nagyon hálás lennék, mert kezdek arra gyanakodni, hogy esetleg az avrstudioval van valami baj... :help: :help:
Te tudsz valamit mondani, ezzel a dologgal kapcsolatban, látom, hogy értesz a dologhoz?Amúgy végigpróbáltam az összes változótípussal és mindegyiknél csak nagyobb lett...
Hello!
Nem rég esett szó róla:Bővebben: Link
ez tudom, mivel ott is engem osztottak le, és valószínűleg ez is a baj, csak arra lennék kíváncsi, hogy hogyan lehet ezt kiküszöbölni...
Hello!
Nem csak a változók miatt hízik meg. Főként a delay kavar be. Nálam linuxon fordítva többször is problémát okozott. Ha túloptimalizáltam a fordítást, akkor a delayt kivette vagy hibásan fordította le. Kicsi lett a hex, cserébe nem időzített Ha benne hagyattam vele akkor meg felhízott. Ahogy a tiéd is. Érdemes saját delayt írni, pl.:
Ez 8MHz-s atmega88-nál dúrván 1másodpercet késleltet ha átadsz 100-at a függvénynek. Ha valaki univerzálisabbá tudná tenni, pl. frekvencia deklarációból leosztja, kiszámolja hány műveletet végez el egy ciklusban a mikroprocesszor, akkor elvileg pontos 1mp-t is be lehetne vele lőni. Amikor kellett nem molyoltam el vele ennyire. Szóval gyári delay mellőzése, mégjobb volna ha helyette timert lehetne használni. Az még annyit sem eszik elvileg. A bemutatott delay kóddal a hexed 7kb let. Így is sok, de nem 12kb
Az a gond, hogy változót adtok a delay-nek. Nincs semmi gond a delay-el, csak ne kapjon változót.
Ha nem fix időzítés kell, akkor ezt szokás csinálni:
Ezt esetleg meg lehet fejelni egy időarányos korrekcióval, de így az utasítás végrehajtás ideje szinte elhanyagolható. És legalább nem kell szöszölni az adjusztálással más F_CPU esetén. Egyébként az így létrehozott bármilyen delay ugye kizárólag akkor igaz, Proci_85-é és az enyém is, ha előtte cli(); majd utána sei();... Különben teljesen mindegy, mert az interrupt bekavar a valós időbe. De persze ugye általában így globálisan nem lehet a delay idejére lekapcsolni az interruptot (hisz pont azért használunk interruptot) így a ténylegesen fix idejű delay-ekre, ahol interruptok is vannak, ott én ezt használom: Van egy volatile változó, mondjuk
Timer interruptban:
Majd bárhol ahol várni kell:
Nem kell több my_delay változó sem, mert egyszerre mindig csak egy helyen használjuk úgyis. (Ahol várunk) Én általában létrehozok mindig egy 1KHz vagy 100Hz-es timert, és egyetlen egy timer végez minden ütemezést.. Taskok, delay-ek, prell mentesítés, hosszú gombnyomás detektálás, stb...
Ez nagyon hasznos volt, köszönjük Topi!
Kipróbálom én is, mert visszatérő problémám volt a delayek körül
Hello! Köszi a választ de mivel kezdő vagyok,ezért még ezt meg kell emésztenem, de a hozzászólásban lévő első módszert értem és szerintem egyenlőre ezt is fogom használni...még nem próbáltam, mert nem vagyok gépközelben, de majd leírom, hogy így mekkora lett...mégegyszer köszönöm mindenkinek.
Ez már megy, de közel sem azt a frekvenciát adja, mint kéne.Mit csináljak vele?Tudom írtad a "cli()"-t meg "sei()"-t, hogy ne szóljon bele a valós időbe, de ezekkel mit kell csinálnom? Bocsánat a kérdésért, mert valahol biztos le van írva (nagyon sokat olvasgattam,de nem találkoztam még ezzel), de ha én most úja elkezdek olvasgatni, akkor sosem jutok el addig, hogy írjak egy értelmes progit.Szóval mit kell ahhoz csinálnom, hogy rendes időben fusson?
-Os legyen az optimalizáció.
Bármilyen más optimalizáció sűrűn tönkreteszi teljesen a delayt. Elég sokszor kitárgyaltuk már itt. És nézd meg be van-e állítva az oszcillátor. Akár makefile-ban, akár project configban, akár kódból #define F_CPU-val.
Hello! Minden ugyanúgy beállítva, ahogyan mondtad, de valami még mindig nem jó...Nem jut semmi az eszembe, hogy mi zavarhat be...A cli();-t meg az sei();-t is használtam (függvény void-ja elé a cli-t és a függvény mögé az sei-t), de így sem változott semmi.Máshova pedig nem engedte beírni ezt a kettőt.Mi lehet még a baja?
Mit hova irtal?? Tedd fel mellekelve a kodot (v. reszletet), es majd valaki megnezi.
|
Bejelentkezés
Hirdetés |