Gast
#2617759
Moin moin ich verzweifele langsam. hab mir das AVR: LCD Tutorial durchgelesen und mir eigenen code für die ansteuerung geschrieben. Seltsamerweise wird aber nichts angezeigt, obwohl ich alles zig mal überprüft habe. weiss einfach nicht wo der fehler liegen soll. hier ist der code, vllt ist es ja etwas so offensichtliches und ich seh mal wieder dan wald vor lauter bäumen nicht: #include <avr/io.h> #include <util/delay.h> #define F_CPU 16000000 #define LCD_D0 PD0 //DB4 #define LCD_D1 PD1 //DB5 #define LCD_D2 PD2 //DB6 #define LCD_D3 PD3 //DB7 #define LCD_RS PD4 #define LCD_RW PD5 #define LCD_E PD6 void lcd_enable(void) { _delay_us(50); PORTD |= (1<<LCD_E); _delay_us(50); PORTD &= ~(1<<LCD_E); } void lcd_init(void) { _delay_ms(20); PORTD |= (1<<LCD_D0); PORTD |= (1<<LCD_D1); for(uint8_t i=0;i<3;i++){ _delay_ms(5); lcd_enable(); } PORTD &= ~(1<<LCD_D0); _delay_ms(5); lcd_enable(); } void lcd_cmd(uint8_t cmd) { uint8_t nibble=0x00; nibble = (cmd>>4) & 0b00001111; //oberes nibble PORTD = nibble; lcd_enable(); nibble= cmd & 0b00001111; //unteres nibble PORTD = nibble; lcd_enable(); _delay_us(50); } void lcd_data(uint8_t data){ uint8_t nibble=0x00; nibble = (data>>4) & 0b00001111; //oberes nibble nibble |= (1<<LCD_RS); PORTD = nibble; lcd_enable(); nibble= data & 0b00001111; //unteres nibble nibble |= (1<<LCD_RS); PORTD = nibble; lcd_enable(); _delay_us(50); } void lcd_clear(void) { lcd_cmd(0b00000001); } int main(void) { DDRD = 0xFF; //PD0-PD7: Ausgänge Display PORTD = 0x00; lcd_init(); lcd_cmd(0b00101000); //4Bit 2 Zeilen 5x8 lcd_cmd(0b00001100); //Display ein Cursor aus kein Blinken lcd_cmd(0b00000110); //inkrement / kein Scrollen lcd_clear(); lcd_data('T'); lcd_data('e'); lcd_data('s'); lcd_data('t'); while(1) { _delay_ms(10); } } wäre über einen tipp echt dankbar! gruß winni