Läsa av r/c-mottagare (inkommande pwm i 16f690) med jal
Postat: 5 augusti 2010, 21:08:09
Jag köpte en pickit2 med en 16f690 för att fräsha upp mina (mycket) gamla kunskaper i mikrodatorteknik. Jag testade dom grundläggande grejorna som att blinka med en lysdiod, dimma den med pwm osv och det fungerar.
Nu vill jag läsa av en kanal på min mottagare, den skickar ut en puls som är hög 1.5-2.5ms, i perioder på ca 20ms.
Just nu vill jag bara läsa av en kanal, senare kanske jag vill läsa av 2 eller 3 (jag har 3 kanaler lediga just nu), jag är lite osäker på om 16f690 har 1 eller 2 pwm kanaler. Blir inte riktigt klok på databladet...
Mitt första problem är att jag inte är säker på att jag har valt rätt ben som inkanal, jag har satt den på pinne 5 (RC5/CCCP1/P1A) och sen har jag satt 3 lysdioder på pinne 11-13 för att indikera vilken signal jag får in.
Har jag valt rätt ben för att läsa av en inkommande PWM-signal? Jag har sökt massor på google, läst en hel del här inne och i databladet men inte kommit fram till vilket/vilka ben som kan läsa av en pwm. Ben 5 kan iaf skicka ut en pwm :)
Jag testar ett språk som heter JALv2 som påminner en del om pascal, lätt att komma igång i och bör klara av det jag är ute efter. Det är opensource och kompilatorn är gratis oavsett storlek på koden. Planerar att gå över på C, kanske assembler senare men har tyvärr inte tid till det nu (frugan tycker jag hackar för mycket redan nu :)
När jag får det att fungera ska jag använda en switch som har tre lägen och tända/släcka navigationsljus/landningsljus på en quadcopter.
Här är koden:
edit: 1 eller 2 pwm kanaler ska det vara, inte 2 eller 3
Nu vill jag läsa av en kanal på min mottagare, den skickar ut en puls som är hög 1.5-2.5ms, i perioder på ca 20ms.
Just nu vill jag bara läsa av en kanal, senare kanske jag vill läsa av 2 eller 3 (jag har 3 kanaler lediga just nu), jag är lite osäker på om 16f690 har 1 eller 2 pwm kanaler. Blir inte riktigt klok på databladet...
Mitt första problem är att jag inte är säker på att jag har valt rätt ben som inkanal, jag har satt den på pinne 5 (RC5/CCCP1/P1A) och sen har jag satt 3 lysdioder på pinne 11-13 för att indikera vilken signal jag får in.
Har jag valt rätt ben för att läsa av en inkommande PWM-signal? Jag har sökt massor på google, läst en hel del här inne och i databladet men inte kommit fram till vilket/vilka ben som kan läsa av en pwm. Ben 5 kan iaf skicka ut en pwm :)
Jag testar ett språk som heter JALv2 som påminner en del om pascal, lätt att komma igång i och bör klara av det jag är ute efter. Det är opensource och kompilatorn är gratis oavsett storlek på koden. Planerar att gå över på C, kanske assembler senare men har tyvärr inte tid till det nu (frugan tycker jag hackar för mycket redan nu :)
När jag får det att fungera ska jag använda en switch som har tre lägen och tända/släcka navigationsljus/landningsljus på en quadcopter.
Här är koden:
Kod: Markera allt
include 16f690
pragma target CLOCK 8_000_000
pragma target OSC INTOSC_NOCLKOUT
pragma target WDT disabled
enable_digital_io()
include pulse
alias pulse1 is pin_C5
pin_C5_direction = input
alias led1 is pin_B4
alias led2 is pin_B5
alias led3 is pin_B6
pin_B4_direction = output
pin_B5_direction = output
pin_B6_direction = output
led1 = off
led2 = off
led3 = off
var word duration = 0
forever loop
hi_pulse_in (pulse1, duration)
if (duration > 0 & duration < 250) then
led1 = off
led2 = off
led3 = off
elsif (duration > 251 & duration < 500) then
led1 = off
led2 = off
led3 = on
elsif (duration > 501 & duration < 750) then
led1 = off
led2 = on
led3 = off
elsif (duration > 751 & duration < 1000) then
led1 = off
led2 = on
led3 = on
elsif (duration > 1001 & duration < 1500) then
led1 = on
led2 = off
led3 = off
elsif (duration > 1501 & duration < 2000) then
led1 = on
led2 = off
led3 = on
elsif (duration > 2001 & duration < 2500) then
led1 = on
led2 = on
led3 = off
elsif (duration > 2501 & duration < 3000) then
led1 = on
led2 = on
led3 = on
end
end loop