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
Du kannst unter Bascom Strings direkt vergleichen, also if sendetext = empfangtext then print "ok" endif
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
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.
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
Gaaaanz langsam: Datenarray(1) Anfang? ,8 ) anzahl der Byte woher? muss ich bei CRC nicht ein Polynom subtrahieren oder so? Nie kapiert. Wigbert
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
schaus dir auf der seite an. anscheinent kriegt bascom das hin . http://bascom-forum.de/index.php/topic,312.msg728.html#msg728
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.
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.
Checksum primitiv quatsch der ist nur für Strings zu gebrauchen und für Print befehle
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
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.
sehe gerade der Sensor liefert schon das Datenpaket. Der Empfänger checkt dann. Wigbert
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.
Eigentlich ähnlich wie meine Idee nur ohne String, Ich dachte das wird mit einer Tabelle zurückgerechnet und dann kommt 0 raus. Wigbert
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.