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?
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
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"
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.