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


von Jan B. (Gast)


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!

von JoergL (Gast)


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.

von Jan B. (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Jan B. (Gast)


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.

von Jan B. (Gast)


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?

von Peter D. (peda)


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

von Jan B. (Gast)


Lesenswert?

Ach du meine Güte, da steigt ja kein Mensch durch.

von Jan B. (Gast)


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.

von Rene Zimmermann (Gast)


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:
1
Restore Daten1
2
3
For y = 1 To 5
4
  CS.b = $7F
5
  For z = 1 To 17
6
    Read.b Wert.b
7
    CS = CS ! Wert
8
  Next z
9
  Debug Hex(CS)
10
Next y
11
12
End
13
14
DataSection
15
  Daten1:
16
  Data.b $74, $00, $49, $45, $5A, $49, $4C, $4F, $50, $20, $20, $50, $4F, $54, $53, $20, $0D
17
  Daten2:
18
  Data.b $74, $01, $49, $45, $5A, $49, $4C, $4F, $50, $20, $20, $50, $4F, $54, $53, $20, $0D
19
  Daten3:
20
  Data.b $74, $01, $20, $4E, $45, $47, $4C, $4F, $46, $20, $45, $54, $54, $49, $42, $20, $0D
21
  Daten4:
22
  Data.b $74, $11, $20, $20, $20, $20, $20, $20, $20, $20, $4C, $4C, $41, $46, $4E, $55, $0D
23
  Daten5:
24
  Data.b $74, $01, $20, $20, $20, $20, $20, $20, $20, $3E, $3D, $3D, $3D, $3D, $3D, $3D, $0D
25
EndDataSection
Gruß Rene

von Jan B. (Gast)


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.

von Jan B. (Gast)


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?

von Jan B. (Gast)


Lesenswert?

Wow, ich bin ja besser als ich dachte. Habs schon fertig in VB.
1
püfziffer = 127
2
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
3
Label1.Caption = prüfziffer

DANKE an RENE

von Rene Zimmermann (Gast)


Lesenswert?

Bitte, gern.

Gruß Rene

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.