BASCOM rechnet falsch / rundet komisch ?

Gast #1832790
Lesenswert?

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!
Gast #1832969
Lesenswert?

Danke soweit für die Antworten. Eine Genauigkeit von 0,00000005 sollte 
ja im Grunde genügen.

Um nun die Fahrgeschwindigkeit zu Berechnen, muss ich ja den 
zurückgelegten Weg durch die dafür benötigte Zeit teilen. Wie berechne 
ich das am besten mit Bascom und dem Atmega8?


- Zeit zwischen zwei Impulsen
- Zeit ab steigender Flanke bis zur absteigenden Flanke (
- Impulse pro Sekunde (zu ungenau, wenn mal ein Impulse 1 ms zu spät 
kommt)


Ich tendiere stark zur Zeitmessung zwischen zwei Impulsen. Aber wie 
bewerkstellige ich eine solche Messung mit den Timern?

Darüber überlege ich schon die ganze Zeit.
Gast #1832977
Lesenswert?

Stefan schrieb:

bei langsamen sachen das:
> - Zeit zwischen zwei Impulsen

bei schnelleren signalen das:
> - Impulse pro Sekunde (zu ungenau, wenn mal ein Impulse 1 ms zu spät
> kommt)

das würde ich so nicht machen, da du eine sehr hohe Zeitauflösung dafür 
brauchst:
> - Zeit ab steigender Flanke bis zur absteigenden Flanke (

:-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren