Hallo, ich habe mir ein Lcd an den ATMega8 angeschlossen und benutze zur Ansteuerung die Lib von Fleury. Allerdings wird leider nichts angezeigt. Habe schon im Forum alle möglichen Beiträge zu den Lcds durchgelesen und einige Tipps bekommen. Leider hat keiner etwas genutzt. Ich weiß einfach nicht mehr weiter und hoffe, dass jmd den Fehler findet. Das Lcd ist ein Display der Firma Displaytech. Das Modell ist ein 204A. Das Datenblatt [1] habe ich auch gefunden und dadurch die Lib von Fleury angepasst. Der Mega8 wird extern von einem Quartz (3,8684 MHz) getaktet. Auch dies habe ich in der Lib angepasst. Alles leider ohne Erffolg. Habe auch ein bisschen probiert, indem ich genau den Takt und zwischen HD44780 und KS0073 gewechslte habe. Alles hat leider nichts gebracht. Habe die lcd.h mal angehängt zum nachschauen. Das Lcd ist wie folgt an den ATMega8 angeschlossen: LCD ATMega8 1 GND 2 5V 3 Kontrast 4 PortD(5) 5 PortD(6) 6 PortD(7) 11 PortB(0) 12 PortB(1) 13 PortB(2) 14 PortB(3) Beim Einschalten des Lcds wird die 1. und 3. Linie dunkel. Lade ich ich das Programm in den Mega8, so werden alle 4 Zeilen "angezeigt". Allerdings bekomme ich keinen Text auf das Lcd. Ich denke also, dass die Initialisierung funktioniert, aber die Daten kommen nicht richtig rüber. --- [1] http://displaytech.com.hk/pdf/char/204a%20series-v12.PDF
Hab ich die lcd.h vergessen anzuhängen und unter bearbeiten will er es nicht. Dann halt so.
Hihi, ich hatte ähnliche Probleme. Prüfe Deine HW nochmal durch, ist alles richtig angeschlossen? Ich habe zwei Wochen unbewusst meine RESET-Funktion getestet, und sie hat zumindest so gut funktioniert dass das Display (bis auf die beiden schwarzen Balken) tot war.... Die Contrast-Spg muss auf ca 1.24V stehen, wenn dieser zu hoch eingestellt ist sieht man auch nur die schwarzen Balken... Hoffe geholfen zu haben... Hoschi
Das komische ist halt nur, dass das Programm das Display aktiviert. Dass also die Balken verschwinden. Am Kontrast habe ich ein Poti sitzen, wodurch ich den Kontrast regeln kann. Werde nochmal die HW durchschauen.
Das bewußte LCD hat mit Peters Lib bei mir funktioniert, allerdings hatte es beim Reset irgendwelche Timingprobleme, machmal gins richtig, manchmal nicht. Das Ding leif an einem ATMEGA16 mit 16MHz, liegt momentan aus Zeitgründen in der Ecke...bin noch nicht fertig damit. Gruß, Holm
Bei dir hat es ja wenigstens ein bisschen was gemacht. Zumindest manchmal ;) Aber leider scheinst du auch noch keine richtige Lösung parat zu haben. Wenn es wirklich Timingprobleme sind, dann könnte es doch helfen ein bisschen mit den Selbigen ein bisschen zu probieren. Ich werd das mal versuchen. Mal sehen, was bei rauskommt. Schließlich lief es ja früher unter Linux mit lcd4linux.
Bei einem meiner Displays ist es so, dass ich noch dem Reset eine etwas längere Wartezeit einlegen muss, bevor die Init-Sequenz des Displays losgeht. Anscheinend braucht der LCD-Controller etwas länger für seinen Reset.
Wie könnte ich diese Wartezeit denn realisieren? Ist diese Wartezeit nur beim ersten Start notwendig oder öfters?
Meist ist es ja so, dass als erstes im Program irgendwelche Initialisierungen gemacht werden (Ports, Timer, etc). Das zieh ich dann vor und mach erst zum Schluss die LCD Initialisierung. Wenn das nicht reichen sollte kannst du ja mit _delay_ms noch eine Zeitlang warten. > Ist diese Wartezeit nur > beim ersten Start notwendig oder öfters? Bei mir wars nur nach dem ersten einschalten. Ich sagte doch: Der Controller scheint nach einem Reset eine zeitlang zu brauchen, bis er voll da ist.
> Ich sagte doch: Der Controller scheint nach einem Reset eine zeitlang > zu brauchen, bis er voll da ist. Korrekt. Laut Datenblatt Display Seite 6 sind es 15 ms nachdem VDD 4,5 V erreicht hat. Laut Datenblatt Controller KS0066U Seite 27 (*) sind es sogar 30 ms. Eine Besonderheit im Datenblatt: Es ist nur ein Flussdiagramm für die Initialisierung mit 8-Bit-Interface angegeben. Arnulf hat das LCD hardwaremässig so angeschlossen, wie es einem 4-Bit-Interface entspricht. Es ist z.B. durch Suche ähnlicher Projekte mit diesem LCD bzw. dessen Controller (KS0066U (*) or equiv. NICHT HD44780/KS0073) nachzusehen, ob 4-Bit-Interface mit diesem LCD überhaupt funktioniert. (*) http://www.pacificdisplay.com/ics_app%20notes/samsung/KS0066U.pdf
Hallo, das Datenblatt spricht nicht dagegen, Beispiel ist ja drin. Allerdings weicht Init merklich vom Verhalten der HD44780 ab. Gruß aus Berlin Michael
Michael U. wrote: > Allerdings weicht Init merklich vom Verhalten der HD44780 ab. Wie meinst du das? Ich habe mir ein Datenblatt zum HD44780 [1] angesehen und speziell den Init-Prozess. Der stimmt überein mit dem im Datenbaltt vom 204A. Trotzdem habe ich versucht die Verzögerungszeiten zu ändern. Alle raufgesetzt. Leider nicht geholfen. Jetzt weiß ich abolut nicht mehr weiter... Laut Datenblatt ist der Init-Prozeß gleich. Also kann das Timing doch nicht mehr das Problem sein. Oder schaue ich an der flaschen Stelle Michael? --- [1] http://web.mit.edu/6.115/www/datasheets/44780.pdf
Hallo, ich habe mich nur auf den Post von Stefan bezogen, daß es einen KS0066U drauf hat... In dessen Datenblatt wird für 4 Bit direkt 2x 0x20 gesendet, dann sofort die Anzahl Zeilen, dann 39µs warten. Ein HD44870 besteht dagegen auf seine 0x30 mit Pausen bevor auf 4Bit umgeschaltet werden kann. Die Init-Wartezeit ist beim KS0066U auch mit 30ms doppelt so lang angegeben. Weiter habe ich nicht verglichen, habe keins mit KS0066U zur Hand. Gruß aus Berlin Michael
Hmm.... ich sehe schon. Das Datenblatt vom Hersteller des Displays weicht vom Datenblatt des Chipherstellers ab. Dann werd ich mir wohl eine eigene Routine schreiben müssen, um den KS0066U in Betrieb nehmen zu können. Ohje, dass kann ja was werden.
Bevor du dir die Arbeit machst: Kannst du auf der Rückseite vom Display erkennen, welcher Controller drauf ist? Oder ist da - wie so oft - ein dicker schwarzer Klecks Pampe auf dem IC?
...also ich hab das Display 204B mit nem KS0066U µC von Reichlt und benutze die lcd.c und die lcd.h von Fleury ohne Probleme... Allerdings verwende ich den ATMEGA32... Fakt ist aber dass das Display ohne eigene Routinen vollständig läuft....
...hier ist mein Programm... /***************************************************************** *Programm zur Ansteuerung der ADC-PORTS PA0-PA7 über einen Poti. * *Analogwert soll in einen Digitalwert gewandelt. Die Ausgabe des * *Wertes erfolgt über ein LCD-Display. #include <stdlib.h> #include <avr/io.h> #include <avr/pgmspace.h> #include "lcd.h" #include <stdio.h> int main(void) { lcd_init(LCD_DISP_ON); /*Display einschalten*/ int result; char buffer[6]; ADCSRA = _BV(ADEN) | _BV(ADPS0) | _BV(ADPS1) | _BV(ADPS2); /*AD-Wnadler initialisieren mit "|" -> "oder-Operator"und die einzelnen Bits zu setzen - die _BV() ist als Funktion deffiniert*/ ADMUX = _BV(REFS1) | _BV(REFS0); /*AD-Wandler Multiplexregister initialisieren*/ for (;;) { ADCSRA |= _BV(ADSC); /*AD-Wandler neu "anstoßem*/ while (ADCSRA & _BV(ADSC) ) /*warten bis die AD-Wandlung fertig ist*/ { }//end while result = ADC; /*AD-Wandlungsergebnis aus dem ADC- Register abholen*/ itoa(result,buffer,10); /*10Bit anpassung des ADC Wertes als Integer Wert*/ lcd_gotoxy(0,0); /*Cursor auf Display 1. Zeile*/ lcd_puts("ADC:"); /*ADC schreiben*/ lcd_gotoxy(0,1); /*Cursor aus Display 2. Zeile*/ lcd_puts(buffer); /*Wert ausgeben*/ }//end for }//end main Zur Ansteuerung des ADCßs hab ich zum probieren einfach nen Potit zwischen VCC und GND geschaltet. Der Abgriff geht dann ohne weiter Beschaltung auf PAx. Wie gesagt, mit dem ATMEGA32 funtzt das Programm..... Hoschi
Könntest du auch noch die lcd.h anhängen das wäre sehr nett. Dann könnte ich die mit meiner vergleichen und anpassen. Vllt. Läuft es dann ja wirklich. Was mir noch eingefallen ist: Es ist doch kein Problem, dass ich Data und Control pins an zwei verschiednen Ports habe, oder? In der lcd.h habe ich sie richtig eingestellt und in der lcd.c ist ja auch eine if Abfrage, wenn Data und Control an verschiedenen Ports liegen.
...zunächst mal hier die lcd.h. Prinzipiell ist es kein Problem die pins und ports frei einzustellen, wobei der PORTD hier etwas riskant ist. Ich wollte die komplette Anteuerung vom Display über PORTD realisieren, leider ging dass nicht. Warum allerdings weis ich bis heute noch nicht. Jedenfalls hats mit PORTB und den selben Einstellungen (natürlich hab ich den PORT in der lcd.h verändert) wunderbar funktioniert.... Hoschi
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.