lastdownxxl
User
Hallo,
ich hab hier eine kleine Schaltung welche über einen RC-Kanal eine Last schaltet.
Die Impulslänge vom Schaltkanal wird mit einem PIC12F1572 über eine Interrupt Routine gemessen.
Dazu wird das Servosignal auf den externen INT-Eingang vom PIC gelegt. Der Interrupt wird auf
steigende Flanke initialisiert. Es wird ein 16-Bit Timer Wert 1 gespeichert. Dann wird der EXT INT auf fallende Flanke
initialisiert. Speicherung vom Timer Wert 2. Somit hat man die Servo Pulslänge gemessen. Über eine in der SW einstellbare
Impulslänge wird dann eine Last über einen N-Kannal Logic Level FET geschaltet. Mit dem FET IRLML 2502 können Lasten
bis zu 4.2 A geschaltet werden. Aufgrund der Bauteilgrösse (SOT-23) sind die 4.2 A nur für eine kurze Zeitdauer gedacht.
Damit kann man aber durchaus eine 10W LED als Blitzer schalten. Die Versorgung Vsupply muss dann natürlich über den Antriebsakku (Balancerstecker) erfolgen. Ich hab damit ein 12 LED Cluster mit integrierten Vorwiderständen geschaltet. Die Versorgung erfolgt
über den Empfänger, der Strom liegt bei dem 12 LED Cluster bei etwa 250 mA. Man kann auch direkt einen 5V SUMMER TDB 05 ansteuern,
verwende ich als Modellfinder. Die Platine hat die Abmasse 17x25 und kostet etwa 1.5 Euro.
PIC 12F1572, 0.99 Euro reichelt.de
IRLML 2502, 0,18 Euro reichelt.de
SUMMER TDB 05, 0,99 Euro reichelt.de
Gruss Micha
ich hab hier eine kleine Schaltung welche über einen RC-Kanal eine Last schaltet.
Die Impulslänge vom Schaltkanal wird mit einem PIC12F1572 über eine Interrupt Routine gemessen.
Dazu wird das Servosignal auf den externen INT-Eingang vom PIC gelegt. Der Interrupt wird auf
steigende Flanke initialisiert. Es wird ein 16-Bit Timer Wert 1 gespeichert. Dann wird der EXT INT auf fallende Flanke
initialisiert. Speicherung vom Timer Wert 2. Somit hat man die Servo Pulslänge gemessen. Über eine in der SW einstellbare
Impulslänge wird dann eine Last über einen N-Kannal Logic Level FET geschaltet. Mit dem FET IRLML 2502 können Lasten
bis zu 4.2 A geschaltet werden. Aufgrund der Bauteilgrösse (SOT-23) sind die 4.2 A nur für eine kurze Zeitdauer gedacht.
Damit kann man aber durchaus eine 10W LED als Blitzer schalten. Die Versorgung Vsupply muss dann natürlich über den Antriebsakku (Balancerstecker) erfolgen. Ich hab damit ein 12 LED Cluster mit integrierten Vorwiderständen geschaltet. Die Versorgung erfolgt
über den Empfänger, der Strom liegt bei dem 12 LED Cluster bei etwa 250 mA. Man kann auch direkt einen 5V SUMMER TDB 05 ansteuern,
verwende ich als Modellfinder. Die Platine hat die Abmasse 17x25 und kostet etwa 1.5 Euro.
PIC 12F1572, 0.99 Euro reichelt.de
IRLML 2502, 0,18 Euro reichelt.de
SUMMER TDB 05, 0,99 Euro reichelt.de
Gruss Micha
Code:
' RC switch
' Michael Schulz 21.12.2017
' Compiler Version 0.97.01 2017-02-20
'
' -----------
' V+ -| 1 8 |- GND
' RA5 -| 2 7 |- RA0 LOAD
' RA4 -| 3 6 |- RA1
' RA3 -| 4 5 |- RA2/INT SERVO_PULSE
' -----------
'
'
#chip 12F1572,8
#config OSC = INTOSC, PWRTE = ON
#define SERVO_PULSE PORTA.2
dir SERVO_PULSE in
#define LOAD PORTA.0
dir LOAD out
dim TimerValue as word
dim TimerValue1 as word
dim TimerValue2 as word
dim RISING_EDGE as byte
'init
TimerValue = 0
TimerValue1 = 0
TimerValue2 = 0
RISING_EDGE = TRUE
#define MSEC_1P7 1700
InitTimer1 Osc, PS1_2 ' 8 Mhz/4/2, 1 us resolution
StartTimer 1
bsf OPTION_REG,INTEDG ;set external interrupt on rising edge
On Interrupt ExtInt0 Call ISR1 'external interrupt on RA2
Do
if (TimerValue > MSEC_1P7) then
set LOAD on
wait 100 ms
set LOAD off
wait 400 ms
end if
Loop
'******************************************************************************
sub ISR1 'external interrupt on RA2
if (RISING_EDGE) then
TimerValue1 = Timer1
RISING_EDGE = FALSE
bcf OPTION_REG,INTEDG ; set external interrupt on falling edge
goto FIN_RISING_EDGE ' jump to FIN_RISING_EDGE
end if
if (not RISING_EDGE) then
TimerValue2 = Timer1
RISING_EDGE = TRUE
if (TimerValue2 >= TimerValue1) then
TimerValue = TimerValue2 - TimerValue1
else
TimerValue = (0xFFFF - TimerValue1) + TimerValue2
end if
bsf OPTION_REG,INTEDG ;set external interrupt on rising edge
end if
FIN_RISING_EDGE:
end sub