Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   349 / 837
(#) zombee válasza gabi20 hozzászólására (») Aug 12, 2011 /
 
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!
(#) yoman917 válasza TavIR-AVR hozzászólására (») Aug 12, 2011 /
 
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
(#) snapscan válasza yoman917 hozzászólására (») Aug 12, 2011 /
 
Esetleg egy linket tudnál dobni rá?
(#) yoman917 válasza snapscan hozzászólására (») Aug 13, 2011 /
 
(#) yoman917 hozzászólása Aug 13, 2011 /
 
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
(#) TavIR-AVR válasza yoman917 hozzászólására (») Aug 13, 2011 /
 
Ha a Bascom-AVR elég:
Megszakítások
(#) yoman917 válasza TavIR-AVR hozzászólására (») Aug 13, 2011 /
 
Csak C-ben tudok programozni
(#) zombee válasza yoman917 hozzászólására (») Aug 13, 2011 /
 
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:
  1. ISR(TIMER1_OVF_vect)
  2. {
  3.                 TCCR1B &= 0b10111000;   //számláló leállítás, újraindítás után lefutó élre reagál!
  4.                 ICR1    = 0;                    //Input Capture Regiszter nulláz!
  5.                 SFIOR  |= 0b00000001;   //Timer0+Timer1 hardver előosztó nulláz - így pontosabb a mérés!
  6. }


Interruptok használatához még be kell tölteni a megfelelő AVR GCC könyvtárat:
  1. #include<avr/interrupt.h>


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:
  1. volatile word LISTA[256];               //puffer. itt tárolódnak az időzítő értékek
  2. volatile byte samples    = 0;   //a tárolt minták száma


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
(#) voodoo válasza TavIR-AVR hozzászólására (») Aug 13, 2011 /
 
Autóelektronikára is lehetne használni ezeket a paneleket?
(#) yoman917 válasza zombee hozzászólására (») Aug 13, 2011 /
 
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?
(#) zombee válasza yoman917 hozzászólására (») Aug 13, 2011 /
 
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...
(#) zombee válasza yoman917 hozzászólására (») Aug 13, 2011 /
 
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.
(#) yoman917 válasza zombee hozzászólására (») Aug 13, 2011 /
 
É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?)
(#) zsozsoX hozzászólása Aug 13, 2011 /
 
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
(#) zombee válasza zsozsoX hozzászólására (») Aug 14, 2011 /
 
Nézd meg melyik COM porton van. AVR Studio-ban keresd: "Number of COM-ports to try"; ezt növeld meg.
(#) sikolymester válasza zombee hozzászólására (») Aug 14, 2011 /
 
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.
(#) zombee válasza sikolymester hozzászólására (») Aug 14, 2011 /
 
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.
(#) edison14 hozzászólása Aug 14, 2011 /
 
Helló. Van egy kis problémám gtk lcd driverével. A probléma az, hogy 4 adatok kell kiíratnom az lcd-re:
  1. lcd_putstr(AU,0x04);            //értékek kiiratása
  2. lcd_putstr(AI,0x14);            //értékek kiiratása
  3. lcd_putstr(BU,0x44);    //értékek kiiratása
  4. lcd_putstr(BI,0x54);            //értékek kiiratása

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?
(#) Ricsi89 válasza edison14 hozzászólására (») Aug 14, 2011 /
 
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.
(#) edison14 válasza Ricsi89 hozzászólására (») Aug 14, 2011 /
 
ÓÓÓ. Tényleg. Köszönöm. Mindig tanul valamit az ember.
(#) xenon hozzászólása Aug 14, 2011 /
 
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?
(#) edison14 válasza xenon hozzászólására (») Aug 14, 2011 /
 
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?
(#) xenon válasza edison14 hozzászólására (») Aug 14, 2011 /
 
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.
(#) edison14 válasza xenon hozzászólására (») Aug 14, 2011 /
 
Melyik kapcsolást használtad? Biztosan nincsen zárlat a panelodon?
(#) xenon válasza edison14 hozzászólására (») Aug 14, 2011 /
 
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.
(#) Thowra hozzászólása Aug 14, 2011 /
 
Ü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.
(#) Thowra válasza Thowra hozzászólására (») Aug 14, 2011 /
 
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
(#) std66 hozzászólása Aug 15, 2011 /
 
Ü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?
(#) zsozsoX válasza zombee hozzászólására (») Aug 15, 2011 /
 
Nem segített, estleg valami más ötlet?
(#) std66 válasza std66 hozzászólására (») Aug 15, 2011 /
 
Ezt jól elnéztem... rosszul kötöttem be az SCK lábat.

Most már jó.
Következő: »»   349 / 837
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem