Grillmeister Markus
10.09.2006, 23:52
Ich hab hier mal ein kleines Programm zum erfassen der Umdrehungen einer Welle per Lichtschranke und zum umrechnen in km/h.
Während der Messung bekomme ich auch (richtige) Werte, allerdings steht anscheinen bei der Ausgabe dann nichts im eeprom oder er hat garnichts reingeschrieben :-k
Hab ich irgendwas wichtiges übersehn oder hat das tiefergreifende Gründe?
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 9600
Ddrd.2 = 0
Ddrd.3 = 0
Portd.2 = 1
Portd.3 = 1
Taster Alias Pind.3
Dim Umdrehungen As Byte
Dim Geschwindigkeit As Single
Dim Geschwindigkeit_rund As Byte
Dim Eepromaddress As Byte
Dim Beste As Byte
On Int0 Onint0
Config Int0 = Falling
Enable Int0
Enable Interrupts
Print "test" 'sicherstellen, dass UART funktioniert
Waitms 500
Main:
Print "main"
Do
If Taster = 0 Then
Waitms 300
Gosub Messung
End If
If Eepromaddress = 255 Then
Gosub Ausgabe
End If
Loop
Messung:
Print "messung"
Do
Umdrehungen = 0
Waitms 1000
Geschwindigkeit = Umdrehungen * 0.000142857 'Stecke in m / 1000 * 3600 (bei messzeit = 1s, sonst Strecke in m = Geschwindigkeit in m/Xs)
Geschwindigkeit = Geschwindigkeit * 3600
Geschwindigkeit_rund = Round(geschwindigkeit)
Writeeeprom Geschwindigkeit_rund , Eepromaddress 'geschwindigkeit in jeweils nächste address schreiben
Print Geschwindigkeit_rund 'nur testweise, um zu sehen, ob auch ein signal anliegt
Incr Eepromaddress
If Geschwindigkeit_rund > Beste Then 'wenn gerade gemessene besser als bisher beste,...
Beste = Geschwindigkeit_rund '...dann beste mit zuletzt gemessener geschwindigkeit ersetzen
End If
If Eepromaddress = 255 Or Taster = 0 Then
Waitms 300
Return
End If
Loop
Ausgabe:
Print "ausgabe"
Do
If Taster = 0 Then
Waitms 300
Eepromaddress = 0
Print Beste
Do
Readeeprom Geschwindigkeit_rund , Eepromaddress 'geschwindigkeit aus jeweiliger address auslesen
Print Geschwindigkeit_rund 'und ausgeben
Incr Eepromaddress
Waitms 500
If Eepromaddress = 255 Then
Print "end"
Return 'zurück zu main
End If
Loop
End If
Loop
Onint0:
Incr Umdrehungen
Return
Während der Messung bekomme ich auch (richtige) Werte, allerdings steht anscheinen bei der Ausgabe dann nichts im eeprom oder er hat garnichts reingeschrieben :-k
Hab ich irgendwas wichtiges übersehn oder hat das tiefergreifende Gründe?
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 9600
Ddrd.2 = 0
Ddrd.3 = 0
Portd.2 = 1
Portd.3 = 1
Taster Alias Pind.3
Dim Umdrehungen As Byte
Dim Geschwindigkeit As Single
Dim Geschwindigkeit_rund As Byte
Dim Eepromaddress As Byte
Dim Beste As Byte
On Int0 Onint0
Config Int0 = Falling
Enable Int0
Enable Interrupts
Print "test" 'sicherstellen, dass UART funktioniert
Waitms 500
Main:
Print "main"
Do
If Taster = 0 Then
Waitms 300
Gosub Messung
End If
If Eepromaddress = 255 Then
Gosub Ausgabe
End If
Loop
Messung:
Print "messung"
Do
Umdrehungen = 0
Waitms 1000
Geschwindigkeit = Umdrehungen * 0.000142857 'Stecke in m / 1000 * 3600 (bei messzeit = 1s, sonst Strecke in m = Geschwindigkeit in m/Xs)
Geschwindigkeit = Geschwindigkeit * 3600
Geschwindigkeit_rund = Round(geschwindigkeit)
Writeeeprom Geschwindigkeit_rund , Eepromaddress 'geschwindigkeit in jeweils nächste address schreiben
Print Geschwindigkeit_rund 'nur testweise, um zu sehen, ob auch ein signal anliegt
Incr Eepromaddress
If Geschwindigkeit_rund > Beste Then 'wenn gerade gemessene besser als bisher beste,...
Beste = Geschwindigkeit_rund '...dann beste mit zuletzt gemessener geschwindigkeit ersetzen
End If
If Eepromaddress = 255 Or Taster = 0 Then
Waitms 300
Return
End If
Loop
Ausgabe:
Print "ausgabe"
Do
If Taster = 0 Then
Waitms 300
Eepromaddress = 0
Print Beste
Do
Readeeprom Geschwindigkeit_rund , Eepromaddress 'geschwindigkeit aus jeweiliger address auslesen
Print Geschwindigkeit_rund 'und ausgeben
Incr Eepromaddress
Waitms 500
If Eepromaddress = 255 Then
Print "end"
Return 'zurück zu main
End If
Loop
End If
Loop
Onint0:
Incr Umdrehungen
Return