PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rs232 Datenübertragung



m_herr
02.11.2005, 16:31
Hallo Leute, ich bin am verzweifeln. Ich versuche per Rs232 (mal direkt an AVR mit RX/TX gekreuzt, mal üer MAX-Chip) ein paar Daten zu übertragen. Und zwar 6 Word-Zahlen so, daß der Empfänger genau sagen kann, daß es sich um Zahl 1, oder 3...5 etc handelt.

Aber irgendwie geht es nicht, nichtmal mit der Verbindung der beiden AVR (beides mega8) direkt.

ich wollte aus Ressourcen-Gründen nicht "print" benutzen, sondern mit Urxc etc arbeiten.

ich dachte daran, die 6 zahlen (max 4stellig) in einen String zu stecken und den zu senden und beim Empfänger wieder zu zerlegen und zu konvertieren. oder hat da jemand eine bessere Idee?

Vielen Dank

x-ryder
02.11.2005, 16:37
du gibst uns jetzt erstmal deinen programmcode, und warum nen string, wenn man auch die zahl direkt senden kann?

Martin

m_herr
02.11.2005, 16:47
ja, aber wie kann ich denn die zahl dem empfänger kenntlich machen? also das der Empfänger weiß, welche Zahl (Nr 2oder 4 etc) angekommen ist?

sender:

$Regfile = "mega8.dat"
$Crystal = 4000000
$Baud = 9600
Dim a As word
Dim b as word
Dim c as word
Dim d as word


Do
If USR.RXC = 1 Then pint a
End If
Loop
End

empfänger:

$Regfile = "mega8.dat"
$Crystal = 4000000
$Baud = 9600
Dim a As word
Dim b as word
Dim c as word
Dim d as word


Do
If USR.RXC = 1 Then usr=a
End If
Loop
End


naja und damit geht das nicht so gut...

vielen Dank für euer bemühen

x-ryder
02.11.2005, 16:59
also: signalisieren, welches byte, mit nem vorbyte, was ne nummer enthält, und ausserdem mach das bitte erstmal mit dem print und ischarwaiting oder inkey o.ä. und dann such die passenden register und befehle raus

m_herr
02.11.2005, 17:15
ja, wenn ich wüßte wie, dann würde ich es auch machen, aber mir fehlt dafür einfach der Einblick.
Was meinst du mit vorbyte?

x-ryder
02.11.2005, 17:17
der name war nicht wirklich perfekt gewählt ^^

also nen byte, wo die nummer des bytes was folgt drinsteht

und guck dich doch mal in der bascom-help durch, bei inkey, ischarwaiting und waitkey

02.11.2005, 17:42
If USR.RXC = 1 Then pint a ------------ print a oder?

zum empfangen:
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 19200

Dim I As Byte

Do
If Usr.rxc = 1 Then
I = Udr
Select Case I
Case "H"
Print "Hallo AVR"
Case "h"
Print "hallo avr"
Case Else
Print "Unbekannter Befehl"
End Select
End If
Loop
End

mfg psf

m_herr
02.11.2005, 17:56
danke gast für den rowalt-quelltext. aber der bringt mich, dank eigener erfahrung, absolut nicht weiter.

ischarwaiting wird in der hilfe zwar beschrieben, aber taucht im beispiel nicht auf, somit kann ich damit nichs anfangen

x-ryder
02.11.2005, 17:57
ja brauchst doch kein beispiel, der begriff erklärt sich doch selbst, ausserdem war der gast eh nur pebisoft, musste nicht drauf achten ^^

Vitis
02.11.2005, 18:31
also ich hab das so gelöst:

ich hab n startbyte definiert, beispiel &H55,
damit der empfänger weiß, hier gehts los, das ist das erste zu übertragende Byte.
Dann nicht 4 einzelne Variablen, sondern eine Matritze mit 4 mal der gleichen
Variable, die ich dann aber hochzählen kann.

Mit dem Startbyte also den Matrixzähler auf 1,
dann warten bis zeichen im Buffer (ischarwaiting=1)
Zeichen übernehmen (inkey a(x))
wenn Variablenwert >0 dann haste das zu empfangende Byte,
Zähler um 1 erhöhen ( incr(x) )
und das ganze wieder ab dem Punkt: Warten auf Zeichen, bis x>3
(somit =4) und alle benötigten Daten drinne sind.

Wobei man die ischarwaiting nicht unbedingt braucht, kannst auch einfach
den inkey mamchen, wenn Zeichenbuffer leer ist gibts 0 zurück.

x-ryder
02.11.2005, 18:54
das nennt man auch array, ne matrix ist mindestens zweidimensional.

sag mal bescheid, wenn du mit den befehlen absolut nicht klarkommst, dann schreib ich mal nen kleines proggi

veit
02.03.2006, 20:25
uiiii das wär genau das was ich brauche ... bei mir is das startbyte 200 (das gerät was ich ansteuern will benutzt das eslip protokoll)

befehle schicken kann ich, dann schalte ich meinen 485 auf empfang, dann müsste ich das startbyte abwarten und dann die restlichen bytes speichern bis zum endbyte (201)

aber wie meint ihr das, wann setz ich den matrixzähler auf 1, wie komm ich da dran buhuu

x-ryder
02.03.2006, 21:59
kannste vielleicht nochmal dein problem etwas detailreicher beschreiben, und bitte mit dem protokoll des senders, bzw. der identifikation des chips

Dank,
Martin

veit
02.03.2006, 23:22
ja ich hab einen extra thread aufgemacht, der is hier:

https://www.roboternetz.de/phpBB2/viewtopic.php?t=17670&sid=4b7b0fa4a72108e6ed2d8efbe80ebf71