Forum: Mikrocontroller und Digitale Elektronik usart Übertragung/ Endzeichen


von grundschüler (Gast)


Lesenswert?

allgemeine Frage zur Übertragung von Daten:

Ich will Daten zwischen PC und m328/ch340 per usb/usart austauschen. 
I2c-Bausteine sollen mittels m328 vom PC aus beschrieben und ausgelesen 
werden.

Gesendet wird byteweise, also Werte von 0 bis 255. Wie wird dem 
Gegenpart am Besten mitgeteilt, dass der Datensatz zu Ende ist?

Wenn ich ein Endzeichen abfrage
    if(rxBuffer[rxWritePos]!=10)...
reduziert sich die Datenübertragung von 8bit auf 4bit weil ich zur 
Darstellung von 255 Zeichen das Endzeichen nicht benutzen kann.

Wie macht man es am Besten:
-timeout
-Endzeichen
-definierte Datensatzlänge
???

Gibts was brauchbares Fertiges?

von C. (Gast)


Lesenswert?

Wenn du Binär übertragen willst, brauchst du ein Protokoll:

START Bedinung
Typ der Daten
Länge in Bytes
Daten


Wenn du ASCII oder BASE68 codiert überträgst kannst Zeilenumbrüche oder 
änliches verwenden

von C. (Gast)


Lesenswert?

*Base64

von grundschüler (Gast)


Lesenswert?

Danke für die Antwort. Base64 hört sich gut an. Jedenfalls besser als 
mein selbstgestricktes 4-bit. Die meisten Probleme, die beim 
Programmieren auftauchen hat schon mal jemand anders besser gelöst, als 
man selbst es kann.

Base64-Decoder gibts hier:
Beitrag "BASE64 Dekoder"

von Reiner_Gast (Gast)


Lesenswert?

Je nach Empfindlichkeit der Verkabelung und Wert auf Integrität der 
Daten würde ich noch eine CRC16 Checksumme an den Datenblock anhängen, 
damit die korrekte Übertragung sichergestellt ist...

von grundschüler (Gast)


Lesenswert?

Reiner_Gast schrieb:
> CRC16 Checksumme

Ich hab eine sehr vereinfachte crc-Prüfung:
1
ISR(USART_RX_vect)
2
{
3
u8 i=0;
4
    led1_on;
5
    rxBuffer[rxWritePos] = UDR0;
6
    if(rxBuffer[rxWritePos]!=10){
7
      crc=crc+1+rxBuffer[rxWritePos];
8
      rxWritePos++;
9
    }else{
10
    
11
    //Übertragung beendet
12
    rxWritePos=0;
13
    twx_rx_auswerten();
14
    led1_off;
15
    }
16
    
17
}

Macht es Sinn auf crc8 oder crc16 umzustellen?

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.