mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Prüfsumme am einfachsten.


Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe mal eine Frage bezüglich zum Thema Prüfsumme.

Ich bekomme von LabVIEW eine Nachricht: z.B: : 1 1 A 0 1 2 3 4 1 2 3 4 
\0
(Als Charakter, Leerzeichen sind hier nicht zu beachten).

Jetzt lies ich die Zeichen am µC ein, und speichere sie in ein Array.
Nun stell ich mir die Frage, wie ich am besten gewährleisten kann, dass 
die Daten richtig angekommen sind.
Meine Idee wäre: Jedem Zeichen einen Wert zuweisen, und im LabVIEW diese 
Checksum hinzuzufügen, damit die Nachricht z.B. so aussieht:
: 1 1 A 0 1 2 3 4 1 2 3 4 55 \0

Im Mikrocontroller Zeichen einlesen, ebenfalls Werte zuweisen, und die 
letzte Summe überprüfen, aber wäre ja auch irgendwie ne dumme Methode, 
oder was sagt ihr?

Dann hab ich den Tipp gehört, dass das Ganze am besten mit einer XOR 
Verknüfung zu realisieren ist, wobei ich jedoch nicht genau weiß, wie 
das mit XOR funktionieren soll...
LG

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny Knot schrieb:

> Meine Idee wäre: Jedem Zeichen einen Wert zuweisen,

Die Idee ist grundsätzlich gut.
Diesen 'Wert' gibt es sogar schon.
Es ist der ASCII Code des Zeichens (google anwerfen)

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Johnny Knot schrieb:
>
>> Meine Idee wäre: Jedem Zeichen einen Wert zuweisen,
>
> Die Idee ist grundsätzlich gut.
> Diesen 'Wert' gibt es sogar schon.
> Es ist der ASCII Code des Zeichens (google anwerfen)

D.h. ich weise ':' 58dez zu, 'A' dann eben 65dez usw...

Aber nur ein Problem wäre da glaube ich noch, wenn z.B. zwei Character 
vertauscht wären --> Prüfsumme würde stimmen, nur Nachricht wäre falsch 
:-/
LG

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny Knot schrieb:
> Dann hab ich den Tipp gehört, dass das Ganze am besten mit einer XOR
> Verknüfung zu realisieren ist, wobei ich jedoch nicht genau weiß, wie
> das mit XOR funktionieren soll...
XOR ist auch im Prinzip eine Art "Summe", nur das man anstelle von '+' 
halt (z.B. in C) die '^' XOR Verknüpfung nutzt.

Wie das geht hängt von der verwendeten Programmiersprache im µC ab, in 
Labview findet man sicherlich in google wie dort eine XOR verknüpfung 
genutzt wird.

Johnny Knot schrieb:
> Aber nur ein Problem wäre da glaube ich noch, wenn z.B. zwei Character
> vertauscht wären --> Prüfsumme würde stimmen, nur Nachricht wäre falsch
Dann hast du ganz andere Probleme... Wenn du nichtmal sicherstellen 
kannst das einzelne bytes (die kleinste Framegröße) in korrekter 
Reihenfolge eintreffen ist irgednwas faul.

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie das geht hängt von der verwendeten Programmiersprache im µC ab, in
> Labview findet man sicherlich in google wie dort eine XOR verknüpfung
> genutzt wird.

Ja danke. ^ (Bitweise XOR) wäre die Problemlösung.

> Johnny Knot schrieb:
>> Aber nur ein Problem wäre da glaube ich noch, wenn z.B. zwei Character
>> vertauscht wären --> Prüfsumme würde stimmen, nur Nachricht wäre falsch
> Dann hast du ganz andere Probleme... Wenn du nichtmal sicherstellen
> kannst das einzelne bytes (die kleinste Framegröße) in korrekter
> Reihenfolge eintreffen ist irgednwas faul.

Nein, die Bytes treffen in korrekter Reihenfolge ein, das ist der Fall. 
Aber obwohl es so nutzlos klingt, soll es gewährleistet werden :-)
LG

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny Knot schrieb:
> Nein, die Bytes treffen in korrekter Reihenfolge ein, das ist der Fall.
> Aber obwohl es so nutzlos klingt, soll es gewährleistet werden :-)
Dann muss jedes Byte eine Sequenznummer erhalten, was die nutzbaren bits 
entsprechend reduziert und eine Maximale Nachrichtenlänge bedingt...
Es ist natürlich nicht nutzlos, aber auf byte ebene ich sag mal 
ungewöhnlich...

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läubi .. schrieb:
> Johnny Knot schrieb:
>> Nein, die Bytes treffen in korrekter Reihenfolge ein, das ist der Fall.
>> Aber obwohl es so nutzlos klingt, soll es gewährleistet werden :-)
> Dann muss jedes Byte eine Sequenznummer erhalten, was die nutzbaren bits
> entsprechend reduziert und eine Maximale Nachrichtenlänge bedingt...
> Es ist natürlich nicht nutzlos, aber auf byte ebene ich sag mal
> ungewöhnlich...

Okay. Ja es ist in meiner Anwendung im Prinzip fast nutzlos. Aber was 
soll man gegen eine Aufgabenstellung vom Professor sagen...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny Knot schrieb:
> Okay. Ja es ist in meiner Anwendung im Prinzip fast nutzlos. Aber was
> soll man gegen eine Aufgabenstellung vom Professor sagen...
Nochmal mit dem Prof. sprechen, nachfragen was der Hintergrund ist, was 
sich davon versprochen wird und damit zeigen das man schonmal über das 
Problem nachgedacht hat ;)
Was ist den die Aufgabe, ist das eine Übungsaufgabe? Oder hat das mehr 
Hintergrund?

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läubi .. schrieb:
> Johnny Knot schrieb:
>> Okay. Ja es ist in meiner Anwendung im Prinzip fast nutzlos. Aber was
>> soll man gegen eine Aufgabenstellung vom Professor sagen...
> Nochmal mit dem Prof. sprechen, nachfragen was der Hintergrund ist, was
> sich davon versprochen wird und damit zeigen das man schonmal über das
> Problem nachgedacht hat ;)
> Was ist den die Aufgabe, ist das eine Übungsaufgabe? Oder hat das mehr
> Hintergrund?

Werde mal mit dem reden...

...mehr oder weniger Übungsaufgabe, Hintergrund hat es nicht wirklich 
glaub ich :-)

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube eher, du hast die Aufgabenstellung etwas fehlinterpretiert ;)
Eine Checksumme zum sicherstellen des korrekten Empfangs ist nichts 
ungewöhnlich. Aber gegen das vertauschen von Bytes sichert eine 
Checksumme eigentlich nicht ab. Das is auch nicht nötig, da auf der 
Leitung keine Bytes ihre Position tauschen können. Die Checksumme soll 
gegen das absichern, was auch passieren kann: Das einzelne Bytes durch 
Bit-Fehler verändert werden.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Prüfsumme hat immer das Problem, dass man grudsätzlich nicht 100% 
sicherstellen kann, dass jede Änderung detektiert werden kann. Es gibt 
Verfahren, die sind für die häufigsten Fehler empfindlicher und es gibt 
welche die sind es nicht, tun aber trotzdem ihren Dienst.

Das Problem ist eng verwandt mit dem Problem der Kompremierung. Wenn 
Prüfsummen nämlich eindeutig wären, könnte man sie super für 
Kompressionszwecke benutzen. Man schickt die Länge der Daten und die 
Prüfsumme (anstelle der Daten) und der Empfänger spielt einfach Bytes 
durch, bis er die Kombination hat, die die vorgegebene Prüfsumme ergibt 
:-)

Eine Prüfsumme wirft Informaton weg und damit ist klar, dass es immer 
Fälle geben wird (egal wie die Prüfsumme gebildet wird), bei der 
unterschiedliche Sequenzen dieselbe Prüsumme ergeben. Mann kann nunmal 
nicht 100 Bits (welche die Daten darstellen) in nur 16 Bit 
zusammenquetschen (die Prüfsumme) ohne dass etwas verloren geht.

Autor: Thomas Zeisluft (thozei)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wär's mit CRC?

CRC8 sollte reichen.


http://www.ross.net/crc/


Thomas

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus schrieb:
> Die Checksumme soll
> gegen das absichern, was auch passieren kann: Das einzelne Bytes durch
> Bit-Fehler verändert werden.

Bei einfachem aufaddieren kann man nicht merken, ob das fehlerhaft 
gesetzte Bit im 1. oder 2. Zeichen auftritt. Dafür gibt es aber noch 
andere Prüsummenverfahren (zum Beispiel Einführung einer Gewichtung). Am 
elegantesten wäre eine CRC-Prüfsumme.

So machen es die 1-Wire-Devices:
http://www.phanderson.com/PIC/16C84/crc.html

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>> --> Prüfsumme würde stimmen, nur Nachricht wäre falsch :-/
Ah, der Konjunktiv.... ;-)
Es könnte auch ein Asteriod auf die Erde fallen...
Es wäre schon, wenn ich Millionär wäre...

Den allermeisten auf der Welt reicht diese XOR-Prüfsumme aus. Denn in 
der Regel ist ein System so ausgelegt, dass fehlerfreie Daten kommen. 
Und einfach nur ein Fehler gemeldet wird, wenn was mit den Daten 
offensichtlich nicht stimmt. Es würde mich wundern, wenn deine 
Anforderungen so grundsätzlich strenger wären.

> Aber gegen das vertauschen von Bytes sichert eine
> Checksumme eigentlich nicht ab.
Richtig, das kann dann nur ein Softwareproblem sein. Und wer garantiert, 
dass nicht gerade deine Prüfroutine einen solchen Softwarefehler 
beinhaltet :-o

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Richtig, das kann dann nur ein Softwareproblem sein. Und wer garantiert,
> dass nicht gerade deine Prüfroutine einen solchen Softwarefehler
> beinhaltet :-o

Genau, daher CRC in Hardware und zur Kontrolle nochmal in Software.
Zur Sicherheit gleich mit verschiedenen Prüfsummenverfahren.

Autor: Johnny Knot (johnny_knoxville)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die vielen Antworten

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.