Fórum témák

» Több friss téma
Cikkek » WILL-I THE END (robotika és AVR kezdőknek)
WILL-I THE END (robotika és AVR kezdőknek)
Szerző: Fizikus, idő: Máj 17, 2010, Olvasva: 30591, Oldal olvasási idő: kb. 3 perc
Lapozás: OK   6 / 8

Elektronikai vegyes saláta

Ebben a részben sok apróbb dolog jön ömlesztve, ami a robot fejlesztése során felmerült.


WILLI-V3.0 kapcsolási rajz

Többen kérték, hogy közöljek teljes kapcsolási rajzot. Íme itt van WILL-I legutolsó verziójának a kapcsolási rajza:
 

Látható, hogy a nyomógombot, amit a robot indítására használtam, átraktam a PD2-es lábról a PD4-es lábra, mert a PD2 kellett az egyik karon lévő mikrokapcsolónak (csak a PD2-es és a PD3-as lábakon lehet külső megszakításokat használni).

  
  

Robotvezérlő panel V3.0
Az alabbi képen WILL-I látható harakiri elkövetése után. A két elektronikus panel (robotvezérlő + motorvezérlő) és az ezeket, plussz az érzékelőket és a szervót összekötő vezetékdzsungel elég szűkösen fér el a külső borítás alatt. A robotvezérlő panel a programozó kábellel nagyon nehézkesen hozzáférhető, jelentősen megnehezítve ezzel a fejlesztést. Ezért az elektronikát is átterveztem egy kicsit. Három apróbb változtatást eszközöltem a végleges verzión:

Az első változtatás: A robotvezérlő panelt, és a motorvezérlő panelt sikerült ugyanarra a próbanyákra rázsúfolni, ezzel a két panel összméretét jelentősen tovább tudtam csökkenteni. A képen látható, hogy a robotvezérlő és a motorvezérlő panelt összekötő vezetékdzsungeltől is sikerült megszabadulni.
 

Második változtatás: Ha csak az AVR-rel történő kísérletezésre/tanulásra akarjuk használni a panelt, akkor előfordulhat, hogy olyan feladatot akarunk megoldani, amely megoldásához pontos időzítés kell (pl. UART), és amihez a belső RC oszcillátor nem elég pontos. Ekkor szükség lehet egy külső kvarcra, ezért a kvarc működtetéséhez szükséges alkatrészeket is rátettem a panelre, mert később a kész nyákot már elég nehézkesen tudjuk csak módositani.

A PB6 és PB7 lábakra egy csatlakozót raktam és két 22pF-os kondenzátorral a GND-re kötöttem. Azért  raktam be egy csatlakozót és nem forrasztottam be fixen egy kristályt, mert előre nem tudhatjuk hogy milyen sebességű kvarckristály kellhet majd. A csatlakozó használatával cserélhetővé tettük a kristályt, különböző sebességűeket tudunk használni, mindig olyat amilyet a feladat megkíván. Ha pedig nem rakunk bele kristályt akkor pedig a belső oszcillátort is tudjuk használni.

A harmadik változtatás: A robotvezérlő panel korábbi verzióinál az AREF lábat összekötöttem az AVCC lábbal, de utánagondolva, ha egy univerzális tanulópanelt készítünk, akkor érdemesebb inkább egy 2 tüskéből álló érintkezőre kivezetni az AREF-et és AVCC-t, mert ha egy jumpert rakunk rá akkor az ADC referencia feszültsége 5V lesz, ha pedig egy másik (5V-nál kisebb) feszültséget akarunk referenciának, akkor pedig egyszerűen levesszük a jumpert és rákötjuk az új referencia feszültséget az AREF-re.

Motorvezérlés tesztelő
Az L293D-as motorvezérlő IC tesztelésére építettem egy két darab 2irányú LED-et tartalmazó kis panelt. Később ezt a motorvezérlő panel tesztelésére is használtam. Ha pedig a robotvezerlő panel motorokhoz menő kimeneteire kötjük rá, akkor a motorvezérlő kódot is tesztelhetjük.

Mért ADC érték kijelző

A fotoellenállás, a távoságérzékelő szenzor és az ADC mérő kód tesztelése során szükség volt arra, hogy  valamilyen módon megjelenítsem a mért értéket. A nálam profibbak valószínűleg egy LCD-re, vagy soros porton (UART) keresztül PC-re íratták volna ki a mérés eredményét. De Én még nem tudom hogyan kellene egy LCD kijelzőt vezérelni (még nincs is LCD-m), a soros kommunikáció rejtelmeibe sem merültem még el, ezért gyorsan összeraktam egy 8 LED-ből, és megfelelő áramkorlátozó ellenállásból álló panelt, amit az AVR D portjára kötve megjeleníthetem a 8 bites ADC eredményét.

A főprogramban kiadott Konfig8bitADC(); utasítással állíthatjuk be az ADC-t, hogy 8 bites, balra rendezett 125KHz-es módban működjön. Az ezután kiadott adc = Beolvas8bitADC(5); utasítás a PC5-ös lábon lévő bemeneti feszültségjelet alakítja át egy 0-255 közötti 8 bites digitális számmá, és ezt az értéket az adc nevű változóba írja. Majd PORTD-nek az adc inverzét adjuk értéknek (ne feledjük, hogy a LED úgy lett bekötve, hogy akkor van bekapcsolva, ha a hozzá tartozó lábon logikai alacsony érték (0V) van). A kijelző 1 másodpercenként mér újra és frissíti a kijelzőt.


  1. // ATMega 8
  2. // ADC peldaprogram
  3.  
  4. #include <util/delay.h>
  5. #include <avr/io.h>
  6.  
  7. volatile int adc=0;
  8.  
  9. void KonfigPORT()     // IO portok beallitasa
  10. {
  11.     DDRD = 0b11111111;        //
  12.     PORTD=0xFF;                //
  13. }
  14.  
  15. void Konfig8bitADC()        // ADC konfiguralas (beallitas)
  16. {
  17. //    ADMUX = 0b01100000;    // Vcc mint referencia, balra rendezett ADC eredmeny
  18.     ADMUX |= (1<<REFS0)|(1<<ADLAR);    // Vcc mint referencia, balra rendezett ADC eredmeny
  19. //    ADCSRA = 0b10000011;    // ADC engedelyezese, ADC eloosztas = 8 (125 KHz)
  20.     ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // ADC engedelyezese, ADC eloosztas = 8 (125 KHz)
  21. }
  22.  
  23. unsigned char Beolvas8bitADC(unsigned char csatorna)
  24. {
  25.     ADMUX = (ADMUX & 0b11110000) | csatorna;
  26.     ADCSRA |= (1<<ADSC);    // ADC konverzio elinditasa
  27.     while (ADCSRA & (1<<ADSC));        // varas az atalakitasra
  28.     ADCSRA |= (1<<ADSC);          // konverzió elindítás
  29.     while (ADCSRA & (1<<ADSC));        // varas az atalakitasra
  30.     return (ADCH);        // ADC ertek visszaadasa (csak a felso 8 bit (ADCH), az also 2 zajos bit elhagyasa)
  31. }
  32.  
  33. int main()
  34. {
  35.     KonfigPORT();         // portok beállításai lefuttatása
  36.     Konfig8bitADC();      // ADC beállítás lefuttatása
  37.  
  38.     while (1)
  39.     {
  40.         adc = Beolvas8bitADC(5);     // ADC meres
  41.         PORTD = ~adc;       // ADC meres eredmenyenek kiirasa PORTD-re
  42.         _delay_ms(1000);      //  1 masodperces kesleltetes
  43.        
  44.     }
  45. }


 


A cikk még nem ért véget, lapozz!
Következő: »»   6 / 8
Értékeléshez bejelentkezés szükséges!
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