Forum: Mikrocontroller und Digitale Elektronik LCD-Ansteuerung -Probleme


von Marcel H. (repac3r)


Lesenswert?

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.

von Michael D. (etzen_michi)


Lesenswert?

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.

von Marcel H. (repac3r)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

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

von phischu (Gast)


Lesenswert?

Bei mir hat's mal mit dem Code hier auf der Seite nicht geklappt, weil 
die Optimization im Compiler nicht auf -Os eingestellt war.

von Marcel H. (repac3r)


Lesenswert?

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 
?

von Marcel H. (repac3r)


Lesenswert?

mhm, das habe ich schon versucht, aber aus den Datenplättern
http://www.myavr.info/download/produkte/lcd/db_lcd-displaytech-162c.pdf
bzw. http://www.myavr.info/download/produkte/lcd/techb_lcd_de_en.pdf
werde ich nicht schlau

von phischu (Gast)


Lesenswert?

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)

von Karl H. (kbuchegg)


Lesenswert?

Marcel Hoffmann schrieb:
> mhm, das habe ich schon versucht, aber aus den Datenplättern
> http://www.myavr.info/download/produkte/lcd/db_lcd-displaytech-162c.pdf
> bzw. http://www.myavr.info/download/produkte/lcd/techb_lcd_de_en.pdf
> werde ich nicht schlau

Bezieht sich das auf das 'kontrollieren der Verbindungen'?

Wenn ja. Hier im
http://www.myavr.info/download/produkte/lcd/techb_lcd_de_en.pdf
steht doch auf Seite 7 alles drinn was du brauchst
1
1 = Port D.2     LCD PIN 4      RS = Enable
2
2 = Port D.3     LCD PIN 6      E = Enable
3
3 = Port D.4     LCD PIN 11     DB4 = Datenbit 4
4
4 = Port D.5     LCD PIN 12     DB5 = Datenbit 5
5
5 = Port D.6     LCD PIN 13     DB6 = Datenbit 6
6
6 = Port D.7     LCD PIN 14     DB7 = Datenbit 7
7
8
9
7 = Port B.0 (Jumper R/W)   LCD PIN 5     R/W =Read/Write
10
                                         (oder fest auf Low)

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?

von Marcel H. (repac3r)


Lesenswert?

Im Header steht:
1
//  LCD DB4-DB7 <-->  PORTD Bit PD0-PD3
2
#define LCD_PORT      PORTD
3
#define LCD_DDR       DDRD
4
#define LCD_DB        PD0
5
6
//  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 ?

von Karl H. (kbuchegg)


Lesenswert?

Marcel Hoffmann schrieb:
> Im Header steht:
>
1
> //  LCD DB4-DB7 <-->  PORTD Bit PD0-PD3
2
> #define LCD_PORT      PORTD
3
> #define LCD_DDR       DDRD
4
> #define LCD_DB        PD0
5
> 
6
> //  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
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.

von phischu (Gast)


Lesenswert?

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.

von Marcel H. (repac3r)


Lesenswert?

Ok danke an alle habe es jetzt hinbekommen
und entschuldigung an kbuchegg das ich "etwas"
aufdringlich war :)

lg, marcel

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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)

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.