PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Überprüfung auf grade/ungrade Zahl



MelMan
12.11.2008, 18:50
Nabend zusammen,
Kann ich mit Bascom ganz einfach eine Prüfung machen, ob eine Zahl grade oder ungrade ist? Brauche das für die Paritätsprüfung des DCF77 Signals. Hab ein eigenes Programm zur auswertung deshalb hab ich keine Lib oder ähnliches verwendet.
Mfg

for_ro
12.11.2008, 19:00
Klar, mit

Variable.0 = 0 ' gerade Zahl, weil niedrigstes Bit (0) = 0 ist)
Variable.0 = 1 ' ungerade Zahl

Gruß

Rolf

Yossarian
12.11.2008, 19:02
Hallo
Es gibt für diesen Problemfall im Netz unzählige Beispiele für Lösungen.
Einfach mal googeln.

Mit freundlichen Grüßen
Benno

MelMan
12.11.2008, 19:15
so hab mir mal was ausgeacht kann aber auch sein dass es totaler Quatsch ist. Könnt ihr mal nen Blick drauf werfen und was zu sagen?

Minuten:
If Wert = 21 Then : Minute = 0 : End If
If Wert = 21 And Status = 1 Then : Minute = Minute + 1 : End If
If Wert = 22 And Status = 1 Then : Minute = Minute + 2 : Paritaet = Paritaet + 2 : End If
If Wert = 23 And Status = 1 Then : Minute = Minute + 4 : Paritaet = Paritaet + 4 : End If
If Wert = 24 And Status = 1 Then : Minute = Minute + 8 : Paritaet = Paritaet + 8 : End If
If Wert = 25 And Status = 1 Then : Minute = Minute + 10 : Paritaet = Paritaet + 10 : End If
If Wert = 26 And Status = 1 Then : Minute = Minute + 20 : Paritaet = Paritaet + 20 : End If
If Wert = 27 And Status = 1 Then : Minute = Minute + 40 : Paritaet = Paritaet + 40 : End If
If Wert = 28 And Status = 1 Then : Paritaet = Paritaet + 1 : If Paritaet = Minute Then : Nop : Else : Wert = -1 : End If : End If
Return


Also ich addiere zur Paritaet immer die Minutenanzahl dazu ausser bei 1. Somit unterscheiden sich Minuten und Paritaet am Ende um 1, wenn die Minutenzahl ungrade ist. Deshalb wird auch bit 28 als 1 gesendet, um auf eine grade Zahl zu kommen. Somit kann ich prüfen wenn die Paritaet um 1 erhöht gleich die Minuten ergibt dann ist alles richtig oder?
Schlagt mich nicht wenns totaler Quatsch ist 8-[ 8-[

gleidel
12.11.2008, 19:15
Hallo MelMan,

versuche es einmal mit

X = Y MOD 2

wenn x = 0 ist dann gerade
wenn x = 1 dann ungerade

Gruß
Günter

for_ro
12.11.2008, 23:04
Schlagt mich nicht wenns totaler Quatsch ist 8-[ 8-[
Ich schlage dich nicht, aber Quatsch ist es schon.
Das Paritätsbit auf der 28. Sekunde gibt an, ob in den Sekunden 21 - 27 eine gerade oder eine ungerade Anzahl von 1 gesendet wurde. Bei einer geraden Anzahl wird das Paritätsbit 0 gesendet, ansonsten ist es 1.
Dadurch lässt sich feststellen, ob ein Bit falsch empfangen wurde. Also wenn eines der Minutenbits "gekippt ist" oder wenn das Paritätsbit "gekippt" ist, kann man das feststellen. Wenn 2 falsch empfangen wurden, kann man es nicht feststellen.
Für den Test addiert du alle Bits (nicht die Wertigkeiten, sondern die 0 bzw. die 1) von 21 - 27. Ergibt sich eine gerade Zahl, muss das Paritätsbit 0 sein.

Gruß

Rolf

MelMan
13.11.2008, 10:56
Achso ja dann ist das echt Quatsch. Reicht es nicht aus, wenn ich nur das Bit 21 überprüfe? Denn sobald Bit 21 "1" ist, ist die Minutenzahl ja ungrade. Also muss Bit 28 eine "1" sein.

for_ro
13.11.2008, 12:26
Denn sobald Bit 21 "1" ist, ist die Minutenzahl ja ungrade. Also muss Bit 28 eine "1" sein.

Ne, das Paritätsbit gibt nicht an, ob die Minute gerade oder ungerade ist. Es gibt dir die Möglichkeit festzustellen, ob bei der Übertragung etwas schief ging. Dafür ist es wichtig, alle Bits in die Auswertung einzubeziehen.
Vielleicht weißt du ja, was eine Quersumme ist. Dabei addiert man die Ziffern einer mehrstelligen Zahl zusammen. Also bei 3456 ergibt sich 18.
Da man nur eine Ziffer überträgt, wäre dies hier die 8. Wenn sich irgendeine einzelne Stelle an der Zahl 3456 ändern würde, ergäbe sich etwas anderes als 8. Ändern sich mehrere, könnte aber wieder 8 herauskommen. Diesen Fehler würde man nicht bemerken.
Das Paritätsbit funktioniert genau so. Man addiert alle bits. Also ergibt sich für die Minute 0111001 (binär 39) als Summe binär 00000100, dezimal 4, weil 4 Einsen in der Zahl vorkommen. Das Paritätsbit wäre hier also die letzte Stelle von 00000100, also 0. Ändert sich hier eine der Stellen von 0111001, so ergibt sich eine 1, weil dann 3 oder 5 Einsen empfangen würden.

Jetzt klar?

MelMan
13.11.2008, 14:20
Ahh ja alles klar verstanden. Hab mich nur gewundert weil ich auf alen möglichen Seiten die Beschreibung so gefunden hab, dass das Paritätsbit immer nur dann "1" ist, wenn eine ungrade Zahl rauskommt um das Ergebnis grade zu machen.