Ich versuche, ein 16x4-LCD mit einem Atmega32-Chip zu verbinden. Ich habe den folgenden Code geschrieben, der früher für 16x2 LCD funktionierte
#include<avr/io.h>
#include<util/delay.h>
#define dataport PORTC // LCD data port
#define commport PORTD
#define en PD6 // enable signal
#define wr PD5 // read/write signal
#define rs PD4 // register select signal
int wrcomm(unsigned int data)
{
dataport=data;
_delay_ms(10);
commport &= ~(1 << rs);
commport &= ~(1 << wr);
commport |= (1 << en);
commport &= ~(1 << en);
_delay_ms(10);
return 1;
}
int wrdata(unsigned int data)
{
dataport=data;
_delay_ms(10);
commport |= (1 << rs);
commport &= ~(1 << wr);
commport |= (1 << en);
commport &= ~(1 << en);
_delay_ms(10);
return 1;
}
int lcd_putchar(unsigned char x)
{
wrdata(x);
return 1;
}
void lcd_init(void)
{
DDRC=0xff;
DDRD=0x70;
wrcomm(0x38);
wrcomm(0x01); //turn on display and cursor
wrcomm(0x0E);//cursor line 1 postn 1
wrcomm(0x80);
}
int main(void)
{
lcd_init();
lcd_putchar('a');
return 0;
}
Ich vermute, dass es auch für 16x4 LCD funktionieren sollte. Aber das tut es nicht. Das LCD ist ein JHD539 164b .
Die einzige Sache, bei der ich Fortschritte gemacht habe, ist, dass, wenn ich keinen Befehl sende, die 2. und 4. Zeile schwarz bleiben, aber wenn ich einen Befehl sende, sind sie alle ausgeschaltet. Der Topf hilft überhaupt nicht.
Das JHD539-164b ist ein standardmäßiges KS0066-kompatibles Zeichen-LCD. Nahezu identisch mit den von HD44780 gesteuerten LCDs, und der Benutzerendcode wäre vollständig kompatibel.
Der Unterschied zwischen einem 16x2-LCD und einem 16x4-LCD besteht nur darin, dass ein 16x4-LCD wirklich ein logisches 32x2-LCD ist, was die Adresse betrifft.
Wenn Sie es nicht zum Laufen bringen, überprüfen Sie die Verkabelung und prüfen Sie, ob das LCD nicht beschädigt ist.
Es sieht so aus, als ob Sie Ihr LCD-Display im 8-Bit-Modus verwenden. Stellen Sie sicher, dass Sie in Ihrer lcd_init-Funktion diesen Modus ausgewählt haben, da LCD-Controller normalerweise den 4-Bit-Modus standardmäßig eingestellt haben.
David Tweed
Trygve Laugstøl