Gast
#1280206
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){ } }