Variablen-/Cases- und Analogwert-Problem in Bascom
Hallo zusammen,
und zwar habe ich in meinem Programm ein paar Fehler:
- der Servo bekommt keine Wert. Vermute es liegt daran, dass ich mit
Variablen arbeite, weil wenn ich direkt die Werte an den Servo gebe, also
ohne Variablen, dann geht es. :-s Könnte es sein, dass ich einen andere
Datentyp anstelle von "WORD" nehmen muss? Wenn ja welcher???
- das zweite Problem ist, dass die Cases auch nicht funktioneren. Hatte es
mir so vorgestellt, dass ich die Variable Z immer um 1 erhöhe, und so von
Case zu Case gehe. Wenn Z = 3 ist soll sie wieder auf 0 gesetzt werden.
Und das ganze beginnt von vorn.
Entweder es liegt hier auch wieder am Datentyp oder es geht nicht so,
dass ich "Select Case Z " nicht schreiben kann oder darf, wenn danach
immer "Case 1", "Case 2" oder "Case 3" aufgerufen werden soll.
Wäre super gut, wenn ihr mir weiter helfen könntet!!!
Wenn ihr eine Alternative habt, ist sie herzlich willkommen, nur würde ich
gern "Waitms" vermeiden.
Grüße High Light
Hier noch der Code:
Code:
$regfile = "m48def.dat"
$crystal = 16000000
$baud = 9600
'Servoeinstellungen
Config Servos = 1 , Servo1 = Portd.6 , Reload = 10
Servo(1) = 90
Config Portd.6 = Output
Enable Interrupts
Dim Servostellung1 As Word
Servostellung1 = 90
Dim Servostellung2 As Word
Servostellung1 = 110
Dim Servostellung3 As Word
Servostellung1 = 130
Dim Xpos1 As Byte
'StatusLED
Config Portd.7 = Output
Statusled Alias Portd.7
'Datenausgabe
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
'Analogeinstellungen
Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Messergebnis As Word
Dim Volt As Single
Messergebnis = Getadc(0)
Volt = Messergebnis * Adc_multi
'Arraykonfiguration
Dim Volt_list(3) As Single
'Schrittvariablen
Dim T As Word
Dim Z As Word
Dim Z2 As Word
Z = 0
T = 0
'Timer
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Timer1 = 3035 'Timer1 soll schon von 3035 wegzählen
Do
Statusled = 1
If T = 1 Then
Select Case Z
'Servostellung 1
Case 1:
Servo(1) = Servostellung 1
T = 0
'Servostellung 2
Case 2:
Servo(1) = Servostellung 2
T = 0
'Servostellung 3
Case 3:
Servo(1) = Servostellung 3
T = 0
End Select
End If
Loop
End
Isr_von_timer1: 'ISR von Timer1
Timer1 = 3035
If Z >= 3 Then
Z = 0
End If
Z = Z2
Z = Z2 + 1
T = 1
Return