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...
Gruß DenisCode:'=============================================================================== ' 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 '===
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?







Zitieren

Lesezeichen