PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Ansteurung mittels C



semicolon
12.10.2005, 21:41
Gibt es vielleicht ein Codestück in C damit ich mein LCD 2x16 ansteuren kann? Habe mich mal umgeschaut im Netz, fand gute Beispiele, die aber meistens mit Assembler progammiert wurden. Ich möchte mich grundsätzliczh mit C beschäftigen.

hansbausn
12.10.2005, 23:01
Hallo, wissenswertes findet man unter:

http://www.sprut.de/electronic/lcd/index.htm
http://www.geocities.com/dinceraydin/lcd/index.html


Hier mit entsprechendem C-Quelltext:
http://homepage.sunrise.ch/mysunrise/peterfleury/avr-lcd44780.html


mfg

Cvecko
18.10.2005, 17:07
Hallo!
Komme bei der "komfortablen" Textausgabe auf einem 2x8 Display an einem atmega8, 4-bit Modus, nicht weiter:
Ich würde gerne eine Funktion verwenden, der ich als Parameter die Wertigkeit von RS und das zu bearbeitende Byte übergebe.
Habe da folgendes:



void writeLCD(unsigned char rs,unsigned char ch)
{

connected_port=0x00; //upper nibble
if ((ch & 0x80) == 0x80) connected_port |= 0x08; //prüfen, ob bit D7 gesetzt werden soll
if ((ch & 0x40) == 0x40) connected_port |= 0x04; //prüfen, ob bit D6 gesetzt werden soll
if ((ch & 0x20) == 0x20) connected_port |= 0x02; //etc.
if ((ch & 0x10) == 0x10) connected_port |= 0x01;
if (rs == 1) connected_port |= 0x10; //prüfen, ob Befehl (rs=0) oder Wort (rs=1) anliegt

connected_port |= 0x20; //schreiben zum Display
connected_port &= 0xdf;

wait(100);

connected_port=0x00; //lower nibble
if ((ch & 0x08) == 0x08) connected_port |= 0x08;
if ((ch & 0x04) == 0x04) connected_port |= 0x04;
if ((ch & 0x02) == 0x02) connected_port |= 0x02;
if ((ch & 0x01) == 0x01) connected_port |= 0x01;
if (rs == 1) connected_port |= 0x10;

connected_port |= 0x20;
connected_port &= 0xdf;

wait(100);
}


void writeStrLCD(char *ptr)
{
unsigned char i;

for (i=1;i<41;i++)
{
if (*ptr == 0x00) break;
writeLCD(1,*ptr);
*ptr++ = 0x00;
}
}



Das Problem ist, dass bei Aufruf von z.B. writeLCD(0,0x01); (was ja einem clear entspricht) gar nichts passiert.
Bei Aufruf von writeStrLCD("abc"); werden zwar 3 Zeichen geschrieben, aber eben nicht abc...
Bei mir im Kopf funktionierts doch aber so gut.... ;)
Wäre sehr nett, wenn mir jemand einen Tipp geben könnte!
MfG, Cvecko![/code]

SprinterSB
18.10.2005, 17:21
In writeLCD() musst du connected_port auch hin und wieder rausschreiben ;-)

Cvecko
18.10.2005, 18:05
Rausschreiben? Meinste damit das "portionsweise" 4-bit rüberschicken zum Display? Das mach ich ja 2x mit

connected_port |= 0x20; //schreiben zum Display
connected_port &= 0xdf;

Einmal fürs upper, einmal fürs lower nibble...
Oder meinst du was anderes?

Cvecko
19.10.2005, 17:58
Fiel mir noch ein: Ist es bei obigem Programm überhaupt richtig, zu Anfang der beiden nibblebit-Zuweisungsteilen connected_port=0x00; zu setzen?
Hab noch ein bisschen rumprobiert, funktioniert aber bis jetzt leider immer noch nicht... :-k
Wenn jemand noch eine Idee hat: Wär echt super!
Danke & mfG, Cvecko!