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
Gonfolom a fordulatszámot és nem a gyújtófeszt akarja méregetni...
Nagyfeszre semmit nem kötünk ha a fordulatszámot(gyújtásszámot) akarjuk mérni. A kisfesz részre(megszakító, gyújtótrafó bemenete) lehet kötni néhány alkatrészből álló fokoztatot, lényeg hogy az AVR négyszögjelet kapjon, és a gyújtótrafó/tekercs önindukciójából pedig semmit!
Utánnanéztem a dolgoknak, és egy kész üzemóra mérő fordulatszámméréssel 4400FT. Kiszámoltam, az LCD, az AVR, a meghajtók, a doboz, és egyéb kis alkatrészekkel összesen már többe lennék, ráadásul ez precízebb, szval inkább hagyom a fenébe. De köszönöm a segítséget!
Üdv, yoman
Sziasztok!
Tud valaki felvilágosítást adni, hogy működik az interrupt az AVR-en, vagy valami haszon linket? Üdv, Barta Tamás
Ha a Bascom-AVR elég:
Megszakítások
Interrupt: hardver által generált esemény, aminek hatására az éppen futtatott kód végrehajtása félbeszakad, és elkezdi lekezelni az eseményt. Az esemény lekezelése után a programvégrehajtás visszakerül a megszakított kódhoz és onnan folytatódik tovább.
Interrupt AVR-eknél: majdnem minden periféria(időzítők, kommunkáció, általános interrupt-források) képes legalább egy(de általában több) fajta interrupt generelására. Ha egy interrupt kiszolgálása folyamatban van, akkor új interrupt lekezelése csak az aktuális interrupt befejezése után történhet. Az interruptokat a perifériához/perifériacsoporthoz tartozó interrupt maszk vagy a megfelelő státusbit beállításával(1-re állításával) lehet engedélyezni, illetve tiltani. Ezen felül a globális interrupt-engedélyezést is be kell kapcsolni a sei(); paranccsal. Tiltásra ugyanazok a maszk/státus bitek használhatók. Fontos, hogy egy interruptfüggvény hamar lefusson(lehetőleg ne legyen benne delay vagy számításigényes művelet). Interrupt függvény AVR GCC-ben: Az interrupt-lekezelő függvényt az ISR(interrupt_vektor) makróval hozzuk létre. Például így néz ki egy ilyen függvény:
Interruptok használatához még be kell tölteni a megfelelő AVR GCC könyvtárat:
Az olyan változókat amelyeket interrupton belül és a "fő programszálon" is használunk, deklarálásnál a "volatile" makrót is használnunk kell. Ellenkező esetben jópár kellemetlen élményben lesz részed. Fölöslegesen ne használjuk a volatile makrót(pl. kizárólag ugyanabban az interruptfüggvényben használt változónál), mert növeli a programkódot és csökkenti a teljesítményt. Volatile makró használata:
Lásd még: AVR Studio4 --> Help --> avr-libc Reference Manual --> Library Reference --> avr/interrupt.h Azaz itt: WinAVR-20100110/doc/avr-libc/avr-libc-user-manual/group__avr__interrupts.html
Autóelektronikára is lehetne használni ezeket a paneleket?
Köszönöm!
Szóval ha építeni szeretnék egy fordulatszámmérőt, akkor mindenképpen át kell néznem az interrupt könyvtárat. Előljáróban lenne olyan kérdésem, hogy ( gyújtókábelről szeretném adni a jelet neki ) hány voltnak kell lennie a jelnek, és a programkódban segítetek majd? Illetve az ATTINY 2313-al meg tudom ezt valósítani?
Szívesen!
A fordulatszámmérőhöz kapcsolódóan már van néhány személyes tapasztalatom, de ha az ember belegondol akkor látja hogy nem "FREKVENCIÁT" kell mérni, hanem "IDŐT". Most nem vezetném le, lényeg hogy ha pontos motorfordulatot(1/perc) akarsz kapni és azt kb. 1/3 másodpercenként kijelezni akkor a frekvencia túl alacsony ahhoz hogy akár AVR-el, akár más impulzusmérvel méregesd. A bicikli kilométerórája sem impulzusokat mér, hanem az impulzusok közt eltelt időt. Az ide való eszköz az "input capture" ami szerencsére az ATTiny2313-ban is megtalálható, a Timer/Counter1 része. Ez egy hardveres rögzítő: fel-vagy lefutó él mellett hardveresen letárolja az időzítő értékét. Ezt kivonod az előző ilyen letárolt értékből és megkapod a két impulzus közt eltelt időt. Fordulatszámmérésnél más nem is kell, csak annyi hogy a kapott értékeket ~0.3-0.4 másodpercenként átlagolod és kiértékeled. Talán még interrupt sem nagyon kell ha ügyesen csinálod...
Ja igen, elnézést: a jeled olyan legyen hogy alacsony állásban 0.0-0.6V, magas állásban 2.7-5.0V legyen ha az AVR tápfeszültsége 5V. A választóvonal mindig a tápfesz fele, de 0.0V alatti és a tápfesz feletti soha nem legyen! Én egy optikai leválasztót azért használnék, mert a gyújtótrafó primerkörében is lehetnek nagyfeszültségű lökések. Illetve egy aluláteresztő szűrő hogyha elektronikus gyújtás van, mert ilyenkor több impulzust is kaphat egyetlen gyújtáskor.
Értem a lényeget, mindenképpen kellene nekem egy optocsatoló, ami véd a hirtelen áramlöketektől, de nekem a többi rész még mindig homályos kicsit. Tudnál segíteni a programkóddal illetve a hardverrel? (a gyújtókábelről váltófeszt egyen kell irányítani?)
Segítség kellene, a Topi féle programozót + avr studiot feltelepítettem xp-re. Minden ok, egészen addig amíg az avr studioban kapcsolódni nem akarok. Ott keres egy darabig aztán vissza ugrik a kapcsolódási ablakhoz. A programozó tuti jó mert másik gépen megy.
Ha valaki találkozott hasonló problémával megoszthatná. Elöre is köszi
Nézd meg melyik COM porton van. AVR Studio-ban keresd: "Number of COM-ports to try"; ezt növeld meg.
A választóvonal nem mindig a tápfesz fele. Érdemes megnézni mindig a konkrét uC-t.
Attiny2313 adatlapja szerint: Alacsony bemenet 5Vos tápfesszel: max 0,3*Vcc -> 1,5V Magas bemenet 5Vos tápfesszel: min 0,6*Vcc -> 3V Tehát itt ugye van egy hiszterézisnek tekinthető rész (konkrétan persze nem az), ahol bizonytalan mindenesetre az, hogy milyen jelszintet érzékel az uC.
Igen, a hiszterézist nem említettem, mivel nem akartam egy kezdőt még ezzel is terhelni. Ezért is említettem hogy 0-0.6 és 3.7-5 ami már biztos, a köztes sáv "tiltott", bizonytlan.
Helló. Van egy kis problémám gtk lcd driverével. A probléma az, hogy 4 adatok kell kiíratnom az lcd-re:
De valamiért csak azokat az adatokat írja ki amiket a 0x04-es és 0x44-es címre küldök ki. Mitől lehet ez?
Kiírja azt is, csak nem látható helyre. Nézd csak meg a HD44780-as IC adatlapját, ott van benne a címzés. ha jól emlékszem, akkor 16-os számrendszerben megy a címzés.
ÓÓÓ. Tényleg. Köszönöm. Mindig tanul valamit az ember.
Helló, akadt nekem is egy kis problémám. Most kezdtem el AVR-ekkel foglalkozni, összeraktam egy STK200-as programozót (az egyszerűt, buffer nélkül), egy ATMEGA32-t próbáltam vele felprogramozni WinAVR-rel, de természetesen nem akar működni.
"AVR device not responding initialization failed, rc=-1 Double check connections and try again, or use -F to override this check." ez a hibaüzenet A programozót átnéztem, az AVR-en is ott az 5V, nem találtam hibát. Feltettem az AVR Studiot, abban meg nincs STK200. Amúgy a kontrollerre csak a tápfesz megy, meg a programozó kimenetei, úgy tudom alapbeállításon a belső RC oszcillátort használja. Van ötlete valakinek?
Tegyél rá kristályt hátha elindul. Esetleg próbáld meg PonyProg alól hátha azzal beindul. a PonyProg-nál figyelj a fuse bitek beállításában. Programoztad már valamikor ezt a vezérlőt vagy most fogod először?
Kipróbáltam a kvarccal, a ponyproggal, aztán a biosban állítottam az lpt porton, továbbra sem működik. Még nem volt programozva, pár napja vettem, most akartam kipróbálni. Nem jön létre kapcsolat valami miatt. A kábel hossza 20cm alatt van, szóval nincs több ötletem.
Melyik kapcsolást használtad? Biztosan nincsen zárlat a panelodon?
Ez a kapcsolás, több helyről ellenőriztem, elvileg jónak kéne lennie. Közben kimértem multiméterrel, nincs gond vele. Amúgy 220 ohm-os ellenállásokat használtam, dehát annak nincs jelentősége. Bár egy külföldi fórumon, ha jól értettem, valaki a MISO ellenállást kivette, és azóta működik neki, de elég nehezen hihető, hogy az bezavarna. Egy próbát esetleg megér.
Üdv mindenkinek!
Most ismerkedek az AVR ek világával, eddig PICeket programoztam. A hardver: Atmega16 (44 lábú smd) melynek PD2 (11. láb) van egy led. A kvarc 16MHz es. Bascomba írtam egy led villogtató progit de nem akar elindulni . Szeretnék kérni egy lefordititt, avr be égethető kódot (mindegy mivel készül) amivel ki tudom szűrni, hogy az avr a hibás vagy a forditó. A többi láb bemenet legyen mert a panelen vannak egyéb dolgok is. Előre is köszönöm.
Próbáltam állítgatni a progit, égetőt de semmi hatás, a kód rendbe belekerül, visszaolvasva, ellenőrizve.
Még mindig nem tudom mi a gond, a progi vagy az avr
Üdv!
Van egy bosszantó problémám. Vettem magamnak egy ATmega8L-8PU AVR-t tanulás céljából. Kíváncsiságból felírtam rá a "Nyolc lábbal AVR" cikkből a villogót és a csipogót. Ezek működtek is. Utána felírtam rá az "Egyszerű dallamcsengő" cikkben lévő programot. Mikor kipróbáltam, nem működött. Azóta, mikor kapcsolódni akarok az AVR-hez, azt írja, hogy "Entering programming mode.. FAILED!", pedig jól van az AVR bekötve, és nem zároltam az AVR-t, nem állítottam külső oszcillátorra sem (elvileg). Még a szignatúrát sem tudom kiolvasni. Mintha rá se lenne kötve a programozóra. STK500-as programozóm van. Hogy tudnám életre kelteni az MCU-t?
Ezt jól elnéztem... rosszul kötöttem be az SCK lábat.
Most már jó. |
Bejelentkezés
Hirdetés |