Forum: Mikrocontroller und Digitale Elektronik LCD zeig nichts an


von Tirni (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich bin am verzweifeln, ich versuche das lcd zu laufen zu bringen, aber 
außer Kästchen sehe ich nichts. Ich habe vorher alle Pins mit LED´s und 
Voltmeter überprüft das die leitungen ordnungsgemäß funktionieren, aber 
ich bekomme es trotzdem nicht hin, könnte mal jemand drüber schauen ?

als code benutze ich :
$regfile "ATtiny2313.dat"
$crystal = 1000000

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , _
   Db7 = Portb.1 , E = Portb.0 , Rs = Portb.5
Config Lcd = 16 * 2

Locate 1 , 1
Lcd "Hallo Welt"


End

von Karl (Gast)


Lesenswert?

Der Code sieht schon richtig aus. In der BASCOM Hilfe ist er auch so 
ähnlich angegeben, da kann man nicht viel falsch machen.

Bleiben die folgenden Dinge:

Ist alles richtig angeschlossen? Wie ist R/W angeschlossen?

Was ist mit dem Kontrast? Ist evtl. nur der Kontrast zu hoch?

von Tom Z. (tom_z)


Lesenswert?

Füge noch ein "CLS" dazu, also Display löschen.
Aber Achtung nicht in eine Schleife packen die sehr schnell wiederholt 
wird, sonst flackert das LCD.

von Tirni (Gast)


Lesenswert?

R/W habe ich auf GND Geschaltet
beim Kontrast habe ich ein 25K Poti und testweise von ganz rechts bis 
ganz links gedreht, das einzigste was sich verändert ist das ich 
schwarze kästschen sehe

Cls hatte ich schon drin

von M. P. (firstwatt)


Lesenswert?

hi!

auf dem foto hast du aber keine hintergrundbeleuchtung beschalten.
sieht man trotzdem was?

von Kevin (Gast)


Lesenswert?

negative Kontrastspannung?

von Tirni (Gast)


Lesenswert?

Ja man sieht die Kästchen der oberen reihe wenn ich am Poti drehe, dann 
müsste es ja korrekt sein oder ?

von Karl (Gast)


Lesenswert?

Den Tiny konntest Du problemlos programmieren? Ich frage nur, weil Dein 
Aufbau etwas abenteuerlich wirkt.

von Ro R. (rond_es)


Lesenswert?

muss das LCD nicht noch erst initialisiert werden?

von Tirni (Gast)


Lesenswert?

Ja den Tiny kann ich ohne Probleme programmieren und den atmega neben 
dran auch.

Ich habe ja die pins alle durchgemessen. Habe im 2 sec takt on/off 
gemacht und am Flachbandkabel überprüft.

Initialisieren macht bascom doch automatisch oder ?

von Kabeltest (Gast)


Lesenswert?

> Habe im 2 sec takt on/off
> gemacht und am Flachbandkabel überprüft.

Toller Test! Das funktioniert auch, wenn 2 Leitungen Kurzschluss haben.

von Karl (Gast)


Lesenswert?

Tirni schrieb:
> Initialisieren macht bascom doch automatisch oder ?

Ja. Ein "Initlcd" wird das Problem nicht beheben.

Das Display könnte natürlich auch defekt sein.
Nicht das es das Problem beheben würde...Evtl. hilft es ja doch:

100nF zwischen GND und +5V, sowohl beim LCD als auch beim Tiny. DB0-3 an 
GND anschließen.

von Tirni (Gast)


Lesenswert?

Kabeltest schrieb:
>> Habe im 2 sec takt on/off
>> gemacht und am Flachbandkabel überprüft.
>
> Toller Test! Das funktioniert auch, wenn 2 Leitungen Kurzschluss haben.


Ich habe Jede Ader einzeln Getestet...also für jede ader ein anderen 
Programm !!

ich habe zwischen gnd und vvc schon den 330 uF

von sowas (Gast)


Lesenswert?

kann das Display einen Sprung haben? Normalerweise ist der Hintergrund 
homogen - Deins sieht irgendwie blau und grün aus, oder hat das beim 
Forografieren gespiegelt.

Wenn Du ohne Controller einfach nur die 5V anschließt - siehst Du dann 
für ca. 1 Sekunde eine schwarze Zeile? Das machten die Displays, die ich 
so von der Sorte benutzt hatte...

von sowas (Gast)


Lesenswert?

ah vergiss es, Du hast ja geschrieben, dass man die Reihe sieht..

von sowas (Gast)


Lesenswert?

ist ja ne harte Nuss.. Also mal die Varianten durchgegangen.. sag mal 
was zu jeden Punkt

1) der Kontrastregler sieht irgendwie nicht so aus, als ginge wirklich 
der Schleifer zum Display?

2) bei mir kommt die Zeile Config Lcd = 16 * 2 vor der Zeile mit Config 
LcdPin..

3) miss mal die Betriebsspannung (nur so) im Betrieb

4) beim Einschalten - kann es sein, dass der Controller sein Pulver 
schon verschossen hat, bevor das Display wach ist? also mach doch mal 
sowas


do
   Config Lcd = 16 * 2
   Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , 
_
   Db7 = Portb.1 , E = Portb.0 , Rs = Portb.5

   Locate 1 , 1
   Lcd "Hallo Welt"
   waitms 500
loop

5) Wie kommt der Controller aus dem Reset? Ich nehme an, Du 
programmierst mit der gleichen Stiftleiste, wo Du dann das Display 
ransteckst? Du kannst ja mal den Reset pin gezielt auf L und dann auf H 
ziehen

6) gibt es bei diesem uC irgendwelche Fuses zu setzen, damit die Pins 
alle normal funktionieren? (z.B. kann man bei einigen das Reset-Pin 
umfunktionieren

7) funktioniert das Programmieren / üertragen ? Also kannst Du an allen 
Pins was ausgeben und die Reaktion messen? also so

do
  toggle einPin
  wait 1
loop

Sorry falls einiges banal klingt, aber wer hat sich nicht schon prima 
"selbst ausgetrickst"

Wenn es hart kommt:

anderen Proessor probieren (Mega16-Fassung nebenan?) zweites Display 
testen (defekt?)

viel Glück!

von Karl (Gast)


Lesenswert?

sowas schrieb:
> 2) bei mir kommt die Zeile Config Lcd = 16 * 2 vor der Zeile mit Config
> LcdPin..

Höre ich zum ersten mal. Selbst in der Hilfe ist es anders herum. 
Letztendlich wird es darauf aber nicht ankommen.

von Tirni (Gast)


Lesenswert?

Also Vorab jetz habe ich :


$regfile "ATtiny2313.dat"
$crystal = 1000000

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , _
   Db7 = Portb.1 , E = Portb.0 , Rs = Portb.5
Config Lcd = 16 * 2

Do
Locate 1 , 1
Lcd "Hallo Welt"
Waitms 1000
Loop
End

gemacht und rechts oben in der ecke steht eine 0 ??

von Tirni (Gast)


Lesenswert?

sowas schrieb:
> ist ja ne harte Nuss.. Also mal die Varianten durchgegangen.. sag mal
> was zu jeden Punkt
>
> 1) der Kontrastregler sieht irgendwie nicht so aus, als ginge wirklich
> der Schleifer zum Display?

Der Einzelne pin geht an GND und bei den Zweien geht einer an VVC der 
andere zum LCD

> 3) miss mal die Betriebsspannung (nur so) im Betrieb

5 V
>
> 5) Wie kommt der Controller aus dem Reset? Ich nehme an, Du
> programmierst mit der gleichen Stiftleiste, wo Du dann das Display
> ransteckst? Du kannst ja mal den Reset pin gezielt auf L und dann auf H
> ziehen

Wie meinst du kommt der controler aus dem reset ? zwischen reset und vvc 
ist ein 10k wiederstand sonst nicht


> 7) funktioniert das Programmieren / üertragen ? Also kannst Du an allen
> Pins was ausgeben und die Reaktion messen? also so

Das habe ich schon gemacht und es funktioniert

von Tirni (Gast)


Lesenswert?

und wenn ich
Lcd "598"

schreibe kommt ein fragezeichen in die ecke rechts oben ?

von sowas (Gast)


Lesenswert?

na eine 0 ist ein Fortschritt gegenüber gar nichts :-)

Tirni schrieb:
> Der Einzelne pin geht an GND und bei den Zweien geht einer an VVC der
> andere zum LCD

d.h. wenn Du den Schleifer ("der einzelne Pin") auf VCC drehst, hast Du 
nen sauberen Kurzschluss? :-) Nur so am Rande..


nimm mal ruhig das init in die Schleife mit rein, mach ein cls vorher:


Do
   Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , 
_
   Db7 = Portb.1 , E = Portb.0 , Rs = Portb.5
   Config Lcd = 16 * 2

   cls

   Lcd "Hallo Welt"
   Waitms 500

   cls
   Waitms 500

Loop

End

von Karl (Gast)


Lesenswert?

Na, immerhin zeigt es was an. Wenn es quatsch anzeigt, könnte eine 
Timing-Problem vorliegen, es könnte sein, dass der LCD-Controller nicht 
ganz kompatibel ist (Wahrscheinlichkeit = gering) oder irgendetwas ist 
nur halbherzig angeschlossen.
Spiel doch mal mit $crystal, wird es besser oder schlechter?

von sowas (Gast)


Lesenswert?

und irgendwie gab es da auch einen Befehl initlcd oder so..

das mit dem Reset meinte ich so:

wenn Du Spannung anlegst, lädt sich der Kondensator, und fängt 
irgendwann der Tiny an zu arbeiten und auch der Prozessor im LCD ist 
irgendwann soweit, dass er Befehle entgegennimmt. Wenn Du Pech hast, ist 
der Tiny mit seinem Programm durch, bevor das LCD "wach" ist.

von Tirni (Gast)


Lesenswert?

Ist das Poti dann falsch angeschlossen ? muss ich es anders anschließen 
?


Wenn ich das von dir eintippe habe ich eine Laufschrift mit wirren 
zeichen
und dazwischen 10 Sec bis diese wieder durchs bild läuft

von sowas (Gast)


Lesenswert?

Das ist wieder ein Fortschritt (Laufschrift vs. stehendes Zeichen) :-)

Und Du bist ganz sicher, dass jede Leitung richtig anliegt, keine 
Datenbits vertauscht, gemessen mit Stecker drauf? (manchmal vertut man 
sich bei Flachbandkabel mit der Reihenfolge..

10 Sekunden ist auch unlogisch, alle halbe Sekunden sollte sich 
eigentlich was tun. Fuesbits sind ok (interner oszillator, 1MHz?)

von sowas (Gast)


Lesenswert?

und ja, das Poti gehört mit den beiden "gleichen" Beinchen an VCC und 
GND und mit dem Schleifer an Kontrast.

von Tirni (Gast)


Lesenswert?

bei
$crystal = 500000

hat die laufschrift eine andere Geschwindigkeit

bei größeren oder kleineren werten kommt garnichts

der attiny ist ja original also hat er ja 1 mhz ?
wenn ich die fuses auslesen steht da auch 8 MHz aber ein weiterer fuse 
sagt frequenz geteilt durch 8

von Tirni (Gast)


Lesenswert?

Aber da ich ja trotzdem zeichen sehe kann ich das poti auch so lassen 
oder ?

ich hatte ein led lauflicht gemacht und die led sind in der richtigen 
reihenfolge angelaufen also denke ich es stimmt alles

von Tirni (Gast)


Lesenswert?

>bei
>$crystal = 500000

>hat die laufschrift eine andere Geschwindigkeit

Die Geschwindigkeit ist höher und der abstand dazwischen ist auch kürzer

von sowas (Gast)


Lesenswert?

Datenblatt lesen und Fuesbits verstehen ist die saubere Variante, um das 
rauszufinden (wie schnell der uC läuft).

Was auch geht: einen Ausgang alle 500ms schalten und nachmessen, wie 
schnell er wirklich umschaltet. Das funktioniert nämlich nur, wenn 
$Crystal übereinstimmt mit der echten GEschwindigkeit, oder andersherum,

aus der crystal-angabe erreichnet der compiler, wie lange der Prozessor 
in eienr Warteschleife kreisen muss, bis 500ms um sind.

von Tirni (Gast)


Lesenswert?

Bei meinen LED versuchen hat es hingehauen. Bei waitms 1000 hat er 1 
sekunde gewartet

von sowas (Gast)


Lesenswert?

Du kannst das Poti auch so lassen, aber dreh es nicht auf "Kurzschluss" 
:-)

hast Du den Befehl "init lcd" gefunden / nachgelesen?

von Tirni (Gast)


Lesenswert?

in meinem Bascom buch hat auch drin gestanden das man den init nicht 
braucht da bascom das automatisch macht

von Tirni (Gast)


Lesenswert?

bei
$crystal = 10000000

funktioniert es

warum ??

von Eumel (Gast)


Lesenswert?

Mit welcher Frequenz läuft er denn?

von Tirni (Gast)


Lesenswert?

Ja laut Fuses 8 MHZ / 8 = 1 Mhz


Wenn ich aber jetzt

Do
  For I = 1 To 10
      Waitms 1000

      Locate 2 , 12
      Lcd I
  Next I


Loop

mache dauert es genau 10 Sekunden bis I inkrementiert wird

von sowas (Gast)


Lesenswert?

wenn der Prozessor mit 1Mhz läuft, Du aber crystal=10000000 (10 MHz) 
schreibst, geht der compiler davon aus, dass der Prozessor mit 10MHz 
läuft, und baut demzufolge größere Warteschleifen ein (faktor 10).

Da Dein Prozessor, der das compilierte Programm dann zum Verarbeiten 
bekommt, aber nicht so schnell ist, dauert alles 10x so lange.

alles klar?

Ergo, um Selbstverwirrung zu vermeiden: crystal am besten so setzen, wie 
der uC gefust ist, also tatsächlich läuft.

von Tirni (Gast)


Lesenswert?

Ja das ist mir schon alles klar ;-)

aber bei 1 Mhz kommen ja nur wirre zeichen und nur bei 10 Mhz bekomme 
ich überhaupt eine anständige ausgabe

von sowas (Gast)


Lesenswert?

das verstehe ich auch nicht - aber wer versteht schon alles.. :-)

von Karl (Gast)


Lesenswert?

Na, immerhin läuft es jetzt. Entweder stimmen Deine Fuses nicht, oder es 
liegt ein anderes Problem vor. Es ist ja so, dass das Programm jetzt 
langsamer als eigentlich vorgesehen abläuft. Also programmiere doch mal 
folgendes:
1
&crystal=1000000 '1 MHz (die richtige Frequenz eintragen)
2
...
3
Config Lcdpin....
4
Config LCD = 16*2
5
...
6
Waitms 500
7
Initlcd
8
Waitms 100
9
Cls
10
Waitms 100
11
Locate 1,1
12
LCD "Hallo Welt"

von Tirni (Gast)


Lesenswert?

Damit funktioniert es scheinbar ?

von Karl (Gast)


Lesenswert?

Es sollte "$crystal" und nicht "&crystal" sein.

So etwas habe ich mir gedacht. Dein Tiny ist schon mit dem Programm 
durch, bevor sich das LCD überhaupt initialisieren konnte. So ein LCD 
braucht etwas Zeit, bis es die ersten Befehle empfangen kann. 
Normalerweise ist das in BASCOM berücksichtigt. Es gibt aber auch LCDs, 
die aus irgendeinem Grund "träger" sind und denen muss man etwas mehr 
Zeit geben.
Du kannst die Zeiten nach "Waitms" sicherlich noch etwas nach unten 
korrigieren, musst Du mal ausprobieren.

von Tirni (Gast)


Lesenswert?

aso na dann alles klar danke !

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
Noch kein Account? Hier anmelden.