www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MAF 8031AH-2 12P - Wie macht der die Prüfziffer


Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht, ob die Frage hier richtig ist, aber ich habe ein Gerät 
mit einem alten Mikrocontroller, MAF 8031AH-2 12P. Das teil steuert ein 
weiteres Gerät mit dem selben µC.

Die Befehle, die gesendet werden, sind ja am Ende mit einer Prüfziffer 
versehen. Ich weiß nicht, ob die Controller das automatisch machen oder 
per Software so reinprogrammiert ist. Ich denke, da kennen sich hier 
genug aus.

Hier ein paar Beispiele von Datensendungen:

74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
74 01 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 73
74 01 20 4E 45 47 4C 4F 46 20 45 54 54 49 42 20 0D = Prüfziffer: 60
74 11 20 20 20 20 20 20 20 20 4C 4C 41 46 4E 55 0D = Prüfziffer: 0B
74 01 20 20 20 20 20 20 20 3E 3D 3D 3D 3D 3D 3D 0D = Prüfziffer: 19

Ich müsste wissen, wie das berechnet wird. Wenn es ein Standard ist, 
sollte es doch recht einfach sein. Folgendes konnte ich schon 
herausfinden:
1 mehr an der 2. Position erhöht die Prüfzahl um 1, an der 3. und 4. 
Position erniedrigt sich die Prüfzahl.

Bevor ich dort weiter kompliziert herumforsche, wollte ich hier mal die 
Experten fragen. Danke!

Autor: JoergL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 8031 ist ein 8051 mit externem ROM. Neben der CPU muß also ein 
Programmspeicher sein. Den mal auslesen und disassemblieren könnte Dich 
der Lösung des Problems näher bringen.

Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, das externe ROM ist mir bekannt.
Auslesen ist kein Problem, womit disassembliere ich das?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem Disassembler, der den MCS-51-Befehlssatz versteht. Den 
verwendet der 8031 nämlich.

> Die Befehle, die gesendet werden, sind ja am Ende mit
> einer Prüfziffer versehen.
> Ich weiß nicht, ob die Controller das automatisch machen

tun sie nicht

> oder per Software so reinprogrammiert ist.

So wird es sein. Den Algorithmus hast Du nicht anhand der von Dir 
geposteten Beispiele herausfinden können?

Wenn nein, dann wirst Du wohl die Software analysieren müssen, was aber 
mehr als nur einen Disassembler erfordert, nämlich Deinerseits 
Verständnis dessen, was die verwendeten Maschinenbefehle bedeuten und 
bewirken.

Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmmmm ... so ein Mist ;-)
Leider kenne ich mich damit nicht sonderlich aus, habs schon probiert, 
aber das ist wie wenn jemand ein Haus bauen soll und nicht weiß, das es 
Steine zum Mauern gibt.

Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin schon weitergekommen.

Vor der Prüfziffer sind ja immer 17 Werte, ich habe jeden Wert 
nacheinander +1 addiert und geschaut, wie sich die Prüfziffer weiterhin 
verändert.

Stelle  Bedeutung          Prüfziffer-Veränderung
1  74 (t Befehlanfang)   Wert +1 = PZ +1
2  Anzeige-Ort          Wert +1 = PZ +1
3  Wort 1, Zeichen 1  Wert +1 = PZ –3
4  Wort 1, Zeichen 2  Wert +1 = PZ +3
5  Wort 1, Zeichen 3  Wert +1 = PZ –3
6  Wort 1, Zeichen 4  Wert +1 = PZ +3
7  Wort 1, Zeichen 5  Wert +1 = PZ –3
8  Wort 1, Zeichen 6  Wert +1 = PZ +3
9  Wort 1, Zeichen 7  Wert +1 = PZ –3
10  Wort 2, Zeichen 1  Wert +1 = PZ +3
11  Wort 2, Zeichen 2  Wert +1 = PZ –3
12  Wort 2, Zeichen 3  Wert +1 = PZ +3
13  Wort 2, Zeichen 4  Wert +1 = PZ –3
14  Wort 2, Zeichen 5  Wert +1 = PZ +3
15  Wort 2, Zeichen 6  Wert +1 = PZ –3
16  Wort 2, Zeichen 7  Wert +1 = PZ +3
17  0D (Befehlende)          Wert +1 = PZ –3
18      Prüfziffer

Wert +1 bedeutet immer, das ich mit einer Eins addiert habe.

Aber wie stelle ich dafür jetzt eine Formel auf?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte ne CRC sein, schau mal auf die Maxim seite, die haben da einige 
beschrieben für den 1-Wire Bus.

Falls ne CRC nicht gleich paßt, die kann auch invertiert, gespiegelt, 
mit 0x00(00) oder 0xFF(FF) startend sein.


Peter

Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach du meine Güte, da steigt ja kein Mensch durch.

Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leute,
ich habe eine Antwort vom Entwickler des Gerätes erhalten und hatte 
vorab angefragt, wie die Prüfziffer berechnet wird. Folgende Antwort:

Sofern ich mich richtig erinnere sind die Inhalte der Einzelbytes über 
EXOR verknüpft worden. Im Anschluss wurde geprüft ob EVEN oder ODD 
Parity vorlag. Bei ODD Parity wurde das Byte invertiert und auf EVEN 
Parity ergänzt.

Hilft uns das schon weiter?
Mir sagt das ganze relativ wenig, aber es hört sich simpel an. Bitte um 
Hilfe.

Autor: Rene Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

die oberen Beispiele geben immer das korekte Ergebniss wenn alle Bytes 
XOR verknüpft werden und mit 7F gestartet wird.

In Purebasic sieht das so aus:
Restore Daten1

For y = 1 To 5
  CS.b = $7F
  For z = 1 To 17
    Read.b Wert.b
    CS = CS ! Wert
  Next z
  Debug Hex(CS)
Next y

End

DataSection
  Daten1:
  Data.b $74, $00, $49, $45, $5A, $49, $4C, $4F, $50, $20, $20, $50, $4F, $54, $53, $20, $0D
  Daten2:
  Data.b $74, $01, $49, $45, $5A, $49, $4C, $4F, $50, $20, $20, $50, $4F, $54, $53, $20, $0D
  Daten3:
  Data.b $74, $01, $20, $4E, $45, $47, $4C, $4F, $46, $20, $45, $54, $54, $49, $42, $20, $0D
  Daten4:
  Data.b $74, $11, $20, $20, $20, $20, $20, $20, $20, $20, $4C, $4C, $41, $46, $4E, $55, $0D
  Daten5:
  Data.b $74, $01, $20, $20, $20, $20, $20, $20, $20, $3E, $3D, $3D, $3D, $3D, $3D, $3D, $0D
EndDataSection
Gruß Rene

Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke soweit,
haben Sie das ganze mal so getestet, ob mit diesem Code die richtige 
Prüfziffer herauskommt?

Ich würde eine Prozedur für Visual Basic 6 benötigen. Aber ggf. berede 
ich das im entsprechenden Forum.

Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs grad selbst getestet unter PureBasic (Testversion schnell 
runtergeladen) und es funktioniert ja tatsächlich. Ich bedanke mich 
herzlich, aber einen Code für VB6.0 hast du nicht zufällig?

Autor: Jan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, ich bin ja besser als ich dachte. Habs schon fertig in VB.
püfziffer = 127
prüfziffer = prüfziffer - 116 Xor 17 Xor 65 Xor 75 Xor 80 Xor 73 Xor 90 Xor 84 Xor 79 Xor 32 Xor 78 Xor 65 Xor 70 Xor 69 Xor 83 Xor 83 Xor 13
Label1.Caption = prüfziffer

DANKE an RENE

Autor: Rene Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte, gern.

Gruß Rene

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.