Sida 1 av 2
Pic och rc-styrning / navigationsljus för modellplan
Postat: 30 januari 2007, 00:56:00
av brauer
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?
Postat: 30 januari 2007, 01:19:10
av RasmusB
Beror nog lite på hur din mottagare i flygplanet ser ut? Vad påverkar "switchen"? Är det en ledig servokanal eller en digital signal av nån sort? Är inte speciellt hemma på modellflyg...
Postat: 30 januari 2007, 01:39:30
av brauer
Sändaren en är en 7-kanals Futaba. Switchen påverkar en ledig servokanal ja.
Postat: 30 januari 2007, 06:52:29
av Eddi
URL Här finns några scheman under "Rc switch".
Postat: 30 januari 2007, 11:55:23
av brauer
Ä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.

Postat: 30 januari 2007, 11:58:33
av bengt-re
Jo, det är klart. Läs pulserna och sedan låta mjukvaran tända dina lampor. Dessa pulser kan du läsa och hantera med vilken pic du vill - 12f629 eller 10F200 hade jag valt om jag hade velat göra samma sak.
Jo, självklart så går det med 628A, men den är kanske onödigt stor
Postat: 30 januari 2007, 12:03:05
av brauer
Hur gör jag för att läsa av den? Bara så att jag vet vad jag ska leta efter i manualer

Postat: 30 januari 2007, 12:13:45
av bengt-re
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.
Postat: 30 januari 2007, 21:51:03
av sodjan
> Strobes och navljus är inget svårt men att få landningsljus
> på en switch klarar jag inte.
Vad är skillnaden ? Fungerar det inte i princip likadant ?
Postat: 30 januari 2007, 22:12:06
av brauer
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.

Postat: 30 januari 2007, 22:18:18
av sodjan
OK, men det gör det inte tydligare varför det är
svårare att tänka ett landningsljus än något annat ljus.
Ljus som ljus, vad spelar det för roll var det sitter ?
Varför är det lättare med "strobes och navljus" ?
Postat: 30 januari 2007, 22:27:47
av brauer
aha. Navljus och strobes styrs inte från sändaren nu. De startar när picen får ström. Jag slipper switchen där.
Postat: 30 januari 2007, 22:36:08
av sodjan
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.
Postat: 30 januari 2007, 22:44:14
av brauer
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.
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
Hrm, ursäkta "idiotkommentarerna". De är bra när man är rörig i skallen och grön...

Postat: 31 januari 2007, 15:19:29
av sodjan
> Om jag fattade rätt så är väl timern ett register som räknas upp efter varje instruktion?
"Fattade" efter att ha läst vadå ?
> Problmet är att jag inte vet hur jag ska få igång den
Var lite mer specifik. Vad var det som var oklart ?