ne, den benutze ich nicht. Ansonsten benutze ich nur Servos, Int0 , den ADC und eben den Timer0.
Hier mal das ganze Programm:
Code:
$regfile = "m8def.dat"
$crystal = 8000000
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
Config Timer0 = Timer , Prescale = 8
On Timer0 Isr_von_timer0
Config Int0 = Rising
On Int0 Einedrehung
Config Portb = Output
Config Portc = Input
Config Portd = Input
Dim Zaehler As Word
Dim Geschwindigkeit As Word
Dim Zeit As Long
Dim Servoposition As Byte
Dim Potiposition As Byte
Dim Temp As Byte
Const Umfang = 80000000 'umfang in mm*100000
Const Vmax = 312
Start Adc 'maximalgeschwindigkeit in cm/s
Do
Servo(1) = 50
Zaehler = 0
Waitms 3000
Enable Interrupts
Enable Int0
Do
Gosub Holepotipos
If Geschwindigkeit > Vmax Then
Servoposition = 0.9 * Servoposition
End If
If Geschwindigkeit < Vmax Then
Servoposition = Potiposition
End If
Temp = 50 + Servoposition
Servo(1) = Temp
Loop
Loop
Einedrehung:
Disable Interrupts
Disable Timer0
If Zaehler > 10 Then
Zeit = Zaehler * 256
Geschwindigkeit = Umfang / Zeit 'in cm/s
End If
Zaehler = 0
Enable Timer0
Enable Interrupts
Return
Isr_von_timer0:
Zaehler = Zaehler + 1
If Zaehler > 65530 Then
Disable Timer0
Zaehler = 0
End If
Return
Holepotipos:
Potiposition = Getadc(0)
Potiposition = Potiposition / 10
Return
End
Gruß
Jan
Lesezeichen