Circuito decodificador de 7 canales para Radiocontrol por Micro

Sección dedicada a imágenes de circuitos, diagramas que no requieren explicación previa, Proyectos sencillos.
Area para desarrollo de proyectos, colaboración de toda la comunidad en proyectos. Solución de dudas y aportes.

No publicar manuales, no publicar temas ajenos a los proyectos. de ser necesario, hacer indicación con enlace entre etiquetas CODE
Avatar de Usuario
Enigma
Administrador del Sitio
Administrador del Sitio
Mensajes: 1268
Registrado: 20 Oct 2013, 16:26
Genero: Mujer
Profesion: Webmaster CEO SEO
Ubicacion: Matrix
Navegador: Chrome
Contactar:

Circuito decodificador de 7 canales para Radiocontrol por Micro

Mensaje sin leer por Enigma » 22 Jun 2018, 09:52

Circuito decodificador de 7 canales para Radiocontrol por Micro

Version de 7 canales
Por Sebastian Smuraglia

El decodificador que se presenta a continuacion es un magnifico desarrollo de Sebastian Smuraglia; donde se utiliza un PIC16F628 que lo que hace es utilizar el PORTB:0 como entrada de señal. Y monitorear el flanco de bajada para generar una interrupcion; se atiende dicha interrupcion y se libera un pulso del ancho correspondiente en uno de los pines del resto del puerto B. el cual seria desde el B:1 hasta el B:7; quedando un decodificador hasta 7 canales.

Imagen

El circuito simplemente consiste en un microcontrolador PIC16F628 con la entrada de señal por B0 y las 7 salidas correspondientes en el resto del puerto B. Utiliza el oscilador interno de 4 MHZ -hay que configurarlo así desde el propio grabador del PIC (IC-Prog, por ejemplo)-, sin MasterClear (también se configura desde el grabador de PIC).

Archivo ASM

Código: Seleccionar todo

; Receptor de RadioControl de 7 canales


	#include	<p16f628a.inc>

Channel		equ	20h
Flags		equ	21h
TimeOut		equ	0h

	org	00h
	goto	Start
	org	04h
	btfsc	INTCON,INTF
	goto	NextChannel
	btfss	PIR1,TMR2IF
	goto	FinishInterrupt
	bcf		T2CON,TMR2ON
	bsf		Flags,TimeOut
	bcf		PIR1,TMR2IF
	goto	FinishInterrupt

NextChannel
	btfss	Flags,TimeOut
	goto	OtherChannel
	movlw	b'00000010'
	movwf	Channel
	movwf	PORTB
	bcf		Flags,TimeOut
	bsf		T2CON,TMR2ON
	goto	FinishInterrupt

OtherChannel
	bcf		T2CON,TMR2ON
	bcf		STATUS,C
	rlf		Channel,F
	movf	Channel,W
	movwf	PORTB
	bsf		T2CON,TMR2ON

FinishInterrupt
	movf	CMCON,F
	bcf		PIR1,CMIF
	bcf		INTCON,INTF
	retfie

Start
	clrf	PORTA
	clrf	PORTB
	movlw	b'00000111'
	movwf	CMCON
	bsf		STATUS,RP0
	movlw	b'00000111'	
	movwf	TRISA
	movlw	b'00000001'
	movwf	TRISB
	movlw	b'11000111'
	bcf		STATUS,RP0
	btfss	PORTA,0
	movlw	b'10000111'
	bsf		STATUS,RP0
	movwf	OPTION_REG		
	movlw	b'01000010'
	movwf	PIE1			; Habilito las interrupciones del Timer2
	movlw	.23
	movwf	PR2				; Llevo el valor decimal 195 al registro PR2
	bcf		STATUS,RP0		; Paso al banco de memoria 0
	movlw	b'11010000'
	movwf	INTCON			; Habilito las interruciones
	movlw	b'01111011'		; Pre y Pos Scaler del Timer2 en 16
	movwf	T2CON			; Configuro el Timer2
	bsf		T2CON,TMR2ON	; Activo el Timer2

MainLoop
	nop
	nop
	goto	MainLoop		; Ciclo cerrado, que no hace nada
	end

Archivo HEX (Compilado)

Código: Seleccionar todo

:020000040000FA
:020000001E28B8
:080008008B180C288C1C1A282F
:10001000121121148C101A28211C14280230A0005F
:100020008600211012151A2812110310A00D2008A5
:10003000860012159F080C138B100900850186019C
:1000400007309F0083160730850001308600C730D7
:100050008312051C87308316810042308C001730D4
:1000600092008312D0308B007B309200121500007A
:04007000000037282D
:00000001FF
Version para 8 canales

Esta es la ultima version del decodificador de Sebastian Smuraglia, el cual tiene una salida mas y la forma en la que esta programado el firmware del PIC varia sustancialmente respecto al de 7 canales.

En este circuito la entrada de señal es por RA1/AN1, Utilizando el comparador de tension interno y usando una tension de referencia de aproximadamente 150mV para la deteccion de un estado alto y uno bajo en la señal de entrada.

Se usan muy pocos pines del circuito y con tan pocos componentes extra, es muy liviano

Para hacerle unas pruebas al prototipo, se le inyecto una señal de radio corresponde a la salida de una ESky de 4 canales (0404) y está tomada de la salida de puerto de trainner (pasando por un divisor resistivo para bajarla). Como puede apreciarse la radio tiene 5 canales sólo que el quinto no tiene comando exterior. El osciloscopio se configuro con 2V/div y el trazo de arriba muestra la señal decodificada por el canal 3 y la base de tiempo es 1ms/div.

Hay que tener en cuenta que el decodificador funciona bien para un tipo de señal PPM estandard, con pulsos de canal que varian desde 1ms a 2ms con un tiempo de sincronismo no menor a 3ms. Si la señal tiene menos canales el decodificador detecta el fin del tren de pulsos de la señal PPM y solo habilita las salidas correspondientes. Si la señal que viene del decodificador tiene el pulso de sincronismo en estado bajo, se puede invertir con un transistor.

Archivo ASM

Código: Seleccionar todo

; Receptor de RadioControl de 8 canales


	#include	<p16f628a.inc>

Channel		equ	20h

	org	00h
	goto	Start
	org	04h
	bcf		INTCON,GIE
	btfsc	PIR1,CMIF
	goto	NextChannel
	btfss	PIR1,TMR2IF
	goto	FinishInterrupt
	clrf	PORTB
	movlw	b'00000001'
	movwf	Channel
	bcf		T2CON,TMR2ON
	bcf		PIR1,TMR2IF
	bsf		T2CON,TMR2ON
	goto	FinishInterrupt

NextChannel
	bcf		T2CON,TMR2ON
	btfss	CMCON,C2OUT
	goto	$+7
	movf	Channel,W
	movwf	PORTB
	bcf		STATUS,C
	rlf		Channel,F
	goto	$+2
	bcf		PORTA,3
	bsf		T2CON,TMR2ON
	movf	CMCON,W
	bcf		PIR1,CMIF

FinishInterrupt
	retfie

Start
	clrf	PORTA
	clrf	PORTB
	movlw	b'00000101'
	movwf	CMCON
	movlw	.1
	movwf	Channel
	bsf		STATUS,RP0
	movlw	b'00000111'	
	movwf	TRISA
	movlw	b'00000000'
	movwf	TRISB
	movlw	b'11000111'
	movwf	OPTION_REG		
	movlw	b'01000010'
	movwf	PIE1			; Habilito las interrupciones del Timer2
	movlw	.12
	movwf	PR2				
	bcf		STATUS,RP0		; Paso al banco de memoria 0
	movlw	b'11000000'
	movwf	INTCON			; Habilito las interruciones
	movlw	b'01111011'		; Pre y Pos Scaler del Timer2 en 16
	movwf	T2CON			; Configuro el Timer2
	clrf	PIR1
	bsf		T2CON,TMR2ON	; Activo el Timer2

MainLoop
	nop
	nop
	goto	MainLoop		; Ciclo cerrado, que no hace nada
	end

Archivo en C

Código: Seleccionar todo

/* 
	RC Decoder hasta 8 canales
*/

#include "16f628a.h"
#use delay (clock=4000000)
#byte CMCON=0x1F
#byte PORTB=0x6

int8	contador;
#int_timer2
void timer2interrupt()
{
	contador = 1;
	output_b (0);
	set_timer2 (0);
	clear_interrupt (int_timer2);
}
 

void main ()
{
	contador = 1;
	set_tris_a (0b00000110);
	set_tris_b (0);
	output_b (0);
	setup_timer_2 (T2_DIV_BY_16,12,16);
	clear_interrupt (int_timer2);
	setup_comparator (nc_nc_a1_a2);
	set_timer2 (0);
	enable_interrupts (int_timer2);
	enable_interrupts (global);
	while (true)
	{
		while (bit_test(CMCON,7) == 0)
		{
		}
		if (bit_test (PORTB,7) ==0)
		  output_b (contador);
		else
		  output_b (0);
		set_timer2 (0);
		shift_left (&contador,1,0);
		while (bit_test (CMCON,7) ==1)
		{
		}
	}
}
Archivo HEX compilado

Código: Seleccionar todo

:020000040000FA
:020000001D28B9
:080008008B130C1B10288C1C4B
:100010001C2886010130A00012118C1012151C281A
:1000200012119F1F1928200886000310A00D1928FF
:10003000851112151F080C13090085018601053072
:100040009F000130A0008316073085000030860035
:10005000C730810042308C000C3092008312C030D7
:100060008B007B3092008C011215000000003528B7
:00000001FF



Avatar de Usuario
Enigma
Administrador del Sitio
Administrador del Sitio
Mensajes: 1268
Registrado: 20 Oct 2013, 16:26
Genero: Mujer
Profesion: Webmaster CEO SEO
Ubicacion: Matrix
Navegador: Chrome
Contactar:

Re: Circuito decodificador de 7 canales para Radiocontrol por Micro

Mensaje sin leer por Enigma » 22 Jun 2018, 09:57

Mas archivos para codificación o decodificación

http://www.e-radiocontrol.com.ar/?Circu ... ificadores

Responder

Volver a “Proyectos y Circuitos Didacticos”