eDip 240-7 wert der checksumme zu groß für ein byte

Gast #1530035
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
Gast #1530158
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;
}
Gast #1530166
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. ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren