Hallo
also hab das Programm an meine LCD-Steuerung angepasst bei mir geht es aber nicht! Auf dem Display steht nur " \L L " Also nichts sinnvolles.
Hier meine LDC.cCode:#include <stdio.h> #include "LCD/lcd-routines.h" #include "LCD/lcd.c" #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define preValue 57724 int volatile gSeconds = 0; SIGNAL (SIG_OVERFLOW1) { gSeconds++; TCNT1 = preValue; } int main (void) { int seconds = 0; int minutes = 0; int hours = 0; char mytime[] = "00:00:00"; lcd_init (); TCCR1B = (1<<CS00) | (1<<CS01); TIMSK |= (1<<TOIE1); TCNT1 = preValue; sei (); lcd_data ("Time: "); lcd_data (mytime); while (1) { if (seconds != gSeconds) { seconds = gSeconds; if (seconds == 60) { seconds = 0; gSeconds = 0; minutes++; } if (minutes == 60) { minutes = 0; hours++; } if (hours == 24) hours = 0; /* Uhrzeit formatieren */ sprintf (mytime, "%02d:%02d:%02d", hours, minutes, seconds); /* und auf dem Display ausgeben */ set_cursor (6,1); lcd_data (mytime); } } }
Hier meine lcd-routines.hCode:// Pinbelegung über defines einstellbar #include <avr/io.h> #include <util/delay.h> #include "lcd-routines.h" // LCD Befehle #define CLEAR_DISPLAY 0x01 #define CURSOR_HOME 0x02 // Pinbelegung für das LCD #define LCD_PORT PORTA #define LCD_DDR DDRA #define LCD_RS 4 #define LCD_EN 5 // sendet ein Datenbyte an das LCD void lcd_data(unsigned char temp1) { unsigned char temp2 = temp1; LCD_PORT |= (1<<LCD_RS); // RS auf 1 setzen temp1 = temp1 >> 4; temp1 = temp1 & 0x0F; LCD_PORT &= 0xF0; LCD_PORT |= temp1; // setzen lcd_enable(); temp2 = temp2 & 0x0F; LCD_PORT &= 0xF0; LCD_PORT |= temp2; // setzen lcd_enable(); _delay_us(200); } // sendet einen Befehl an das LCD void lcd_command(unsigned char temp1) { unsigned char temp2 = temp1; LCD_PORT &= ~(1<<LCD_RS); // RS auf 0 setzen temp1 = temp1 >> 4; // oberes Nibble holen temp1 = temp1 & 0x0F; // maskieren LCD_PORT &= 0xF0; LCD_PORT |= temp1; // setzen lcd_enable(); temp2 = temp2 & 0x0F; // unteres Nibble holen und maskieren LCD_PORT &= 0xF0; LCD_PORT |= temp2; // setzen lcd_enable(); _delay_us(200); } // erzeugt den Enable-Puls void lcd_enable(void) { LCD_PORT |= (1<<LCD_EN); _delay_us(1); LCD_PORT &= ~(1<<LCD_EN); } // Initialisierung: // Muss ganz am Anfang des Programms aufgerufen werden. void lcd_init(void) { LCD_DDR = LCD_DDR | 0xF | (1<<LCD_RS) | (1<<LCD_EN); // Port auf Ausgang schalten // muss 3mal hintereinander gesendet werden zur Initialisierung _delay_ms(200); LCD_PORT &= 0xF0; LCD_PORT |= 0x03; LCD_PORT &= ~(1<<LCD_RS); // RS auf 0 lcd_enable(); _delay_ms(200); lcd_enable(); _delay_ms(200); lcd_enable(); // 4 Bit Modus aktivieren LCD_PORT &= 0xF0; LCD_PORT |= 0x02; lcd_enable(); // 4Bit / 2 Zeilen / 5x7 lcd_command(0x28); // Display ein / Cursor aus / kein Blinken lcd_command(0x0C); // inkrement / kein Scrollen lcd_command(0x06); lcd_clear(); } // Sendet den Befehl zur Löschung des Displays void lcd_clear(void) { lcd_command(CLEAR_DISPLAY); _delay_ms(200); } // Sendet den Befehl: Cursor Home void lcd_home(void) { lcd_command(CURSOR_HOME); _delay_ms(200); } // setzt den Cursor in Zeile y (1..4) Spalte x (0..15) void set_cursor(uint8_t x, uint8_t y) { switch (y) { case 1: lcd_command(0x80+0x00+x); break; // 1. Zeile case 2: lcd_command(0x80+0x40+x); break; // 2. Zeile //case 3: lcd_command(0x80+0x10+x); break; // 3. Zeile //case 4: lcd_command(0x80+0x50+x); break; // 4. Zeile } }
Vielleicht kann jemand von euch seine Display Ansteuerungsdatein Posten?Code:void lcd_data(unsigned char temp1); void lcd_command(unsigned char temp1); void lcd_enable(void); void lcd_init(void); void lcd_home(void); void lcd_clear(void); void set_cursor(uint8_t x, uint8_t y);
Grüße Johannes[/quote]







Zitieren

Lesezeichen