Forum: Compiler & IDEs HTerm + LCD + ATmega32


von Reda (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine interessante Frage und zwar, ich habe auf meine platine 
einen ATmega32, und möchte ein (2x16)HD77780 kompatibles LCD ansteuern.
Das LCD ist am Port D vom MC angeschlossen, wobei meine UART 
Schnittstelle (Rx = PD0 und Tx = PD 1)auch am Port D ist.
Das LCD ist richtig angeschlossen und funktonniert auch gut.
Das Echo kann ich ohne Problem mittels HTerm durchführen.

Wenn ich jetzt Daten über UART senden und empfangen, und GLEICHZEITIG 
auf dem LCD auch sehen möchte, dann kriege falsche Daten sowohl bei 
HTerm als auch auf dem LCD.

Frage : liegt das vielleicht dass UART und LCD die Pins RX und Tx 
teilen, oder brauche ich eine exakte Taktfrequenz bzw Baudrate.

Vielen Dank im Vorraus.

von Christopher (Gast)


Lesenswert?

Das könnte vielleicht ein Prblem sein, man kann aber das Problem 
softwaremässig lösen.

von lkmiller (Gast)


Lesenswert?

ROTFL, das ist der Brüller:
>:
>Frage : liegt das vielleicht dass UART und LCD die Pins RX und Tx teilen
>:
Wieso sollte denn eigentlich ein Mikrocontroller mit mehr als 1 Pin
(also, ok, ich geb noch VCC und GND dazu) produziert werden,
wenn alles an denselben Pin ageschlossen werden kann ;-)

Im Ernst: JA, da liegt das Problem.
Wie willst du denn verhindern, dass einer ein Zeichen sendet,
wenn du gerade am werkeln am Display bist?
Dann kommt dazu, dass dem Wesen nach ein TX-Pin ein Ausgang ist,
genauso wie die meisten Steuersignale für das LCD.
Wenn du schon nicht mehr Pins frei hast,
warum verwendest du nicht den 4-Bit Modus?

von Peter D. (peda)


Lesenswert?

Reda wrote:

> Frage : liegt das vielleicht dass UART und LCD die Pins RX und Tx
> teilen, oder brauche ich eine exakte Taktfrequenz bzw Baudrate.

Beides.

Man kann nicht einfach irgendwelche Pins zusammen pappen, ohne zu 
verstehen, was darauf passiert.

Die UART kann man in keinem Fall mit was anderem parallel schalten.

Aber z.B. LCD und SPI geht gut.
Solange das /CE des Slave high ist, ignoriert er alles auf den 
SPI-Leitungen.
Solange E vom LCD low ist, ignoriert es alles auf den Datenleitungen.
Daher kann man SCK,MOSI,MISO ohne Konflikte mit D0..D7 zusammen legen.
Nur /CE und E müssen extra sein.


Peter

von Reda (Gast)


Lesenswert?

Hallo lkmiller und  Peter Dannegger,

ich habe doch das LCD in 4-Modus angesteurt, mir war das Problem am 
Anfang unbewusst, als ich die Schaltung entworfen habe, das ist nämlich 
eigene Platine.

Die Pinbelegung für das LCD habe ich eigentlich von der Seite hier 
übernommen, siehe : 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung


Hier ist ein Schnitt davon :

Anschluss an den Controller

Pin #-LCD  Pin-µC
1  Vss  GND
2  Vcc  5V
3  Vee  GND oder Poti (siehe oben)
4  RS  PD4 am AVR
5  RW  GND
6  E  PD5 am AVR
7  DB0  offen
8  DB1  offen
9  DB2  offen
10  DB3  offen
11  DB4  PD0 am AVR
12  DB5  PD1 am AVR
13  DB6  PD2 am AVR
14  DB7  PD3 am AVR

von daher ich bin nicht 100% schuld :)

Danke für eure Antworten

von lkmiller (Gast)


Lesenswert?

@ Reda
ja, aber da steht nix davon, dass man den UART dann auch noch
verwenden soll ;-)

Und in lcd-routines.c:
:
// Die Pinbelegung ist über defines in lcd-routines.h einstellbar
:

von Reda (Gast)


Lesenswert?

@ lkmiller

Das stimmt, man soll nicht die beiden Pins für URAT Schnittstelle 
benutzen !!!
Ich meinte ein Hinweis neben der LCD-Pinbelegung wäre nicht schlecht 
gewesen,
weil eine serielle Schnittstelle ( wie z.b UART ) kann man immer 
gebrauchen.

Ich habe schon eine Lösung und zwar, ich will jetzt die Pins 11 und 12 
von LCD
(die jetzt mit uart verbunden einfach abkratzen) und mit der Pins  PD6 
und PD7 am MC verbinden, weil ich PD6 und PD7 noch frei habe.

d.h. softwaremässig wird nicht aufwendig oder ? ich werde dann nur wenig 
am gesamten Programm ändern.

Gruss

von Philipp B. (philipp_burch)


Lesenswert?

Reda wrote:
> Ich habe schon eine Lösung und zwar, ich will jetzt die Pins 11 und 12
> von LCD
> (die jetzt mit uart verbunden einfach abkratzen) und mit der Pins  PD6
> und PD7 am MC verbinden, weil ich PD6 und PD7 noch frei habe.

Schlechte Idee. Du solltest schon darauf achten, dass die vier 
Datenleitungen wenigstens an einem kompletten Nibble hängen.

> d.h. softwaremässig wird nicht aufwendig oder ? ich werde dann nur wenig
> am gesamten Programm ändern.

Unnötig aufwändig.
Ich würde sowas vorschlagen:
PD0 und PD1 für USART
PD2 und PD3 für die LCD-Steuerleitungen
PD4-PD7 für die LCD-Datenleitungen

So brauchst du an der Software fast nix zu ändern und kommst an der 
RS232 vorbei.

von Reda (Gast)


Lesenswert?

Hallo Philipp,

Philipp Burch wrote,
>Schlechte Idee. Du solltest schon darauf achten, dass die vier
>Datenleitungen wenigstens an einem kompletten Nibble hängen.

Das muss aber nicht sein.

Die 4 Datenleitungen kannst du sogar einzeln mit irgendwelchen Pins an 
irgendwelche Port verbinden, dafür brauchst du ein geeignetes Programm 
dafür.

Ich habe die beiden Datenleitungen DB4 und DB5 von LCD, wie gesagt, mit 
den Pins PD6 und PD7 am selben Port D von MC vebunden.

Das LCD sowie die UART Schnittstlle funktionnieren wieder sehr gut.


Nur wenn ich die Daten über die UART senden bzw. empfangen und 
gleichzeitig das LCD ansteurn will, kriege ich einmal ein Buchstabe nur 
bei HTerm und nicht beim LCD, und das nächste Buchstabe auf dem LCD und 
nicht beim HTerm.


Ich muss irgendwas an meinem Programm ändern! Bin noch dabei :)


Gruss

von Karl H. (kbuchegg)


Lesenswert?

Reda wrote:
> Hallo Philipp,
>
> Philipp Burch wrote,
>>Schlechte Idee. Du solltest schon darauf achten, dass die vier
>>Datenleitungen wenigstens an einem kompletten Nibble hängen.
>
> Das muss aber nicht sein.

Muss nicht.
Aber wie du selbst am eigenen Leib erfährst ist es wesentlich
einfacher wenn man es tut.

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.