Hallo, ich muss für ein Projekt das LC-Display von myAVR mit einem Arduino verwenden. Dafür darf jedoch nur Ansi-C verwendet werden, und keine Arduinospezifischen Funktionen. Meine Frage ist also, gibt es einen einfachen Weg die vorgegebenen LCD-Funktionen für den Arduino umzuschreiben? Muss ich die Funktionen überhaupt umschreiben? eigentlich werden die PORTS ja genau so angesprochen wie beim AVR, und von der Programmierung her sollte es auch gleich sein. Einzig die wait_ms funktionen müssen angepasst werden. Aktuell tut sich mit dem vorgegebenen Zeug nämlich absolut nichts. Was mir außerdem auffällt, in dem beigefügten Code gibt es 3 lcd_write Funktionen. Im Lehrbuch und im Internet findet man den Code so das alle 3 Funktionen lcd_write heißen. Hier spuckt mein Atmel Studio aber nur Fehler aus. Deshalb habe ich die funktionen lcd_write, lcd_write1 und lcd_write2 genannt. Ist das falsch? Hoffe mir kann jemand weiterhelfen :) Viele Grüße
Calytras schrieb: > Aktuell tut sich mit dem vorgegebenen Zeug nämlich absolut nichts. Wie ist das Display angesschlossen? Ohne weitere Infos ist es schwierig was sinvolles dazu zu sagen. > Was mir außerdem auffällt, in dem beigefügten Code gibt es 3 lcd_write > Funktionen. Das ist der Unterschied zwischen C und C++.
Die +5V kommen vom Arduino ebenso wie die Masse. Ansonsten: PortD-2 -> LCD4(RS) PortD-3 -> LCD6(E) PortD-4 -> LCD11(DB4) PortD-5 -> LCD12(DB5) PortD-6 -> LCD13(DB6) PortD-7 -> LCD14(DB7) PORTB-1 -> LCD15(BLA) exakt so wies in dem Lehrbuch steht. Die Datenbits 0-3 liegen auf Masse. Ich hab den Controller grade nochmal resettet, da ist mir aufgefallen das das LCD ganz schwach, ganz kurz aufleuchtet und sofort wieder ausgeht. Wie meinst du das mit dem Unterschied zwischen C und C++?
Musst du denn alles selber schreiben? Falls nicht, benutze doch Peter Fleurys gut funktionierende Bibliothek: http://homepage.hispeed.ch/peterfleury/avr-software.html#libs Hat eine geringfügig andere Syntax als der Arduinokram, aber sonst ist sie sehr flexibel in Bezug auf Taktfrequenzen und Portbelegung.
Muss ich noch genauer abklären. Eigentlich sollte es kein Problem sein wenn ich diese Bibliothek verwende. Es dürfen halt keine Arduino-Funktionen wie z.B. Serial.Begin() oder Serial.println vorkommen.
Calytras schrieb: > Wie meinst du das mit dem Unterschied zwischen C und C++? C++ erlaubt Funktionen mit der gleiche Name, solange die Signatur (Typen von Rückgabewert und Parameter) unterschiedlich sind. Bei C geht das nicht, wie du schon erfahren hast.
Calytras schrieb: > Die Datenbits 0-3 liegen auf Masse. Das ist übrigens Unsinn. Die Pins haben interne Pullups und sollten einfach freigelassen werden, wenn sie unbenutzt sind. RW aber bitte fest auf Masse.
Eric B. schrieb: > C++ erlaubt Funktionen mit der gleiche Name, solange die Signatur (Typen > von Rückgabewert und Parameter) unterschiedlich sind. Bei C geht das > nicht, wie du schon erfahren hast. Dann ist mir schleierhaft warum in dem Lehrbuch bei "Programmierung des LC-Displays in C" 3 Funktionen mit gleichem Namen vorhanden sind. Wie gesagt, hab ich hier schwarz auf weiß liegen, auf sowas wäre ich auch nicht gekommen. Hab mir dann nur gedacht dass anhand der Parameter (einmal char, einmal char*, und einmal char* + int) erkannt wird um welche der 3 es sich handelt. Matthias S. schrieb: > Das ist übrigens Unsinn. Die Pins haben interne Pullups und sollten > einfach freigelassen werden, wenn sie unbenutzt sind. RW aber bitte fest > auf Masse. RW ist auf Masse, die D0-3 sind hier in meinem "Anschlussplan" auf Masse. Deshalb dachte ich ich mach das auch so. Ich habs aber auch schon probiert das ich die freigelassen habe, ändert aber nichts an der nichtvorhandenen Funktion des Displays. Jemand sonst ne Idee warum das Ding keinen Mucks macht? :)
1. Wie hast Du den Kontrast-Pin beschaltet? 2. Bei der Initialisierung musst Du 4 mal ins Steuerregister schreiben, um den 4 bit Modus einzustellen. Du schreibst nur 2 mal ins Steuerregister. siehe: https://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Initialisierung_f.C3.BCr_4_Bit_Modus
Der Kontrast-Pin wird durch einen Spannungsteiler mit einem Poti angesteuert. eine Seite auf 5V und eine auf Masse. Eine Veränderung des Potis bewirkt nichts. Ich hab das jetzt mal so gemacht wie in dem Tutorial, also 4 mal ins Steuerregister für den 4-Bit-Modus. Fehlanzeige. funktioniert nicht.
Calytras schrieb: > Eine Veränderung des Potis bewirkt nichts. Dann ist dein Display defekt oder du hast falsch verdrahtet. Über den Kontrast muss sich die erste Zeile von nichts-sichtbar hin zu schwarzen Blöcken verstellen lassen, auch ohne Initialisierung und Software.
Könnte es theoretisch sein das der Arduino nicht genug Strom für das LCD liefern kann? Er ist nur via USB mit dem Rechner verbunden. Verdrahtung hab ich schon gefühlte 1000 mal überprüft, es war und ist richtig angeschlossen. Entweder es bekommt nicht genügend Saft oder es ist defekt. Naja, ich geb morgen nochmal Bescheid, heute habe ich leider keine Zeit mehr mich länger damit zu befassen. Danke an alle bisher!
Calytras schrieb: > Verdrahtung hab ich schon gefühlte 1000 mal überprüft, es war und ist > richtig angeschlossen. Kannst Du mal ein Foto machen?
Im Datenblatt steht 5V. An der Stromversorgung liegts nicht, habs mit einer externen Quelle versucht, läuft nicht. tommy_v schrieb: > Kannst Du mal ein Foto machen? Naja, kann ich schon, aber es ist halt wirklich genau so angeschlossen wie oben steht, und wie es im Datenblatt steht. Defekt ist das Display auch nicht, weil ich es gestern an einem myAVR-Board testen konnte. An diesem hat es funktioniert.
Calytras schrieb: > Naja, kann ich schon, aber es ist halt wirklich genau so angeschlossen > wie oben steht, und wie es im Datenblatt steht. Dann bleibt als Schlussfolgerung nur, dass man generell keine Lcds mit microcontrollern betreiben kann. Es gibt endlos funktionierenden LCD-code im Netz. Wenn die Hardware wirklich in Ordnug ist, nimm doch einfach anderen code.
Das Display ist in Ordnung, alles ist richtig angeschlossen, nur das Verhalten entspricht nicht dem, was der User erwartet. Ich fürchte, hier kann nicht geholfen werden. Nochmals, ganz langsam geschrieben, damit es keine Missverständnisse gibt: Wenn Änderungen an der Kontrastspannung nichts bewirken, liegt ein Hardware Problem vor.
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.