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
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
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
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ß
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.