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   185 / 840
(#) Fizikus válasza barany_b hozzászólására (») Feb 9, 2010 /
 
Alternatív megoldás Mr. trudnai által javasolt opció helyett:
Atmega 16 adatlap megnyitása ( 83. oldal: 8bit Timer/Counter with PWM)
TCCR0 regiszter bitjeinek megkeresése:
Bit: 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0
Név: FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00

A fenti példában TCCR0=0x6D
0x6D=0b01101101 ez az alábbiakat jelenti:

FOC0 értéke 0

WGM01 - WGM00
1 1 : FAST PWM

COM01 - COM00
1 0 : nem invertált PWM

CS02 - CS01 - CS00
1 0 1 : clk / 1024 (előosztó = 1024, szerintem ez egy kicsit sok lesz a szervóhoz)

TCNT0 : ne piszkáld, jó a kezdeti 0x00 érték

OCR0 = 100 evvel a regiszterrel lehet a jel kitöltési tényezőjét megadni (szervónál úgy kell beállítani, hogy 1-2ms között kell legyen az impulzus hossza, ezért az értéke kb. 16-31 között lehet)

Nem tudom milyen sebesseggel megy az AVR-ed, de az előosztót úgy kell kiválasztani, hogy kb. 50 Hz-es PWM jelet kapjál.
A képlet: Fast PWM frekv. = órajel/(256*előosztó)
A PWM jel az OC0 lábon jelenik meg, feltéve ha előtte kimenetnek lett megadva a DDRC regiszterben.
(#) Szobiati hozzászólása Feb 9, 2010 /
 
Sziaztok!
Az szeretném kérdezni, hogy infrás RC-5-ös szabványt használó Philips távirányító jelének fogadásához az USART megfelőlen beállítva elég, vagy itt nem alkalmazható? Azért kérdezem, mert ugye az RC-5 címet is küld a parancs előtt, és ha jól értelmezem a dokumentációját az ATMega88-nak ennyi bitet nem tud fogadni az USART. Ha ezt így van akkor mit lehet használni a kód dekódolásához? Interrupttal várjak jelre majd ciklusból kérdezgessem a megfelelő láb állapotát?

A szabvány igen tömör leírását innen puskáztam.

Köszönöm a segítséget,
Attila
(#) Reggie válasza Szobiati hozzászólására (») Feb 10, 2010 /
 
Nem alkalmazhato. En a helyedben azt csinalnam, hogy INT0-ra kotnem a jelet, beallitanam, hogy le- es felfuto elre generaljon interruptot, majd az interruptok kozott eltelt idot mernem es ezekbol az idokbol dekodolnam a jelsorozatot.

De szerencsedre az Atmel ezt mar megoldotta es publikalta a 410-es AppNote-ban: AVR410
(#) TavIR-AVR válasza Szobiati hozzászólására (») Feb 10, 2010 /
 
rc5: nem sorosporti/usart alapon megy...

jelsorozat, időzítésekkel....
(#) Szobiati hozzászólása Feb 10, 2010 /
 
Köszönöm szépen a válaszokat, így már menni fog.
(#) ixel hozzászólása Feb 10, 2010 /
 
Sziasztok!
Egy új csalamádé kérdés:
Így megírva miért nem villognak a LED-ek? Úgy néz ki mintha nem működne az IF ELSE:
  1. #include <util/delay.h>
  2. #include <avr/io.h>
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9. // LED-ek vezerlese
  10. #define LED1_ON              PORTB |=  (1<<PINB3)
  11. #define LED1_OFF             PORTB &= ~(1<<PINB3)
  12. #define LED2_ON              PORTB |=  (1<<PINB4)
  13. #define LED2_OFF             PORTB &= ~(1<<PINB4)
  14.  
  15.  
  16.  
  17.  
  18. int main( void)
  19. {
  20.    DDRB = (1<<PINB3)|(1<<PINB4);
  21.    
  22.  
  23.    while( 1)                                                // maga a program hurok
  24.    {
  25.      
  26.          if (LED1_ON) LED1_OFF;
  27.          else (LED1_ON);
  28. _delay_ms( 100);
  29.             if (LED2_ON) LED2_OFF;
  30.          else (LED2_ON);
  31.            _delay_ms( 100);
  32.  
  33.      
  34.      
  35.  
  36.      
  37.    }
  38.    return 0;
  39. }
(#) janyjozsef válasza ixel hozzászólására (») Feb 10, 2010 /
 
Szia.

Próbáld meg így.
  1. if (LED1_ON > 0)
  2.  
  3. vagy
  4.  
  5. if (LED1_ON != 0)

Nekem csak így működnek, de mások állítják, hogy nekik megy úgy is ahogy te csináltad.
(#) Topi válasza janyjozsef hozzászólására (») Feb 10, 2010 /
 
Itt teljesen más a gond. Kirí a probléma, ne vezesd félre megint kérlek.

A LED1_ON egy makró. Azt IF-be tenni értelmetlen, mert mivel értékadás és módosítás, ezért mindig igaz lesz az értéke.

LED1_ON-t helyettesítsd be gondolatban a makróval. És akkor meglátod magad is a gondot.
Ha IF-be akarod tenni a feltételt, akkor ne magát a makrót tedd, hanem pl:
  1. (PORTB & (1<<PINB3))


  1. Ez logikai kifejezés: (PORTB & (1<<PINB3))
  2. Ez utasítás: LED1_ON / vagy PORTB |=  (1<<PINB3)


Javaslat. Ha utasítást makrózol ixel, akkor mindig használj zárójelet. Tehát: LED1_ON()...
Sok ezer kódsor felett, majd jó lesz tudni már, mi feltétel, mi utasítás.
Ha hozzászoksz már 10 soros programnál is, akkor csak előnyöd származik belőle.
(#) ixel válasza Topi hozzászólására (») Feb 10, 2010 /
 
Köszi Topi!

Megértettem és így működik:
  1. if (PORTB & (1<<PINB3))  LED1_OFF();
  2.          else LED1_ON();
  3.             if (PORTB & (1<<PINB4))  LED2_OFF();
  4.          else LED2_ON();
  5.           m_delay_10ms(10); //100*10ms = 1s


-- Használd légyszíves a "Kód beszúrást"
Köszi, Topi
(#) janyjozsef hozzászólása Feb 10, 2010 /
 

Bocsi.

Nem néztem meg rendesen, a #define mit is tartalmaz.

PORTB-be írt.

Nem szólok többet. :peace:
(#) ATtiny hozzászólása Feb 10, 2010 /
 
A következő cikkemet kezdem lassan tervezgetni, de ezzel kapcsolatban lenne 1 kérdésem. Alapvetően most 2 téma van, amivel kapcsolatban lenne kedvem írni. Az első téma egy microstepp -es léptetőmotor vezérlés AT90PWM3 -as kontrollerrel. A másik téma VGA jel előállítása AVR mikrokontrollerrel. Gyakorlatilag egy karaktergenerátor építéséről van szó. A kérdés pedig, hogy melyikre lenne nagyobb érdeklődés. Mivel a szabadidőm igencsak limitált, így teljesen reménytelen, hogy mind a kettőröl összehozzak egy - egy cikket.
(#) levy_k válasza ATtiny hozzászólására (») Feb 10, 2010 /
 
1 szavazat a VGA mellett.
(#) gtk válasza ATtiny hozzászólására (») Feb 10, 2010 /
 
Kerdes, hogy egy erosen korlatozott VGA-t (--mert gondolom hogy az--) mire lehet hasznalni egyaltalan.
(#) ATtiny válasza gtk hozzászólására (») Feb 10, 2010 /
 
Nyilván ha valaki VGA kártyát akar építeni, akkor FPGA-ban áll neki megtervezni. De a VGA jel előállításának elvét be lehet mutatni egy AVR 8bites mikrokontrolleren is.
(#) (Felhasználó 4577) válasza ATtiny hozzászólására (») Feb 10, 2010 /
 
Én a stepper motor vezérlésre voksolok, ez most nálam épp aktuális.
Szerintem viszont jobb volna egy közismertebb processzorral tervezni, ha ez lehetséges.
(#) ATtiny válasza (Felhasználó 4577) hozzászólására (») Feb 10, 2010 /
 
Az AT90PWM3 -as kimondottan motorvezérlési feladatkra van kifejlesztve. Ezért gondoltam, hogy ezzel kéne megvalósítani a microsteppes vezérlőt. Amúgy valóban nem túl ismert tipus idehaza. Pedig nagyon komoly tudása van. 3db teljesen független max.64Mhz-es alap órajelű 12bites PWM -es lehetőséget biztosító PSC periféria. A sima mezei AVR kontrollerrel is meg lehet valósítani microsteppes vezérlést, de ott már kompromisszumok vannak.
(#) Sir-Nyeteg válasza ATtiny hozzászólására (») Feb 10, 2010 /
 
Motor!
Ha már megvan az encóder cikk, akkor már maradhatnánk ennél a témakörnél. Vagy akár egy fordulatszám szabályozás DC motorra encóderből, vagy hasonló jó dolgok
(#) tibi0531 válasza ATtiny hozzászólására (») Feb 10, 2010 /
 
Én annó csináltam ilyen mikrosteppes vezérlést (ATmega8, Bascom) de nem lett az igazi, a mikrosteppek nem voltak egyenletesek.
Akkoriban utánaolvastam, és kiderült, hogy a kommersz léptetőmotorok általában nem alkalmasak ilyen célra.

Bár elképzelhető, hogy ilyen PLL-es mikrokontrollerrel sikerül találnod olyan frekvenciát, amelyen egész jól működik az általad használt motor.
(#) poznamokus hozzászólása Feb 11, 2010 /
 
Sziasztok!

AVRDragpm programozóval van valakinek tapasztalata? Gyártó oldala szerint ISP-n keresztül tud AT90USB-t is programozni (sajnos ehhez nem jó a pony, mert nem ismeri), ha tényleg tudná, vennék egyet.
(#) boomerang hozzászólása Feb 12, 2010 /
 
Sziasztok !

Nagyon-nagyon kezdő vagyok az AVR-ben , de tetszik és érdekel a téma.
Lenne egy pár kérdésem :

Amikor elkészült a forráskód (C-ben például) akkor azt lefordítva .hex fájl keletkezik? Ebből kiindulva bármilyen nyelven írjuk meg a forráskódot a fordítás után .hex fájl jön létre ? A mikrokontrollerre csak ez tölthető fel ?
Illetve arra is szeretnék választ kapni, hogy mi is az a makefile és miért van rá szükség.


Előre is köszönöm a választ.

Szegedi Balázs
(#) Topi válasza poznamokus hozzászólására (») Feb 12, 2010 /
 
AVR Dragon-t csak dícsérni tudom. Csak ahogy megérkezik a programozód, dobozold be.
Tud programozni AT90USB-t természetesen.
Van HVPP, HVSP, ISP, JTAG, DebugWire.
Tud programozni 1.8V-ról járó processzort is.

No.1.
(#) gtk válasza boomerang hozzászólására (») Feb 12, 2010 /
 
Neten mindezekre megkapod a valaszt a megfelelo kulcsszavakkal, mint: 8 bites architekturak, mikrovezerlo, AVR, c fordito (compiler), avr-gcc, makefile, intel hex formatum. (a Makefilenak tobb koze van a C-hez es a Linuxhoz mint barmihez.)
(#) (Felhasználó 4577) válasza boomerang hozzászólására (») Feb 12, 2010 /
 
Idézet:
„Amikor elkészült a forráskód (C-ben például) akkor azt lefordítva .hex fájl keletkezik?”

Igen.

Idézet:
„Ebből kiindulva bármilyen nyelven írjuk meg a forráskódot a fordítás után .hex fájl jön létre?”

Igen.

Idézet:
„A mikrokontrollerre csak ez tölthető fel?”

Igen.

Idézet:
„Illetve arra is szeretnék választ kapni, hogy mi is az a makefile és miért van rá szükség.”

A makefile-ban tárolódik például a processzor típusa. A fordításhoz szükséges.
(#) gabi20 hozzászólása Feb 12, 2010 /
 
Sziasztok
Most kezdek az AVR processzorokkal foglalkozni .
Letöltöttem a Bascom programot ,úgy gondoltam hogy ez nekem megfelel .Az AVR programozása LPT porton keresztül történik. ATtiny45 - ös processzor lenne az első alany. Mit szóltok hozzá? Megfelel ez egy kezdőnek?
(#) (Felhasználó 4577) válasza gabi20 hozzászólására (») Feb 12, 2010 /
 
Megfelel.
Itt az oldalon találsz pár cikket, amiből tanulhatsz, de bennük minden programot C nyelven írtak.
(#) trudnai válasza gabi20 hozzászólására (») Feb 12, 2010 /
 
Szerintem igen, eloszor ugyis kicsi apro feladatokkal erdemes kezdeni, bar viszonylag osszetettebb feladatokat is meg tudsz egy Tiny45-el csinalni (pl. kapcsolo uzemmodu tap vezerlese).

De ha nem akarsz sokat kolteni, akkor erdemes olyat nezni aminek tobb laba van, igy a kesobbiek folyaman ugyanazzal a chippel tudsz olyan dolgokkal is foglalkozni amelyek mar tobb labat igenyelnek.

Javaslom, hogy mielott neki allnal felprogramozni a chip-et, olvasgasd el figyelmesen a "kizartam magam", "eddig tudtam programozni, most mar nem" es hasonlo kereso kulccsal megtalalt oldalakat, forum bejegyzeseket.

Amugy: Ezek nem processzorok, hanem mikrokontrollerek. Ezekben van processzor is, meg sok mas egyeb is, amik egyuttesen alkotjak a kontrollert.
(#) gabi20 hozzászólása Feb 12, 2010 /
 
Köszönöm a válaszokat ,remélem eljutok a LED - es villogóhoz...
(#) gtk válasza gabi20 hozzászólására (») Feb 12, 2010 /
 
Szerintem minimum ATMega 8 -al kezdj. Az sok mindenre jo lesz, mint pl. LCD kezeles, meg egyebek is a kesobbiekben.
(#) gabi20 hozzászólása Feb 12, 2010 /
 
Még egy kérdésem lenne :
Van itthon egy AT90S2313 jelű AVR mikrovezérlőm. A BASCOM AVR programban ez nincs benne, de benne van az ATtiny2313 . A kettő mikrovezérlő egy és ugyanaz?
(#) (Felhasználó 4577) válasza gabi20 hozzászólására (») Feb 12, 2010 /
 
Igen, kompatibilisek.
Következő: »»   185 / 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