Forum: Mikrocontroller und Digitale Elektronik über UART 4byte long aufteilen und verschicken


von Bernhard (Gast)


Lesenswert?

Hallo Leute
habe leider das Problem dass ich eine current position Variable eines 
Schrittmotors auf der seriellen Schnittstelle ausgeben möchte.Meine 
ersten Denkansätze waren dass ich den wert in einer schleife durch 
256^3...256^1 unterteile und so sequenzell schicke .Dies Funktioniert 
nur leider nicht.
Könntet ihr mir vielleicht ein paar denkanstöße geben. Wäre echt nett. 
Apropos ich verwende die µVision Testversion und bin noch neu auf dem 
Gebiet der µC.
Herzlichen Dank

mfg Bernhard

von Oberlehrer (Gast)


Lesenswert?

Eine verständliche und vollständige Beschreibung des Problems ist die 
halbe Lösung.

von g457 (Gast)


Lesenswert?

..der übliche Ansatz (abgesehen von einer verständlichen 
Problembeschreibung ;-) ist hier ein byteweises Versenden. Ob big oder 
little endian ist dabei erst mal egal.

Jetzt musst Du nur noch die einzelnen Bytes rauskitzeln. Dafür gibts 
mehrere Methoden, die einfachste ist i.d.R sowas:
1
int32_t daten = irgendwas;
2
uart_send_one_single_byte_with_or_without_encoding(daten & 0xFF);
3
daten >> 8;
4
uart_send_one_single_byte_with_or_without_encoding(daten & 0xFF);
5
daten >> 8;
6
uart_send_one_single_byte_with_or_without_encoding(daten & 0xFF);
7
daten >> 8;
8
uart_send_one_single_byte_with_or_without_encoding(daten & 0xFF);

Geht auch noch auf zahlreiche andere Arten, jeder wie ers gerne macht.

HTH

von g457 (Gast)


Lesenswert?

s/int32_t/uint32_t/wennmansganzgenaumachenwill</ingrid>

von Ralph (Gast)


Lesenswert?

1. Byte :  (U8)( long         & 0x000000FF)
2. Byte :  (U8)((long >>  8 ) & 0x000000FF)
3. Byte :  (U8)((long >> 16)  & 0x000000FF)
4. Byte :  (U8)((long >> 24)  & 0x000000FF)

Dann die 4 Byte einzel übertragen.
Auf dem PC die 4 Bytes wieder zusammensetzen.

geht da mit "<<"

von hans (Gast)


Lesenswert?

Es geht auch über eine UNION aus einem LONG
und einem CHAR[4]-Feld.

hans

von Bernhard (Gast)


Lesenswert?

Vielen Dank für die schnellen Antworten

lg


Bernhard

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.