Wenn du einen schwarzen Balken siehst, dann ist das LCD nicht initialisiert.
In lcd.h die Zuordnung LCD-Pin zu µC-Pin richtig eingetragen?
Hallo,
habe zum testen ein Programm geschrieben das gar nichts weiteres macht als am Port B von meinem Atmega48 4 Datenbits zum LCD Display sendet. Hab das ganze mit der Grundlage vom Anfängertutorial auf mikorcontroller.net gemacht. Die Beschaltung sollte soweit korrekt sein. Ich nutze für das Display die Libraries von peter Fleury die ja sehr bekannt sind und wohl auch sehr häufig eingesetzt werden.
Hintergrundbeleuchtung funktioniert. Ich sehe in einer Zeile schwarze Balken die ich mit dem Kontrast (Poti) einstellen schärfer und schwächer stellen kann, habe das ganze so eingestellt das ich die schwarzen balken gerade noch so sehe. Es handelt sich um ein 2x16 Zeilen Display LCD TC1602A-09.
Ich habe unten mal das Programm angehangen.
Zur Frage: Warum sehe ich die Zeichen nicht die ich sende? Nutze ein STK500 Starterkit zum übertragen. Die LED zeigt nach dem übertragen an das alles in Ordnung ist. (Software = AVR Studio 5)
Code:#include <avr\io.h> #include <avr\interrupt.h> #include <stdlib.h> #include <inttypes.h> #include "lcd.h" void initial(void) { DDRD = 0xff; // PortD Ausgänge DDRC = 0x00; // PortC Eingänge DDRB = 0xff; } void print4(unsigned int x) { unsigned int y; y=x/1000;lcd_data(y+0x30);x-=(y*1000); y=x/100;lcd_data(y+0x30);x-=(y*100); y=x/10;lcd_data(y+0x30);x-=(y*10); lcd_data(x+0x30); } int main(void) { int variable = 0; initial(); lcd_init(LCD_DISP_ON); while(1) { variable = 9876; lcd_data( 'A' ); lcd_data( 'D' ); lcd_data( 'C' ); lcd_data( '0' ); lcd_data( '=' ); print4(variable); lcd_gotoxy( 0, 1 ); } return 0; }
VIELEN DANK fürs Anschauen!!!
Wenn du einen schwarzen Balken siehst, dann ist das LCD nicht initialisiert.
In lcd.h die Zuordnung LCD-Pin zu µC-Pin richtig eingetragen?
Das wird es sein! Guter Tipp. Welchen Pin muss ich da angeben? die Datenleitungen sind angeschlossen am uC: 11,12,13,14. Am LCD Display habe ich die Datenbits DB4,5,6,7 angeschlossen die an Anschluss 11,12,13,14 liegen. Wenn ich in die lcd.h gehe finde und das ganze editiere sieht es so aus (Ausschnitt):
Die Datenbits 0-3 liegen frei. Das Problem ist nach der Änderung ist es immernoch genauso wie vorher. habe ich die Pins falsch angegeben?Code:#define LCD_PORT PORTB /**< port for the LCD lines */ #define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */ #define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */ #define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */ #define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */ #define LCD_DATA0_PIN 11 /**< pin for 4bit data bit 0 */ #define LCD_DATA1_PIN 12 /**< pin for 4bit data bit 1 */ #define LCD_DATA2_PIN 13 /**< pin for 4bit data bit 2 */ #define LCD_DATA3_PIN 14 /**< pin for 4bit data bit 3 */ #define LCD_RS_PORT LCD_PORT /**< port for RS line */ #define LCD_RS_PIN 4 /**< pin for RS line */ #define LCD_RW_PORT LCD_PORT /**< port for RW line */ #define LCD_RW_PIN 5 /**< pin for RW line */ #define LCD_E_PORT LCD_PORT /**< port for Enable line */ #define LCD_E_PIN 6 /**< pin for Enable line */
Wie kommst du auf 11,12,13,14 , sollte das nicht 0 bis3 sein? Bei mir sieht das so aus:
Code:#define LCD_PORT PORTB /**< port for the LCD lines */ #define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */ #define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */ #define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */ #define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */ #define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */ #define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */ #define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */ #define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */ #define LCD_RS_PORT PORTB /**< port for RS line */ #define LCD_RS_PIN 4 /**< pin for RS line */ #define LCD_RW_PORT PORTB /**< port for RW line */ #define LCD_RW_PIN 5 /**< pin for RW line */ #define LCD_E_PORT PORTB /**< port for Enable line */ #define LCD_E_PIN 6 /**< pin for Enable line */
So war es ja Standardäßig eingestellt bevor ich das geändert hatte. Ging ja so nicht.
So ist es aber sicher richtig.
Das Datenblatt ist sehr dürftig, hast du mal die Einstellung
#define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */
mit einer 1 probiert.
AH, habe mich bei einer einstellung vertan habe den Enable Pin falsch angegeben .... grrrr
Nun ist das Display gesäubert von Balken... Die gewünschten Zahlen sind dort allerdings nicht zu sehen. Wodran könnte das den nun noch liegen?
RW liegt bei mir laut dem Schaltungsbeispiel auf GND. Vielleicht liegt ja da der Fehler. habe dort einfach einen freien port angegeben. in diesem Fall PORTB6.
Dann ist es klar das es nicht funktioniert, R/W ist notwendig zur Busy-Abfrage.
Da ist die *.h verloren gegangen.
Hier kannst du ohne R/W einstellen.
Lesezeichen