roboter
19.07.2007, 15:04
Hallo,
ich habe mal wieder ein LCD Problem.
ich habe das AV2040 Display von Conrad (4Zeilen*20Zeichen)
Hier mal mein Testcode, nur funktioniert der leider nicht.
Warum?
#include <util/delay.h>
#define RS PA5
#define RW PA6
#define E PA7
void RS_Low(void) {
PORTA &= ~(1<<RS);
}
void RS_High(void) {
PORTA |= (1<<RS);
}
void RW_Low(void) {
PORTA &= ~(1<<RW);
}
void RW_High(void) {
PORTA |= (1<<RW);
}
void busy(void) {
char richtungC = DDRC;
char richtungA = DDRA;
DDRC = 0x00;
RW_High();
RS_Low();
while(PINC & (1<<PINC7)) // warten solange busy
DDRC = richtungC;
DDRA = richtungA;
}
void enable(void) {
PORTA |= (1<<E);
_delay_us(1);
PORTA &= ~(1<<E);
}
void lcd_init(void) {
_delay_ms(30);
RS_Low();
RW_Low();
DDRC = 0xFF;
PORTC = 0b00111100; // Function set: 2 Line Mode / Display on
enable();
_delay_us(500);
PORTC = 0b00001111; // Display on / Cursor on / Blink on
enable();
_delay_us(500);
PORTC = 0b00000001; // Display Clear
enable();
_delay_ms(3);
PORTC = 0b00000110; // Entry Mode Set: auto inkrement
busy();
}
void Return_Home(void) {
RS_Low();
RW_Low();
DDRC = 0xFF;
PORTC = 0b00000010; // Return Home
enable();
busy();
}
void set_adr(char adr) {
RS_Low();
RW_Low();
DDRC = 0xFF;
PORTC = adr;
PORTC |= (1<<PC7);
enable();
busy();
}
void put_c_adr(char adr, char c) {
set_adr(adr);
RS_High();
RW_Low();
DDRC = 0xFF;
PORTC = c;
enable();
busy();
}
Kann mir das bitte jemand helfen?
Gruß
ich habe mal wieder ein LCD Problem.
ich habe das AV2040 Display von Conrad (4Zeilen*20Zeichen)
Hier mal mein Testcode, nur funktioniert der leider nicht.
Warum?
#include <util/delay.h>
#define RS PA5
#define RW PA6
#define E PA7
void RS_Low(void) {
PORTA &= ~(1<<RS);
}
void RS_High(void) {
PORTA |= (1<<RS);
}
void RW_Low(void) {
PORTA &= ~(1<<RW);
}
void RW_High(void) {
PORTA |= (1<<RW);
}
void busy(void) {
char richtungC = DDRC;
char richtungA = DDRA;
DDRC = 0x00;
RW_High();
RS_Low();
while(PINC & (1<<PINC7)) // warten solange busy
DDRC = richtungC;
DDRA = richtungA;
}
void enable(void) {
PORTA |= (1<<E);
_delay_us(1);
PORTA &= ~(1<<E);
}
void lcd_init(void) {
_delay_ms(30);
RS_Low();
RW_Low();
DDRC = 0xFF;
PORTC = 0b00111100; // Function set: 2 Line Mode / Display on
enable();
_delay_us(500);
PORTC = 0b00001111; // Display on / Cursor on / Blink on
enable();
_delay_us(500);
PORTC = 0b00000001; // Display Clear
enable();
_delay_ms(3);
PORTC = 0b00000110; // Entry Mode Set: auto inkrement
busy();
}
void Return_Home(void) {
RS_Low();
RW_Low();
DDRC = 0xFF;
PORTC = 0b00000010; // Return Home
enable();
busy();
}
void set_adr(char adr) {
RS_Low();
RW_Low();
DDRC = 0xFF;
PORTC = adr;
PORTC |= (1<<PC7);
enable();
busy();
}
void put_c_adr(char adr, char c) {
set_adr(adr);
RS_High();
RW_Low();
DDRC = 0xFF;
PORTC = c;
enable();
busy();
}
Kann mir das bitte jemand helfen?
Gruß