PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS 232 Kommunikationsproblem



Romeo009
26.05.2009, 11:36
Hey,

ich habe ein Problem bei der Kommunikation von zwei Mikrocontrollern (einem Mega128 und einem Mega32). Dabei sendet der Mega128 dem Mega32 einen Befehl, dass dieser eine Led einschalten soll. Das Senden des Befehles vom Mega128 funktioniert, leider reagiert der Mega 32 nicht darauf. Die Beschaltung der beiden Megas ist richtig, also müsste es ein Software-Problem sein.
Könnte sich vielleicht jemand die beiden Quelltexte mal anschaun und sagen worin der Fehler steckt.
Vielen Dank im voraus. ;)


Quelltext des Empfängers(Mega32):


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600


Dim I As Byte

Config Pinc.0 = Output
Led Alias Portc.0

On Urxc Onrxd
Enable Urxc
Enable Interrupts

Main:
Do


Loop

End


OnRxD:
I = Udr
If I = "s" Then
Led = 1
else
Led = 0
endif
Return



Quelltext des Senders(Mega128):

$regfile = "m128def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 19200
$baud1 = 9600

Open "com2:" For Binary As #2


'****SRF05****
Declare Sub Entfernungsmessung()

Config Pinb.7 = Output
Portb.7 = 0

Dim Zeitmessung As Word
Dim Entfernung As Word


Enable Interrupts


Main:
Do

Call Entfernungsmessung()

Loop

End



Sub Entfernungsmessung()

Portb.7 = 0
Pulseout Portb , 7 , 40
Pulsein Zeitmessung , Pinb , 7 , 1
Zeitmessung = Zeitmessung * 10
Entfernung = Zeitmessung / 58
If Entfernung < 10 Then
Print #2 , "s"
Else
Print #2 , "w"
End If
End Sub
Code-Tags eingefügt (PicNick, Mod)

:arrow: :arrow: :arrow: :wink: :-# :-# :-# :-#

Ceos
26.05.2009, 12:00
pack deinen code mal in die [ c o d e] [ / c o d e] tags, dann wird der auch net mit smilies verkrüppelt!

schau dir mal die baudraten für deinen M128 an! hab das gefühl du hast da iwie was net hinhaut, vielleicht haste auch die ausgänge der beiden uart schnittstellen verwechselt, hast du den TxD des M128 auch an den RxD Pin des M32 angeschlossen und umgekehrt ?

for_ro
26.05.2009, 13:02
OnRxD:
I = Udr
If I = "s" Then

Die Bedingung wird so nie erfüllt sein, weil I als Byte definiert ist. Ändere entweder den Typ von I und lese einen String ein oder frage auf den ASCII Code von "s" ab.

Gruß

Rolf

Ceos
26.05.2009, 13:15
ach stimmt garnicht gesehn ... nein lass ie deklaration bloß wie sie iss, sonst würde i = udr garkein sinn machen, du musst nur dein "s" mit einfachen hochkomma schreiben 's', findest du direkt neben der entertaste beim #

und schmeiss das mit dem print beim m128 raus!

mach einfach udr1 = 's' bzw. udr1 = 'w'

und davor jeweils eine warteschleife, bis das UDRE flag wieer 1 wird, damit weist du dass du senden darfst

Thomas$
26.05.2009, 15:25
hast du eventuel noch nen Quarz drann der vileicht falsch ist?

Romeo009
26.05.2009, 15:52
also das mit dem udr1 funktioniert bei Bascom nicht und ein string muss in Bascom eigentlich doch immer zwischen zwei doppelten hochkommas stehn, weil es sonst ja nur ne anmerkung ist und keinen einfluss auf das programm hat

nochmal zu der frage von Thomas$, an jedem mikrocontroller hängt jeweils ein quarz mit 16 mhz
die beiden mikrocontroller sind auch 100%ig richtig verkabelt, also RxD an Txd ....

aber ich verstehe einfach nicht, warum die kommunikation nich funktioniert :(

PicNick
26.05.2009, 16:18
Ein Tip:

If I = "s" Then

schreibst du als

If I = 115 Then

"115" ist der ascii-Code von "s"

Romeo009
26.05.2009, 16:29
jo, das is auch ne möglichkeit, werde ich mal ausprobieren

aber wie mache ich das dann, wenn ich mehrere buchstaben und zahlen habe

Ceos
26.05.2009, 17:17
dann musst du die bytes in einer schleife empfangen und in einen puffer schreiben, den du anschliessend auswertest 's' statt "s" reicht völlig und man braucht keine ascii tabelle zur hand haben

for_ro
26.05.2009, 17:32
's' statt "s" reicht völlig und man braucht keine ascii tabelle zur hand haben

's' geht bei Bascom nicht, weil das erste ' einen Kommentar beginnt.
Du kannst natürlich auf ASC("s") abfragen, dann brauchst du auch keine Tabelle zu haben.

Gruß

Rolf

Romeo009
26.05.2009, 18:00
ich weis auch nicht aber aus irgendeinen grund funktioniert das nicht!?

for_ro
26.05.2009, 18:27
Dann zeig doch mal, wie dein aktueller Code aussieht.

Gruß

Rolf

Romeo009
26.05.2009, 21:09
Mein aktueller Code sieht noch genauso aus wie oben der.

Ich will ja eigentlich nur eine Kommuikation zwischen einem mega128 und einem mega32 aufbauen, bei der Messwerte und andere Befehle hin und her geschickt werden.

Ich würde mich sehr freuen, wenn jemand für mich einen Code hätte, der funktioniert :)

Mfg romano