Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2014:spi-glcd-msp [2015/01/09 09:44] David Čada [Program pro řízení] |
2014:spi-glcd-msp [2015/01/09 10:14] (aktuální) David Čada [Závěr] |
||
---|---|---|---|
Řádek 35: | Řádek 35: | ||
void send_SPI(unsigned int c) | void send_SPI(unsigned int c) | ||
{ | { | ||
+ | //funkce odešle po SPI lince 16bitovou proměnnou | ||
+ | |||
unsigned int a; | unsigned int a; | ||
- | a=c>>8; | + | a=c>>8; //do a je uložena horní část 16bitové proměnné |
- | while(!(UCA0IFG&UCTXIFG)); | + | while(!(UCA0IFG&UCTXIFG)); //čekej dokud je buffer prázdný |
- | UCA0TXBUF=(unsigned char)a; | + | UCA0TXBUF=(unsigned char)a; //pošli horní část proměnné |
- | while(!(UCA0IFG&UCTXIFG)); | + | while(!(UCA0IFG&UCTXIFG)); //čekej dokud je buffer prázdný |
- | UCA0TXBUF=(unsigned char)c; | + | UCA0TXBUF=(unsigned char)c; //pošli spodní část proměnné |
- | while(!(UCA0IFG&UCTXIFG)); | + | while(!(UCA0IFG&UCTXIFG)); //čekej dokud je buffer prázdný |
P1OUT |= BIT6; | P1OUT |= BIT6; | ||
Řádek 50: | Řádek 52: | ||
</code> | </code> | ||
- | == Funkce pro odeslání příkazu== | + | == Funkce pro odeslání příkazu do LCD== |
<code cpp> | <code cpp> | ||
void LCD_CMD(unsigned char command) | void LCD_CMD(unsigned char command) | ||
Řádek 69: | Řádek 71: | ||
</code> | </code> | ||
- | == Funkce pro odeslání dat== | + | == Funkce pro odeslání dat do LCD== |
<code cpp> | <code cpp> | ||
void LCD_DATA(unsigned char data) | void LCD_DATA(unsigned char data) | ||
Řádek 99: | Řádek 101: | ||
void graphics_clear(void) | void graphics_clear(void) | ||
{ | { | ||
- | //funkce vyčistí grafickou část | + | |
+ | //funkce vyčistí grafickou a textovou část | ||
+ | //všechny pozice RAM jsou vyplněny nulami | ||
+ | //bez vynulování zobrazuje LCD nahodilé symboly a grafiku | ||
unsigned int m=0; //proměnné pro cykly | unsigned int m=0; //proměnné pro cykly | ||
unsigned int n=0; //proměnné pro cykly | unsigned int n=0; //proměnné pro cykly | ||
Řádek 109: | Řádek 115: | ||
for(n=0;n<40;n++) | for(n=0;n<40;n++) | ||
{ | { | ||
- | cursor(9600+m*360+n); | + | cursor(9600+m*360+n); //výběr jednotlivých sektorů paměti LCD |
- | LCD_CMD(0x42); | + | LCD_CMD(0x42); //nastav zápis |
+ | //sektor LCD vyplněn nulami | ||
LCD_DATA(0x00); | LCD_DATA(0x00); | ||
LCD_DATA(0x00); | LCD_DATA(0x00); | ||
Řádek 176: | Řádek 183: | ||
_delay_cycles(1000); | _delay_cycles(1000); | ||
+ | // inicializační sekvence pro LCD 320x240 | ||
+ | // pro jiný rozměr je nutno přepočítat | ||
+ | |||
LCD_CMD(0x40); //system set | LCD_CMD(0x40); //system set | ||
LCD_DATA(0x30); | LCD_DATA(0x30); | ||
Řádek 215: | Řádek 225: | ||
==Test grafické části řízení - jezdící had== | ==Test grafické části řízení - jezdící had== | ||
<code cpp> | <code cpp> | ||
+ | unsigned int px=0; | ||
+ | unsigned int py=0; | ||
+ | //proměnné se inkrementují tak dlouho dokud "nenarazí na kraj LCD" | ||
+ | //což je zjištěno pomocí podmínek if(py==239), následně se vynuluje příznak | ||
+ | //a proměnná se dekrementuje, poloha aktuálního bodu je zapsána pomocí write_pixel(px,py); | ||
+ | |||
while(1) | while(1) | ||
{ | { | ||
Řádek 237: | Řádek 253: | ||
ypriznak=0; | ypriznak=0; | ||
- | write_pixel(px,py); | + | write_pixel(px,py); //zápis polohy bodu |
- | for(i=0;i<4000;i++) | + | |
+ | for(i=0;i<4000;i++) //jednoduchý delay | ||
{} | {} | ||
Řádek 246: | Řádek 263: | ||
} | } | ||
</code> | </code> | ||
- | https://www.youtube.com/watch?v=FCzxzdG-qaQ | + | |
+ | ==== Závěr ==== | ||
+ | Funkční řízení LCD po lince SPI je možno vidět na tomto odkazu https://www.youtube.com/watch?v=FCzxzdG-qaQ . Na uvedeném testu je možno vidět postupné několikanásobné vypsání textu Hello world, následně změněna adresa zápisu a vypsáno písmeno C pro zjištění správně textové mřížky LCD. Grafická část zobrazuje jezdícího hada. Během testování se ukázalo, že k řízení by bylo vhodné zvýšit takt procesoru ( použitá vývojová SPI deska využívá takt pouze 4MHz ) případně využít procesor s rychlejším SPI modulem. Použitý LCD výrobce Raystar nedosahuje příliš vysokého kontrastu. V katalogovém listu je uvedena barva černobílá avšak černá tohoto displeje připomíná spíše modrou. Celkový kód je možno vidět zde http://pastebin.com/UqdhU00N |