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   438 / 840
(#) zombee válasza adamtui_93 hozzászólására (») Ápr 13, 2012 /
 
Sajnos nem WinAVR-re lett kitalálva. Elvileg ezt csak az AVR Toolchain telepítésével tudod lefordítani...
(#) luxmanpower válasza blackdog hozzászólására (») Ápr 13, 2012 /
 
Hiszterézis, pár fokkal alacsonyabb hőmérsékleten kapcsoljon ki mint be...
(#) blackdog válasza luxmanpower hozzászólására (») Ápr 14, 2012 /
 
Van beállítva hiszterézis nem ez a kérdésem, hanem 5 perc késleltetés anéllkül, hogy a főprogram leállna.
(#) TavIR-AVR válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Timer indít bekapcsoláskor és egy jelzőbit bebillent. Timer tulcsordul: jelzobit kibillent.

a relevaltozas: if jelzobit=engedelyezett es ... akkor ...
(#) blackdog válasza TavIR-AVR hozzászólására (») Ápr 14, 2012 /
 
Megpróbálok jobban utánaolvasni a timernek. Eddig is itt kerestem a megoldást csak még nem látom át. Időm meg fogyóban
(#) dB_Thunder válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Annyira nem vészesek ezek a timmerek.
Az a kérdés hogy hány bites, mekkora előosztást tud, illetve milyen órajellel jár a kontroller, ebből lehet kalkulálni mekkorát tud alapban időzíteni. Ha ez sem elég hosszú idő, akkor jöhet egy globális változó amit a timmer léptet, azzal kitolható tovább.
Nézz be az AVR mintaprogramok-ba
ott találsz rá példát !
(#) blackdog válasza dB_Thunder hozzászólására (») Ápr 14, 2012 /
 
Szia!

Igen, köszönöm. Közben rájöttem. Most próbálom felfogni, hogy mit csináltam mert most működik csak vagyok vele teljesen tisztába. Néha elrontom.
(#) blackdog válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Nos egyenlőre így tudtam megoldani:
  1. #define F_CPU 16000000UL
  2.  
  3. #include <avr/interrupt.h>
  4.  
  5. volatile int RLYena = 1;
  6. volatile int RLYcount = 0;
  7.  
  8. ....
  9.  
  10. void kesleltetes()
  11.  
  12. {
  13.     RLYena = 0;
  14.     TIFR0  |= (1<<TOV0);  // Tulcsordulas jelzobit torlese
  15.     TCCR0B |= (1<<CS12) | (0<<CS11) | (1<<CS00); // Elooszto 1024
  16.     TIMSK0 |= (1<<TOIE0) ;  //Engedem owerflow interrupt
  17.    
  18. }
  19.  
  20. ISR(TIMER0_OVF_vect)  
  21. {
  22. RLYcount++;
  23. if (RLYcount==100) {
  24. RLYena   = 1;      // Rele ujra mehet
  25. TCCR0B   = 0;       // Timer stop
  26. TIFR0   |= (1<<TOV0); // Tulcsordulas jelzobit torlese
  27. TIMSK0   = 0 ;        // Tiltom owerflow interrupt
  28. RLYcount = 0;
  29. }
  30. }
  31.  
  32. int main(void)
  33. {
  34. ....
  35.     TCCR0B = 0;  // Stop Timer
  36.     TIFR0 |= (1<<TOV0);  // tulcsordulásjelzo torlese
  37.     TCNT0 = 254;
  38.  
  39.   sei();
  40.  
  41. ...
  42. for (;;) {  
  43. ...
  44. if( (NTCin > 590) && !(PINC & _BV(PC4)) && (RLYena == 1))
  45.  { PORTC |= (1 << PC4);  }
  46.  
  47. else if ((NTCin < 580) && (PINC & _BV(PC4))   )
  48.  {  
  49.  PORTC &=~ (1 << PC4);
  50.  kesleltetes();
  51.  }
  52. ...
  53.  
  54. }


Szerintetek van amit fölöslegesen állítok vagy kapcsolok. Én azt szeretném, hogy így működjön:
Ha NTC átlépi a beállított értéket és a relé engedélyezve van akkor behúz a relé.
Ha az NTC a beállított érték alá csökken akkor kikapcsolja a relét és elindítja az időzítőt ami nem engedi, hogy a relé mégegyszer behúzzon amíg a késleltetés le nem tellik függetlenül az NTC értékétől.
Ha letelt az időzítés és, ha kell akkor már visszakapcsolhat a relé.
(#) blackdog válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Közben rájöttem, hogy ATMEGA168 esetén a TCCR0B az a 8bit számláló így átírtam az egészet TCCR1B-re. Ez elvileg a 16bit számláló.
Az #define F_CPU 16000000UL módosítottam #define F_CPU 8000000UL -ra.
Elkezdtem számolgatni a túlcsordulások közötti időt és elbizonytalanodtam...
Most vagy rossz timer-t használok és/vagy rosszul, de minden számítás és mérés azt az eredményt hozza, hogy 1MHz -en ketyeg az AVR.
Hogyan tudom leellenőrizni a valós frekit? Miért nem 8MHz-en megy?
Számításban segéd: Bővebben: Link
(#) zolee1209 válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Fuse biteknél beállítottad a megfelelő órajelet? Alapból 1MHz-en ketyeg az AVR...
(#) blackdog válasza zolee1209 hozzászólására (») Ápr 14, 2012 /
 
SUT_CKSEL: Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms

AVRStudio4. Fordításkor:
avr-gcc -mmcu=atmega168 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT daikin_lcd.o -MF dep/daikin_lcd.o.d -c ../daikin_lcd.c
(#) dB_Thunder válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Az avr valós órajelét csak a fuse bitek (Belső RC vagy kvarc) határozzák meg, hogy a programba te mit definiálsz az csak a fordítónak szól.
A másik kérdés milyen előosztást állítottál be a timernek ?
(#) blackdog válasza dB_Thunder hozzászólására (») Ápr 14, 2012 /
 
Előosztásnak kipróbáltam mindent, 8-64-256-1024.
LCD-n figyeltem a változások és a korábban linkelt oldal segítségével számoltam. Mindig 1 MHz-re jött ki a számított és mért órajel. AVRStudio4-ben állíthaton amit akarok. Tettem rá 16MHz kristályt és 22pF kondit akkor sem javult a helyzet.
(#) blackdog válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Annyit még hozzátennék, hogy tudomásom szerint az ATMEGA168 belső órajele 8MHz.
(#) TavIR-AVR válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Belső 8 MHz RC és a DivClk8 be van kapcsolva. Így lesz a névleges 1 MHz....
(#) blackdog válasza TavIR-AVR hozzászólására (») Ápr 14, 2012 /
 
Akkor valaki végre segítsen és modja el, hogy hogyan lesz ebből 16 MHz? Ráteszem a 16 MHz kristályt 2db 22pF kondi.
F_CPU -t átállítom. AVRStudio4-ben Project->Configuration átállítom 16 MHz-re.
Viszont programozáskor SUT_CKSEL nincs olyan lehetőség, hogy 16MHz külső. Akkor mi a teendő?
(#) blackdog válasza TavIR-AVR hozzászólására (») Ápr 14, 2012 /
 
Hurrá...
CKDIV8 kivettem... Újra programoztam... Azóta halott az egész. Nem tudom programozni az AVR-t.
Azt vettem észre, hogy SPIEN nincs azóta "kipipálva". Persze nem is tudom.
Most akkor fújhatom az IC-m?
(#) dB_Thunder válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Jólenne kicsit több infó..
Azért van pár trükk az eltolt ic-k működésre bírására, tehát semmiképp sem kuka !
(#) Ricsi89 válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
Mivel ki sem tudod olvasni a kontrollerből a fuse biteket, így hogyan lehetne kipipálva? Nem lehet, hogy külső kvarcra lett állítva és nincs rajta kvarc?
(#) TavIR-AVR válasza blackdog hozzászólására (») Ápr 14, 2012 /
 
External Quartz/Resonator, >8MHz.
A késleltetés bekapcsoláskor most mindegy.
CKOPT (ha van) bekapcsol (Nem a ClkOut!)
DivClk8: Kikapcsol.


Nem az external Clock-ot választottad ki? Az külső _négyszögjel_!
(#) blackdog hozzászólása Ápr 15, 2012 /
 
Nos a beállítások:
SUT_CKSEL: Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 0 ms
BOOTSZ: Boot Flash size=1024 words start address=$1C00
Semmi más nincs bejelölve.
ISP frekvencia: 460,8 kHz (végig probáltam mindent nem meg)
Külső kvarc 16MHz+2db 22pF kondi.
Tanácstalan vagyok.
(#) TavIR-AVR válasza blackdog hozzászólására (») Ápr 15, 2012 /
 
A 16 MHz kvarc az a 1.5 cm magas vagy a 5 mm-es?
A kvarc lábaival párhuzamosan köss be 1Mohm ellenállást (vagy valami jó nagyot).
A 22pFD kondi biztos ekkora? Nálam volt hjogy elcserélték a boltban (SMD) és 22 nF-osat raktam be. Persze azzal nem ment.

U.i.:
- Jó lábra van a kvarc bekötve?
- Reset lábon a felhúzó ellenállás >4k7?
- Vcc mellett a VccA illetve a GND/GNDA is be van kötve?
(#) blackdog válasza TavIR-AVR hozzászólására (») Ápr 15, 2012 /
 
Bővebben: Link
Múlt hétem jött meg.
10k a RESET felhúzó ellenállása. A többi is OK. Egész eddig működött. Mikor megpróbáltam külső kvarcot használni akkor halt el a dolog.

Ha újra a belső orajelet akarom használni az sem megy..
(#) blackdog válasza blackdog hozzászólására (») Ápr 15, 2012 /
 
Annyi még, hogy a MOSI lábon van egy visszajelző LED. Ez most nem csinál semmit.
Ha átteszem a MISO lábra ott nagyon halványan villog, ha megpróbálok olvasni vagy írni.
(#) blackdog válasza blackdog hozzászólására (») Ápr 15, 2012 /
 
Szerintem vagy kizártam magam vagy tönkre tettem.
Mindent visszaállítottam az eredeti felállásba. Fusebit beállítások: Low: 0x62 High: 0xDF Extend:0xF9
Eredetileg ezzel ment. Most semmi.
(#) zombee válasza blackdog hozzászólására (») Ápr 15, 2012 /
 
Lehetséges hogy a MOSI lábat túlterhelted és rossz FUSE biteket írt bele az AVR-be?
Szerintem a programozólábakat nem kéne LED-ekkel terhelni amíg nem vagy biztos benne,
hogy a programozód elbírja! Ez főként a MOSI és SCK lábakra igaz! Ellenállásos leválasztású programozók
hátrányban, de a MAX3002 kimenetűek sem jók ide: azon ~6kOhm a kimenő ellenállás.
Ez utóbbi nálam már a 10kOhm-os RESET felhúzó ellenállással is képes volt összeveszni!
Azért készítek még mindig Dopert is mert annak kimenete erősebb(35mA) mint egy AVR-nek(15-20mA)!
(#) blackdog válasza blackdog hozzászólására (») Ápr 15, 2012 /
 
Azt hiszem nincs több kérdésem miért halt el az AVR
Bővebben: Link
Délután megpróbálom ezzel visszahozni.
(#) dB_Thunder válasza blackdog hozzászólására (») Ápr 15, 2012 /
 
Sejtettem, hogy így jártál...
Én a Topi féle doper programozót használom, persze már másik firmware-rel, annál van clock kimenet. Azzal sikerült már visszahozni avr-t
(#) kiborg hozzászólása Ápr 15, 2012 /
 
Hali!
Szeretném a lehető legpontosabban használni egy Mega16-ban az ADC-t.
5V (7805) tápfeszről járatom, Külső referenciám van,(szintén 5V(78L05) rákötve az AREF lábra.
Ha jól értelmezem az adatlapot, akkor AVCC LC tagon menjen a VCC-re és önállóan a referenciát az AREF lábra és a REFS0 és REFS1 bitek 0-ba állítva.
Ha REFS1=0 és REFS0=1 akkor az AVCC-t használja refereniának? Az baj, ha ebben a beállításban nem csak a kondi van odakötve, hanem a AREF összekötve AVCC-vel ? (persze a kondi is ott van a föld felé).
A REFS1=1 és REFS0=1 beállítás világos.
Üdv Kiborg
(#) adamtui_93 hozzászólása Ápr 15, 2012 /
 
Sziasztok az ATmega32-őt szeretnék USB-n keresztül számítógéppel összekötni, működésre bírtam a CDC-232-őt de olyat szeretnék létrehozni hogyha pl kiküldöm azt hogy "helló" akkor bekapcsoljon 1 led-et. A segítség abban kéne hogy melyik változót kéne figyelnem illetve ha bejön valami a TX lábon akkor azt melyik változón keresztül kapja meg az usb.
Következő: »»   438 / 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