mikrocontroller.net

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


Autor: gizmo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um es ganz banal auszudrücken:

du fängst einfach wieder bei 0 an, wenn du über 255 kommst.

;)
unsigned char calc_bcc (const char *string)
{
  bcc = 0;
    while (*string)
    {
        bcc += *string;
        string++;
    }
  return bcc;
}

und die Berechnung des Befehls:
//--- Geraden und Punkte zeichnen (zwei Koordinaten) -------------------------------------------
void draw_2coord (unsigned char DC, char *String, unsigned char X1, unsigned char Y1, unsigned char X2, unsigned char Y2)
{
  sprintf(Nutzdaten,"%c%s%c%c%c%c",esc,String,X1,Y1,X2,Y2);    // String zuweisen
  Length = strlen (Nutzdaten);    // Länge ermitteln, esc dazuzählen
  sprintf(Nutzdaten,"%c%c%c%s%c%c%c%c",DC,Length,esc,String,X1,Y1,X2,Y2);
  calc_bcc (Nutzdaten);
  Nutzdaten[strlen(Nutzdaten)] = bcc;
  PORTD |= _BV(RS485_FG);
  for (unsigned char i=0;i<(strlen(Nutzdaten));i++)
    {
      uart_out (Nutzdaten[i]);
    }
  loop_until_bit_is_set(UCSR1A, UDRE1);
  PORTD &= ~_BV(RS485_FG);
}

Ich hoffe, man kann 'was erkennen. ;)

Autor: flole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könntest du das beispiel noch einmal in vb .net schreiben, verstehe C# 
nicht so gut.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.