Forum: Mikrocontroller und Digitale Elektronik Checksummme unter Bascom


von Wigbert P. (wigbert) Benutzerseite


Angehängte Dateien:

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

von Marko (Gast)


Lesenswert?

Du kannst unter Bascom Strings direkt vergleichen,
also

if sendetext = empfangtext then
print "ok"
endif

von Wigbert P. (wigbert) Benutzerseite


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

von bascom-looser (Gast)


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.

von Wigbert P. (wigbert) Benutzerseite


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

von bascom-looser (Gast)


Lesenswert?

If Datenarry(9) = Crc8(datenarry(1) , 8) Then

Crc8  meine Ich

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

Gaaaanz langsam:

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

Wigbert

von Uhu U. (uhu)


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

von bascom-looser (Gast)


Lesenswert?

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

von bascom-looser (Gast)


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.

von Wigbert P. (wigbert) Benutzerseite


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.

von bascom-looser (Gast)


Lesenswert?

Checksum primitiv quatsch der ist nur für Strings zu gebrauchen und für 
Print befehle

von Wigbert P. (wigbert) Benutzerseite


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

von bascom-looser (Gast)


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.

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

sehe gerade der Sensor liefert schon das Datenpaket.
Der Empfänger checkt dann.

Wigbert

von bascom-looser (Gast)


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.

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

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

Wigbert

von bascom-looser (Gast)


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

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.