Gast
#1897945
Hallo Microfans, ich benötige Hilfe:
Ich möchte mittels einer Fußtaste 4 Relais im Abstand von ca 50ms
anziehen lassen, und beim loslassen der Fusstaste sollen diese Relais in
umgekehrter Reihenfolge und in der gleichen Zeitverzögerung wieder
abfallen.
Im Prinzip klappt es, aber die Zeit spielt mir einen Streich. Wenn ich
taste, oder loslasse dauert es immer einen Moment, bis die Zeitkette
startet.
Wie kann ich diesen Zeitfaktor umgehen?. Interrupts?
Hier der Quellcode:
'Prozessor: ATMega 8-8
'Bascom-Version: 1.11.8.7
'Hardware:
'Fusstaster an PINB.0
'4 Relais an Port : C0,C1,C2,C3
'Poti an Port C5
'******************************************************
'System-Einstellungen
'======================================================
'Definition für Mega 8
$regfile "m8def.dat"
$crystal = 3686300
'======================================================
'Konfigurationen
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portd = Output
Config Portb = Input
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.5 = Input
Portb = 255
'======================================================
'Initialisierungen
'======================================================
Fusstaste Alias Pinb.0
Relais1 Alias Portc.0
Relais2 Alias Portc.1
Relais3 Alias Portc.2
Relais4 Alias Portc.3
Portb = 255
Dim Zeit As Integer
Dim Poti As Integer
'Zeitintervall
Portc.0 = 1
'======================================================
'Hauptprogramm-Schleife
'======================================================
Do
' Abfrage der Tasten
'Analog Digital Wandler starten (Potiabfrage)
Start Adc
Poti = Getadc(5)
If Poti <= 500 Then
Zeit = 50
Elseif Poti > 500 Then
Zeit = 100
End If
Select Case Fusstaste
Case 0 : Gosub Relais_ein
Case 1 : Gosub Relais_aus
End Select
Loop
'======================================================
' Unterprogramme
'======================================================
Relais_ein:
Relais1 = 0
Waitms Zeit
Relais2 = 1
Waitms Zeit
Relais3 = 1
Waitms Zeit
Relais4 = 1
Return
Relais_aus:
Relais4 = 0
Waitms Zeit
Relais3 = 0
Waitms Zeit
Relais2 = 0
Waitms Zeit
Relais1 = 1
Return