Hallo wieder einmal eine Frage zum dogm 163 W. WinAVR, C, Atmega32, 11,0592 MHz, DOG-M163 W CSB -> 0V PORTC 0-3 = DB0-3 CO_0 ist denke ich mal RS (PIN 39 am display) ? PA1 an R/W (Pin37 LCD) PA2 an Reset (Pin40 LCD) PA3 an E (PIN36 LCD) Ich bin nun etliche Forenbeitraege durch, aber wie ueblich bei DOG-M displays nichts will funktionieren. Am besten sah dieses Beispiel aus: http://www.mikrocontroller.net/attachment/40732/test.c Ich hab alles unnoetige raus genommen: // COmmand an 1. Stelle von PORTA #define CO_0 PORTA = PORTA & 0b11111110; #define CO_1 PORTA = PORTA | 0b00000001; // R/W an 2. Stelle von PORTA #define RW_0 PORTA = PORTA & 0b11111101; #define RW_1 PORTA = PORTA | 0b00000010; // RES an 3. Stelle von PORTA #define RES_0 PORTA = PORTA & 0b11111011; #define RES_1 PORTA = PORTA | 0b00000100; // E nable an 4. Stelle von PORTA #define E_0 PORTA = PORTA & 0b11110111; #define E_1 PORTA = PORTA | 0b00001000; #include "avr/io.h" #include "avr/delay.h" #include "avr/interrupt.h" // BEFEHLE void setCommand( uint8_t data ){ _delay_ms(10); DDRC = 0xff; // ausgang PORTC = data; RW_0; CO_0; E_1; _delay_us(50); E_0; } // DATEN void setData( uint8_t data ){ _delay_ms(10); DDRC = 0xff; // ausgang PORTC = data; RW_0; CO_1; E_1; _delay_us(50); E_0; } void Initialize(){ // Innenwiderstände PORTA = 0x00; PORTC = 0x00; // DataDirection Register DDRA = 0xff; // Ausgang DDRC = 0xff; // eig. egal, da FUSE JTAGEN mit PonyProg deaktiviert MCUCSR |= (1<<JTD); // Bit setzen an 8. Stelle, damit JTAG deaktiviert wird -> PORTC frei MCUCSR |= (1<<JTD); // zwei mal } int main(){ _delay_ms(100); Initialize(); CO_0; RW_0; E_0; RES_0; _delay_ms(100); RES_1; _delay_ms(100); // Grundinitialisierung setCommand(0x39); setCommand(0x1D); // BS: 1/4, 2 Zeilen setCommand(0x50); // 52 Boster aus, Kontrast C5,C4 setCommand(0x6C); // 69 Spannungsfolger und Verstärkung setCommand(0x77); // Kontrast C3,C2,C1 setCommand(0x38); setCommand(0x0F); // Display ein, Cursor ein, Cursor blinken setCommand(0x06); // Autoincrement setCommand(0x01); // display löschen _delay_ms(250); setCommand(0x80); // Kursorposition setzen setData('H'); setData('A'); while (1){ } }
So funzt. Fehler waren: a) Ich hatte nur DB 0-3 angeschlossen und nicht alle 8 bits b) Mein wurst finger hat das display verdeckt und ohne hintergrund beleuchtung hab ichs nicht gesehen :-) Also fakt ist, der code funzt, so wie er da steht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.