Tak moje programování pokročilo dále a dalším cílem bylo zdolání UARTu. Ukážu zde několik kódů. Ať od těch nejjednodušších až po složitější.
Celé jsem to zkoušel na vývojové desce
programoval upraveným programátorem BiProg a jako převodník jsem použil FT232RL, který naleznete na zde na stránkách.
Program pro komunikaci mezipočítačem a mikrokontrolérem jsem použil tento.
POZOR! Pokud používáte pod linuxem programátor BiProg a zároveň tento převodník, komunikace se může mlátit.
Proto první připojte programátor (ten se zapíše jako ttyUSB0[jak je nastavený v makefile]) a druhý připojte převodník. Program spusťtě jako root to tak:
sudo su
/cesta k program/program
Program tak dostane rootovská práva a při odpojení programátoru a znova připojení to nebude dělat „bordel“.
Nejprve troška teorie. Takže nastavení UARTu je v programech okomentováno, co je povoleno a jak je to povoleno.
Registr UDR slouží k přijmu a zároveň i k vyslání znaku!
Registr UCSRA:
Bit RXC – indikátor, zda už byl přijat znak.
Bit TXC – nastavení, zda už byl odeslán znak.
Bit UDRE – indikátor, zda je připraven k přijmu nových dat.
Bit U2X – zdvojnásobení přenosové rychlosti.
Tabulky pro nastavení UARTu:
Registr UCSRB:
Bit RXCIE – povolení přerušení při přimu dat.
Bit TXCIE – povolení přerušení při odeslání dat.
Bit RXEN – povolení samotného příjmu.
Bit TXEN – povolení samotného odeslání.
Registr UCSRV:
Bit URSEL – nastavení přístupu k registru UCSRC nebo UBRRH.
Bit UMSEL – nastavení synchronního (1) a asynchronního režimu (0).
Bit UPM1:0 – nastavení parity.
Bit USBS – nastavení stop bitu.
Bit UCSZ2:1:0 – nastavení délky dat.
A nyní příklady:
Účel prvního programu je opravdu jednoduchý. Znak, který přijme od počítače, zase vrátí.
Druhý program přijme data z počítače a ať přijme jakýkoliv znak, pošle zpět znak „a“.
Třetí program je obdobný, ale místo vracení jednoho znaku, vrací pole znaků, v tomto případě „ahoj“.
Proto zde musela být vložena funkce, která rozděluje pole na jednotlivé znaky a posílá je zpět do počítače.
void uart_puts(char *s)
{
while (*s)
uart_putc(*s++);
}
Čtvrtý program přijme z počítače znak a zobrazího na LCD displeji. To vidíte na videu
Displej je zapojen:
#define LCD_DATA B //Port PB0-PB3 are connected to D4-D7
#define LCD_E B //Enable OR strobe signal
#define LCD_E_POS PB7 //Position of enable in above port
#define LCD_RS B
#define LCD_RS_POS PB6
#define LCD_RW B
#define LCD_RW_POS PB5
Zapojení vývodů. Data jsou posílany po 4-bitové sběrnici po portu B. Vývody E-Enable – PB7, RS-Reset – PB6, RW-Read/Write – PB5