PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hex Code an RS232 senden



jojo150272-A
30.05.2008, 09:29
Hallo Leute,

ich habe wieder mal ein kleines Problem.

Ich möchte einen Hex Code an die RS232 meines Mikrocontrollers senden.

Habe einen Atmega 2561. Wie die RS232 funktioniert weiß ich ja, so sende ich schon Steuerbefehle weiter.

Die Frage für mich ist es ob ich ein Hex Protokoll in dieser Form senden kann und wie ich es dafür aufbauen muß. Ich möchte das Protokoll im EEprom speichern (am liebsten in einem externen 24c512) und zu bestimmten Zeiten aus dem EEProm auslesen und an die RS232 senden.

Ein Beispiel des Hex-Protokoll was ich versenden möchte:

05 8D 80 00 04 32 09 05

Über jede Hilfe bin ich sehr dankbar.

mfg Jörg

johns
30.05.2008, 19:57
hallo

vorweg, ich war im deutschunterricht sehr schlecht im interpretieren (abgesehen von 'warten auf godot';)), und bin daher zu anderen sprachen gewechselt, für welche die interpretation falls nötig automatisiert geschieht ;)

du empfängst am mikrocontroller bereits steuerbefehle, und willst jetzt daten vom mikrocontroller versenden?
bei einem protokoll im IT bereich handelt es sich um die definition von ablauf und struktur von kommunikation. ein solches zu versenden macht daher selten sinn. ein protokoll kann aber auch eine aufzeichnung von daten sein. um missverständnissen vorzubeugen sollte man aber besser die bezeichnung 'log' verwenden. nehme ich richtig an dass du letztere definition von protokoll meinst?

falls beide fragen mit ja beantwortet werden können, nehme ich als basic verweigerer an, dass die gesuchte funktion in der bascom dokumentation zu finden ist, in der nähe des befehls den du zum empfangen verwendest.
ob ein datensatz wie der von dir als beispiel angeführte geeignet ist, hängt davon ab, ob die gegenstelle etwas damit anfangen kann, wo wir wieder beim interpretieren wären ;) denn es muss ja unterumständen anfang und ende gekennzeichnet sein. in einem sehr einfachen fall könnte das dadurch geschehen, dass der anfang durch eine längere vorangegangene (sende)pause erkannt wird, und das ende durch eine bekannte länge des datensatzes gegeben ist.
befehle bzgl EEPROM zugriff sollten auch in der bascom doku stehen, aber das war glaub ich eh nicht gefragt.

lg

jojo150272-A
30.05.2008, 22:58
Hallo Johns,

ja du hast recht, ich habe mich wohl ein bischen unklar ausgedrückt.

Also das ganze nochmal in einer geordneten Struktur.

- ich möchte mehrere Hex Code´s (so 30 Stück) am PC eingeben und in den EEprom des Atmel 2561 speichern.

- zu bestimmten Zeiten (über eine Interne Uhr im 2561) möchte ich die im EEprom gespeicherten Hex Code´s wieder auslesen und über die RS232 des Mikrocontrollers an ein Gerät senden.

- so weit ist das für mich auch kein Problem, ich versende ja im Moment schon per Print Befehl verschiedene Zeichen über die RS232

Jetzt meine Frage:

Wie muß ich die Ausgabe über Print machen für diesen Hex Code ???

Ich hoffe das es jetzt verständlich ist.

Gruß Jörg

Gento
31.05.2008, 00:19
Print Chr(Zeichen) z.B. sendet Hex

Gento

jojo150272-A
31.05.2008, 02:57
Hallo Gento,

danke für deine antwort.

Sende ich meinen Code 05 8D 80 00 04 32 09 05 dann so:

Print Chr (05)
Print Chr (8D)
Print Chr (80)
Print Chr (00)
Print Chr (04)
Print Chr (32)
Print Chr (09)
Print Chr (05)

oder geht das auch auf einmal ???

Gruß Jörg

Dirk
31.05.2008, 08:36
Hallo jojo150272-A,

das Problem ist, dass du ganze Bytes (Werte: 0..255) über RS232 übertragen willst.
Das klappt aber standardmäßig ohne einen Binärmodus mit normalen Terminals nur mit ASCII-Werten. Dabei sind z.B. die Werte unter 32 mit Steuerzeichen belegt und werden nicht 1:1 übertragen.

Was man machen kann ist (wird z.B. bei RS232-Bootloadern gemacht), dass man jedes Byte, das man senden will, in 2 ASCII-Zeichen packt.
Gut klappt das z.B. mit dem Hex-Wert, also mit $00..$FF (0..255).
Hex $00 würde man dann mit:
Print Chr('0')
Print Chr('0')
... übertragen und Hex $3F (63) mit:
Print Chr('3')
Print Chr('F')

Im Empfänger muss man dann aus den 2 ASCII-Werten wieder das Byte zusammensetzen.
Umständlich,- aber geht.

Gruß Dirk

marvin42x
31.05.2008, 12:14
Wenn du ein volltransparente Übertragung brauchst findest Du hier eine Beschreibung:
https://www.roboternetz.de/wissen/index.php/Bascom_UART_Input
Das ist mit Byte Stuffing und Fehlerkontrolle. Das ist dann schon was feines.
Die Anwendung eines solchen Protokolls findest du in dieses Projekt eingebettet:
http://www.marvins-lab.roboterbastler.de/index.html
dort kommuniziert ein Mega32 per ByteStuffing mit einem PC. Vielleicht kannst Du dir da was von raussägen falls es für dich in Frage kommt.

Netter Gruß

repi64
01.06.2008, 22:55
Tach,
ansonsten geht es auch so:

Print Chr (&H05); Chr (&H8D); Chr (&H80);........... Chr (&H05);

Das ";" am Ende ist notwendig damit kein CR mitgeschickt wird.

jojo150272-A
01.06.2008, 23:22
Hallo Repi,

danke für deine Information . Genau das habe ich gesucht.

Das mit dem CR ist für mich sehr wichtig. Nochmals vielen dank.

Gruß Jörg