Guten Morgen, die Initialisierung scheint zu funktionieren... Ich sehe es blinken. :-) Schreibe ich allerdings etwas aufs Dislay, sieht es so aus als ob das Display die Initialisierung vergisst. DISPLAY : EA DIPS082 ohne Hintergrundbeleuchtung Besten Dank für eure Hilfe Lg André
Mit deinen Änderungen in lcd.c hast du dir mehr geschadet als du gut gemacht hast
1 | //------------------------------------------------------------------------------
|
2 | void lcd_write (char Data,char CD) |
3 | //------------------------------------------------------------------------------
|
4 | {
|
5 | |
6 | |
7 | //Wait until LCD is ready
|
8 | //while ((lcd_read(0)&(1<<BUSYBIT)) > 0 && timeout++ < 500) {};
|
9 | |
10 | //Set Port Direction Register to Output for LCD Databus and LCD Controlbus
|
11 | //LCD_Port_DDR = LCD_DataOutput+(1<<LCD_RS | 1<<LCD_RW | 1<<LCD_E | 1<<LCD_LED);
|
12 | DDRA = 0xFF; |
13 | |
14 | |
15 | //Soll ins Seuer oder Datenregister geschrieben werden?
|
16 | |
17 | if (CD == 0) |
18 | {
|
19 | PORTA &= ~(1<<LCD_RS); //RS = 0 Steuerregister |
20 | }
|
21 | else
|
22 | {
|
23 | PORTA |= (1<<LCD_RS); //RS = 1 Dataregister |
24 | }
|
25 | |
26 | //Schreibsignal setzen
|
27 | PORTA &= ~(1<<LCD_RW);//Zum Schreiben RW-Pin = Low |
28 | |
29 | |
30 | //Schreiben der 1. 4Bit an das LCD Display
|
31 | ucTempPortA = (Data & 0xF0); |
32 | ucTempPortA = (ucTempPortA >>1); |
33 | //uiTempPortA = (uiTempPortA << 3);
|
34 | //PORTA |= 0x78 & (uiTempPortA << 3); //Write Nibbel MSB
|
35 | PORTA = ucTempPortA; |
Gratuliere. Mit der letzten Zuweisung an PORTA hast du die ganze vorher mühsam gemachter Einstellung des RS bzw RW Bits am LCD zur Makulatur gemacht.
OK, das habe ich nicht bedacht... Werde diese Stellen überarbeiten... Bis Später. Danke André PS: Arbeitszimmer 36 °C ;-)
So, jetzt läuft es. Ich hatte den Originalcode vorher auch schon verwendet hatte aber einen Denkfehler und habe es daher selbst versucht... :-) Die überarbeitung hat es gebracht. Eine kleines Problem besteht jedoch nach wie vor. Die zweite Displayzeile lässt sich nicht adressieren. Wenn hier jemand eine Idee hat währe icg dankbar. Lg André PS.: Arbeitszimmer 39°C ;-)
Andre Wojciech schrieb: > Eine kleines Problem besteht jedoch nach wie vor. Die zweite > Displayzeile lässt sich nicht adressieren. gib einen langen String in der 1. Zeile / 1. Spalte aus "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" und dann sieh nach welches Zeichen in der 2. Zeile / 1. Spalte als erstes auftaucht. Abzählen im langen String ergibt dir dann den Offset, den du bei den Cursorpositionierroutinen für die 2. Zeile eintragen musst.
Hi Die zweite Zeile beginnt meist auf Adresse $40. Da könnte der String zu kurz sein. Mf Spess
Nix zu machen. Der Displaykontroller fängt in der gleichen Zeile wie an. Die zweite Zeile wird gar nich angesprochen. Hier noch mal die Initialisierung des KS0066U: Ich bin für jeden Vorschlag dankbar. Lg André DDRA = 0xFF; //Wait a short Time afer Power on _delay_ms(100); lcd_write (0x20,0); //FunktionSet lcd_write (0x20,0); lcd_write (0xC0,0); //2Lines & Display On _delay_ms(1); lcd_write (0x0F,0); //Display on Coursor on Blink on _delay_ms(1); lcd_write (0x01,0); //Display Clear _delay_ms(2); lcd_write (0x07,0); //Display Clear
Hi > lcd_write (0xC0,0); //2Lines & Display On 'Function Set' für 4-Bit und 2 Zeilen ist $28. >lcd_write (0x07,0); //Display Clear Das ist eigentlich 'Entry Mode Set' MfG Spess
Habe ich ausprobiert, keine Veränderung. Die zweite Zeile lässt sich weder mit C0 noch mit 28 aktivieren. Mittlerweile habe ich - OptimizerLevel - Timing - Portsetting - Display getauscht - ne runge um en Block gemacht ausprobiert alles ohne erfolgt. Vielleicht hat noch wer eine Idee. Würde mich freuen Lg André
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.