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
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?
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.
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
hi! auf dem foto hast du aber keine hintergrundbeleuchtung beschalten. sieht man trotzdem was?
Ja man sieht die Kästchen der oberen reihe wenn ich am Poti drehe, dann müsste es ja korrekt sein oder ?
Den Tiny konntest Du problemlos programmieren? Ich frage nur, weil Dein Aufbau etwas abenteuerlich wirkt.
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 ?
> Habe im 2 sec takt on/off > gemacht und am Flachbandkabel überprüft. Toller Test! Das funktioniert auch, wenn 2 Leitungen Kurzschluss haben.
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.
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
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...
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!
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.
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 ??
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
und wenn ich Lcd "598" schreibe kommt ein fragezeichen in die ecke rechts oben ?
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
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?
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.
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
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?)
und ja, das Poti gehört mit den beiden "gleichen" Beinchen an VCC und GND und mit dem Schleifer an Kontrast.
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
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
>bei >$crystal = 500000 >hat die laufschrift eine andere Geschwindigkeit Die Geschwindigkeit ist höher und der abstand dazwischen ist auch kürzer
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.
Du kannst das Poti auch so lassen, aber dreh es nicht auf "Kurzschluss" :-) hast Du den Befehl "init lcd" gefunden / nachgelesen?
in meinem Bascom buch hat auch drin gestanden das man den init nicht braucht da bascom das automatisch macht
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
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.
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
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" |
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.
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.