Paisley
10.05.2005, 15:25
Hallo Forum,
erstmal ein großes Lob an alle, lese noch nicht lange, aber sehr informativ hier!!!
Muss mich gleich mal mit einem Rroblem an euch wenden.
Ich habe folgendes Programm geschrieben, dass mir einen RC-Kanal vom Empfänger auswerten soll, bei hohem Puls ein Relais schalten soll und bei niedrigem das Licht einschalten (LEDs), beim zweiten niedrigen Impuls (also vorher zurück in die Nullstellung) Licht wieder aus.
Eigentlich läuft das Programm, nur sind beide Funktionen irgendwie auf einem Schaltweg, was ich mir nicht erklären kann.
Sprich:
Schalter an Fernsteuerung nach unten -->Relais und Licht an
Schalter normal -->Relais aus, Licht bleibt an
Schalter nochmal nach unten -->Relais wieder an, Licht aus
Also entweder ich lege das Relais jetzt um, oder so wie's eigentlich sein soll reagiert das Licht auf niedrige und keine hohen Impulse...
'================================================= ==============================
' Compiler
'================================================= ==============================
$regfile = "m8def.dat" 'Mega8
$crystal = 1000000 '1Mhz Quarz
'-------------------------------------------------------------------------------
'================================================= ==============================
' Ein- und Ausgänge
'================================================= ==============================
Config PortC = Output 'LEDs
Config PORTD.4 = Input 'Empfängersignal
Config PortD.5 = Output 'Relais
Config PortD.6 = Output 'Relais
Config PortD.7 = Output 'Relais
Config PortB.0 = Output 'Relais
'================================================= ==============================
' Variablen
'================================================= ==============================
Dim Pulsbreite as byte
Dim Mindestwert as Byte
Dim Maxwert as Byte
Dim Speicher as Byte
'-------------------------------------------------------------------------------
'************************************************* ******************************
'* HAUPTPROGRAMM *
'************************************************* ******************************
Do
Speicher = 0
Wait 2
Anfang:
Mindestwert = 110 'Mindestwert festlegen
Maxwert = 140 'Maxwert festlegen
pulsein Pulsbreite , PIND , 4 , 0 'Pulsbreite auslesen
If Speicher = 0 Then
PortC = 0
Else
PortC = 255
End If
If Pulsbreite > Maxwert Then 'Pulsbreite auf Maximum testen, wenn
Portd.5 = 0
Portd.6 = 0 'alle Relaisports aus
Portd.7 = 0
Portb.0 = 0
Else 'wenn nicht, dann
Portd.5 = 1
Portd.6 = 1 'alle Relaisports an
Portd.7 = 1
Portb.0 = 1
End If
If Pulsbreite < Mindestwert Then 'Pulsbreite auf Minimum testen
GoSub Minimum
End if
waitms 100 'Aktualisierungsintervall
Goto Anfang 'zurück zum Start
loop 'sinnlos, aber ohne flennt Bascom
'-------------------------------------------------------------------------------
'Subroutinen
Minimum: 'wenn er unter Minimum ist,
If Speicher = 0 Then 'überprüfe ob An oder Aus
Gosub SpeicherAus
Else
Gosub SpeicherEin
End If
Return
SpeicherAus: 'wenn der Speicher Aus war
Speicher = 1 'mache ihn an und warte bis
pulsein Pulsbreite , PIND , 4 , 0 'der Puls wieder normal wird
IF Pulsbreite < Mindestwert Then
Gosub SpeicherAus
End if
Return
SpeicherEin: ' same story nur umgekehrt
Speicher = 0
pulsein Pulsbreite , PIND , 4 , 0
IF Pulsbreite < Mindestwert Then
Gosub SpeicherEin
End If
Return
'-------------------------------------------------------------------------------
'===
End
'===
Gruß Denis
edit: ich habe die benötigten Werte für die Pulsweite (die mir "pulsein" ausgibt) mit einem Mega32 an 16Mhz ausgemssen, verändern die sich, wenn ich mit dem Mega8 und internem Quarz arbeite und führen so zu Problemen?
erstmal ein großes Lob an alle, lese noch nicht lange, aber sehr informativ hier!!!
Muss mich gleich mal mit einem Rroblem an euch wenden.
Ich habe folgendes Programm geschrieben, dass mir einen RC-Kanal vom Empfänger auswerten soll, bei hohem Puls ein Relais schalten soll und bei niedrigem das Licht einschalten (LEDs), beim zweiten niedrigen Impuls (also vorher zurück in die Nullstellung) Licht wieder aus.
Eigentlich läuft das Programm, nur sind beide Funktionen irgendwie auf einem Schaltweg, was ich mir nicht erklären kann.
Sprich:
Schalter an Fernsteuerung nach unten -->Relais und Licht an
Schalter normal -->Relais aus, Licht bleibt an
Schalter nochmal nach unten -->Relais wieder an, Licht aus
Also entweder ich lege das Relais jetzt um, oder so wie's eigentlich sein soll reagiert das Licht auf niedrige und keine hohen Impulse...
'================================================= ==============================
' Compiler
'================================================= ==============================
$regfile = "m8def.dat" 'Mega8
$crystal = 1000000 '1Mhz Quarz
'-------------------------------------------------------------------------------
'================================================= ==============================
' Ein- und Ausgänge
'================================================= ==============================
Config PortC = Output 'LEDs
Config PORTD.4 = Input 'Empfängersignal
Config PortD.5 = Output 'Relais
Config PortD.6 = Output 'Relais
Config PortD.7 = Output 'Relais
Config PortB.0 = Output 'Relais
'================================================= ==============================
' Variablen
'================================================= ==============================
Dim Pulsbreite as byte
Dim Mindestwert as Byte
Dim Maxwert as Byte
Dim Speicher as Byte
'-------------------------------------------------------------------------------
'************************************************* ******************************
'* HAUPTPROGRAMM *
'************************************************* ******************************
Do
Speicher = 0
Wait 2
Anfang:
Mindestwert = 110 'Mindestwert festlegen
Maxwert = 140 'Maxwert festlegen
pulsein Pulsbreite , PIND , 4 , 0 'Pulsbreite auslesen
If Speicher = 0 Then
PortC = 0
Else
PortC = 255
End If
If Pulsbreite > Maxwert Then 'Pulsbreite auf Maximum testen, wenn
Portd.5 = 0
Portd.6 = 0 'alle Relaisports aus
Portd.7 = 0
Portb.0 = 0
Else 'wenn nicht, dann
Portd.5 = 1
Portd.6 = 1 'alle Relaisports an
Portd.7 = 1
Portb.0 = 1
End If
If Pulsbreite < Mindestwert Then 'Pulsbreite auf Minimum testen
GoSub Minimum
End if
waitms 100 'Aktualisierungsintervall
Goto Anfang 'zurück zum Start
loop 'sinnlos, aber ohne flennt Bascom
'-------------------------------------------------------------------------------
'Subroutinen
Minimum: 'wenn er unter Minimum ist,
If Speicher = 0 Then 'überprüfe ob An oder Aus
Gosub SpeicherAus
Else
Gosub SpeicherEin
End If
Return
SpeicherAus: 'wenn der Speicher Aus war
Speicher = 1 'mache ihn an und warte bis
pulsein Pulsbreite , PIND , 4 , 0 'der Puls wieder normal wird
IF Pulsbreite < Mindestwert Then
Gosub SpeicherAus
End if
Return
SpeicherEin: ' same story nur umgekehrt
Speicher = 0
pulsein Pulsbreite , PIND , 4 , 0
IF Pulsbreite < Mindestwert Then
Gosub SpeicherEin
End If
Return
'-------------------------------------------------------------------------------
'===
End
'===
Gruß Denis
edit: ich habe die benötigten Werte für die Pulsweite (die mir "pulsein" ausgibt) mit einem Mega32 an 16Mhz ausgemssen, verändern die sich, wenn ich mit dem Mega8 und internem Quarz arbeite und führen so zu Problemen?