LCD zeig nichts an

Gast #2605914
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
Angehängte Dateien:
Gast #2605985
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?
Gast #2606067
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
Gast #2606630
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 ?
Gast #2606651
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.
Gast #2606663
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
Gast #2606665
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...
Gast #2606700
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!
Gast #2606728
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 ??
Gast #2606735
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
Gast #2606750
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
Gast #2606757
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?
Gast #2606760
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.
Gast #2606764
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
Gast #2606771
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?)
Gast #2606773
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
Gast #2606774
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
Gast #2606783
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.
Gast #2606848
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.
Gast #2606972
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"
Gast #2607316
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren