Jap so etwas hatte ich mir inziwschen fast gedacht, dass die Pins
nicht funktionieren wegen einem Fehler im Programm.
Hatte das ganze Ding schon zerlegt, Controller getauscht,
Verbindungskabel überprüft, Fehler auf Leiterplatte gesucht...
Danke, für den Tipp
Das mit dem Signal2 ist ein Fehler durchs Kopieren, wurde auch geändert.
Singel wurde auch auf Byte geändert!
Und siehe da es geht schon mehr:
- Alle 4 Signale funktionieren (auch wenn ich nur 3 brauche)
- Jetzt ist es so, dass mit den ersten 3 Bewegungen, jeweils ein weiteres
Signal kommt. Nach der dritten Servobewegung ändert sich an den Signalen
nichts mehr. Alle 3 Signal sind dann da.
- Die Signale kommen egal was für ein Analogwert vorhanden ist.
Bin mir nur nicht sicher wo der Fehler liegt, so wie ich es gerad sehe,
schreibt er immer die 10 in die Arrays, egal was für ein Analogwert
ansteht.
Seh aber auch keinen Fehler im Programm, bei den Vergleichen oder beim Array beschreiben?!?
Irgendwie sollt ich sehen was in die Arrays geschrieben wird, wenn ein bestimmter Analogwert ansteht.
Ich weiß nicht mehr weiter...
Grüße High Light
P.s.: Hier noch das neue Programm:
Code:
$regfile = "m48def.dat"
$crystal = 16000000
'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 Pind.7 = Output
Statusled Alias Pind.7
'Signalausgabe
Config Pind.0 = Output
Signal1 Alias Pind.0
Config Pind.1 = Output
Signal2 Alias Pind.1
Config Pind.2 = Output
Signal3 Alias Pind.2
Config Pind.3 = Output
Signal4 Alias Pind.3
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 Byte
'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
Signal1 = 0
Elseif Volt_list(3) = 100 Then
Signal1 = 1
End If
'Servo stellen und Analogwert auslesen und Array schreiben
If T = 1 Then
Select Case Z
'Servostellung 1
Case 2:
Servo(1) = Servostellung1
T = 0
If Volt <= 4.2 Then
Volt_list(1) = 100
Elseif Volt > 4.2 Then
Volt_list(1) = 10
End If
'Servostellung 2
Case 4:
Servo(1) = Servostellung2
T = 0
If Volt <= 4.2 Then
Volt_list(2) = 100
Elseif Volt > 4.2 Then
Volt_list(2) = 10
End If
'Servostellung 3
Case 6:
Servo(1) = Servostellung3
T = 0
If Volt <= 4.2 Then
Volt_list(3) = 100
Elseif Volt > 4.2 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
Lesezeichen