Fórum témák

» Több friss téma
Cikkek » Egyszerű soros kommunikáció AVR-rel (UART)
Egyszerű soros kommunikáció AVR-rel (UART)
Szerző: Fizikus, idő: Jún 12, 2010, Olvasva: 56953, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   5 / 9

Mintaprogram1

Most már csak az UART programunkat kell megírni, ami majd kommunikál a PC-vel. De ahhoz, hogy lássuk is ezt, szükségünk lesz egy, a PC-n futó soros kommunikációt használó terminálprogramra. Én a példámban a Hyper Terminal-t és a korábban említett USB-TTL átalakítót fogom használni.

Az első lépés, hogy kiderítsük, melyik virtuális COM portot használja az USB-TTL átalakítónk. Ezt az eszközkezelőben nézhetjük meg (az én esetemben a COM1-et az AVR ISP égető használja, a COM14-et a mobil interetes modem, a COM17-et pedig az USB-TTL átalakító).

Ezután elindítva a Hyper Terminal-t, létre kell hozni egy kapcsolatot az alábbi beállításokkal, ami a COM17-en keresztül kommunikál.

Ezután már kész a kapcsolat a PC és a mikrovezérlő között. Ha az alábbi programot beégetjük a mikrovezérlőbe és ha a Hyper Terminal ablakába beírjuk a Hello! üzenetet, akkor az alábbi ábrához hasonló dolgot kell látnunk.

Ez az UART program folyamatosan figyeli, hogy a PC felől érkezett-e bejövő karakter. Ha érkezett, akkor ugyanazt a karaktert visszaküldi egy szögletes zárójelben (például ha leütjük az y billentyűt, akkor a mikrovezérlő az [y]-t küldi vissza).

(Az alábbi kód letöltéséhez kattints ide!)


  1. /*
  2. UART hasznalata polling modszerrel
  3. Hardver:    ATmega8 @ 7.372800MHz
  4. PC Szoftver: Hyper terminal @ 9600 baud, Nincs Paritas Bit, 1 Stop Bit, Flow Control = NONE
  5. */
  6.  
  7. #define F_CPU 7372800UL // rendszer orajel: 7.3728 MHz
  8. #define USART_BAUDRATE 9600 // soros kommunikacio sebessege: 9600 bps
  9. #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16UL)) - 1) // UBRR
  10.  
  11. #include <avr/io.h>
  12. #include <inttypes.h>
  13.  
  14. void KonfigUART()  // UART beallitasa
  15. {
  16.    // 9600 bps soros kommunikacio sebesseg beallitasa
  17.    UBRRL = UBRR_ERTEK;        // UBRR_ERTEK also 8 bitjenek betoltese az UBRRL regiszterbe
  18.    UBRRH = (UBRR_ERTEK>>8);   // UBRR_ERTEK felso 8 bitjenek betoltese az UBRRH regiszterbe
  19.    // Aszinkron mod, 8 Adat Bit, Nincs Paritas Bit, 1 Stop Bit
  20.    UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
  21.    //Ado es Vevo aramkorok bekapcsolasa
  22.    UCSRB |= (1 << RXEN) | (1 << TXEN);   //
  23. }
  24.  
  25. char UARTAdatFogad() // Ez a fuggveny a beerkezo adatokat kiolvassa az UDR regiszter bejovo pufferebol
  26. {
  27.    while(!(UCSRA & (1<<RXC))) // Varakozas amig nincs uj bejovo adat
  28.    {
  29.       //  Varakozas
  30.    }
  31.    //Most mar van beerkezett adat, amit kiolvasunk a pufferbol
  32.    return UDR;
  33. }
  34.  
  35. void UARTAdatKuld(char data) // Ez a fuggveny a kuldendo adatot beirja az UDR regiszter kimeno pufferjebe
  36. {
  37.    while(!(UCSRA & (1<<UDRE)))  // Varakozas amig az Ado kesz nem lesz az adatkuldesre
  38.    {
  39.       //  Varakozas
  40.    }
  41.    // Az Ado mar kesz az adatkuldesre, a kuldendo adatot a kimeno pufferjebe irjuk
  42.    UDR=data;
  43. }
  44.  
  45. int main(void) // Foprogram
  46. {
  47.    char data;
  48.  
  49.    KonfigUART();  // UART Konfiguralasa
  50.  
  51.    while(1) // Vegtelen ciklus
  52.    {
  53.       data=UARTAdatFogad();  // A berekezo bajt fogadasa
  54.       // A beerkezett karaktert szogletes zarojelben kuldjuk vissza
  55.       UARTAdatKuld('[');
  56.       UARTAdatKuld(data);
  57.       UARTAdatKuld(']');
  58.    }
  59. }


A cikk még nem ért véget, lapozz!
Következő: »»   5 / 9
É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