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.
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?
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
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
@ 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
:
@ 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
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.
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
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.