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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.