mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Checksummme unter Bascom


Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

in Bascom wird der Befehl Checksumsum zur Vefügung gestellt.

Ich hab folgendes Protokoll erdacht:

Sender:
-Aus String Checksumme bilden und an String anhängen
-gesamten String senden

Empfänger:
-Empfangenen String Checksumme abspalten
-aus den gewonnenen String Checksumme bilden
-Checksummen vegleichen
-String ausgeben

Ich will damit ein Slave dazu bewegen seine Daten (Temperatur o.ä.)
bei fehlerhaften Empfang nochmals zu senden.

Ist das so üblich.(konnte kein Bz.eines einfachen Protokolls finden)
Ist das so einigermassen sicher.

Wigbert

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst unter Bascom Strings direkt vergleichen,
also

if sendetext = empfangtext then
print "ok"
endif

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Marko,
wenn ein Byte verlohrengeht woher weiss der Empfänger
wie der Sendetext aussah. Eine Checksumme ist die einzige
wahre Aussage.Es sei den die Checksumme würde im Fehlefall
wieder stimmen.Das sind meine Bedenken.
hab in meiner Simmulation nur zum Probieren den Sendetext beim
Empfänger übernommen. Ich wirklichkeit liegen ja dazwischen
"welten"

Wigbert

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fühler geben aber keine strings raus sondern haben den CRC
im letzten Byte.
Habe was mit 1Wire 18B20 gesehen.
da wurde das auch gemacht.
wenn du interesse hast kannste den link haben.

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi bascom-looser
auf solche Frage hatte ich schon gewartet.
CRC ist schon besser, da er kleine Fehler wohl repariert.
Aber für meine Zwecke sollte ein einfaches Protokoll
genügen.


Wigbert

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
If Datenarry(9) = Crc8(datenarry(1) , 8) Then

Crc8  meine Ich

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gaaaanz langsam:

Datenarray(1) Anfang?
,8 ) anzahl der Byte woher?
muss ich bei CRC nicht ein Polynom subtrahieren oder so?
Nie kapiert.

Wigbert

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wigbert -dl1atw wrote:
> CRC ist schon besser, da er kleine Fehler wohl repariert.

Nein, CRC repariert garnichts. CRC heißt Cyclic Redundancy Check und ist 
eine Prüfsumme, die durch Polynomdivision berechnet oder aus einem 
Tabellensystem abgeleitet wird.

Durch geschickte Auswahl des Generatorpolynoms kann man die Prüfsumme 
besonders sensibel für bestimmte Arten von Übertragungsfehlern machen.

Ich weiß nicht, wie die Checksum-Funktion in BASCOM implementiert ist, 
halte es aber für gut möglich, daß das ein CRC-Algorithmis ist.

Details zu CRC: http://de.wikipedia.org/wiki/Cyclic_Redundancy_Check

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schaus dir auf der seite an.
anscheinent kriegt bascom das hin .
http://bascom-forum.de/index.php/topic,312.msg728....

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dim Datenarry(9) As Byte                                    'Scratchpad 
0-8 72 bits incl CRC, explanations for DS18b20
'Sc(1)                           'Temperature LSB
'Sc(2)                           'Temperature MSB
'Sc(3)                           'TH/user byte 1         also SRAM
'Sc(4)                           'TL/user byte 2         also SRAM
'Sc(5)                           'config                 also SRAM    x 
R1 R0 1 1 1 1 1 - the r1 r0 are config for resolution - write FF to byte 
for 12 bit - others dont care
'Sc(6)                           'res
'Sc(7)                           'res
'Sc(8)                           'res
'Sc(9)                           '8 CRC ---> * Byte CRC check

Dieser 1WIRE Bus ist schon eine klasse Sache.
Ist aber sehr S-Ran intensiv glaube ich.

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Uhu,
Dein von Dir genanten Beitrag und auch ähnliche in diesem Forum
kenne ich , trotzden Dank , ich dachte da Bascom den Befehl
Checksum nun mal hat.......

bacom-looser ,
da ich auf dem von Dir genannten Forum Mitglied bin
kenne ich auch die dortigen CRC Erklärungen.

Also ist Checksum primitiv? nicht zu gebrauchen?.....

In der Hilfe von Bascom ist der Befehl als Xor-Verknüpfung
wohl erklärt.

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Checksum primitiv quatsch der ist nur für Strings zu gebrauchen und für 
Print befehle

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lag mit Checksum wohl richtig.

Und wie prüft der Empfänger crc?
Datenaket nochmals mit CRC checken.
oder mit Polynom und dann muss 0 raus kommen?


Wigbert

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 8 Daten Bytes werden mit CRC8 berechnet und das Neunte Byte enthält 
die Checksumme.Eigentlich braucht man ja nur die erste zwei Bytes
das steckt die Temperatur drinne.Siehe Beispiel oben.

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sehe gerade der Sensor liefert schon das Datenpaket.
Der Empfänger checkt dann.

Wigbert

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau.Der Sender schickt Neun Bytes also acht Daten+CRC
daraus errechnet der empfänger dann aus den acht Daten
eine Checksumme und vergleicht beide miteinander.

Autor: Wigbert Picht (wigbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich ähnlich wie meine Idee nur ohne String,
Ich dachte das wird mit einer Tabelle zurückgerechnet und dann kommt
0 raus.

Wigbert

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bascom arbeitet mit sogenanten Funktionen.Die aber so viel
Ich weiss direkt aus Maschinen Code bestehen.
Dort kommt eine 1 für ok raus oder 0 für error

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.