Hoi, ich bin ein µc Neuling und versuche gerade ein LCD über meinen ATMega8535 (1MHz) anzusteuern, jedoch klappt das ganze nicht so wie ich es gern hätte =) Mein Hauptprogramm besteht derzeit nur aus der Port Initialisierung und der Funktion lcd_init (LCD_DISP_ON_CURSOR_BLINK); Beim compilieren treten keine Fehler auf aber auf meinem Display (4x16 Zeichen; KS0070B Controller) sind die erste und die 3. Reihe schwarz, die 2. und 4. nicht zu sehen. Kontrast Kontakte habe ich an ein Poti angeschlossen, hat aber keinen Effekt auf das Display. Ich nehme an das ich bei der lcd.h einige Angaben nicht richtig eingestellt habe, könnte das vlt mal einer überprüfen? Das LCD hängt an PortB (8-Bit Mode) RS -> PortC 0 RW -> PortC 1 E -> PortC 2 Ich habe mal die lcd.h angehängt, so wie ich sie zZ konfiguriert habe. Vielen Dank schonmal im Vorraus =) Gruß -Germo-
setz das mal auf null: #define LCD_CONTROLLER_KS0073 1 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */ Hast du nochmal einen Schaltplan, da du mit dem Poti eigentlich den Kontrast einstellen müsstest. vll. ist der Kontrast zu hoch und du kannst ihn durch irgendeinen Anschlußfehler nicht einstellen. Gruß Steffen
Ah ich habe gerde gesehen das du die Pins für RS/RW/E falsch konfiguriert hast, die zeigen auf PortB aber du hast sie an Portc angeschlossen. Also so: #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 PORTC /**< port for RS line */ #define LCD_RS_PIN 0 /**< pin for RS line */ #define LCD_RW_PORT PORTC /**< port for RW line */ #define LCD_RW_PIN 1 /**< pin for RW line */ #define LCD_E_PORT PORTC /**< port for Enable line */ #define LCD_E_PIN 2 /**< pin for Enable line */
Oh ich hab gerade gesehen ich hab die falsche Datei angehängt, die Ports hatte ich auf PORTC geändert, bzw PORTB für die Datenleitungen. Wieso soll ich bei dem KS Chipsatz den Wert wieder auf 0 setzen? Laut Datenblatt ists zumindest ein KS Chipsatz - also wenn das nun funktionert ... g
Update: Also auch mit der Einstellung: #define LCD_CONTROLLER_KS0073 0 /**< Use 0 for HD44780 controller, 1 for KS0073 controller */ hab ich die erste und 3. Reihe schwarz. Mit dem Kontrast kann ich auch nicht viel machen -> 0 - 5 V regelbar aber auch keine Änderung
Bei mir lief die Bibliothek nur in der Optimierungsstuffe -O0. Sobald ich auf -OS geschaltet habe hatte ich ähnliche Probleme. Habe nicht genau erruiert weshalb es nicht lief. Vermute das irgendeine Warteschleife für's Timming nicht mitspielt. Sollte jemand genaueres herrausfinden, wäre ich für einen kleinen Hinweis dankbar.
Ich habs auch mal mit verschiedenen Optimierungsstufen probiert aber auch da kein Erfolg. Wenn ich mein Display mit ICCAVR initialisiere funktioniert es einwandfrei, also am Display liegt es auch nicht. Ich vermute auch das mit dem Timing etwas nicht so 100%ig stimmt aber ich bin mir da eben nicht so ganz sicher ...
Hmm kann mir einer sagen was es damit auf sich hat? #if LCD_CONTROLLER_KS0073 #if LCD_LINES==4 #define KS0073_EXTENDED_FUNCTION_REGISTER_ON 0x24 /* |0|010|0100 4-bit mode extension-bit RE = 1 */ #define KS0073_EXTENDED_FUNCTION_REGISTER_OFF 0x20 /* |0|000|1001 4 lines mode */ #define KS0073_4LINES_MODE 0x09 /* |0|001|0000 4-bit mode, extension-bit RE = 0 */ finde diesbezüglich nichts im Datenblatt des LCD Im Datenblatt steht eh nur 1 oder 2 lines, hat mich auch schon etwas durcheinander gebracht, aber wie gesagt, mit icc gehts einwandfrei
> Im Datenblatt steht eh nur 1 oder 2 lines, hat mich auch schon etwas > durcheinander gebracht, aber wie gesagt, mit icc gehts einwandfrei Dann hast du ein falsches Datenblatt oder die vier Zeilen werden intern als zwei Zeilen behandelt. > Beim compilieren treten keine Fehler auf aber auf meinem Display (4x16 > Zeichen; KS0070B Controller) sind die erste und die 3. Reihe schwarz, > die 2. und 4. nicht zu sehen. Das spricht dafür, dass intern die erste Zeile angesprochen wird und diese auf zwei sichtbare Zeilen umgebrochen ist. Um welches LCD von welchem Hersteller handelt es sich konkret? Benutzt du beim ICCAVR exakt die gleichen Sourcen wie beim ??? Version ???
Unter ICC habe ich mir die initialisierung selber zusammen geschrieben mit Hilfe des Datenblattes. Da ich aber die wesentlich umfangreichere Bibliothek von Fleury nutzen möchte (warum das Rad 2x erfinden? g) bin ich auf AVR-GCC umgestiegen LCD nutze ich folgendes: http://www.reichelt.de/?SID=25YX7qiX8AAAIAADsFMooc05b0a0b25ab5cf84691180bf9fde913;ACTION=3;LA=4;GROUP=A5211;GROUPID=3005;ARTICLE=31656;START=0;SORT=artnr;OFFSET=16 Sollte ich da lieber ein anderes nutzen?
Die Fleury-Library mit dem Controller KS0073 und dein Display mit dem Controller KS0070B unterscheiden sich im Controllertyp. Um sicherzugehen muss man die Datenblätter nebeneinander vergleichen und ggf. die Fleury Library anpassen. KS0070B - http://www.pacificdisplay.com/ics_app%20notes/samsung/KS0070B_V0.pdf KS0073 - http://www.pacificdisplay.com/ics_app%20notes/samsung/KS0073.pdf In deinem lcd.h stimmen die Definitionen der LCD_START_LINE1 bis LCD_START_LINE4 nicht mit den Daten zum "DISPLAY DATA RAM ADDRESS MAP" aus dem Datenblatt überein. Es sollte so aussehen:
1 | #define LCD_START_LINE1 0x00 /**< DDRAM address of first char of line 1 */ |
2 | #define LCD_START_LINE2 0x40 /**< DDRAM address of first char of line 2 */ |
3 | #define LCD_START_LINE3 0x10 /**< DDRAM address of first char of line 3 */ |
4 | #define LCD_START_LINE4 0x50 /**< DDRAM address of first char of line 4 */ |
Desweiteren definierst du
1 | #define LCD_IO_MODE 1 /**< 0: memory mapped mode, 1: IO port mode */ |
In diesem Modus arbeitest du IMMER mit 4-Bit-Ansteuerung, d.h. nicht wie von dir vorgesehen mit 8-Bit. Um mit 8-Bit zu arbeiten müsste
1 | #define LCD_IO_MODE 0 /**< 0: memory mapped mode, 1: IO port mode */ |
definiert werden. Damit der memory mapped mode funktioniert, muss das LCD definiert an das external data memory interface eines geeigneten µC angeschlossen werden (ATMega8535 ist geeignet). Deine Zuordnung zu PORTB und PORTC ist zu überprüfen.
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.