Forum: Mikrocontroller und Digitale Elektronik Wie handelt man 16 bit zum PC per Serielle Schnittstelle


von noname (Gast)


Lesenswert?

Hallo


ich steh wieder mal vor einem Problem. Wie kann man ein Wort (16
Bit->ist ein Messwert von einem AD_Wandler) zu einem PC senden. Und wie
erkennt der PC welcher HighByte und welcher LowByte ist?

DANKE

von formtapez (Gast)


Lesenswert?

Denk Dir doch einfach ein Protokoll aus, was Sender und Empfänger
verstehen.

z.B.: STX LO HI ETX

MfG
formtapez

von crazy horse (Gast)


Lesenswert?

Alternativ Ascii-Übertragung mit Trennzeichen.
Wert: 32768
gesendet wird: 0x33, 0x32,0x37,0x36,0x38,0x0d,0x0a

von noname (Gast)


Lesenswert?

Das hab ich schon mir so gedacht, nur wie greife ich im Mikrocontroller
auf das High und Lowbyte einzeln in C zu?

von Maddin (Gast)


Lesenswert?

lowbyte = (WORD&0xFF);
hibyte = ((WORD&0xFF00)>>8);

Gruß,
Maddin

von noname (Gast)


Lesenswert?

manchmal sieht man den Wald vor Bäumen nicht ;)

DANKE

mir ist noch was eingefallen. Kann ich nicht einfach ein Wortzeiger der
auf die Adresse von der Variable zeigt und dann einfach das Highbyte
auslesen, dann die Adresse um 8 (ein Byte) erhöhen und dann nochmal
lesen? Währe das in einem Mikrocontroller ineffektiv?

von Joern Gerhard (Gast)


Lesenswert?

Oder einfach 2 serielle Leitungen nehmen... ;-))

Nee, meistens liegen die Bytes ja bereits einzeln vor, dann ist es
natürlich am schnellsten sie genauso nacheinander abzusenden, also z.B.
beim AD-Converter des AVR liegen die 10bit ja im Register ADC, auf die
High- und Low-Bytes kann man jedoch auch direkt zugreifen mit ADCH und
ADCL. Dabei das Datenblatt beachten, welche Reihenfolge evtl.
erforderlich ist, damit nicht das 2.Byte vom Controller geändert wird,
während man noch das erste ausliest.

Würde also beim AVR (mit winavr) so aussehen:

loop_until_bit_is_set(UCSRA, UDRE);  //wait if UART is still busy
UDR = ADCL;          //send char
loop_until_bit_is_set(UCSRA, UDRE);  //wait if UART is still busy
UDR = ADCH;          //send char

cu joern

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.