creacion de un TX/RX con pic 16f84

byteheadx

Lanero Reconocido
26 Abr 2004
1,708
Hola...

Escribo aqui porque necesito ayuda para construir un circuito con 2 pic 16f84 para hacer transmicion y recepcion de datos

los pic se tiene que comunicar por LED infrarrojos y los datos son enviados enviados por un swith de 8 bit.

en si estoy tratando de hacer un circuito de transmicion y recepcion bidireccional.

alguien sabe donde puedo encotrar ejemplos de como contruir eso....

PD: ya he visto en la pagina del pablin,x-robot,todopic entro otras y no encuentro nada referente a esto.

Gracias
 
En que necesita ayuda especificamente??? Le recomiendo que implemente primero un protocolo RS232 para comunicación en serie, directamente entre los 2 pics y luego le coloque los led infrarojos, esto no le debe presentar problema alguno.

No entiendo lo del switch :S :S para que???

C.F.
 
  • Me gusta
Reacciones: 2 personas
lo del switch no es mas que un dispositivo que te activa una entrada rb0 a la rb7 dandole el voltage que quiereas......
ejemplo bit 1 = 5 volt o 0 volt....
asi le dices al pic que bit es el que quieres que te trasmita ....

lo que realmentre necesito son los planos o el programa de como se hace esto....

PD:yo trabajo con mplab...
 
No necesita el switch si utiliza el protocolo RS232, pues solo requiere de un único pin de envio y un único pin de recepción. En la salida Tx coloca el diodo infrarojo y en la entrada Rx coloca el receptor infrarojo.

Creo que me hice entender sin necesidad de dibujo :p

Busque un poco sobre comunicacion serial y ese protocolo, el algoritmo tanto de recepcion como de transmision para ese PIC en MPlab no sobrepasa las 15 lineas.

C.F.
 
byteheadx, toma el algoritmo para comunicación serial y lo configuras para enviar 8 bits de datos los cuales se toman del estado de los switch, el algoritmo para esto es el simple algoritmo para implementar la comunicación entre el PIC y el PC, lo que no me queda claro es para que la bidirecionalidad. Como dice cfranco-p "En la salida Tx coloca el diodo infrarrojo y en la entrada Rx coloca el receptor infrarrojo" eso si, debes acondicionar la señal del receptor utilizando un transistor.

cfranco-p, cuando se habla de protocolo RS232 se refiere a las normas que define la interface mecánica, las características, los pines, las señales y los protocolos que debe cumplir la comunicación serial, en este caso solo se habla de comunicación serial asincrona, asi que no se debe confundir con RS232.


Saludos,

Li-ion.
 
lo que pasas es que ustedes estan usando un pc para hacer eso.... por eso es que usas es RS232, lo que yo necesito es un circuito independiente a un PC.....
 
Texto Originalmente Escrito por byteheadx
lo que pasas es que ustedes estan usando un pc para hacer eso.... por eso es que usas es RS232, lo que yo necesito es un circuito independiente a un PC.....
En lo de RS232 como dijo Li-ion si es un estandar de comunicaciones, que utiliza comunicación serial entre dispositivos pero es una de las formas más faciles de encontrar información de comunicación serial.

Pero en su caso es perfectamente posible comunicar 2 PICs mediante protocolo serial eso no tiene misterio, el algoritmo es exactamente igual al que implementa para recibir/enviar datos a un PC. La diferencia es que usted en lugar conectar directamente los 2 microcontroladores con un cable para el envio de señales digitales, utilizará un par emisor/receptor infrarojo. Como lo dije anteriormente el algoritmo es el mismo y no son las de 15 lineas en MPlab.

C.F.

Rutina de Transmisión:

Código:
status	equ 03
optreg	equ 01
z	equ 02
rp0	equ 5
indf	equ 00
fsr	equ 04
trisa	equ 05
porta	equ 05
trisb	equ 06
portb	equ 06
intcon	equ 0b
CARRY	equ 00

DX	equ 00
XCount	equ 0d
XmtReg	equ 0e
cont1	equ 0f
cont2	equ 10
Count	equ 11

#define banco1 bsf status,rp0 ;Cambio a Bank1
#define banco0 bcf status,rp0 ;Cambio a Bank0

;Dato a transmitir
	movlw b'10101010' ; Dato a transmitir
	movwf XmtReg ; Dato a transmitir

;Rutina de Transmision
Xmtr	movlw 8 ; Assume XmtReg contains data to be Xmted
	movwf XCount ; 8 data bits
	bcf porta,DX ; Send Start Bit
X_next	call Delay ; Delay for B/2 Seconds
	rrf XmtReg
	btfsc status,CARRY ; Test the bit to be transmitted
	bsf porta,DX ; Bit is a one
	btfss status,CARRY
	bcf porta,DX ; Bit is zero
	decfsz Count ; If count = 0, then transmit a stop bit
	goto X_next ; transmit next bit
;
X_Stop	call Delay
	bsf porta,DX ; Send Stop Bit
X_Over	goto X_Over


;Funcion pierde 100 milisegundos
Delay	movlw d'100' ;Carga cont con 100
	movwf cont2
x20	call d1ms ;llama a funcion 1 milisegundo
	decfsz cont2
	goto x20
	return 

;Funcion pierde 1 milisegundo	
d1ms	movlw d'250' ;Carga cont con 250
	movwf cont1
x10	nop
	decfsz cont1
	goto x10
	return
	end
 
con los dos porque ..... el circuito lo tengo hecho.... pero el programa cuando lo compilo en mplab .... no me errores... pero al hacer la practica ..... todos los led se encienden.... estando todos los switch en off
 
vea
este es el programa transmisor y el receptor

ahora subo el circuito a ver que le encuentran de malo
 

Archivos adjuntos

  • tx_rx.rar
    1.3 KB · Visitas: 3,367
Men te recomiendo el Proteus, un excelente software para simulación nos facilita muchas tareas si lo necesitas me avisas por privado y te lo mando o ahí miramos...

Bye...
 
miren este es un esquema del circuito pa ver si alguin me ayuda con esto.

bueno la verdad es que lo necesito bidireccional pero en el mejor de los caso este esta bien
 

Archivos adjuntos

  • COMUNIC.JPG
    COMUNIC.JPG
    30.2 KB · Visitas: 2,446
Por lo visto, ya no va a utilizar leds infrarojos sino un cable comun y corriente ¿cierto?, bueno yo le tengo una sugerencia que le va a hacer un poco más facil la recepcion de datos y le ayudará a implementarlo bidireccional: en lugar de utilizar el puerto B para entrada y salida de datos, utilice el PIN RB0 para la recepción del dato enviado configurando la interrupcion por flanco de subida en este pin, asi inmediatamente haya un cambio de voltaje (de 0 a 1) en ese pin el programa saltará a la rutina de recepcion, tomará el dato y lo almacenará, esto le evita utilizar otro pin para la sincronizacion, el cual segun el montaje deberá ser un RA#, que debera monitoriar continuamente, debido a que en el puerto A no tiene implementadas interrupciones.

Cambiando esto le tocará hacer un pequeño algoritmo para ordenar los datos que mostrara en los leds, como sugerencia siempre trate de utilizar los pines RA# como salidas pues los RB# son un poco más versatiles para entradas, por las interrupciones.

Bueno mi sugerencia es la siguiente:

Transmisor:
RB0 --> Pin receptor Rx (caso bidireccional)
RB1 --> Pin transmisor Tx
RA0-RA3 --> 4 primeros bits del switch
RB4-RB7 --> 4 ultimos bits del switch

Receptor:
RB0 --> Pin receptor Rx
RB1 --> Pin transmisor Tx (caso bidireccional)
RA0-RA3 --> 4 primeros bits para los LEDs
RB4-RB7 --> 4 ultimos bits para los LEDs

Espero le sirva,

C.F.
 
gracias hermano por la sugerencia pero me gustaria ver como es el codigo porque la verdad de programacion en asambler o mplab estoy como bajo y por eso estoy pidiendo ayuda para que el programa que deje arriba me sirva.....

si puede vea un rato el codigo a ver que error le encuentra o cambia las rutinas para que me sirva con la config que me dio mas arriba (si no es mucha molestia claro esta!!)

gracias de todos modos.

PD: por si no ha visto los codigos aqui le dejo el enlace para que le heche una miradita
http://www.laneros.com/attachment.php?attachmentid=8499
 
que tal yo necesito comunicar matlab con un pic por rs232 ese algoritmo que se encuentra arriba me sirve? y en cuanto al hardware que necesito.
me da vergüenza preguntar esto pero necesito ahorrar tiempo.
pienso usar un pic 16f877 por si las moscas.
y por cierto que paso con la pagina de li-ion ya no hay foro?
 
josejulian dijo:
que tal yo necesito comunicar matlab con un pic por rs232 ese algoritmo que se encuentra arriba me sirve? y en cuanto al hardware que necesito.
me da vergüenza preguntar esto pero necesito ahorrar tiempo.
pienso usar un pic 16f877 por si las moscas.
y por cierto que paso con la pagina de li-ion ya no hay foro?
Viejo el algoritmo le sirve pues es un estandar para trasmision rs232, la velocidad del trasmision depende del programa del pic y su velocidad de reloj, en este caso es a 1200bps con un cristal de 4MHz. Para ese PIC le serviría pero debe hacer algunas modificaciones en las direcciones de memoria y los registros.

C.F.
 
Problemas en Programacion

Hola a todos, soy nuevo en el grupo pero tengo ganas de participar y ayudar de acuerdo a mis posibilidades. Soy estudiante de la Universidad Nacional Mayor de San Marcos de la Facultad de Ingenieria Electronica en Lima-Peru.

Empezando con mal pie, tengo un problema de microcontroladores, si alguno puede darme una ayudita con el programa para el micro estaria muy agradecido, el prob es el sgt:


"deseo conectar un telefono celular digital como modem para pasar datos a traves del puerto serial con un programa ya establecido que lee dicho puerto a velocidades de especificamente 1200, 2400 y 19200 baudios mientras que el celular se comunica con ese puerto a 115200 bps. Entonces, mi problema es que necesito un microcontrolador que se pueda comunicar con el puerto serie a una velocidad de 1200, 2400 o 19200 baudios (intercambiar estas velocidades mediante un switch) por un lado y por otro lado que se pueda comunicar con el celular y que los datos recibidos por este se vean en el programa."

El prob es kel programa ya esta diseñado y no puedo cambiar el codigo fuente por eso ke no puedo cambiar las velocidades del puerto serie.

El Microcontrolador ke he escogido es el 16F877 pero creo ke solo tiene un puerto Serial y yo necesito 2. ALguien ke sepa de un micro con 2 puertos series??

Espero que alguno me pueda ayudar con este problema. Muchas Gracias.
 
6Voltios dijo:
Hola a todos, soy nuevo en el grupo pero tengo ganas de participar y ayudar de acuerdo a mis posibilidades. Soy estudiante de la Universidad Nacional Mayor de San Marcos de la Facultad de Ingenieria Electronica en Lima-Peru.

Empezando con mal pie, tengo un problema de microcontroladores, si alguno puede darme una ayudita con el programa para el micro estaria muy agradecido, el prob es el sgt:


"deseo conectar un telefono celular digital como modem para pasar datos a traves del puerto serial con un programa ya establecido que lee dicho puerto a velocidades de especificamente 1200, 2400 y 19200 baudios mientras que el celular se comunica con ese puerto a 115200 bps. Entonces, mi problema es que necesito un microcontrolador que se pueda comunicar con el puerto serie a una velocidad de 1200, 2400 o 19200 baudios (intercambiar estas velocidades mediante un switch) por un lado y por otro lado que se pueda comunicar con el celular y que los datos recibidos por este se vean en el programa."

El prob es kel programa ya esta diseñado y no puedo cambiar el codigo fuente por eso ke no puedo cambiar las velocidades del puerto serie.

El Microcontrolador ke he escogido es el 16F877 pero creo ke solo tiene un puerto Serial y yo necesito 2. ALguien ke sepa de un micro con 2 puertos series??

Espero que alguno me pueda ayudar con este problema. Muchas Gracias.
Casi cualquier PIC le sirve ya que para realizar cominicacion serial solo requiere 2 puertos, uno de transmisión y el otro de recepcion. Adicionalmente requiere un cambio de voltaje que active una interrupción para eso puede utilizar las interrupciones por cambio en el puerto B, y dependiendo cual pata tenga el cambio pues activa uno u el otro modulo de comunicacion ;)

C.F.
 
cfranco-p dijo:
Casi cualquier PIC le sirve ya que para realizar cominicacion serial solo requiere 2 puertos, uno de transmisión y el otro de recepcion. Adicionalmente requiere un cambio de voltaje que active una interrupción para eso puede utilizar las interrupciones por cambio en el puerto B, y dependiendo cual pata tenga el cambio pues activa uno u el otro modulo de comunicacion ;)

C.F.

con cualkier pic y con 2 circuitos MAX232 puede ser??? y el codigo de arriba es de Tx y Rx no?? osea eso le meto al micro y luego otro programa o eso nomas??
 
6Voltios dijo:
Hola a todos, soy nuevo en el grupo pero tengo ganas de participar y ayudar de acuerdo a mis posibilidades. Soy estudiante de la Universidad Nacional Mayor de San Marcos de la Facultad de Ingenieria Electronica en Lima-Peru.

Empezando con mal pie, tengo un problema de microcontroladores, si alguno puede darme una ayudita con el programa para el micro estaria muy agradecido, el prob es el sgt:


"deseo conectar un telefono celular digital como modem para pasar datos a traves del puerto serial con un programa ya establecido que lee dicho puerto a velocidades de especificamente 1200, 2400 y 19200 baudios mientras que el celular se comunica con ese puerto a 115200 bps. Entonces, mi problema es que necesito un microcontrolador que se pueda comunicar con el puerto serie a una velocidad de 1200, 2400 o 19200 baudios (intercambiar estas velocidades mediante un switch) por un lado y por otro lado que se pueda comunicar con el celular y que los datos recibidos por este se vean en el programa."

El prob es kel programa ya esta diseñado y no puedo cambiar el codigo fuente por eso ke no puedo cambiar las velocidades del puerto serie.

El Microcontrolador ke he escogido es el 16F877 pero creo ke solo tiene un puerto Serial y yo necesito 2. ALguien ke sepa de un micro con 2 puertos series??

Espero que alguno me pueda ayudar con este problema. Muchas Gracias.
Primero cual es el programa que no puede modificar el de java del celular o el del pic?

En cuanto al manejo de 2 puertos seriales en un mismo PIC la forma mas comun de realizarlo es con un buffer que permita su activacion o desactivacion independiente, y se selecciona cual se deja abierta claro que debe usar pull ups. ya que con pic muy pocas veces se utiliza full duplex.

O sino con un el uso 2 pines con codigo de puerto serial por Puerto B como se menciona arriba y a baja velocidad por lo demorado del procesamiento del codigo y los pines de puerto usart reales para la comunicacion a alta velocidad, aunque si mal no recuerdo las especificaciones de 16x87x lo mejor es no usarlo a mas de 32k para evitar la gran taza de error que se produce por el ciclo de reloj incluso trabajando a 20Mhz

Aunque la mejor solucion que se tiene cuando se usan varios puertos es usarlo con la topologia Master/Slave para permitir el anexo de dirreccion a la informacion y permitir usar varios dispositivos simultaneamente con un solo bus de datos serial.
 

Los últimos temas