PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grafik LCD über rs232 ansteuern



mat-sche
03.04.2010, 18:57
Hallo und nen schönen Abend,

auf meinem Board habe ich das Problem, dass ich zu wenige Pins zur Verfügung habe, um ein GLCD anzusteuern.
Nun habe ich auf dem selben Board noch einen ungenutzten M8 Sockel.
Meine Idee ist nun die beide Megas über rs232 zu verbinden. Der M8 soll dann das GLCD bedienen. Der andere Mega soll mit den gängigen Befehlen für ein GLCD in Form: "print "lcdat 1 , 2 , abcd"" die infos dann auf dem Display ausgeben.

Hat jemand schon das gemacht und evtl. Beispiele. Oder kann mir einen Tip geben, wo ich anfangen kann???

Grüße MAT

peterfido
03.04.2010, 19:36
Wo hakt es denn? Kommunikation per UART?
Einfach mit Print "1Hallo" senden
und mit if charwaiting auf dem Anderen empfangen.
Wobei die 1 in diesem Falle die Zeile wäre. Könntest natürlich auch noch die Spalte mit übertragen:
Print chr$(Zeile) + chr$(Spalte) + Text. Wobei es dann bei Spalte 10 oder 13 zu Konflikten kommen könnte.
Ich löse das immer, indem ich das 7.Bit mit setze. (128 dazu addieren)

peterfido
03.04.2010, 20:03
Der Sender könnte so aussehen (aus dem Kopf, Fehler also nicht ausgeschlossen)



dim b as byte
declare function lcdsenden(byval lcdzeile as byte, byval lcdspalte as byte, byval lcdtext as string *20) as byte
...
...
do
...
...
if lcdsenden(1,1,"Hallo")<>1 then
b= lcdsenden(6,0,"1") 'fehler abfangen

endif

loop
end

function lcdsenden(byval lcdzeile as byte, byval lcdspalte as byte, byval lcdtext as string *20) as byte
dim b as byte
set zeile.7
set spalte.7
print lcdzeile + lcdspalte+lcdtext
waitms 100'evtl erhöhen, wenn keine 1 kommt.
lcdsenden=waitkey()

end function









Der Empfänger könnte so aussehen (aus dem Kopf, Fehler also nicht ausgeschlossen)




dim b as byte
dim lang as byte
dim sEingang as string *22 at &h60
dim Zeile(2) as byte at &h60 overlay
dim stext as string*20 at &h62 overlay

...
.
.
do

if ischarwaiting() then gosub Empfangen

loop
end

Empfangen:
b=waitkey()
if b > 12 then
if b=13 then
if zeile(1) > 128 and zeile(2)> 128 and lang>2 then
reset zeile(1).7
reset zeile(2).7
if zeile< 5 and spalte<20 then
locate zeile(1),zeile(2)
lcd stext
else
if zeile=10 then reset led 'Paar Steuerungsmöglichkeiten durch definierte Zeilennummern...
if zeile=11 then set led
if zeile=88 cls
.
.

print "1";'Alles klar senden
lang=0
seingang=""
else
print "2"; 'Fehler senden
lang=0
seingang=""
endif
else
seingang=seingang + chr(b)
incr lang
if lang>22 then
print"2";
seingang=""
lang=0
endif
endif
endif
return

mat-sche
04.04.2010, 14:35
He Peterfido!

Danke für Deinen ersten Entwurf!
Und tatsächlich habe ich noch einige Schwachstellen zur seriellen Kommunikation.
Ich werde mir Deinen Vorschlag mal durchschauen und dann mich melden.

Schöne Ostern noch!

MAT