Guten Abend zusammen, habe zum ersten mal ein lcd display. habe es wie im tutorium zusammengelötet und am avr angeschlossen. wenn ich jetzt den strom anschliesse (nur den strom) dann kommt nur ein schwarzer balken auf dem display statt den 2 die ich brauchen würde (2x16). woran könnte es liegen? ich hab mal versucht das programm zu starten aber das display will auch nicht initialisieren :( wäre dankbar für jede hilfe :)) grüße ps ich verwende die subroutinen aus dem lcd tutorium
Die Fehlerbeschreibung passt zu dem Bild Softwareinitialisierung geht schief. Hardwaremäßig kann die Schaltung Probleme haben und/oder ein inkompatibles LCD verbaut sein. Man müsste also mal kritisch auf das unbekannte Datenblatt und den nicht vorhandenen Schaltplan linsen, um grobe Designfehler auszuschließen und anschließend auf die tatsächlich aufgebaute Geheimschaltung spieken und vielleicht sogar mit einem spitzen Voltmeterchen daran rumpeeken. Softwaremäßig kann es an Timingfehlern liegen. Das ist möglich, wenn das Projekt in der Entwicklungsumgebung falsch aufgesetzt wurde, also der µC hardwaremäßig nicht zur Software passt. Ausschließen könnte man dies, wenn du es schaffst Projekte aufzusetzen, die ein reproduzierbares Timing im µs und ms Bereich einhalten, wie z.B. die berüchtigte genau blinkende LED.
hi, erst mal danke für deine antwort. also das display nennt sich lcd162c (kontroller ist der ks0070b) also auf jeden fall kompatibel. die timings habe ich erst mal weit über die im db gesetzt, sicherheitshalber (ja unnötig aber ich wollte erst mal fehlerquellen auslöschen) mit dem voltmeter habe ich auch bereits geschaut, alles hat verbindung wie es sollte. pinbelegung sieht wie folgt aus:
1 | /*
|
2 | Pin #-LCD Bezeichnung-LCD Pin-µC Pin an J40 Farbe Kabel
|
3 | -----------------------------------------------------------------------
|
4 | 1 Vss GND GND Schwarz
|
5 | 2 Vcc 5V Vcc Weiß
|
6 | 3 Vee GND / Poti GND Braun
|
7 | 4 RS PD4 30 Grau
|
8 | 5 RW GND GND Braun
|
9 | 6 E PD5 31 Lila
|
10 | 7 DB0 offen
|
11 | 8 DB1 offen
|
12 | 9 DB2 offen
|
13 | 10 DB3 offen
|
14 | 11 DB4 PD0 26 Blau
|
15 | 12 DB5 PD1 27 Grün
|
16 | 13 DB6 PD2 28 Gelb
|
17 | 14 DB7 PD3 29 Orange
|
18 | */
|
ich denke es muss was damit zu tun haben das auf einem zweizeiligen lcd nur eine zeile angezeigt wird, wenn ich den strom einschalte sollten ja eigentlich 2 schwarze balken erscheinen.
Hi >ich denke es muss was damit zu tun haben das auf einem zweizeiligen lcd >nur eine zeile angezeigt wird, wenn ich den strom einschalte sollten ja >eigentlich 2 schwarze balken erscheinen. Nein. Nach dem Einschalten sieht der Controller das Display als einzeilig an. Einzeilig korrespondiert aber nicht unbedingt mit den sichtbaren Zeilen eines Displays. MfG Spess
> Pin-µC Welchen µC hast du? > Pin an J40 J40 hört sich nach der Kontaktleiste auf einem der Pollin-Boards an. Ist das so? > die timings habe ich erst mal weit über die im db gesetzt, > sicherheitshalber (ja unnötig aber ich wollte erst mal fehlerquellen > auslöschen) Worst case hast du z.B. einen Faktor 16 im Timing drin, z.B. 1 MHz statt 16 MHz. Nach oben oder unten... Bist du sicher, dass deine sicherheitshalber gesetzten Zeitwerte dann auch noch stimmen? >> ps ich verwende die subroutinen aus dem lcd tutorium Welches? AVR-Tutorial: LCD (Assembler) oder AVR-GCC-Tutorial/LCD-Ansteuerung Ich vermute die C Version. Dann wäre deine Pinbelegung die unveränderte aus der Includedatei lcd-routines.h. > wenn ich den strom einschalte sollten ja > eigentlich 2 schwarze balken erscheinen. Eigentlich nicht, weil 1. der gleichzeitig eingeschaltete µC in der Initialisierung ziemlich fix das LCD löscht, wenn alles richtig ist und 2. Anwender normalerweise den Kontrast so einstellt, dass das Display nicht dauerhaft zwei schwarze Balken zeigt.
Hi Es gibt viel mehr Dinge in Tutorials als sich Himmel und Erde träumen lassen. MfG Spess
Stefan B. schrieb: >> Pin-µC > > > > Welchen µC hast du? > > > >> Pin an J40 > > > > J40 hört sich nach der Kontaktleiste auf einem der Pollin-Boards an. Ist > > das so? also als controller setze ich meinen kleinen liebling ein, den tiny2313. hätte aber auch noch ein paar atmega16 rumliegen so ist es nicht.. das board stimmt so, ist das funk avr board von pollin. >> die timings habe ich erst mal weit über die im db gesetzt, > >> sicherheitshalber (ja unnötig aber ich wollte erst mal fehlerquellen > >> auslöschen) > > > > Worst case hast du z.B. einen Faktor 16 im Timing drin, z.B. 1 MHz statt > > 16 MHz. Nach oben oder unten... Bist du sicher, dass deine > > sicherheitshalber gesetzten Zeitwerte dann auch noch stimmen? also mit den timings das müsste stimmen, dazu verwende ich die delay routinen und keinen timer (cpu speed ist ebenfalls richtig eingestellt auf 8MHz) >>> ps ich verwende die subroutinen aus dem lcd tutorium > > > > Welches? AVR-Tutorial: LCD (Assembler) oder > > AVR-GCC-Tutorial/LCD-Ansteuerung > > > > Ich vermute die C Version. Dann wäre deine Pinbelegung die unveränderte > > aus der Includedatei lcd-routines.h. genau, die c version. sind recht einfache routinen und ich habe sie meinen bedrürftnissen ein wenig angepasst, aber funktionieren dennoch nicht (die originalen habe ich gestern auch noch probiert) > >> wenn ich den strom einschalte sollten ja > >> eigentlich 2 schwarze balken erscheinen. > > > > Eigentlich nicht, weil > > > > 1. der gleichzeitig eingeschaltete µC in der Initialisierung ziemlich > > fix das LCD löscht, wenn alles richtig ist und wie gesagt ich hatte erst einmal nur den strom eingeschalten, ohne angeschlossenes lcd. ist das dann trotzdem so??? > > 2. Anwender normalerweise den Kontrast so einstellt, dass das Display > > nicht dauerhaft zwei schwarze Balken zeigt. den kontrast (Vee) habe ich dauerhaft auf masse, also max kontrast. werde ihm heut mal ein kleines poti verpassen um auch diese fehlerquelle auszulöschen. danke für die antwort, werde auf jeden fall nochmal die timings durchschauen, vielleicht habe ich im avr studio die falsche taktung eingestellt. sicher ist sicher :)) noch ideen???
e-tec schrieb: > also mit den timings das müsste stimmen, dazu verwende ich die delay > routinen und keinen timer (cpu speed ist ebenfalls richtig eingestellt > auf 8MHz) Sorry, ich halte es da mit dem alten Herrn Lenin http://de.wikipedia.org/wiki/Vertrauen_ist_gut,_Kontrolle_ist_besser! Anfänger meinen oft, die Einstellung der cpu speed sei mit der Angabe der F_CPU im Quelltext oder in den Projekteinstellungen (AVR Studio) erledigt. Das ist aber nur ein Viertel der notwendigen Voraussetzungen. Des weiteren muss 1. eine funktionsfähige externe Taktquelle angeschlossen sein (bei dir wahrscheinlich OK: 8 MHz Quarz) 2. die AVR Fuses auf die externe Taktquelle programmiert sein. Dabei "beliebte" Probleme: Falsche Taktquelle oder Teiler-durch-8 3. bei Benutzung von delay.h mit Optimierung kompiliert werden Der Praxistest mit genau blinkender LED zeigt im Erfolgsfall, dass alle vier Punkte richtig erfüllt sind. > genau, die c version. sind recht einfache routinen und ich habe sie > meinen bedrürftnissen ein wenig angepasst Software kann Fehler haben, selbst die Routinen aus dem Tutorial. Vielleicht wurden die inzwischen aktualisiert und nicht mehr geprüft oder sind für einen anderen AVR usw. Deshalb würde ich immer die Quellcodes an meine Fragen anhängen. Das vermeidet zeitaufwändige Rückfragen ("Quellcode?") aber stört als Anhang den Lesefluß nicht. Und die eigenen Änderungen gegen das Original würde ich auffallend kennzeichnen.
> Des weiteren muss > > 1. eine funktionsfähige externe Taktquelle angeschlossen sein (bei dir > wahrscheinlich OK: 8 MHz Quarz) Muss es denn unbedingt eine externe Taktquelle sein ?!?!? Geht da nicht auch der interne Takt ?
Sebastian K. schrieb: >> Des weiteren muss >> >> 1. eine funktionsfähige externe Taktquelle angeschlossen sein (bei dir >> wahrscheinlich OK: 8 MHz Quarz) > > > Muss es denn unbedingt eine externe Taktquelle sein ?!?!? Geht da nicht > auch der interne Takt ? Natürlich. Solange er auch tatsächlich aktiv ist. So kritisch ist das bei LCD nicht, im Zweifel bleibt man eben etwas auf der sicheren Seite (sprich: Alle delays etwas länger). Wichtig ist nur, dass man wenigstens ungefähr mit dem Takt rechnet, den der µC auch tatsächlich macht. Vertrauen ist gut, Kontrolle ist besser. Mit einer blinkenden LED abzuklären, ob die vermuteten 8Mhz auch tatsächlich 8Mhz sind, kostet nichts. Und so mancher hat sich hinterher schon gewundert, warum seine blinkende LED nicht 1-mal in der Sekunde blinkt (wie im Programm vorgesehen), sondern nur alle 8 Sekunden einmal. Ob das jetzt 8Mhz oder 7.9 oder 8.1Mhz sind, ist bei LCD nicht relevant. Wenn aber der µC tatsächlich nur 1Mhz macht, im Programm aber mit 8 gerechnet wird, dann ist das relevant.
Ok, weil ich habe den LCD an meinen Controller nur an den internen Takt (Atmega8) auf 4Mhz gefuset. Ich verfolge das Thema hier da ich auch ab un zu ein schwarzen Balken in der ersten Zeile habe wenn ich die Versorgungspannung (12 Volt) von dem ganzen Board abziehe. Bei jedem zehnten mal startet das LCD nicht mehr..... Kann das mit dem Takt zu tun haben ?
Sebastian K. schrieb: > Ok, weil ich habe den LCD an meinen Controller nur an den internen Takt > (Atmega8) auf 4Mhz gefuset. Ich verfolge das Thema hier da ich auch ab > un zu ein schwarzen Balken in der ersten Zeile habe wenn ich die > Versorgungspannung (12 Volt) von dem ganzen Board abziehe. Bei jedem > zehnten mal startet das LCD nicht mehr..... Kann das mit dem Takt zu tun > haben ? Mach die erste Wartezeit, nach der dann die Initialisierung des LCD beginnt, etwas länger. Auch ein LCD benötigt nach dem Anlegen der Versorung eine gewisse Zeit, bis sein interner µC soweit ist, dass er das erste Kommando annehmen kann.
Guten Ansatz, warum bin ich da nicht drauf gekommen ?!?!?! Danke....
> Mach die erste Wartezeit, nach der dann die Initialisierung > des LCD beginnt, etwas länger. und manche Displays brauchen nicht nur 1 (eine) Initialisierung sondern deren 3 (drei) !!! Schau Dir mal folgende Seite an, da steht das genau beschrieben (und die Wartezeiten müssen manchmal noch länger sein, manchmal reicht auch kürzer, das muss man ausprobieren) http://sprut.de/electronic/lcd/index.htm -> Beispiel für eine Initialisierung mit 8-Bit Interface
ich benutze die Routenen lcd-routines.h und .c da wird da ist das ja alles schon ontegriert. Habe die Wartezeit vergrössert, bis dato ist noch nichts wieder passiert. (50mal ausgeschaltet)
Nimm das Datenblatt, da wird ein Flußdiagramm zur Initialisierung drin sein. Vergleiche dieses mit der Software. Zu schnell dürfen die Timings auf gar keinen Fall werden, da der Display-Controller diese Mindestzeiten benötigt. Wird das Timing zu langsam, z.B. wenn der µC aus Energiespargründen den Takt niedriger schaltet, macht das in der Regel nichts. Höchstzeiten an Timings sollte es nicht geben. Notfalls sollte so ein Display sogar noch von Hand z.B. mit DIP-Schaltern bedienbar sein. Ich selbst habe einen µC, der den Takt schon mal durch 8 teilt. Dann funktioniert das Display immer noch bestens. Zur Fehlersuche könntest du also den Takt verringern, bzw. auch alle Timings mal verlängern. Und: Bei mir gab es auch anfangs Probleme, bis es reibungslos lief.
Stefan B. schrieb: > Des weiteren muss > > > > 1. eine funktionsfähige externe Taktquelle angeschlossen sein (bei dir > > wahrscheinlich OK: 8 MHz Quarz) > > > > 2. die AVR Fuses auf die externe Taktquelle programmiert sein. Dabei > > "beliebte" Probleme: Falsche Taktquelle oder Teiler-durch-8 > > > > 3. bei Benutzung von delay.h mit Optimierung kompiliert werden > > > > Der Praxistest mit genau blinkender LED zeigt im Erfolgsfall, dass alle > > vier Punkte richtig erfüllt sind. na also ein blutiger anfänger bin ich nun auch wieder nicht...:) die fusebits werden bei mir bei jedem neuen avr gesetzt, zudem der praxistest mit der led wird auch ab und an mal gemacht (hierzu t0 auf prescaler von 1024 bei 8 MHz gibt das ca 33ms (genau 32768µs), nun das ganze bei jedem 30ten mal die led anschalten und schon blinkt sie schön regelmässig mit 1Hz) bei der init habe ich mich genau an das datenblatt gehalten mit den befehlen und den zeiten. mir ist gestern abend aufgefallen das der enable immer mal wieder das blinken anfängt (auf dem pollin bard ist an pd5 eine led)
e-tec schrieb: > na also ein blutiger anfänger bin ich nun auch wieder nicht...:) Sorry, bei registrierten Usern schaue ich manchmal nach, wie viele Beiträge bereits geschrieben wurden (<10 oder >1000). Und per Suche was bisher geschrieben wurde, eventuell sogar ob die Hardware irgendwo ausführlicher beschrieben ist. > mir ist gestern abend aufgefallen das der enable immer mal wieder das > blinken anfängt (auf dem pollin bard ist an pd5 eine led) Das wäre IMHO mal beruhigend: Wenn diese Leitung statisch wäre, könnte das LCD nicht funktionieren.
so, eingeloggt... sorry bin im geschäft deswegen eig nur als gast :) > Das wäre IMHO mal beruhigend: Wenn diese Leitung statisch wäre, könnte > das LCD nicht funktionieren. ???
> ???
Ich rate mal, du verstehst irgendwas nicht. Dann erläutere ich mal
irgendwas.
Um das LCD anzusteuern wird vom µC regelmäßig auf der E Leitung
geklappert.
Die an den Datenleitungen anliegenden Daten werden bei fallender Flanke
der E Leitung vom LCD Controller übernommen. Die E Leitung muss eine
gewisse Mindestzeit logisch low bleiben und vorher eine gewisse Zeit
logisch high sein (Timing).
Also müsste einem eine E Leitung, die überhaupt nicht klappert (sichtbar
durch die "Spion"-LED die statisch/immer aus oder an ist), einem Sorgen
machen.
ahhh :)) danke für die erklärung, bin was lcd displays angeht nicht wirklich fit... aber das kommt noch
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.