-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path210401_WiLeTo_sekundaer.bas
99 lines (63 loc) · 2.73 KB
/
210401_WiLeTo_sekundaer.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'Pedelegalizer 0.9
$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
'Analog in initialisieren
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'Timer für PWM initialisieren
Config Timer0 = Pwm , Pwm = On , Prescale = 1 , Compare A Pwm = Clear up , Compare B Pwm = Clear up
Enable Timer0
Start Timer0
Ocr0a = 128
'Ein- und Ausgänge initialisieren
Config Portb.3 = Input 'PB3 für Drehmoment einlesen
Config Portb.4 = Output 'PB4 Ausgang für Blinkfrequenz der LEDs
Config Portb.0 = Output 'PWM Ausgang für Nullpunktseinstellung
'Interrupts initialisieren
OCR1C = 127 'für CTC auf Timer1 muß OCR1C gesetzt werden, nicht OCR1A, nach langem Lesen herausgefunden :-)
Config Timer1 = TIMER , Prescale = 8 , CLEAR_TIMER = 1 , Compare A = Disconnect
On Oc1a Tick
Enable Oc1a
Start Timer1
Enable Interrupts
'Variablen definieren
Dim Flagtime As Bit 'Flag für Timerinterrupt
Dim Timetic As Word 'Zähler für Taktung Drehmoment Messung
Dim Torquetic As Word 'Zähler für Pulsfrequenz Drehmomentsignal
Dim Torqueneu As Word 'Analogwert Drehmoment
Dim Torque As Word 'Analogwert Drehmoment
Dim Pulsdauer As Word 'Vorgabewert Pulsdauer
Dim Temp As Word 'zwischenspeicher für Berechnungen
Dim 2xPulsdauer as Word
'Variablen initialisieren
Flagtime = 0
Pulsdauer = 10
2xPulsdauer = Pulsdauer *2
Timetic=0
waitms 2000
'Nullpunkt einstellen
Torqueneu = Getadc(3)
while Torqueneu<82 'so lange Signal kleiner 0,4V (5V bei 10bit Auflösung) PWM erhöhen
incr Ocr0a
waitms 10
Torqueneu = Getadc(3)
Wend
while Torqueneu>164 'so lange Signal größer 0,8V (5V bei 10bit Auflösung) PWM reduzieren
decr Ocr0a
waitms 10
Torqueneu = Getadc(3)
Wend
'Start Hauptschleife
Do
waitms 100
Temp = Getadc(3)/4
'Ocr0a = 255
OCR1C = Temp
Loop
Tick:
'interruptroutine für Timer1
toggle portb.4
Return