× Aktuálně z oboru

Programátoři po celém světě dnes slaví Den programátorů [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]
Celá zprávička [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]

AVR – USART II

[ http://programujte.com/profil/90-ondrej-karas/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/20356-michal-zima/ ]Google [ ?rel=author ]       25. 11. 2006       34 670×

V minulém díle jsme si ukázali, jak jednoduše vytvořit program pro AVR s jeho USART. Dnes si ukážeme, jak tuto periferii využívat v CodeVision AVR.

Stejně jako pro všechny jiné běžné periferie disponuje CodeVison AVR i funkcemi pro ovládání USARTu. Protože jsme si registry popsali v minulém díle, dnes si popíšeme pouze funkce použitelné pro toto rozhraní a ukážeme si jednoduchý přiklad.

Tak jako u jiných periférií, je i pro USART vytvořen průvodce (CodeVizard). Pomocí něj můžete jednoduše nastavit všechny potřebné parametry, včetně povolení/zakázání přijímače, či vysílače, můžete nastavit přenosovou rychlost, parametry přenosu (počet datových bitů, počet stop bitů, paritu), přičemž Wizard vám i spočítá případnou chybu při přenosu. Lze také pomocí tohoto pomocníka nastavit přerušení vzniklé od dokončení příjmu či vysílání.

Pomocí volby File → Generate je vytvořen soubor s veškerým potřebným nastavením. V tuto chvíli už můžete komunikovat. K tomu však potřebujete funkce pro standardní výstup.

Funkce pro standardní výstup se nacházejí v knihovně stdio.h, která musí být do projektu přilinkována.

char getchar(void)

vrací znak přijatý USARTem

void putchar(char znak)

vyšle USARTem znak

void puts (char *retezec)

pomocí fce putchar odešle řetězec, na který ukazuje pointer retezec

void putsf(char flash *retezec)

odešle řetezec uložený v programové FLASH

char *gets(char *retezec, unsigned char delka)

Přes funkci getchar přijme řetězec zakončený „\n“ a nahradí tento znak „\0“. Pokud je do této chvíle přečteno delka znaků funkce přečte pouze delka znaků a je zakončen „\0“

Mezi další užitečné funkce patří i printf, sprintf, scanf a sscanf, ale tyto funkce vyžadují podrobnější příklady využití, proto si je ukážeme někdy později. Dnes si ještě ukážeme příklad na užití výše uvedených funkcí. Součátstí budou i výpisy z terminálu.

Nejjednodušším příkladem pro využítí USARTu v CodeVision AVR by mohl být asi tento:

void main(void)
{

char k;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
      {
         k = getchar();
         putchar(k);
      };
}

Tento příklad pouze demonstruje, jak jednoduše lze napsat program o AVR tak, aby procesor komunikoval s PC. Jestliže správně nastavíte Terminál, například hyperterminál, který je většinou součástí Windows, je po odeslání znaku tento znak vrácen zpět v nezměněné podobě.

Stejně tak by bylo možné vytvořit program pro vysílání a příjem řetězce. Zde si však již musíme poradit s pointery.

Program si můžete vyzkoušet připojením přes přípravek pro převod RS232 na TTL uvedený v předminulém díle nebo přes USB převodník FT232R od firmy FTDI chip. Mnoho konstrukcí využívá starší typ FT232BM, ten bohužel vyžaduje více externích součástek a celkově takovýto převodník vyjde dráž. Převodník si můžete postavit sami, například podle následujícího schématu [ http://kvetakov.net/clanky/File//ft232r.pdf ], nebo můžete využít již postaveného zakoupením od pk-design.net [ http://pk-design.net ].


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2006112102-avr-usart-ii/ ].