Ich habe zur Zeit das Projekt "Fahrrad-Tacho"-Eigenbau am laufen.
Ich arbeite mich Stück für Stück an die Mikrocontroller-Geschichte ran
und lerne auch recht gut. Allerdings programmiere ich in Bascom, ich
hoffe ich werde hier nicht gesteinigt.
Mein Problem aktuell ist, das beim Berechnen des Tageskilometerzählers
Differenzen durch komische Abrundungen habe. Ich muss das Ergebnis
später aufrunden, damit es richtig ist. Und das verstehe ich einfach
nicht. Hier mein Quelltext:
1 | $regfile = "M8def.dat"
|
2 | $crystal = 8000000
|
3 | $hwstack = 100
|
4 | $swstack = 100
|
5 | $framesize = 100
|
6 |
|
7 | 'Ports zuweisen
|
8 | Reed Alias Pind.1
|
9 |
|
10 | 'Ports definieren
|
11 | Config Reed = Input
|
12 |
|
13 | 'Variablen
|
14 | Dim Radumfang As Integer
|
15 | Dim Tagesstrecke As Single
|
16 | Dim Umdrehungen As Integer
|
17 |
|
18 | 'Display
|
19 | Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , _
|
20 | Db7 = Portb.0 , E = Portb.7 , Rs = Portb.6
|
21 | Config Lcd = 40 * 2
|
22 | Cls
|
23 | Cursor Off
|
24 |
|
25 | 'Radumfang in mm
|
26 | Radumfang = 2120
|
27 |
|
28 |
|
29 |
|
30 | Do
|
31 | Debounce Reed , 1 , On_reed_anschlag , Sub
|
32 | Loop
|
33 |
|
34 |
|
35 | On_reed_anschlag:
|
36 | Umdrehungen = Umdrehungen + 1
|
37 | Tagesstrecke = Radumfang * Umdrehungen
|
38 | Tagesstrecke = Tagesstrecke / 1000000
|
39 |
|
40 | Locate 1 , 1
|
41 | Lcd Radumfang ; " * " ; Umdrehungen ; " = "
|
42 | Locate 2 , 1
|
43 | Lcd Tagesstrecke ; " km"
|
44 | Return
|
Ausgegeben wird das ganze auf einem Display, mit Anzeige der Umdrehungen
und des Raddurchmessers von 2120 mm. Wenn ich mir mit diesem Code die
Tagesstrecke anzeigen lasse, bekomme ich bei 100 Umdrehungen 0,21199995
km heraus. Mein Taschenrechner kommt dort auf 0,2120 km.
Mittels der Funktion Fusing kann ich die Tagesstrecke ja aufrunden
lassen, dann ist das korrekte Ergebnis da. Aber warum? Theoretisch
müsste die Rechnung doch eindeutig das Ergebnis auch ohne Rundung
korrekt sein.
Das beschäftigte mich gestern schon den ganzen Tag.
Hilfe!