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   380 / 840
(#) sgt válasza sgt hozzászólására (») Nov 13, 2011 /
 
Valaki tud segíteni ebben?
(#) sikolymester válasza sgt hozzászólására (») Nov 13, 2011 /
 
1. Sehogy.
2. Sehogy.
(#) Gery válasza Reggie hozzászólására (») Nov 14, 2011 /
 
Értem, köszönöm.
(#) Krisszes válasza röntgen hozzászólására (») Nov 14, 2011 /
 
Úgy gondoltam, hogy amelyik előbb jön be, az előbb fut le...
(#) röntgen válasza Krisszes hozzászólására (») Nov 14, 2011 /
 
Értem, de azt hiszem kaptál már rá választ.
(#) Krisszes válasza röntgen hozzászólására (») Nov 14, 2011 /
 
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)?
(#) röntgen válasza Krisszes hozzászólására (») Nov 14, 2011 /
 
EZ a doksijában szépen le van írva.
(#) Krisszes válasza röntgen hozzászólására (») Nov 14, 2011 /
 
igen, csak most nem tudom elérn...
(#) röntgen válasza Krisszes hozzászólására (») Nov 14, 2011 /
 
Í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.
(#) Krisszes válasza röntgen hozzászólására (») Nov 14, 2011 /
 
Ez azt hiszem, kezdésnek ez elég segítség... Köszönöm!!!
(#) Reggie válasza Gery hozzászólására (») Nov 14, 2011 / 1
 
Egy kettes szorzoval tobbet irtam veletlenul a nem kozepre igazitottra. Bocsi.
(#) kiborg hozzászólása Nov 14, 2011 /
 
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.
  1. ADC_:
  2. in sitt,adch
  3. in temp,admux
  4. andi temp,0b00000011
  5. cpi temp,0
  6.  breq T_h
  7.  
  8. cpi temp,1
  9.  breq T_l
  10.  
  11. cpi temp,2
  12.  breq L_t
  13.  
  14. rjmp adc_end
  15.  
  16. T_h:
  17. mov t1,sitt
  18. in temp,admux
  19. andi temp,0b11100000
  20. ori temp,0b00000001
  21. out admux,temp
  22. rjmp adc_end
  23.  
  24. T_l:
  25. mov t2,sitt
  26. in temp,admux
  27. andi temp,0b11100000
  28. ori temp,0b00000010
  29. out admux,temp
  30. rjmp adc_end
  31.  
  32. L_t:
  33. mov L,sitt
  34. in temp,admux
  35. andi temp,0b11100000
  36. ori temp,0b00000000
  37. out admux,temp
  38. rjmp adc_end
  39.  
  40. adc_end:
  41. reti
(#) Reggie válasza kiborg hozzászólására (») Nov 14, 2011 /
 
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?
(#) Axel hozzászólása Nov 14, 2011 /
 
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!
(#) luxmanpower válasza Axel hozzászólására (») Nov 14, 2011 /
 
"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)"
(#) sikolymester válasza Axel hozzászólására (») Nov 14, 2011 /
 
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.
(#) Axel válasza luxmanpower hozzászólására (») Nov 14, 2011 /
 
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ó.
(#) Axel válasza sikolymester hozzászólására (») Nov 14, 2011 /
 
Erre gondoltam de a tervezendő cucc jellegéből adódóan most nem igazán jöhet szóba.
(#) luxmanpower válasza Axel hozzászólására (») Nov 14, 2011 /
 
Szívesen!
(#) UbiLinux válasza kiborg hozzászólására (») Nov 15, 2011 /
 
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ő.
(#) kiborg válasza UbiLinux hozzászólására (») Nov 15, 2011 /
 
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.
(#) kiborg válasza kiborg hozzászólására (») Nov 15, 2011 /
 
  1. ; ADC init
  2. ldi temp,0b01100000
  3. out admux,temp
  4.  
  5. in temp,sfior
  6. andi temp,0b00011111
  7. out sfior,temp
  8.  
  9. ldi temp,0b10001000
  10. out adcsra,temp


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
(#) boomerang hozzászólása Nov 15, 2011 /
 
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.
(#) sikolymester válasza boomerang hozzászólására (») Nov 15, 2011 /
 
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.
(#) Reggie válasza kiborg hozzászólására (») Nov 15, 2011 /
 
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."
(#) boomerang válasza sikolymester hozzászólására (») Nov 15, 2011 /
 
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...
(#) sikolymester válasza boomerang hozzászólására (») Nov 15, 2011 /
 
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...
(#) kiborg válasza Reggie hozzászólására (») Nov 15, 2011 /
 
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.
(#) Reggie válasza kiborg hozzászólására (») Nov 15, 2011 /
 
A freerun alapvetoen egy csatornara valo, de ha szeretned akkor hasznalhatod, csak ezt a fix 1-el valo elcsuszast bele kell szamolnod.
(#) csabi86 hozzászólása Nov 15, 2011 /
 
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!
Következő: »»   380 / 840
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