Guten tag liebe com,
ich versuche mich schon eine Weile an der Ansteuerung des
LCD-Addons von MyAvr.de. Zu diesem LCD verwende ich das MK2 Board,
ebenfals von MyAvr. Wenn ich das Testprogramm von MyAvr brenne Zeigt
das Display den entsprechenden Text an, daher gehe ich davon aus,
dass alles richtig angeschlossen ist.
Wenn ich aber jetzt den LCD-Code in C von dieser Seite versuche zu
brennen
zeigt das Display nichts an.
Weiß einer wie ich das Problem lösen kann?
Danke schon mal in Vorraus, lg.
Ggf. falscher Controller?
Poste doch Links usw. ... die meisten (auch ich) sind zu faul die Infos
welche benötigt werden um dir zu helfen selber raus zu suchen.
Problem lösen:
Code von 0 an selber Programmieren und testen obs geht (bevor man etwas
anzeigen kann) durch auslesen von Registern des LCD.
Das Funktionierende Programm kannst du als gegencheck verwenden ob dein
LCD noch lebt.
> Weiß einer wie ich das Problem lösen kann?
Erst mal kontrollieren, ob die 'eingetragene Konfiguration' mit der
tatsächlichen Realität übereinstimmt.
Dann die eingetragene Taktfrequenz prüfen. LCD Ansteuerungen scheitern
des öfteren daran, dass der µC zu schnell mit den Leitungen wackelt.
phischu schrieb:> Bei mir hat's mal mit dem Code hier auf der Seite nicht geklappt, weil> die Optimization im Compiler nicht auf -Os eingestellt war.
Okay ich benutze AVR-Studio, wo kann man da die Optimization einstellen
?
Marcel Hoffmann schrieb:> Okay ich benutze AVR-Studio, wo kann man da die Optimization einstellen> ?
Kann es dir nur für's 6.1er sagen, da findest du die Einstellung, wenn
du dein Projekt geladen hast unter:
Project -> 'Projektname' Properties -> Toolchain -> Optimization (ist
ein Unterpunkt von AVR/GNU C Compiler)
Also alles am Port D und der Jumper muss gesteckt sein. PD2 ist RS, PD3
ist E und die 4 Datenbits sind von PD4 an aufwärts.
Was hast du im Header File eingetragen?
// LCD RS <--> PORTD Bit PD4 (RS: 1=Data, 0=Command)
7
#define LCD_RS PD4
8
9
// LCD EN <--> PORTD Bit PD5 (EN: 1-Impuls für Daten)
10
#define LCD_EN PD5
Da steht das PD0-PD3 Datenpins sind, wenn ich das jetzt richtig
verstanden habe, sind bei meinem LCD aber PD4-PD7 die Datenpins oder ?
Wie kann ich diese ändern ?
> // LCD EN <--> PORTD Bit PD5 (EN: 1-Impuls für Daten)
10
> #define LCD_EN PD5
11
>
>> Da steht das PD0-PD3 Datenpins sind,
Da kann vieles stehen.
Bei dem, der den Code geschrieben hat, war das wohl auch so. Sonst hätte
er es nicht geschrieben. Aber deshalb muss das bei dir ja noch lange
nicht so sein. Und ein Blick in die Beschreibung des Erweiterungsboards
verrät: Jep, bei dir sind die 'Kabel' eben anders angeschlossen.
> wenn ich das jetzt richtig> verstanden habe, sind bei meinem LCD aber PD4-PD7 die Datenpins oder ?> Wie kann ich diese ändern ?
Indem du deine Werte reinschreibst?
Was denn noch? Solch ich kommen Händchen halten, während du
beispielsweise bei LCD_RS das PD4 auf PD2 gemäss Datenblatt der
LCD-Erweiterung umschreibst?
(und ja. EN ist dasselbe wie E. Beides steht als Kurzform für 'Enable')
Und nein, spar dir bitte das 'bin halt noch ANfänger'. Als Anfänger
lässt man bis zum Erbrechen Leds blinken und macht Lauflichter, bis man
die Syntax um auf bestimmte Portpins zuzugreifen und die entsprechenden
Symbole bzw. Kürzel und Schreibweisen im Schlaf beherrscht.
Marcel Hoffmann schrieb:> Da steht das PD0-PD3 Datenpins sind, wenn ich das jetzt richtig> verstanden habe, sind bei meinem LCD aber PD4-PD7 die Datenpins oder ?> Wie kann ich diese ändern ?
Richtig erkannt.
Wie wärs mit:
1
// LCD DB4-DB7 <--> PORTD Bit PD4-PD7
2
#define LCD_PORT PORTD
3
#define LCD_DDR DDRD
4
#define LCD_DB PD4
Die anderen analog und den R/W, weil er nicht auf dem gleichen Port
sitzt auf einen freien Pin an Port D legen (Einschränkung des Codes ist,
dass alle Anschlüßsse am selben Port hängen müssen). Den R/W brauchst du
aber nur um Daten aus dem Displaycontroller auszulesen, das braucht man
aber meistens nicht. Deshalb auch der Jumper auf der Displayplatine.
phischu schrieb:> Den R/W brauchst du> aber nur um Daten aus dem Displaycontroller auszulesen, das braucht man> aber meistens nicht.
Exakt.
Die LCD Routinen hier aus dem Forum beispielsweise nutzen das nicht,
steuern aber einen eventuellen R/W Pin auch nicht an. Daher: Jumper
setzen!
Die Fleury Routinen wären zb anders. Die benutzen den R/W Anschluss. Da
darf dann der Jumper nicht gesetzt sein, sondern das Programm muss an
die R/W Leitung rankommen, sonst hängt das Programm bereits in der
Initialisierungsphase des LCD.
Marcel Hoffmann schrieb:> Ok danke an alle habe es jetzt hinbekommen> und entschuldigung an kbuchegg das ich "etwas"> aufdringlich war :)
Ist schon ok. Ich hab auch ein wenig unfreundlich reagiert. Mi scusi.
Aber du musst in der Lage sein, solche Dinge alleine hinzukriegen. Genau
deshalb macht man ja die ganzen Vorübungen mit dem ganzen
Led-Blinken-Gesocks. Nicht weil eine blinkende LED jetzt so
aussergewöhnlich wäre, sondern weil man sich an die Syntax von
Portzugriffen und wie das alles technisch funktioniert rantasten muss.
(Und in den meisten Fällen auch, um sein C in diesem Bereich
syntaxmässig auf Vordermann zu bringen)