PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : spezielle Eindraht Schnittstelle....Variablenproblem



m@rkus33
30.07.2012, 14:56
Hallo zusammen,

ich bin gerade dabei einen eigenen Sensor an eine vorgegebene spezielle Schnittstelle anzubinden. Die Schnittstelle ist eine Eindrahtschnittstelle die ganz eigene Vorgaben hat.

Hier ein Auszug aus der Schnittstellenbeschreibung:

"...
Schnittstellenparameter:
38400, n, 8, 1
Eindrahtschnittstelle halbduplex

Protokoll:
Idle Line Multiprozessor
Protokoll

Der Sensor ist Slave. Er empfängt solange, bis ein Idle Line
Timeout auftritt. Anschließend werden die Daten ausgewertet
und entsprechend reagiert.

Datenabfrage:
Der Master schickt ca. alle 6ms eine Adresse auf den Bus (0x00
bis 0x0f rotierend).
Erkennt der Sensor die Adresse, antwortet dieser.
Antwort vom Sensor Die Antwort besteht aus 3 Bytes.
1. Byte:
Adresse (Echo) + Werteklasse (= Einheit)
2.+3. Byte:
Sensorwert und Alarmflag

Beispiel der Antwort auf die Adresse 3:
0x31 = Adr. 3 + Werteklasse 1 "Spannung"
0x005B = 45*2+1 = 4,5 Volt + Alarmflag



Ich bin schon so weit, das ich am besten mit den "Serin" und "Serout" Befehlen zurecht komme. Der Testcode reagiert schon mal auf die Adresse auf dem Pin A0 und schreibt dann zurück.

Komisch ist nur, das ganz andere Werte zurückgeschrieben werden. Ich lasse die Werte an zwei Pins mit Serout schreiben. An Pin A1 hängt ein Terminalprogramm.


$regfile = "M16def.dat"
$crystal = 3686000

$baud = 38400

$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 16 ' default use 10 for the SW stack
$framesize = 64

Dim B As Byte
Dim Wert As Word
Dim Header As Byte


Header = &H31
Wert = &H005B


Do

Serin B , 1 , A , 0 , 38400 , 0 , 8 , 1

If B = 3 Then
Serout Header , 1 , A , 0 , 38400 , 0 , 8 , 1
Serout Wert , 2 , A , 0 , 38400 , 0 , 8 , 1
Serout Header , 1 , A , 1 , 38400 , 0 , 8 , 1
Serout Wert , 2 , A , 1 , 38400 , 0 , 8 , 1
End If

Loop

End


Aber anstelle von:
Header = &H31 (0x31) wird im Terminal Hex 0x61 zurückgeschrieben und anstelle von Wert = &H005B (0x005B) wird in Hex 0xBB00 ausgegeben.

Baudraten usw. passen.

Was läuft hier falsch? Hat jemand nen Tipp?

m@rkus33
30.07.2012, 17:14
Ich habe jetzt das Problem zwar gefunden, weis aber nicht wie ich es lösen kann.

Das Problem ist, das scheinbar die Werte beim Befehl Serout um ein Bit verschoben werden.

Beispiel:
Der Header hat &B0001_1100, es kommt aber 0011_1100 raus. Ich habe jetzt sehr viel rumgespielt und verglichen, es ist immer das gleiche Problem. Hat jemand ne Idee wie ich das verhindern kann?

Vitis
30.07.2012, 17:38
stellt sich die Frage ob beim Serin das Bit versetzt wird oder beim Serout ... beim Serin könnte die Leitung zwischendrin evtl. floaten und dann das Startbit nicht richtig rüber kommen ... probiers mal mit nem Pullup 10K oder so

m@rkus33
30.07.2012, 21:12
Hab nen 10K Pull up drin, keine Änderung. Komisch..

Vitis
31.07.2012, 11:02
Mal das Oszi drauf gehängt?