Hi Ich such jetzt schon seit stunden hier im Forum nach der Lösung aber leider nix da und nun will ich es mal selber versuchen. Ich hab ein Atmega 8 L denn ich über Bascom Progge. Wenn ich folgenden Prog code nutze: $regfile = "m8def.dat" 'ATMega 8L $crystal = 4000000 'Quarz: 4 MHz Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5 Config Lcd = 20 * 2 Initlcd Cls Lcd "Hallo" End passiert folgendes. Die erste Zeile bleibt leer die zweite Zeile ist komplett voll d.h. das alle punkte belegt sind. Ich denke das das ein init fehler ist bin mir aber da nicht sicher. jemand eine Idee?
Könnte es sein, dass du das LCD umdrehen musst? Dann wären in der oberen Zeile alle Punkte aktiv, was auf ein nicht korrekt initialisiertes LCD schließen lässt (falsche Pinbelegung oder so...). Zum BASCOM-Programm kann ich dir mangels BASCOM-Wissen keinen Tip geben. ...
Ja müßte eigentlich so funktionieren. Bist du sicher das du das LCD auch richtig angeschlossen hast ? Nicht alle haben die gleiche Belegung undne schwarze Zeile sieht so aus als ob da ne Leitung falsch ist bzw. vieleicht nen kurzen vorliegt. Ws steht unter Options->Compiler->LCD ? Gegensätzliche anweisungen ? Wenn ja dann nureins von beiden.(Anweisungen im Listung stehen vor Menüeintrag aber in seltenen Fällen gibts da Ärger)
INITLCD musst du weglassen. Sonst nimmt der Compiler die Einstellungen aus Options->Compiler->LCD. INITLCD ist in deinem Code nach dem Config Lcdpin aufgelistet und wird somit eincompiliert. In der Hilfe steht unter INITLCD Remarks The LCD display is initialized automatic at start up when LCD statements are used by your code. If fore some reason you would like to initialize it again you can use the INITLCD statement.
ok hab jetzt initlcd weggelassen und so wie in der Beschreibung steht angeschlossen (anhang). Kann man den LCD nicht irgendwie anderster noch initen? PS: Ja hatte den LCD laschrum also ist die oberste Zeile voll.
Nochmal meine Frage: Stimmt die Reihenfolge der Anschlüsse und sind keine Kurzen bzw. Unterbrechungen drinn ? Entspricht das Display auch der Anleitung bzw. andersrum ?
Ja Ich habe es jetzt schon dreimal überprüft. Habe alle nicht angeschlossenen auf der LCD Platine gebrückt und mit PIN 1 der verbunden. Ich habe sowohl in Optionen und im Prog Text die Pin belegung drinne aber immer die gleiche.
Hmm Fassen wir mal zusammen. Es ist richtig Angeschlossen und die Einstellungen im Compiler sind auch ok. Der Controller läst sich beschreiben und auch der Verify (Machste doch ,oder ?) zeigt keine Fehler. Da fallen mir noch fragen ein: 1. (Weil wir es gerade in nem anderen Topic haben.) Die Spannungsversorgung ist so wie gedacht ? Also Controller und andere Chips mit 100nF geblockt und der Spannungsregler (wenn vorhanden) auch am Ausgang mit 100nF geblockt (wegen Schwingneigung) ? 2. Das Kabel vom LCD nicht zu lang ? So nen Meter Flachbandleitung kann da schon jkede Komunikation verhindern. Ja und die Letzte Frage wäre ob das LCD überhaupt in ordnung ist. Weißt du ob das ok ist oder hast du ein anderes zum vergleichen ? Wenn wir hier die ganze Zeit nen Toten Gaul reiten dann bringt das ja nicht viel. Ja,ansonsten fällt mir da nicht mehr viel ein. Die Schaltung und der Compiler sind eigentlich recht Einfach das da nicht viel daneben gehen kann.
@Daniel Mir ist noch ne Möglichkeit eingefallen (aus der Ferne zu diagnostizieren is eben nicht leicht). Da du komplett im Code Konfigurierst sollte man nichts dem Compiler überlassen. Setz mal die "Config Lcd = 20 * 2" vor die "Config Lcdpin....." und füge hinter beiden mal diese beiden Zeilen hier ein. Config Lcdbus = 4 Config Lcdmode = Port Ich vermute mal der Controller versucht im 8-Bit Mode zu komunizieren und dein Diplay ist nur 4-Bittig angeschlossen. "Config Lcdbus = 4" gibt da die richtige Einstellung. "Config Lcdmode = Port" ist nochmal zur Sicherheit. Warum mir das nicht früher aufgefallen ist ? Nun,ich arbeite meist mit I2C für LCD,Tastaturen usw. um Ports zu sparen.(Normalerweise braucht es beim LCD keinen "Speed" und Tastaturen haben auch Zeit) Da konfiguriert es sich ganz anders.
Also Hab jetzt mal die änderungen gemacht ohne erfolg. Wenn ich den LCD mit spannung versorge und hintergrund spannung (ohne den Microcontroller) dann ist da genau das gleiche zu sehen als ohne. Der LCD und der Controller werden von einem 7805 (3-Pin) versorgt der unter Last 4,95V abgibt. Das ganze wird im mom über eine neue 9V Block Batterie gespeist. Kondensatoren hab ich keine in der Schaltung drinne. Aber der Microcontroller funzt da ich auf einem anderen Port eine ausgabe laufen lasse. Danke schon mal für die ganze mühe die du dir gemacht hast.
Hallo an euch alle, vergiß nicht, das du den Port auch als Ausgang konfigurieren mußt, das geschieht nämlich nicht automatisch. will heißen, config portd = output initlcd cls lcd "Hello world" end. das müßte schon laufen, sofern du das lcd auch im Compilermenü eingestellt hast. Gruß Sven
@Daniel Ja 4.95V ist kein Problem. Mal meine Fragen abgeackert ?
Hallo, ich darf zuerst Mal das AVR-Tutorial (der Teil über das LCD) zitieren: "Ok, alles ist verbunden, wenn man jetzt den Strom einschaltet sollten ein oder zwei schwarze Balken auf dem Display angezeigt werden." Dein Problem scheint zu sein, dass das Display nicht initiiert wird. In deinem Code kann ich gerade keinen Fehler sehen, bis auf das "initlcd", das solltest du streichen, das braucht man nu um das LCD erneut zu initialisieren. Und das "config PortD = Output" ist obligatorisch, du musst ja festlegen, in welche Richtungen die Daten fließen sollen.In der Beispieldatei von Bascom "LCD.bas" steht im Prinzip genau das selbe drin (abgesehen von den anderen Pinbelegungen). Zuerst solte man sicher gehen, dass das Display auch HD44780 kompatibel ist. Dann würde ich mir an deiner Stelle das Multimeter schnappen und die Verbindungen vom AVR zum Display testen. Am Besten direkt am AVR-Bein und an der Lötstelle am Display ansetzen. Und dabei auch noch die Belegung am Display prüfen (siehe hierzu das Tutorial, ist wirklich gut). Zu Beachten ist hier, dass im 4-Bit-Modus nicht DatenBit0-3 verwendet werden, sondern das obere Nibble, Db4-7. So, genug für heute, Gruß Christian
so jetzt gehts mal wieder weiter. zu ratbers fragen 1. die spannungsversorgung ist nur ein 7805 ohne kondies. 2. die kabellänge beträgt 20cm 3. ich weiss nicht ob er geht aber er ist neu. ich kann ja noch ein bestellen. so hab dan noch den Port d aus ausgang eingestellt aber leider auch ohne funktion. die Leitungen habe ich alle durch gepiepst und sind alle in ordnung Hab mir mal das orginal LCD Datenblatt geholt und da sthet drin das das Ding HD44780 befehle nimmt. ich henge das Datenblatt noch mal an (anhang) Ich versteh da slangsamm nicht warum das ding nicht funzt. Der momentane Code sieht so aus: $regfile = "m8def.dat" 'ATMega 8L $crystal = 4000000 'Quarz: 4 MHz Config Lcd = 20 * 2 Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5 Config Portd = &11111111 Config Lcdbus = 4 Config Lcdmode = Port Cls Lcd "Hallo" End jemand noch eine idee?
Hi, ich habe letztens auch zum ersten mal ein LCD in Betrieb genommen und hatte genau die gleichen Probleme. Kontrollier mal ob dein Mega8 auch tatsächlich mit 4MHz taktet. Bei mir war der Fehler einfach, dass mein Mega16 noch mit dem Default-Takt von 1Mhz lief. Ich wollte eigentlich gar nicht höher takten, doch trotz Programm-Anpassung konnte ich das LCD nicht ansprechen. Nach dem ich das entsprechende Fusebit auf 4Mhz gesetzt hatte ging alles einwandfrei.
Rene wäre nett wenn du es mir ein bischen detailirter erklären könntest. 1. Was ist der Default Takt? 2. Fusebit auf 4Mhz = "$crystal = 4000000"? dann komm ich der ganzen sache etwas näher (hoffe ich).
1.) Der Mega8 müsste ab Werk auf den internen Oszillator mit 1MHz eingestellt sein. 2.) Nein, die "crystal = ..." -Direktive ändert nichts an den Fuses Ich weiß nicht welche Hard- und Softwareaustattung du hast. Ich benutze ein STK500 mit AVRStudio, damit ist das Ändern der Fuses recht simpel. Welche anderen Möglichkeiten es gibt weiß ich nicht genau (brauchte mich damit noch nicht weiter ausseinander gesetzt), 'hab aber noch PonyProg(?) im Hinterkopf. Das müsste dann also jemand anderes beschreiben( das rumflashen am µC ist ja auch nicht ohne Risiko...).
@Daniel Was Rene meint findest du im Programmer. Klick das Rote Icon für den Programmer an und wäre "Manual Programm" Wenn dein Controller erkannt wird dann siehste es ja an der passenden Bezeichnung. Dann gehste auf den Reiter "Lock an fuse Bits" Im Fenster runterscrollen bis zur Abteilung "Fusebits" (Direkt vor "Fusebits High"). Du wirst einen Eintrag erkennen (Beim M16 der letzte eintrag der Sektion) der bei Fabrikfrischen Controllern auf "0001 Internal RC-Osscilator 1 Mhz" (Andere Controller = Andere Möglichkeiten) stehen sollte. Dort mußt du auf "External Clock" umstellen um mit einem Quarz arbeiten zu können. Anschließend mit "Write FS" (Der Button findet sich Rechts am Rand vom Fenster) in den Controller übertragen. Damit sollte der M8 dann mit dem von dir angeschlossenen Quarz laufen. Aber das sollte nicht das Problem mit dem LCD erklären. Ich hab mal eben aus Spaß bei einem M16 die Fuse von Extern (16 Mhz Generator) auf Intern 1 Mhz gestellt. Das Ergebnis ist das natürlich alles jetzt 16 mal langsamer abläuft und auch eventuelle Pausenzeitien 16 mal länger sind. Auch das LCD wird in Zeitlupe bedient (Schrifft baut sich sichtbar langsam auf) aber es läuft einwandfrei.
Oder ersetze mal "$crystal = 4000000" durch "$crystal = 1000000". Wenn dein AVR noch fabrikneu ist und du noch keine Fusebits umprogrammiert hast könnte das eine Ursache sein. Im 2. Posting von deinem Code hast du jetzt die Datenbits anderst herum dem PortD zugewiesen (1. Posting: Db4 = Portd.0; 2. Posting: Db4 = Portd.3 usw.), Absicht?
@christian Ja das war absicht da ich ihn beim überprüfen so angeschlossen hatte. Da ich auf meiner Paltine stecker aufgelötet hatte war ich dann zu faul auf dem lcd rum zu löten da hab ich es halt im prog geändert.
>1. die spannungsversorgung ist nur ein 7805 ohne kondies.
Das schwingt dann doch wie blöde hin und her ?! Guck dir mal die 5V auf
nem Oszi an :-X
Versorg den mal als erstes mal mit vernünftigen Kondensatoren...
Yo,da hab ich extra noch nach gefragt und glatt die Antwort überlesen. Richtig,erstmal die Versorgung richtig hinbauen. Im Anhang eine Denkstütze. Wie im anderen Topic noch die anmerkung das die Elkos entsprechend der Leistungen angepasst werden müssen. Für C1 die Faustformel "1000uF pro A" wenn davor nen Trafo mit Gleichrichter sitzt. Wenn da schon nen Geregeltes Netzteil sitzt reicht auch die hälfte. C2 wird nur bei besonders verseuchten Netzen benötigt Bau das erstmal um und schau obs das gewesen ist.
Ok dann schon mal vielen dank für die ganzen antworten. Werde dann mal morgen eine neue Platine ätzen mit einem 1000uF Kondensator zur Glätung. Melde mich danach wieder was rausgekommen ist.
Und nicht dem Irrtum verfallen, dass ein großer (langsamer) Elko mehrere kleine (schnelle) Keramik-Kondensatoren ersetzen könnte... ...
Ja,den Fehler machen viele. Eine Erklärung mit Luftmodell: Eine Firma hat einen Großkompressor nebst vorratsdruckbehälter. Der Kompressor kann den Tagesschnitt bereitstellen. In der Firma gibt es unzälige Kleinverbraucher wie zb. Druckluftmotore und kleinere Stellzylinder die einen stetigen Luftstrom durch die Leitungen verursachen. Aber es gibt auch Maschinen die Schlagartig eine Größere Menge Luft brauchen (zb. Pneumatische Pressen). Da die Durchflußmenge einer Leitung vom Querschnitt abhängt und man nicht bis in jeden Winkel riesige Rohre legen kann (Kosten und Raumbedarf) würden diese Maschinen in ihrem Umkreis einen Druckabfall verursachen der die anderen Geräte beeinflusst. Aus diesem Grund bringt man an solchen Geräten einen Lokalen Vorratsbehälter an aus dem die Maschine den Kurzfristigen Bedarf ziehen kann.(Das Entspricht dem Elko am Gleichrichter und den Elkos an größeren Schaltstufen.zb. Motoren). Ergebnis: Der Druck bleibt in der Umgebung stabil. Kleinere Verbraucher die sporadisch und arythmisch Luft ziehen (Digitale Schaltkreise) ziehen das Netz zwar nur in geringem Maße in Mitleidenschaft aber viele davon sorgen für ein Stakato auf dem Manomenter (Digitales Rauschen) und stören uu. das Verhalten anderer Komponennten (Eine Turbofeile die dauernd die Drehzahl ändert ist erlich zum Kotzen) Hier kämen dann entweder lokale Druckminderer (Spannungsregler) zum einsatz oder man nutzt hier die Leitungskapüazitäten als Lokalen Druzckbehälter zum Entstören. Diesen Effekt erzielt man mit den kleinen 100nF Kondensatoren an jedem IC. Ich kann ja mal ne Digitalschaltung aufbauen (Muß ja nicht Sinvoll sein,nur irgendwelche Digitalfunktionen) und die Versorgung auf dem Oskar darstellen. Mal mit und mal ohne Blockkondensatoren. Vieleicht wäre das hilfreicher denn ich denke mal das die meisten Leute es eher kapieren wenn sie es sehen können.
Hi ich mal wieder. Bin gerade am umzeichnen der Platine (hatte die letzten tage wenig zeit). Was ich noch anmerken wollte ist das die hintergrundbeleuchtung und die versorgungsspannung über die selbe leitung läuft. Ist das sehr störend? so wollte ich mir 2 leitungen sparren. Hab also auf der LCD Platine gerade eine Brücke an die hintergrund Platine gelötet (mit vorwiederstand).
Könnte sein. Da stellt sich die Frage ob die Spannung am Diplay eventuell etwas einbricht abewr das kannste ja schnell nachmessen. Die Andere ist welche Beleuchtung du hast. LED oder ne EL-Folie also mit Wandler. Der Aussage mit dem Vorwiderstand entnehme ich aber das es ne LED-Beleuchtung ist. Mess mal nach oder häng einfach die Beleuchtung ab.
Schon gemerkt, das Bascom für den Controller HD44780 initialisiert, dein Display aber einen KS0076B hat? Die sind zwar im groben kompatibel, aber eben nicht ganz :o) Ich arbeite mit nem KS0078 Display, die Initroutine findest Du hier im Forum ... HomeCon1.2.Lib oder so. Die Initioalisierung ist ähnlich dem KS0076B, kannste aber in dem Lib entsprechend anpassen
Ich hatte auch schon Displays mit den KS0073 Chipsatz und da musste ich auch die Routinen anpassen (war allerdings GCC)...
Wenn ich das hier gerade richtig sehe, gibts die Displays auch im Reichelt, aber da steht dabei, dass die den "Kontroller KS0073/HD44780 kompatibel" haben.
Hi Ich hab auch ein Problem mit meinem Reichelt LCD. Es ist ein 20*4er Display mit dem Controler KS0076B. Ich kann nix auf dem Display ausgeben. hab die Anschlüsse schon 3 mal nachgemessen und die stimmen. Ich hab mir das obeige durchgelesen. und mir diese LIB mal angeschaut und auch in Bascom eingebunden. Dadurch ist das schon ein bisschen besser geworden. Wobei ich immer noch das gefühl habe das meine Befehle nicht ankommen. Wenn ich zB "hallo" Ausgeben will dann bekomme ich 5 fast schwarze Felder. Ich hab auch schon versucht die LIB abzuändern, aber ich kenn mich nciht so mit Asembler aus. Kann mir vlt jemand von euch ne LIB für den KS0076B schreiben? Oder mir irgendein Dataseeht geben, wo drin steht was es beim KS0076B für Befehle gibt? Vielen Dank!
>Wenn ich zB "hallo" Ausgeben will dann bekomme ich 5 >fast schwarze Felder. Nur mal so ganz dumm gefragt weils bei "Hallo" zufällig auch 5 Schwarze kästchen sind. Den Kontrastregler haste aber drann ja ?
Nein ich hab den Kontrast eingestellt. das passt. Ich bekom auch keine ganz schwarzen felder sondern so ungefär so: || (also 2 durchgehende Striche wobei zwischendrin noch eine Rihe nicht schwarz ist....) bei hallo sieht das dann so aus: |||||||||| Find ich halt sonderbar ^^ Fällt jemand dazu was ein?!
Is schwer zu sagen. Ich kann hier bei mir immer mit einem anderen LCD gegenprüfen ob die Komunikation im generellen stimmt oder nicht. Es ist auch immer ne Frage ob das LCD auch ok ist. Ne Alternative wäre das LCD an den Parport vom Rechner zu hängen und mit Jalcd (es gibt natürlioch auch andere Soft) versuchen ob sich was zeigt. Das Programmist für viele unterschiedliche Displays ausgelegt und sollte am ehesten mit Exoten klarkommen.
Hmm. Ich denk halt das es nicht richtig initialisiert wird. Aber ich hab leider ka wie ich diese Homecon.lib ändern muss um das LCD genau so zu intialisieren wie es das gerne möchte ^^ Ich hab auch schon ein anderes LCD hingehängt mit dem gleichen ergebnis. :( Ich denk ich werds nciht an mein Pc anschliesen, weil ichs auf nem mobielen Robo brauche ;) das würd nich so viel bringen oder? Hast du vlt irgendwo was wo ich sehn kann wie man einen KS0076B richtig initialisiert ?
>ch denk ich werds nciht an mein Pc anschliesen, weil ichs auf nem >mobielen Robo brauche ;) das würd nich so viel bringen oder? Es ging darum mit der obigen Soft zu testen ob das Display überhaupt funktioniert.
Hallo. Bin aufgrund gleicher Probleme auf dieses Forum gestoßen, obwohl die Beiträge wohl älter sind. Habe aber nun die Lösung gefunden. 1. Muss der Port, wo das LCD angeschlossen ist, als Ausgang definiert werden. 2. Dann den Typ vorgeben 3. PIN-Belegung definieren 4. Übertragungsmodus 5. Anschlußmodus ...zum Schluß dann initialisieren lassen. Bei mir wir folgender Text zur Definition und Initialisierung eingegeben Config Portc = Output Config Lcd = 16 * 2 Config Lcdpin = Pin , R = Portc.7 , E = Portc.5 , Db4 = Portc.4 , Db5 = Portc.3 , Db6 = Portc.2 , Db7 = Portc.1 Config Lcdbus = 4 Config Lcdmode = Port Initlcd danach: Cls Lcd "Message."
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.