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
1. Sehogy.
2. Sehogy.
Úgy gondoltam, hogy amelyik előbb jön be, az előbb fut le...
Értem, de azt hiszem kaptál már rá választ.
Igen, valóban. Viszont felmerült egy másik kérdésem, a beérkezett IT-ok melyik regiszterben tárolódnak el (szeretném törölni, hogy a soron következő ne fusson le)?
Így elég érdekes érdemben beszélni róla. A perifériákhoz tartoznak bizonyos regiszterek, melyek mutatnak státuszokat, beállításokat,eseményeket. Külön van a timereknek, külső INT-nek stb.... Ott kell szét nézni. Pl. a Timernél úgy hívják TIFR regiszter.
Ez azt hiszem, kezdésnek ez elég segítség... Köszönöm!!!
Egy kettes szorzoval tobbet irtam veletlenul a nem kozepre igazitottra. Bocsi.
Hali!
Adott az alábbi kódrészlet aminek az lenne a feladata, hogy az analóg bemenetre van kötve 3 db potméter és ezeknek az értékeit olvasná be felváltva (illetve a rajtuk lévő feszültséget), ez szépen is működik, ha F11-el léptetem végig, de ha hagyom működni a procit, akkor nem oda teszi az értékeket, ahova előtte tette, elcsúszik az egész.Ezt miért csinálja? Próbáltam változtatni a Prescaler értékét is, de nem használt. 7,3Mhz-ről jár a vezérlő(ATMega16) Az ADC freerun üzemmódban van, tehát használom a megszakítást.A kódrészlet maga a megszakítás. A főprogram egyelőre csak a változókat jeleníti meg ledeken.
Hogy erted, hogy nem oda teszi az ertekeket? Mas memoriacimre kerul az eredmeny, vagy arra gondolsz, hogy nem ugyan azt olvassa be, mint az elozo korben?
Sziasztok!
Egy RTC-s készüléket tervezek Atmega8L-el, 2x16 LCD-vel. Ebben lesz egy "backup" 3V-os CR2032 elem az órának. Fontos lenne, hogy a tápfeszültség 3V-ra esésekor a proci reseteljen mert az LCD modul a program elején inicializálódik. Sajnos jelen esetben éppen pont gond, hogy az Atmega 8L megy akár 2.7V-ról is mert az LCD modulnak kell az 5V-os táp így az sajnos leáll, a proci azonban vígan fut tovább elemről mintha minden rendben volna. Az LCD pedig inicializálatlan lesz az áramkimaradás után. Milyen megoldást javasoltok amivel resetelni lehetne az AVR-t is? Én egy komparátoros áramkörön gondolkodtam de ezt ha lehet mellőzném az egyébként is igen zsúfolt, méretkorlátok közé szorított PCB miatt. Tisztán szoftveres megoldás pedig nemigen jöhet szóba szerintem. Használhatnék LR44-es gombelemet ami megoldaná a problémát is de ahhoz meg nem nagyon találok foglalatot. Köszi szépen!
"ATmega8 has an On-chip Brown-out Detection (BOD) circuit for monitoring the VCC
level during operation by comparing it to a fixed trigger level. The trigger level for the BOD can be selected by the fuse BODLEVEL to be 2.7V (BODLEVEL unprogrammed), or 4.0V (BODLEVEL programmed)"
Pofon egyszeru. Az atmega8 ban van belso fesz referencia ami kb 1.3v korul van. Ezt ra lehet kotni az adc meres bemenetere, mikozben a kulso referencia az avcc vagy az aref labon a tapfesz. Egy kis matekkal mindig ki tudod szamolni az aktualiy tapfeszt.
Köszi szépen! Mégiscsak van szoftveres megoldás.
Rémlik, hogy olvastam már a BOD level-ről de még régebben és nem gondoltam hogy, erre való.
Erre gondoltam de a tervezendő cucc jellegéből adódóan most nem igazán jöhet szóba.
Szívesen!
A kódrészletben nem látom, hogyan van inicializálva a cucc. (Hány bites, left/right justified?) Mert ettől függően adott esetben az adl olvasása nem mellőzhető.
ADLAR=1, tehát elég a felső 8 bitet(ADCH-t) olvasnom, ezzel nincs gond.
Reggie: Ha F11-el létpetem, akkor T_h (mux=0) részben T1-be teszi az eredményt, T_l (mux=1)részben T2-be, L_t-ben (mux=2)L-be képződik az eredmény, ahogy a nagykönyvben meg van írva. Viszont, ha freerun módba kapcsolom a DAC-ot, akkor T1-ben fogom megtalálni a T2-köz tartozó értéket, és így tovább, mindegyik el lesz csúszva, nem a hozzá tartozó változó fogja tárolni a beolvasott értéket.
Nem sikerült sajnos módosítanom az előzőt. Szóval freerun-nal van a gondom, ott csúszik el, jelen esetben a főprogramból indítom a konvertálást, ami megfelelő eredményt hoz, minden érték a helyén van, de freerun-ban persze nem Üdv Kiborg
Sziasztok !
Megépítettem a Topi féle segéd órajel generátort a honlapról. Amikor reteszem a AVR-re akkor meghajtja szépen, bár lassabban. De nem tudom visszaállítani a belső órajelre az AVR Studio-ból, azt reklamálja hogy hogy nem tudott belépni programozó módba. Pedig az AVR működik a segéd órajel generátorral....mit hibázok ? Köszi a segítő hozzászólásokat.
Sikerult a reset disable fuset is atbutykolni. Vagy probald meg a programozod sck orajelet csokkenteni, mivel altalaban a cel avr orajelenek max 1/4 e lehet.
Minden bizonnyal azert van ez, mert a konverzio elobb elindul, minthogy te modositod az admux erteket es addigra mintat vesz a csatornabol. Szerintem ne hasznald a freerun uzemmodot, hanem az admux allitasa utan inditsd a konverziot.
"In Free Running mode, always select the channel before starting the first conversion. The channel selection may be changed one ADC clock cycle after writing one to ADSC. However, the simplest method is to wait for the first conversion to complete, and then change the channel selection. Since the next conversion has already started automatically, the next result will reflect the previous channel selection. Subsequent conversions will reflect the new channel selection."
Az ISP frekvencia jócskán kevesebb mint 1/4*FCPU.
Mostmár eljutottam odáig hogy be tud lépni programozó módba, és amikor beadnám neki a belső oszcillátor beállítását akkor úgy tűnik hogy felprogramozza, de azt írja hogy a visszaellenőrzés sikertelen. Ja, azt elfelejtettem hogy mindez HVSP módban van, ISP-nél reklamálja a szokásos ISP frekvencia ellenőrzését. Nincs ötletem...
Nincsen valami még rákötve a programozó lábakra? Bármilyen SPI-s periféria például? Tudom triviális, de hátha...
Ha jól értem, akkor a megszakításom végén az utolsó parancsom az az legyen, hogy indítsa el a konverziót, és utána reti.
Ez is megoldás, de a freerun nekem elegánsabbnak tűnt. Ez van, azért köszönöm a segítséget.
A freerun alapvetoen egy csatornara valo, de ha szeretned akkor hasznalhatod, csak ezt a fix 1-el valo elcsuszast bele kell szamolnod.
Sziasztok!Nagyon kezdő vagyok a mikrokontrollerekkel kapcsolatban, ezért segítségre lenne szükségem. Azt a feladatot,hogy egy ATmega128 -at felhasználva tervezzek egy tempomatot. Programoznom nem kell, csak a kapcsolást megcsinálni.
Nézegettem,hogy mire is lenne szükségem: 3db mikrokapcsoló, 1db féklámpa kapcsoló bekötésre. 1db Hall szenzor, 1db működést visszajelző LED, 1db szervo motor és 1db poti (ez lenne a gázpedál). Meg gondolom be kellene kötni egy kristályt, az avr tápellátást és a programozó lábakat. Valaki tudna abban segíteni, hogy mit hova kötögessek? Léci, fontos lenne. Előre is köszönöm! |
Bejelentkezés
Hirdetés |