- das ist auch gut so, man soll sich ja auch ein wenig anstrengen ^^.
Da ich nun Feierabend habe und endlich Daheim bin, hier der Code - hoffe, es ist nicht zu unübersichtlich...
--------------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 32
$framesize = 60
$baud = 9600
'Konfiguriere Ports
Config Portb = Output
Config Portc = Input
'Portb.3 = 1 'optional
'Portb.4 = 1 'optional
'Portb.5 = 1 'optional
'Portb.0 = 1 'optional
Portb.1 = 1
Portb.2 = 1
'Umbenennen der Eingänge
'Taster1 Alias Pinc.0 '### Optional ###
'Taster2 Alias Pinc.1 '### Optional ###
'Umbenennen der Ausgänge
Unterwasser Alias Portb.1
Beleuchtung Alias Portb.2
'Kabine Alias Portb.3 '### Optional ###
'Variablendeklaration
Dim Kanal3 As Byte 'Verdrahtet zu PinC.2
Dim Zaehler As Byte
Dim Flag As Bit
'_________________________________________________ ______________________________
' *************************************
' ***** Hauptprogramm *****
'*******************************************
Do
Pulsein Kanal3 , Pinc , 2 , 1 'Signallänge an PWM-Eingang stetig abfragen
If Kanal3 > 85 Then
If Kanal3 < 110 Then
Set Flag
Elseif Kanal3 > 112 Then
Reset Flag
End If
If Flag = 1 Then
Incr Zaehler : Waitms 500
End If
Select Case Zaehler
Case 0 : Beleuchtung = 0 : Unterwasser = 0
Case 1 : Beleuchtung = 1 : Waitms 1000
Case 2 : Unterwasser = 1 : Waitms 1000
Case 3 : Zaehler = 0 : Waitms 1000
End Select
End If
Loop
End
- - - Aktualisiert - - -
Hallo Freunde,
habe ein wenig am Programm gebastelt und es würde definitiv funktionieren, wenn, ja wenn da nicht meine Fernsteuerung wäre, die mir einen gaaaanz klitzekleinen Strich durch die Rechnung macht
Das Problem ist nämlich, dass der 3te Kanal an meiner Fernsteuerung bereits ein reiner Schaltkanal ist. Demzufolge bräuchte ich im Grunde keinen Zähler, würde ich nur einen Ausgang schalten wollen.
Nun ist es jedoch so, dass bei EINMALIGEM Drücken des Tasters der Ausgang auf High gesetzt wird und so auch verbleibt. Erst bei erneutem Drücken des Tasters wird der Ausgang auf Low-Pegel gesetzt.
Wie ihr unten seht, habe ich mir den Rat zu Herzen genommen und ein wenig gebastelt. Allerdings bleiben auch hier gesetzte Flags nicht stehen, sondern fluktuieren, wenngleich auch nicht mehr mit der Geschwindigkeit wie bei meinem ersten Programmversuch.
Bedeutet, dass der zu setzende Zähler noch immer einfach weiter läuft, solange die Bedingung erfüllt wurde, warum auch immer das so ist.
Wie das jetzt jedoch gehen soll, weiß ich beim besten Willen nicht - das ist so weit von meinen Basics entfernt, dass ich momentan mit diesem kleinen Schritt in die richtige Richtung eher zufrieden bin als mich gefrustet an weitere Versuche zu setzen. Zumindest heute nicht.
Werde aber definitiv dran bleiben, den Code sprichwörtlich zu "knacken".
Vorab jedoch eine Frage: Kann ich das Basis-Programm als Solches dafür nutzen oder muss ich ein neues Prog mit einem entsprechend konfigurierten Timer schreiben?
Timer mögen bei mir immer nicht so ganz. Sobald das Prog ein wenig voller wird, setzen die Timer aus, geraten aus der Phase und die Interrupt-Zeiten spielen komplett verrückt. Da hilft dann alles rechnen nichts mehr.
Danke sehr für die Hilfe. Wenn ihr noch was wisst - ich freue mich sehr darüber, wenn ihr mir den Weg weist.
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 32
$framesize = 60
$baud = 9600
'Konfiguriere Ports
Config Portb = Output
Config Portc = Input
'Portb.3 = 1 'optional
'Portb.4 = 1 'optional
'Portb.5 = 1 'optional
'Portb.0 = 1 'optional
Portb = &B11111111
'Umbenennen der Eingänge
'Taster1 Alias Pinc.0 '### Optional ###
'Taster2 Alias Pinc.1 '### Optional ###
'Umbenennen der Ausgänge
Underwater Alias Portb.1
Lights Alias Portb.2
'Kabine Alias Portb.3 '### Optional ###
'Variablendeklaration
Dim Channel3 As Byte 'Verdrahtet zu PinC.2
Dim Count As Byte
Dim Flag As Bit
Dim Old_value As Bit
Dim New_value As Bit
'_________________________________________________ ______________________________
' *************************************
' ***** Hauptprogramm *****
'*******************************************
Do
Pulsein Channel3 , Pinc , 2 , 1 'Signallänge an PWM-Eingang stetig abfragen
If Channel3 < 110 And Old_value = 0 Then New_value = 1
If Old_value = 1 And Channel3 > 85 Then New_value = 0
If Channel3 > 200 And Old_value = 1 Then New_value = 0
If Old_value = 1 And New_value = 0 Then Incr Count
Old_value = New_value
Select Case Count
Case 0 : Lights = 0 : Underwater = 0 : Waitms 300
Case 1 : Lights = 1 : Waitms 300
Case 2 : Underwater = 1 : Waitms 300
Case 3 : Count = 0 : Waitms 300
End Select
Loop
End
Lesezeichen