Hallo Ich habe ein Problem mit einem edip display. und zwar ist der wert der checksumme zu groß für ein byte. nun weiß ich nicht wie man das mit dem small protokoll in einklang bringt. wenn die checksumme > 1 byte ist. hat schon mal jemand dieses problem gehabt und eventuell ein code beispiel in c. oder hat jemand einen tip für mich ? danke gruß gizmo
Den zu großen Wert einfach solange -256 bis das Ergebnis dann kleiner 256 ist. Dann hast deine Checksumme... Aber das geht automatisch weil ja ein char nur 8 bit groß ist Funktion könnte vielleicht so aussehen... unsigned char checksumme_glcd(unsigned char *data_glcd, unsigned char len) { unsigned char checksumme=0; unsigned char i; for(i=0;i<len;i++){ checksumme = checksumme + data_glcd[i]; } return checksumme; }
Um es ganz banal auszudrücken: du fängst einfach wieder bei 0 an, wenn du über 255 kommst. ;)
1 | unsigned char calc_bcc (const char *string) |
2 | {
|
3 | bcc = 0; |
4 | while (*string) |
5 | {
|
6 | bcc += *string; |
7 | string++; |
8 | }
|
9 | return bcc; |
10 | }
|
und die Berechnung des Befehls:
1 | //--- Geraden und Punkte zeichnen (zwei Koordinaten) -------------------------------------------
|
2 | void draw_2coord (unsigned char DC, char *String, unsigned char X1, unsigned char Y1, unsigned char X2, unsigned char Y2) |
3 | {
|
4 | sprintf(Nutzdaten,"%c%s%c%c%c%c",esc,String,X1,Y1,X2,Y2); // String zuweisen |
5 | Length = strlen (Nutzdaten); // Länge ermitteln, esc dazuzählen |
6 | sprintf(Nutzdaten,"%c%c%c%s%c%c%c%c",DC,Length,esc,String,X1,Y1,X2,Y2); |
7 | calc_bcc (Nutzdaten); |
8 | Nutzdaten[strlen(Nutzdaten)] = bcc; |
9 | PORTD |= _BV(RS485_FG); |
10 | for (unsigned char i=0;i<(strlen(Nutzdaten));i++) |
11 | {
|
12 | uart_out (Nutzdaten[i]); |
13 | }
|
14 | loop_until_bit_is_set(UCSR1A, UDRE1); |
15 | PORTD &= ~_BV(RS485_FG); |
16 | }
|
Ich hoffe, man kann 'was erkennen. ;)
Könntest du das beispiel noch einmal in vb .net schreiben, verstehe C# nicht so gut.
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.