Forum: Mikrocontroller und Digitale Elektronik myAVR LCD reagiert nicht.


von Calytras (Gast)


Angehängte Dateien:

Lesenswert?

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

von Eric B. (beric)


Lesenswert?

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++.

von Calytras (Gast)


Lesenswert?

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++?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Calytras (Gast)


Lesenswert?

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.

von Eric B. (beric)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Calytras (Gast)


Lesenswert?

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? :)

von tommy_v (Gast)


Lesenswert?

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

von Calytras (Gast)


Lesenswert?

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.

von Georg G. (df2au)


Lesenswert?

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.

von Calytras (Gast)


Lesenswert?

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!

von Georg G. (df2au)


Lesenswert?

Wie viel Spannung bekommt das Display? Was steht im Datenblatt?

von tommy_v (Gast)


Lesenswert?

Calytras schrieb:
> Verdrahtung hab ich schon gefühlte 1000 mal überprüft, es war und ist
> richtig angeschlossen.

Kannst Du mal ein Foto machen?

von Calytras (Gast)


Lesenswert?

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.

von grundschüler (Gast)


Lesenswert?

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.

von Georg G. (df2au)


Lesenswert?

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