Forum: Mikrocontroller und Digitale Elektronik Hilfe zu leichtem LCD Programm


von Martin Programmierer (Gast)


Lesenswert?

Bitte um Hilfe, wollte das einfache LCD Programm 1 in Proteus testen, 
das auf Microcontroller.net sehr gut beschrieben ist. Ich arbeite mit 
dem AVR Studio und mit dem Arduino Uno. Habe das LCD richtig 
angeschlossen verstehe aber nicht wieso es nichts anzeigt.
Hier der Source Code:
1
// 
2
// Anpassungen im makefile:
3
//    ATMega8 => MCU=atmega8 im makefile einstellen
4
//    lcd-routines.c in SRC = ... Zeile anhängen
5
// 
6
#include <avr/io.h>
7
#include "lcd-routines.h"
8
 
9
int main(void)
10
{
11
  // Initialisierung des LCD
12
  // Nach der Initialisierung müssen auf dem LCD vorhandene schwarze Balken
13
  // verschwunden sein
14
  lcd_init();
15
 
16
  // Text in einzelnen Zeichen ausgeben
17
  lcd_data( 'T' );
18
  lcd_data( 'e' );
19
  lcd_data( 's' );
20
  lcd_data( 't' );
21
 
22
  // Die Ausgabemarke in die 2te Zeile setzen
23
  lcd_setcursor( 0, 2 );
24
 
25
  // erneut Text ausgeben, aber diesmal komfortabler als String
26
  lcd_string("Hello World!");
27
 
28
  while(1)
29
  {
30
  }
31
 
32
  return 0;
33
}








Danke im Vorraus :)

: Bearbeitet durch User
von Martin Programmierer (Gast)


Lesenswert?

Bitte um kurze Hilfe, das Programm ist ja nicht schwer :)

von Karl H. (kbuchegg)


Lesenswert?

Es gibt üblicherweise 2 Problemkreise

der eine (häufigere) ist ein Timingproblem. LCD können zwar beliebig 
langsam angesteuert werden, aber nicht beliebig schnell.

der andere ist ein Fehler in der Verdrahtung.
Ist mir auch schon passiert, dass ich selbst nach der 3.ten Kontrolle 
die Spiegelung der Datenleitungen nicht gesehen habe.

von Karl H. (kbuchegg)


Lesenswert?

Martin Programmierer schrieb:
> Bitte um kurze Hilfe, das Programm ist ja nicht schwer :)

und ist auch das einzige am ganzen Aufbau, welches definitiv nicht das 
Problem verursacht :-)

Wenn du sagst, du siehst nichts. WIe ist das gemeint? Ist am LCD 
überhaupt nichts zu sehen oder siehst du eine (oder zwei) Reihen 
schwarzer Balken?

von Martin Programmierer (Gast)


Angehängte Dateien:

Lesenswert?

Habe hier die Simulation angehängt, wüsste nicht was daran falsch sein 
sollte :)

von Martin Programmierer (Gast)


Lesenswert?

Karl H. schrieb:
> Wenn du sagst, du siehst nichts. WIe ist das gemeint? Ist am LCD
> überhaupt nichts zu sehen oder siehst du eine (oder zwei) Reihen
> schwarzer Balken?

Ich habe das Bild oben angehängt, man sieht das man nichts sieht :))

von Karl H. (kbuchegg)


Lesenswert?

Moment. Wovon reden wir?

Von einer Simulation, auf der dein Programm kein Ergebnis aufs LCD 
zaubert oder von realer Hardware.

von Martin Programmierer (Gast)


Lesenswert?

Karl H. schrieb:
> Von einer Simulation, auf der dein Programm kein Ergebnis aufs LCD
> zaubert oder von realer Hardware.

Von der Simulation in Proteus !
Lg

von Karl H. (kbuchegg)


Lesenswert?

Martin Programmierer schrieb:
> Karl H. schrieb:
>> Von einer Simulation, auf der dein Programm kein Ergebnis aufs LCD
>> zaubert oder von realer Hardware.
>
> Von der Simulation in Proteus !

Gut zu wissen.

Da ich keine Ahnung habe, wie detailliert Proteus das Verhalten eines 
LCD nachbildet, insbesondere was Timing-Sachen angeht, bin ich raus.

Kannst du denn dein Programm nicht in Einzelschritten durchsteppen. Es 
ist ja bekannt, welche Bits an welchen Leitungen in welcher Abfolge 
aufscheinen müssen. Das könnte man kontrollieren.

von Martin Programmierer (Gast)


Lesenswert?

Das kann ich leider nicht, weil ich nicht weis welche Bits wo sein 
müssen da ich noch nicht lang in der Branche tätig bin :S

Von dem her trotzdem danke!
Mfg

von Karl H. (kbuchegg)


Lesenswert?

Martin Programmierer schrieb:
> Das kann ich leider nicht, weil ich nicht weis welche Bits wo sein

Dann schau in das File "lcd-routines.c" hinein.
Dort sind alle Funktionen geschrieben.
Die erste Funktion die aufgerufen wird, ist die Funktion lcd_init.
Deren Source Code findet sich da drinn.

> müssen da ich noch nicht lang in der Branche tätig bin :S

Du hast aber schon kontrolliert, ob in lcd-routines.h die Pin und Port 
Belegung richtig eingetragen ist?

von Martin Programmierer (Gast)


Lesenswert?

Karl H. schrieb:
> Du hast aber schon kontrolliert, ob in lcd-routines.h die Pin und Port
> Belegung richtig eingetragen ist?

JA das hab ich schon gemacht, von dem her frag ich mich die ganze Zeit 
was falsch ist ...

von Karl H. (kbuchegg)


Lesenswert?

Martin Programmierer schrieb:
> Karl H. schrieb:
>> Du hast aber schon kontrolliert, ob in lcd-routines.h die Pin und Port
>> Belegung richtig eingetragen ist?
>
> JA das hab ich schon gemacht, von dem her frag ich mich die ganze Zeit
> was falsch ist ...

Steppe das Programm durch.
Wenn die Simulatoin gut ist, dann muss ein derartiges LCD nach dem 
'Anlegen' der Versorgungsspannung erst mal eine Reihe schwarzer Balken 
anzeigen. DIe Balken verschwinden (beim echten LCD), wenn das LCD 
korrekt initiaisiert ist.


NB: die werden doch hoffentlich nicht auch noch den Kontrast simuliert 
haben :-)

von Martin Programmierer (Gast)


Lesenswert?

Ich versteh das nicht, was kann bei einem solchen Programm schon groß 
schief gehen :(

von Karl H. (kbuchegg)


Lesenswert?

Martin Programmierer schrieb:
> Ich versteh das nicht, was kann bei einem solchen Programm schon groß
> schief gehen :(

Eine Menge.
90% der relevanten Teile sitzen ja nicht in dem Code, den du gepostest 
hat.

Oder auf gut deutsch: du starrst momentan auf den falschen Baum.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

womit hast du das Programm eigentlich übersetzt?
War da der richtige Prozessor eingestellt?

von Klaus (Gast)


Lesenswert?

Ich schätze mal so eine halbe Zillion Dinge können bei so einem 
einfachen Programm schief gehen.

Aber viel wichtiger als diese Zahl, ist, dass Du eine äussert belastbare 
Strategie zum Umgang mit Frustration entwickelst, wenn Du "neu in der 
Branche" bist.
Klar, es gibt so Überflieger wie <zensiert>, aber die meisten von uns 
haben mit 30 schon mehr geflucht als jeder Pfarrer am Ende seines 
Lebens, mehr Kaffee getrunken, als in Brasilien je angepflanzt wurde und 
mehr Pizzas genascht, während wir auf das Makefile warteten, als es 
Atome im Universum gibt.

Nicht umsonst schrieb mal jemand, dass Genie, aus Glück, Talent und am 
meisten aus Hartnäckigkeit besteht.

Also, hänge Dein Taschentuch zum trocknen auf und beiss Dich durch.

von Karl H. (kbuchegg)


Lesenswert?

Hmm.
Eine Idee hab ich noch.

Du hast ja einen Arduino Uno.
Nimm mal ein Testprogramm aus der Arduino Szene her und lass das mal in 
der Simulation laufen. (Gut wäre natürlich erst mal auf einer realen 
Hardware zu kontrollieren, ob das Programm funktioniert). Wenn das 
ebenfalls nicht funktioniert, dann wird es wohl irgendeine Einstellung 
im Simulator sein.

von Südseeinsulaner (Gast)


Lesenswert?

Martin Programmierer schrieb:
> Ich arbeite mit dem AVR Studio und mit dem Arduino Uno.

Dann spiel doch erstmal aus der Arduino LiquidCrystal Library das Hello 
World programm auf deinen Arduino Uno, nachdem du das LCD wie im 
Beispiel-Code angegeben verdrahtet hast.

Dann sehen wir weiter.

von Martin Programmierer (Gast)


Lesenswert?

Das LCD in der Simulation funktioniert ja bei anderen Programmen auch :S

von Klaus (Gast)


Lesenswert?

Martin Programmierer schrieb:
> Das LCD in der Simulation funktioniert ja bei anderen Programmen auch :S

Der Punkt ist, herauszufinden, was zwischen diesen Programmen und dem 
oben vergleichbar ist, und was nicht.

Es gibt z.B. nicht nur eine einzige LCD-Bibliothek. Die vom Arduino ist 
anders als die oben, die Du vermutlich hier aus dem Forum hast.

Was mich dahin führt, Dich zu bitten, mehr Details zu beschreiben.
Zu Anfang: Welches Programm genau funktioniert mit der Simulation? 
(Link)

von Karl H. (kbuchegg)


Lesenswert?

Schön, das du mit Information so nach und nach rausrückst.
Von hier aus kann keiner auf deinen Monitor schauen und niemand weiss, 
was du bisher gemacht hast.

Langsam hab ich keine Lust mehr zum Rätselraten.


Welchen Entwicklungsumgebung hast du benutzt?
Hast du ein Makefile? Wenn ja, dann poste es.
Poste die lcd-routines.h

Was macht die Simualation im Einzelschrittbetrieb? hast du kontrolliert, 
ob zb die Init Sequenz damit anfängt, dass an den Datenpins eine 0x3 
auftaucht und danach Enable getoggelt wird?

von W.S. (Gast)


Lesenswert?

Karl H. schrieb:
> Es gibt üblicherweise 2 Problemkreise..

ach, das wäre schön. Aber üblicherweise steckt das tatsächliche Problem 
genau dort, wo man es nie und nimmer jemals vermutet hätte. In diesem 
Falle vielleicht im Kontrastregler, der einfach auf zu flau eingestellt 
ist.

W.S.

von Martin Programmierer (Gast)


Angehängte Dateien:

Lesenswert?

Karl H. schrieb:
> Wenn ja, dann poste es.
> Poste die lcd-routines.h


Hierbei angefügt das lcd-routines.h File

Ich verwende das AVR Studio 4...

von Karl H. (kbuchegg)


Lesenswert?

W.S. schrieb:
> Karl H. schrieb:
>> Es gibt üblicherweise 2 Problemkreise..
>
> ach, das wäre schön. Aber üblicherweise steckt das tatsächliche Problem
> genau dort, wo man es nie und nimmer jemals vermutet hätte. In diesem
> Falle vielleicht im Kontrastregler, der einfach auf zu flau eingestellt
> ist.

Ja, hatte ich mir auch überlegt, bis ich rausgefunden habe, dass wir von 
einer Simulation reden.

Oder denkst du, die würden die Kontrastspannung mit simulieren? Das wär 
fies.
(Ist nicht sarkastisch gemeint. Ich weiss es wirklich nicht)

: Bearbeitet durch User
von Martin Programmierer (Gast)


Lesenswert?

W.S. schrieb:
> ach, das wäre schön. Aber üblicherweise steckt das tatsächliche Problem
> genau dort, wo man es nie und nimmer jemals vermutet hätte. In diesem
> Falle vielleicht im Kontrastregler, der einfach auf zu flau eingestellt
> ist.
>
> W.S.

Wie kann ich den Kontrastregler umstellen ?

von Karl H. (kbuchegg)


Lesenswert?

Martin Programmierer schrieb:
> W.S. schrieb:
>> ach, das wäre schön. Aber üblicherweise steckt das tatsächliche Problem
>> genau dort, wo man es nie und nimmer jemals vermutet hätte. In diesem
>> Falle vielleicht im Kontrastregler, der einfach auf zu flau eingestellt
>> ist.
>>
>> W.S.
>
> Wie kann ich den Kontrastregler umstellen ?

Am Poti.

Bei einem realen LCD bewegt sich die Kontrastspannung meistens in der 
Gegen von 0V

von Martin Programmierer (Gast)


Lesenswert?

Karl H. schrieb:
> Am Poti.

Verändern des Potis bewirkt nichts!

von W.S. (Gast)


Lesenswert?

Martin Programmierer schrieb:
> Wie kann ich den Kontrastregler umstellen ?

Herrjemine, wäre das was Konkretes, also zum Anfassen, dann mit nem 
Schraubenzieher. Aber wenn du schon unbedingt eine Simulation machen 
willst, die unsereiner garantiert NICHT kennt, dann kann ich nur 
vermuten, daß es evtl. per Rechtsklick und Lokalmenü geht, falls dort 
sowas überhaupt Mode ist.

Im Klartext: Da bist du auf dich selbst gestellt.

W.S.

von Martin Programmierer (Gast)


Lesenswert?

Trotzdem Danke, irgendwann werde ich die Lösung schon finden.
Immer optimistisch bleiben ;)

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.