Forum: Mikrocontroller und Digitale Elektronik RS232 Empfangen und Ausgänge setzen


von Thomas R. (thenew5)


Lesenswert?

Hallo euch,

bin ein Mikrocontroller (Atmega 644) Einsteiger und möchte folgendes 
realisieren:

Wenn ich ein SET 0xff schicke möchte ich das gesamt PORT C setzen oder 
nur einen teil.
Wenn ich nun GET schicke möchte ich die Eingänge von PORT A einlesen und 
and die RS232 zurück schicken.

Vielleicht kann mir von euch jemand helfen wie ich ein solche Programm 
lösen könnte.

Einzelne Zeichen kann ich Empfangen jedoch keine Wörter ..

LG

von Karl H. (kbuchegg)


Lesenswert?

Thomas Reiterer schrieb:

> Einzelne Zeichen kann ich Empfangen jedoch keine Wörter ..

Warum nicht?
Wörter werden auch nur Buchstabe für Buchstabe übertragen.
Und ein 'Buchstabe' (technisch gesehen ist das ein Buchstabe, weil er 
einen eigenen ASCII Code hat) ist der Zeilenumbruch, den du als die 
große Return-Taste an der Haupttastatur kennst.

Gut, man muss die nicht nehmen, aber traditionell wird die gerne 
genommen um anzuzeigen: jetzt ist eine komplette Eingabezeile fertig 
übertragen.

Dein Programm hat also Zeichen für Zeichen, Buchstabe für Buchstabe in 
einem Array gesammelt, macht noch ein 0-Byte hinten drann und hat dann 
einen String
"SET A 0xFF"
den es analysiert und feststellt, was der Benutzer haben will.
Und dann macht es diese Aktion.


Aber dein erstes Ziel:
Ein Programm zu schreiben, welches Buchstabe für Buchstabe von der 
Seriellen holt und nach und nach zu einem String zusammenbaut, wobei der 
Sender mit dem Return (in C-Schreibweise ein '\n') kundtut, dass jetzt 
die Zeile zu Ende ist.

von Thomas R. (thenew5)


Lesenswert?

Vielen Dank!

Habs mittlerweile geschaft einen buffer anzulegen der Mit Enter 
abgeschlossen wird.

Wie kann ich jetzt aber Sinnvoll den ASCII Code in HEX umwandeln und 
umgekehrt?

von Walter (Gast)


Lesenswert?

Thomas Reiterer schrieb:

> Wie kann ich jetzt aber Sinnvoll den ASCII Code in HEX umwandeln und
> umgekehrt?

indem du es versuchst.
Selbst wenn du eine nicht optimale Lösung findest oder Fehler drin sind,
damit lernst du 10x mehr als wenn du alles vorgebetet kriegst

von oldmax (Gast)


Lesenswert?

Hi
>Wie kann ich jetzt aber Sinnvoll den ASCII Code in HEX umwandeln und
>umgekehrt?
??
Laß mir da mal meine Fragezeichen. Du willst Daten versenden, ASCII zum 
Beispiel. Nun, was wird da über die Schnittstelle geschickt ? Richtig, 
ein Byte. Und nun dank mal nach, ASCII ist auch nur ein Byte. Hättest du 
nnu gesagt, ich schicke zwei ASCII etwa "FF" oder "A9" um daraus ein 
Byte zu machen, wär das ja mal ne Info. Aber ASCII "0" ist Hex 30 und 
dez. 48.
Willst du aus dem String "A9" den bytewert ermitteln, mußt du den String 
zerlegen. Alles was >9 ist mußt du zuweisen, oder aber den ASCII Code 
holen und Auf "A" soviel abziehen, das die Integer 10 übrig bleibt.Dann 
hast du den Wert, den du auch bei "B" "E oder auch "F" abziehen mußt um 
an den Wert zwischen 10 und 15 zu kommen. Der rest ist einfach.Das 
Hexadezimalsystem rechnet mit der Basis 16. Also, egal wieviele Stellen 
du hast, es wird mit 16 ^0 für die "Einer", 16^1 für die "Sechzehner", 
16^2 für die "zweihundersechsundfünfziger" usw gerechnet. Beispiel 
Dezimalsystem       2356 ist 6*10^0+5*10^1+3*10^2+2*10^3
Hexadezimalsystem   A9E7 ist 7*16^0 + 14(E)*16^1+9*16^2+10(A)*16^3
In Basic z.B. wäre

X = Len(HexZahl)
If X= 2 then
  Hex0=HexZahl(2)
  Hex1=HexZahl(1)
End If
If (Hex0 <="9") and (Hex0>=0) then
  Wert0 = Val(Hex0)
else
  Wert0=10-Ord("A")+Ord(Hex0)
End If

Ob der Syntax so richtig ist, weiß ich nicht. Mir geht es hier auch nur 
darum, den Weg zu zeigen, wie man einen String mit einer HexZahl zerlegt 
und bewertet. Das bischen was ich in Basic mache ist ungeprüft nur 
Leitfaden.
Gruß oldmax

von Thomas R. (thenew5)


Lesenswert?

HAllo,

hab mich eine Zeitlang nicht mit dem Thema beschäftigen können.
Aber vielen Dank für die Unterstützung.
Hab zuerst immer das Problem gehabt das ich keine Variable ausgeben 
konnte.
Nun hab ichs geschaft und wenn man sich die ASCII Tabelle ein bisschen 
zu gemüte führt dann ist das gar nicht so schwer zwischen den Formaten 
hin und her zu rechnen.
Danke ncohmals für die Tipps.

LG
Thenew

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.