Hallo zusammen,
jetzt ist es soweit, dass nächste Problem,
also der Servo fahrt nun seine Positionen an.
Immer wenn er eine Position angefahren hat, soll
ein Analogwert eingelesen, ausgewertet und dann
in ein Array geschrieben werden.
Wenn das Array mit einem bestimmten Wert beschrieben ist,
soll ein Signalausgang geschalten werden.
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 Byte
Servostellung1 = 90
Dim Servostellung2 As Byte
Servostellung2 = 110
Dim Servostellung3 As Byte
Servostellung3 = 130
Dim Xpos1 As Byte
'StatusLED
Config Portd.7 = Output
Statusled Alias Portd.7
'Signalausgabe
Signal1 Alias Portd.0
Config Signal1 = Output
Signal2 Alias Portd.1
Config Signal2 = Output
Signal3 Alias Portd.2
Config Signal3 = Output
Signal4 Alias Portd.3
Config Signal4 = Output
Signal1 = 1
Signal2 = 1
Signal3 = 1
Signal4 = 1
'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 Byte
Dim Z As Byte
Dim Z2 As Byte
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
Statusled = 1
'Wenn Arrayinhalt = 10 dann SignalX = 0
If Volt_list(1) = 10 Then
Signal3 = 0
Elseif Volt_list(1) = 100 Then
Signal3 = 1
End If
If Volt_list(2) = 10 Then
Signal2 = 0
Elseif Volt_list(2) = 100 Then
Signal2 = 1
End If
If Volt_list(3) = 10 Then
Signal2 = 0
Elseif Volt_list(3) = 100 Then
Signal2 = 1
End If
'Servo stellen und Analogwert auslesen und Arry schreiben
If T = 1 Then
Select Case Z
'Servostellung 1
Case 2:
Servo(1) = Servostellung1
T = 0
If Volt <= 3.0 Then
Volt_list(1) = 100
Elseif Volt > 3.0 Then
Volt_list(1) = 10
End If
'Servostellung 2
Case 4:
Servo(1) = Servostellung2
T = 0
If Volt <= 3.0 Then
Volt_list(2) = 100
Elseif Volt > 3.0 Then
Volt_list(2) = 10
End If
'Servostellung 3
Case 6:
Servo(1) = Servostellung3
T = 0
If Volt <= 3.0 Then
Volt_list(3) = 100
Elseif Volt > 3.0 Then
Volt_list(3) = 10
End If
End Select
End If
Loop
End
Isr_von_timer1: 'ISR von Timer1
Timer1 = 3035
If Z >= 6 Then
Z = 0
End If
Z2 = Z
Z = Z2 + 1
T = 1
Return
Nur funktioniert nichts, der Portd.0 und Portd.1 reagieren gar nicht,
auch wenn sie dierekt geschalten werden. Portd.2 und Portd.3 kann
man direkt schalten, aber mit dem Programm funktioniert es nicht???
Also muss zum einen ein oder mehrere Fehler im Programm sein
und zum anderen versteh ich nicht, warum die ersten 2 Ausgänge nicht
reagieren???
Hat jemand eine Idee???
Grüße High Light
Lesezeichen