Gast
#833669
Hallo,
ich habe ein LC- Display mit KS0066 controller an einem mega32
angeschlossen. wenn ich nach dem initialisieren aber ein zeichen
schicke, wird das nicht dargestellt.
gibt es so etwas wie eine unvollständige initialisierung? und wie macht
die sich bemerkbar? nach dem initialisieren blinkt auf jeden fall der
cursor, allerdings ist die erste zeile manchmal dunkel und manchmal
hell.
aber ein zeichen zu schicken, hab ich bis jetzt noch nicht hinbekommen.
wie geht das? zuerst high nibble, dann low nibble? und jedesmal RS mit
high setzen? wäre schön, wenn da mal jemand nen blick drauf werfen
könnte
hier ist mal mein code. sollt ein "H" darstellen.
danke!
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
//display Belegung:
//DB4 DB5 DB6 DB7 RS EN
//PD0 PD1 PD2 PD3 PD4 PD5
#define DB4 0
#define DB5 1
#define DB6 2
#define DB7 3
#define RS 4
#define EN 5
void lcd_enable(void);
void lcd_init(void);
int main()
{
DDRD=0xFF;
lcd_init(); //lcd initialisieren
//jetzt zeichen senden
_delay_ms(1);
PORTD = 20; //10100 //high nibble
lcd_enable();
PORTD= 24; //11000 //low nibble
lcd_enable();
return 0;
}
void lcd_enable(void) //takt für lcd senden
{
PORTD |= (1<<EN);
_delay_us(10);
PORTD &= (0<<EN);
}
void lcd_init(void)
{
_delay_ms(30);
PORTD |= (1<<DB5);
lcd_enable();
PORTD |= (1<<DB5);
lcd_enable();
PORTD |= (1<<DB6);
lcd_enable();
_delay_us(50);
PORTD =0;
lcd_enable();
PORTD |=(1<<DB4)|(1<<DB5)|(1<<DB6)|(1<<DB7);
lcd_enable();
_delay_us(50);
PORTD = 0;
lcd_enable();
PORTD |= (1<<DB4);
lcd_enable();
_delay_ms(5);
PORTD = 0;
lcd_enable();
PORTD |=(1<<DB4)|(1<<DB5)|(1<<DB6);
lcd_enable();
}