TomEdl
08.05.2009, 22:41
Hi Leute!
Ich hab da ein kleines Problem mit der Erfassung und Berechnung der Geschwindigkeit eines Rades.
'VARIABLEN
Dim Time_umdrehung_n As Integer
Dim Time_umdrehung_ms As Integer
Dim Time_umdrehung_s As Single
Dim Radumfang As Single
Dim Vms As Single
Dim Meter As Single
Dim Vkmh As Single
'KONSTANTEN
Radumfang = 0.3
'KONFIGURATION INT0
Config Int0 = Falling
On Int0 Int0_isr
Enable Int0
'KONFIGURATION ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'KONFIGURATION TIMER0
Config Timer0 = Timer , Prescale = 8
Timer0 = 131
On Timer0 Timer0_isr
Enable Timer0
Stop Timer0
'KONFIGURATION LCD
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portb.2 , Rs = Portc.5 , E = Portc.4
Config Lcd = 16 * 4
Config Lcdbus = 4
Waitms 100
Initlcd
Waitms 100
'INTERRUPTS GLOBAL FREIGEBEN
Enable Interrupts
Do
Time_umdrehung_s = Time_umdrehung_ms * 1000
Vms = Radumfang / Time_umdrehung_s
Vkmh = Vms * 3.6
Locate 1 , 1
Lcd Vms
Locate 2 , 1
Lcd Meter
Locate 4 , 1
Lcd Vkmh
Loop
Int0_isr:
Stop Timer0
Time_umdrehung_ms = Time_umdrehung_n
Time_umdrehung_n = 0
Start Timer0
Meter = Meter + Radumfang
Return
Timer0_isr:
Timer0 = 131
Incr Time_umdrehung_n
Return
End
Der Interrupt "INT0" wird aufgerufen, denn der Zähler, der bei jeder Radumdrehung den Radumfang addiert funktioniert und zählt entsprechend hoch. Doch die Geschwindigkeitsanzeige bleibt auf null stehen.
Entweder hab ich da einen gravierenden Denkfehler drinnen, oder ich bin schon ganz paranoid geworden und seh den offensichtlichen Fehler nicht.
Gruß
Thomas
Ich hab da ein kleines Problem mit der Erfassung und Berechnung der Geschwindigkeit eines Rades.
'VARIABLEN
Dim Time_umdrehung_n As Integer
Dim Time_umdrehung_ms As Integer
Dim Time_umdrehung_s As Single
Dim Radumfang As Single
Dim Vms As Single
Dim Meter As Single
Dim Vkmh As Single
'KONSTANTEN
Radumfang = 0.3
'KONFIGURATION INT0
Config Int0 = Falling
On Int0 Int0_isr
Enable Int0
'KONFIGURATION ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'KONFIGURATION TIMER0
Config Timer0 = Timer , Prescale = 8
Timer0 = 131
On Timer0 Timer0_isr
Enable Timer0
Stop Timer0
'KONFIGURATION LCD
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portb.2 , Rs = Portc.5 , E = Portc.4
Config Lcd = 16 * 4
Config Lcdbus = 4
Waitms 100
Initlcd
Waitms 100
'INTERRUPTS GLOBAL FREIGEBEN
Enable Interrupts
Do
Time_umdrehung_s = Time_umdrehung_ms * 1000
Vms = Radumfang / Time_umdrehung_s
Vkmh = Vms * 3.6
Locate 1 , 1
Lcd Vms
Locate 2 , 1
Lcd Meter
Locate 4 , 1
Lcd Vkmh
Loop
Int0_isr:
Stop Timer0
Time_umdrehung_ms = Time_umdrehung_n
Time_umdrehung_n = 0
Start Timer0
Meter = Meter + Radumfang
Return
Timer0_isr:
Timer0 = 131
Incr Time_umdrehung_n
Return
End
Der Interrupt "INT0" wird aufgerufen, denn der Zähler, der bei jeder Radumdrehung den Radumfang addiert funktioniert und zählt entsprechend hoch. Doch die Geschwindigkeitsanzeige bleibt auf null stehen.
Entweder hab ich da einen gravierenden Denkfehler drinnen, oder ich bin schon ganz paranoid geworden und seh den offensichtlichen Fehler nicht.
Gruß
Thomas