Pic och rc-styrning / navigationsljus för modellplan

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Pic och rc-styrning / navigationsljus för modellplan

Inlägg 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?
Användarvisningsbild
RasmusB
Inlägg: 1006
Blev medlem: 24 augusti 2006, 23:32:13
Ort: Södertälje

Inlägg 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...
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg av brauer »

Sändaren en är en 7-kanals Futaba. Switchen påverkar en ledig servokanal ja.
Eddi
Inlägg: 80
Blev medlem: 1 oktober 2005, 22:54:46
Ort: Korsholm, Finland

Inlägg av Eddi »

URL Här finns några scheman under "Rc switch".
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg 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. :wink:
Användarvisningsbild
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:

Inlägg 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
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg 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 :)
Användarvisningsbild
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:

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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 ?
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg 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. :wink:
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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" ?
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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.
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg 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... :oops: )
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... :oops:
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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 ?
Skriv svar