Pic och rc-styrning / navigationsljus för modellplan
Pic och rc-styrning / navigationsljus för modellplan
Finns det något sätt att tända/släcka ljusdioder via en switch på en rc-sändare för modellflyg?
Tänkte pilla ihop ett litet ljusset till ett av flygplanen. Strobes och navljus är inget svårt men att få landningsljus på en switch klarar jag inte. Vad är det jag ska läsa mer om? Tips på kod?
Tänkte pilla ihop ett litet ljusset till ett av flygplanen. Strobes och navljus är inget svårt men att få landningsljus på en switch klarar jag inte. Vad är det jag ska läsa mer om? Tips på kod?
Är det inte möjligt att fixa med 628A:an då? Varför ska jag bygga två kretsar om jag kan få in allt på den ena?
OM, jag har fattat det rätt så skickar mottagaren i planet en fyrkantsvåg (ska ju styra servon). Rent logiskt borde man kunna läsa av den och i PICen avgöra i vilket läge switchen står. Hur man gör det rent kodmässigt vet jag inte och det är där jag behöver hjälp.
OM, jag har fattat det rätt så skickar mottagaren i planet en fyrkantsvåg (ska ju styra servon). Rent logiskt borde man kunna läsa av den och i PICen avgöra i vilket läge switchen står. Hur man gör det rent kodmässigt vet jag inte och det är där jag behöver hjälp.

- bengt-re
- EF Sponsor
- Inlägg: 4829
- Blev medlem: 4 april 2005, 16:18:59
- Skype: bengt-re
- Ort: Söder om söder
- Kontakt:
Pulserna in är 1ms i ena ändläget och 2 ms i andra ändläget 1,5ms get mittläget (ungefär). PRF ungefär 50 Hz på de flesta system. Gör en programslinga som räknar längden på pulserna som kommer in - vill du inte strula med timers (vilket är "rätt" sätt att göra det på) så går det bra att mäta tiden med loopar också. Anpassa loopen så att ditt räknarvärde håller sig innom 8-bitar (ungefär looplängd på 8Tcy per count)
Ta sedan och jämnför ditt värde med lämpliga Ton för att ge hög respektive låg signal ut - lägg ut detta på lämplig portpinne. Klarar du dig under 50mA till lamporna och dessa går bra att driva ifrån Picens spänning så kan du alltid köra lamporna direkt ifrån portpinnarna (om du kör två pinnar prallelt) Annars så använd en RET, ULN2003 eller MOSFET för att switcha lasten. Lämplig är att du mäter upp dina pulstider(Ton-on, Ton-off och PRF) med oscilloscop innan du börjar skriva programmet. Har du inget oscilloskop så går det ändå, men det är mer att programmera i blindo då och svårare att felsöka.
EDIT. Vill du göra det ännu enklare så kan du bara sätta en gräns, har den räknat fler än X gånger så sätt utgången i läge, om inte sätt utgången i andra läget.
Ta sedan och jämnför ditt värde med lämpliga Ton för att ge hög respektive låg signal ut - lägg ut detta på lämplig portpinne. Klarar du dig under 50mA till lamporna och dessa går bra att driva ifrån Picens spänning så kan du alltid köra lamporna direkt ifrån portpinnarna (om du kör två pinnar prallelt) Annars så använd en RET, ULN2003 eller MOSFET för att switcha lasten. Lämplig är att du mäter upp dina pulstider(Ton-on, Ton-off och PRF) med oscilloscop innan du börjar skriva programmet. Har du inget oscilloskop så går det ändå, men det är mer att programmera i blindo då och svårare att felsöka.
EDIT. Vill du göra det ännu enklare så kan du bara sätta en gräns, har den räknat fler än X gånger så sätt utgången i läge, om inte sätt utgången i andra läget.
Mja, jag har inte jobbat med inputs tidigare. Du vet ju sodjan vilket åbäke jag hade bara för att tända en lysdiod. :-x
Hur som helst, jag lär mig hela tiden och hade databladet varit på papper hade det nog varit sönderläst nu. Problemet är att det inte blir glasklart för mig av att läsa i bladet, men med en del eftertanke så går det.
Jag har aldrig hållt på med pic/elektronik innan så jag får ta ett pyttesteg i taget.
Hur som helst, jag lär mig hela tiden och hade databladet varit på papper hade det nog varit sönderläst nu. Problemet är att det inte blir glasklart för mig av att läsa i bladet, men med en del eftertanke så går det.
Jag har aldrig hållt på med pic/elektronik innan så jag får ta ett pyttesteg i taget.

Aha ! 
OK, då har du alltså en kanal som skiftar mellan två pulslängder beroende
på läget på en switch på sändaren och som du skulle kunna "känna av" så
som bengt-re beskrev det. Självklart ska du göra det med den 628A som
redan sitter där. Det finns flera metoder att göra det i koden, det beror lite
på hur koden för övrigt är organiserad i dag. "Timers" kommer säkert
att vara inblandade. Eventuellt "interrupt", men det är inte nödvändigt.

OK, då har du alltså en kanal som skiftar mellan två pulslängder beroende
på läget på en switch på sändaren och som du skulle kunna "känna av" så
som bengt-re beskrev det. Självklart ska du göra det med den 628A som
redan sitter där. Det finns flera metoder att göra det i koden, det beror lite
på hur koden för övrigt är organiserad i dag. "Timers" kommer säkert
att vara inblandade. Eventuellt "interrupt", men det är inte nödvändigt.
Såhär ser koden ut idag. Visst är jag medveten om att det är fruktansvärt dålig kod men jag fick inte bukt med timern. (nog läge på att lära sig...
)
Mitt stora problem är ofta att jag vet vart jag vill men inte kan skriva koden. Logiken är nog inte det stora problemet.
Om jag fattade rätt så är väl timern ett register som räknas upp efter varje instruktion? Problmet är att jag inte vet hur jag ska få igång den eller skriva koden.
Hrm, ursäkta "idiotkommentarerna". De är bra när man är rörig i skallen och grön... 

Mitt stora problem är ofta att jag vet vart jag vill men inte kan skriva koden. Logiken är nog inte det stora problemet.
Om jag fattade rätt så är väl timern ett register som räknas upp efter varje instruktion? Problmet är att jag inte vet hur jag ska få igång den eller skriva koden.

Kod: Markera allt
main
banksel TRISA ;välj banken där trisa finns
clrf TRISA ;sätt trisa till output
banksel PORTA ;välj banken där porta finns
movlw b'00000000' ;sätt alla portar till hög
movwf PORTA ;sätt värdet i porta
call Delay1
call Delay1
call Delay1
call Delay1
call Delay1
movlw b'00000011' ;släck
movwf PORTA
call Delay1
call Delay1
call Delay1
call Delay1
call Delay1
call Delay1
call Delay1
call Delay1
call Delay1
call Delay1
movlw b'00000000' ;Tänd
movwf PORTA
call Delay1
call Delay1
call Delay1
call Delay1
call Delay1
movlw b'00000011' ;släck
movwf PORTA
call Delay
call Delay
call Delay
call Delay
goto main
Delay1
movlw d'10' ;delay 50 ms (4 MHz clock)
movwf count1
d2 movlw 0xC7
movwf counta
movlw 0x01
movwf countb
Delay_1
decfsz counta, f
goto $+2
decfsz countb, f
goto Delay_1
decfsz count1 ,f
goto d2
retlw 0x00
Delay
movlw d'250' ;delay 250 ms (4 MHz clock)
movwf count1
d1 movlw 0xC7
movwf counta
movlw 0x01
movwf countb
Delay_0
decfsz counta, f
goto $+2
decfsz countb, f
goto Delay_0
decfsz count1 ,f
goto d1
retlw 0x00
END
