Hallo! Ich mache dertzeit gerade das AVR-Tutorial auf der Website durch und habe Probleme mit dem LCD-Teil. Ich habe das LCD wie beschrieben (http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD) angeschlossen und das dazugehörige Programm per AVR-Studio compiliert und mit meinem USB-ISP-Kabel in den Kontroller (ATMEGA8) erfolgreich eingefügt. Leider passiert dann aber überhaupt nichts. Das einzige was ich sehe sind die 2 schwarzen Balken, die ich aber sehe sobald ich Spannung über das Board (Olimex P28) anlege. MfG AP
Dann funktioniert die Initialisierung des LCDs nicht korrekt. Wie hast du es denn genau angeschlossen? Hast du auch alle Teile des Quelltextes übernommen und auch - ich sag mal - verstanden?
Schon wieder einer;) Der wievielte ist das jetzt? >Ich habe das LCD wie beschrieben >(http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD) >angeschlossen Das kann ja jeder sagen. Prüf mal deine Verdrahtung.
Ich hab's schon mehrmals überprüft. Das einzige was ich geändert habe ist, dass ich für den 3. Pin des LCD kein Poti benutzt habe. Den Quelltext konnte ich eins zu eins übernehmen. Verstanden habe ich ihn denke ich schon. Zwischen dem 15. Pin (Bildschirmbeleuchtung)und VCC habe ich noch einen 220 Ohm Widerstand eingefügt. Das sind die einzigen Änderungen die ich vorgenommen habe.
Danke Peter...ich werde mir die Seite mal anschauen. An sich bin ich ja gerade dran das ganze auf Assembler zu lernen. Allerdings kann ich C schon besser. Vielleicht sollte ich also damit anfangen.
AP schrieb: > Das einzige was ich geändert habe > ist, dass ich für den 3. Pin des LCD kein Poti benutzt habe. Schonmal an eine fehlerhafte Kontrastspannung gedacht? Ist die Spannung zu hoch/niedrig, kann man nicht mehr zwischen ein- und ausgeschalteten Segemente unterscheiden - entweder erscheint alles "schwarz" (eingeschaltet) oder "grün" (ausgeschaltet) - ja nach dem, welche Farbgebung das Display hat. Auf welchem Potential liegt VEE denn bei dir?
AP schrieb: > Das einzige was ich geändert habe > ist, dass ich für den 3. Pin des LCD kein Poti benutzt habe. Was hast du denn sonst gemacht? Was hat der Pin für eine Funktion? Welche Spannung sollte denn da anliegen? Das ist, wie wenn du ein Autorennen fährst, das dann verlierst und hinterher sagst: ich habe alles gleich gemacht, nur den Zündschlüssel habe ich nicht rumgedreht... :-/
Der 3. Pin auf dem LCD ist für die Kontrastspannung zuständig. Bei mir liegt er auf GND. Man kann den Kontrast anscheinend über ein Poti erhöhen, das man zwischen GND und +5V schaltet. Über diese Poti soll man dann eine negative Spannung legen. Ich weiß leider nicht wie ich so eine negative Spannung ohne zusätzliche Stromquelle erzeugen kann. Ich glaube eigentlich nicht, dass es sich um einen Fehler beim Kontrast handelt. Wenn ich Strom an das Board lege sehe ich die einzelnen Felder, sowie die Zwischenräume sehr deutlich. Eine Frage noch: Im Tutorial steht, dass man den VCC-Pin des LCD mit +5V verbinden soll. Liege ich Recht in der Annahme, dass damit der VCC-Pin des Controllers gemeint ist? MfG AP
Kann es etwas mit der Taktfrequenz zu tun haben? Der ATMEGA8 hat ja eien Taktfrequenz von 4MHz. Mein Board verfügt aber über ein externes Quarz mit 8MHz. Ich weiß aber leider nicht ob es aktiviert ist. Wie könnte ich das denn herausfinden?
Du könntest die Fuse-Bits auslesen und damit sehen, auf welche Takt-Rate und welchen Takt-Typ der Controller eingestellt ist.
Hi >Über diese Poti soll man >dann eine negative Spannung legen. Ich weiß leider nicht wie ich so eine >negative Spannung ohne zusätzliche Stromquelle erzeugen kann. Eine negative Spannung gegenüber VCC . MfG Spess
Hallo! Ich habe im AVR-Studio bei "Fuses" auf "Read" gedrückt und es erscheint: Int. RC Osc. 1MHz Wenn der AVR intern getaktet wird, sollte doch hier eigentlich 4MHz stehen, oder? Könnt ihr mir sagen wie ich das mit "negativ gegen VCC" anstelle?
AP schrieb: > Hallo! > > Ich habe im AVR-Studio bei "Fuses" auf "Read" gedrückt und es erscheint: > > Int. RC Osc. 1MHz Dann läuft der Controller nur mit 1MHz - Es sind aber bis zu 4MHz intern möglich . (Plenken wegen der Formatierung.) "The device is shipped with CKSEL = “0001” and SUT = “10” (1 MHz Internal RC Oscillator, slowly rising power)." Und: "The calibrated internal RC Oscillator provides a fixed 1.0, 2.0, 4.0, or 8.0 MHz clock. All frequencies are nominal values at 5V and 25°C. This clock may be selected as the system clock by programming the CKSEL Fuses as shown in Table 9."
>Eine negative Spannung gegenüber VCC . Wozu? Siehe unten. >Das einzige was ich sehe sind die 2 schwarzen Balken, Auf was für einem Display? Zwei Zeilen? Dann ist der Kontrast evtl. zu weit aufgedreht. >Der 3. Pin auf dem LCD ist für die Kontrastspannung zuständig. Bei mir >liegt er auf GND. Dann schliess da ein Poti an. Oder Vcc-10k-Vee-1k-Gnd.
So... Ich habe jetzt die Schaltvariante mit VCC-10K-VEE-1k-GND ausprobiert. Dabei konnte ich beobachten, dass bei dieser Schaltung der untere Balken des LCD verschwindet. Der obere bleibt. Selbst wenn ich überhaupt keine Verbindung zu GND habe, bleibt der obere Balken erhalten. Weiß jemand wie das möglich ist? Lötdefekte oder ähnliches???
Bei meinem 16x2-LCD ist es so: Spannung ein: Zeile 1 schwarz, Zeile 2 blau. µC (Tiny2313) initialisiert das Display (wie im Tutorial) im 4bit-Modus. Konfiguration auf 2 Zeilen. Zeile 1 und Zeile 2 sind danach schwarz. Display-Clear-Befehl wird gesendet. Beide Zeilen des Display werden blau. Danach folgt noch ein Cursor-Reset nach oben links, und danach wandern meine Texte lustig in das Display, wie sie sollen.
Ich habe jetzt wirklich alles nochmal überprüft. - die Lötstellen - die Taktfrequenz - den Codev (darauf geachtet, dass es ein 2x16 LCD mit 5x8 Matrizen ist) Ich weiß jetzt echt nicht mehr weiter...
AP schrieb: > Ich habe jetzt wirklich alles nochmal überprüft. > - die Lötstellen > - die Taktfrequenz > - den Codev (darauf geachtet, dass es ein 2x16 LCD mit 5x8 Matrizen ist) > > Ich weiß jetzt echt nicht mehr weiter... Logikanalysator anschliessen oder einfacher: uC in EInzelschrittbetrieb laufen lassen une bei jedem Schritt den Pegel an den LCD-Pins messen. Gruss Michael
AP schrieb: > Dabei konnte ich beobachten, dass bei dieser Schaltung der untere Balken > des LCD verschwindet. Der obere bleibt. Nun ist zumindest der Kontrast korrekt! Bei einem uninitialisierten Display wird nämlich nur die erste Zeile angesteuert. Mach doch mal ein Foto von Deinem Aufbau und stell dies hier ein. Besser 2: Eins von oben, eins von unten. Aber bitte die Bildgrößen beachten! Gruß Jobst
Hallo! Ich habe leider gerade keine Möglichkeit meinen Aufbau zu fotografieren (Kamera nicht funktionstüchtig). Allerdings habe ich im Internet das Datenblatt meines LCD gefunden. http://www.lcd-module.de/pdf/doma/2_16.pdf Darin ist ein Initialisierungsbeispiel für den 4-bit Modus gegeben, dass deutlich anders aussieht als das im Tutorial. Ich wäre sehr dankbar wenn das jemand der sich auskennt mal etwas anschauen könnte. Den Link zum Tutorial habe ich bereits oben angegeben. Was mich noch wundert ist, dass im Datenblatt (bei der Initialisierung) angegeben ist, dass es sich um 7x5 Matrizen und nicht um 8x5 Matrizen handelt. Auf zweiteres komme ich aber wenn ich beim LCD nachzähle. Wie kann man das verstehen? Fotos kommen in Bälde. MfG AP
Wie stehts mit den Timings? So siehts bei mir aus:
1 | LCD_init: CALL WAIT_15ms |
2 | CALL WAIT_15ms |
3 | |
4 | LDI temp, 0x30 ; jeweils immer mit pause im 8-Bit modus auf 8-Bit setzen |
5 | CALL LCD_command_8 |
6 | CALL WAIT_15ms |
7 | |
8 | LDI temp, 0x30 |
9 | CALL LCD_command_8 |
10 | CALL WAIT_15ms |
11 | |
12 | LDI temp, 0x30 |
13 | CALL LCD_command_8 |
14 | CALL WAIT_15ms ; Display sicher im 8-Bit Mode |
15 | |
16 | LDI temp, 0x20 ; von 8 auf 4 Bit umschalten |
17 | CALL LCD_command_8 |
18 | CALL WAIT_15ms |
19 | ; Display nun im 4-Bit Mode |
20 | |
21 | ; Function Set |
22 | ; 20 = code |
23 | ; 10 = 8Bit - /4Bit |
24 | ; 8 = 2 Zeilen - /1 Zeile (16x1 = 8x2 !) |
25 | ; 4 = 5x10 - /5x7 |
26 | LDI temp, 0x28 |
27 | CALL LCD_command |
28 | CALL WAIT_15ms |
29 | |
30 | ; Display AN |
31 | ; 8 = code |
32 | ; 4 = Display ein - /aus |
33 | ; 2 = cursor aus - /ein |
34 | ; 1 = cursor blink - /still |
35 | LDI temp, 0x0C |
36 | CALL LCD_command |
37 | CALL WAIT_15ms |
38 | |
39 | ; Display loeschen |
40 | ; 1 = code |
41 | LDI temp, 0x01 |
42 | CALL LCD_command |
43 | CALL WAIT_15ms |
44 | |
45 | ; Entry Mode set |
46 | ; Nicht schieben (egal welche Richtung :) |
47 | ; 4 = code |
48 | ; 2 = increment - /decrement |
49 | ; 1 = shift display |
50 | LDI temp, 0x06 |
51 | CALL LCD_command |
52 | CALL WAIT_15ms |
53 | |
54 | RET |
... und das funktioniert ... Gruß Jobst
Hast du vielleicht den gesamten Code zur Verfügung (mit Unterfunktionen und Co.)? Dann könnte ich es mal mit meinem vergleichen und schauen was genau anders ist. Was genau ist zum Beispiel LCD_command
Um den 4-bit Modus zu initialisieren, muss man ja zuerst sicher im 8-bit Modus sein. Deshalb die drei Wiederholungen. Im Datenblatt habe ich nun gelesen, dass man dazu folgendes setzten muss: DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 1 1 0 0 0 Im Tutorial steht nun, dass man DB3 überhaupt nicht anschließen muss. Wie soll ich das verstehen? MfG AP
Wenn Du einen ATmega8 benutzt und ihn wie in der Tabelle ( http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Anschluss_an_den_Controller ) verdrahtet hast, sollte das hexfile problemlos laufen. Gruß Jobst
AP schrieb: > Im Tutorial steht nun, dass man DB3 überhaupt nicht anschließen muss. > Wie soll ich das verstehen? Das Display muss doch trotzdem seine 8-Bit an Daten bekommen. Es werden 2 4-Bit Pakete gesendet. Gruß Jobst
Wenn im Datenblatt bei der Initialisierung für den 4-bit Modus pro "Befehl" 2 Zeilen stehen, meint man damit in der ersten das obere Nibble und in der unteren das untere Nibble?
AP schrieb: > Wenn im Datenblatt bei der Initialisierung für den 4-bit Modus pro > "Befehl" 2 Zeilen stehen, meint man damit in der ersten das obere Nibble > und in der unteren das untere Nibble? Jopp
Sobald das Display initialisiert ist, sollten beide Balken sichtbar sein, oder? Obwohl, sobald ich die Spannung am Kontrast-Pin ändere sehe ich ja auch beide Balken. Den Code habe ich jetzt einmal vollkommen durchgearbeitet und zum Teil auch verändert...nichts. Der Code den du (jobst) mir gegeben hast geht auch nicht. Die Beschaltung stimmt 100%-ig. Das alles richtig läuft und ich es wegen dem Kontrast nicht sehe glaube ich eigentlich nicht. Entweder das Board ist kaputt (den Controller habe ich bereits ausgetauscht), oder das LCD. Mein letzter Versuch wird sein, alles einmal auf den B-Pins durchzuziehen. Sollte das nicht gehen kaufe ich mir ein neues LCD. Ich will das hinbekommen.
Ich glaube nicht, daß das Display kaputt ist. RW liegt an GND ? Bilder wären hilfreich ... Welche Spannungen liegen, nachdem mein Programm durchgelaufen ist, an den Pins des Displays? Angefangen bei Pin1 Nachtrag: Das Programm braucht keine Sekunde. Gruß Jobst
Ja...es funktioniert!!!!! Ich habe jetzt alles mit den B-Pins gemacht und es funktioniert hervorragend. Offensichtlich haben meine D-Pins irgend einen Schaden genommen (Was natürlich sehr schlecht ist.) Allerdings ist es Controller unabhängig. Daher kann ich wohl ausgehen dass mit den Lötstellen etwas nicht stimmt (Obwohl ich eigentlich mehrmals die Stellen überprüft habe, und auch die Spannungen gemessen habe). Was sonst könnte dazu führen, dass die D-Pins versagen? Bis hier her auf jeden Fall schon einmal vielen Dank an alle. Vor allem jobst. Schön dass ihr die Nerven auf bringt solchen Anfängern wie mir zu helfen. MfG AP
Dann würde ich es nun nochmal an den D-Port hängen. Na denn ... Gruß Jobst
Um diese Frage von dir noch zu beantworten: >Was mich noch wundert ist, dass im Datenblatt (bei der Initialisierung) >angegeben ist, dass es sich um 7x5 Matrizen und nicht um 8x5 Matrizen >handelt. Auf zweiteres komme ich aber wenn ich beim LCD nachzähle. Die 7x5 gelten für die Buchstaben, die unterste Reihe Pixel in jeder Zelle ist für den Cursor. Du kannst aber bei selbst definierten Zeichen auch die 8. Pixelzeile nutzen Von hier: http://www.mikrocontroller.net/articles/Pseudo-Graphische_LCD-Ansteuerung fast ganz oben, "Um der Verwirrung zu vorzubeugen:" (Schreibfehler fällt mir gerade auf^^) Gruß -schumi-
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.