Forum: Mikrocontroller und Digitale Elektronik eDip 240-7 wert der checksumme zu groß für ein byte


von gizmo (Gast)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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;
}

von Thilo M. (Gast)


Lesenswert?

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. ;)

von flole (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.