TRM: $2,334.98

creacion de un TX/RX con pic 16f84

Tema en 'Programacion y Diseño de Software' iniciado por byteheadx, 13 Septiembre 2004.

  1. byteheadx

    byteheadx Lanero novato

    Registrado:
    26 Abril 2004
    Mensajes:
    1,910
    Me Gusta recibidos:
    150
    Hola...

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

    Anuncio


    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
     
    #1
  2. cfranco-p

    cfranco-p Supermoderador Miembro del equipo Lanero VIP

    Registrado:
    22 Febrero 2004
    Mensajes:
    6,059
    Me Gusta recibidos:
    1,230
    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.
     
    #2
    A 2 personas les gusta esto.
  3. byteheadx

    byteheadx Lanero novato

    Registrado:
    26 Abril 2004
    Mensajes:
    1,910
    Me Gusta recibidos:
    150
    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...
     
    #3
  4. cfranco-p

    cfranco-p Supermoderador Miembro del equipo Lanero VIP

    Registrado:
    22 Febrero 2004
    Mensajes:
    6,059
    Me Gusta recibidos:
    1,230
    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.
     
    #4
  5. Li-ion

    Li-ion Lanero reconocido

    Registrado:
    30 Mayo 2004
    Mensajes:
    790
    Me Gusta recibidos:
    113
    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.
     
    #5
  6. byteheadx

    byteheadx Lanero novato

    Registrado:
    26 Abril 2004
    Mensajes:
    1,910
    Me Gusta recibidos:
    150
    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.....
     
    #6
  7. cfranco-p

    cfranco-p Supermoderador Miembro del equipo Lanero VIP

    Registrado:
    22 Febrero 2004
    Mensajes:
    6,059
    Me Gusta recibidos:
    1,230
    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:

    CODE, HTML o PHP Insertado:
    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
    
     
    #7
  8. Doug

    Doug Lanero novato

    Registrado:
    13 Septiembre 2004
    Mensajes:
    2
    Me Gusta recibidos:
    0
    que tienes problema con el pragrama o el circuito a montar para la transmision y recepcion de los datos
     
    #8
  9. byteheadx

    byteheadx Lanero novato

    Registrado:
    26 Abril 2004
    Mensajes:
    1,910
    Me Gusta recibidos:
    150
    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
     
    #9
  10. byteheadx

    byteheadx Lanero novato

    Registrado:
    26 Abril 2004
    Mensajes:
    1,910
    Me Gusta recibidos:
    150
    vea
    este es el programa transmisor y el receptor

    ahora subo el circuito a ver que le encuentran de malo
     

    Adjuntos:

    • tx_rx.rar
      Tamaño de archivo:
      1.3 KB
      Visitas:
      2,939
    #10
  11. VLAD

    VLAD Lanero novato

    Registrado:
    1 Octubre 2004
    Mensajes:
    173
    Me Gusta recibidos:
    10
    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...
     
    #11
  12. byteheadx

    byteheadx Lanero novato

    Registrado:
    26 Abril 2004
    Mensajes:
    1,910
    Me Gusta recibidos:
    150
    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
     

    Adjuntos:

    • COMUNIC.JPG
      COMUNIC.JPG
      Tamaño de archivo:
      30.2 KB
      Visitas:
      1,924
    #12
  13. cfranco-p

    cfranco-p Supermoderador Miembro del equipo Lanero VIP

    Registrado:
    22 Febrero 2004
    Mensajes:
    6,059
    Me Gusta recibidos:
    1,230
    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.
     
    #13
  14. byteheadx

    byteheadx Lanero novato

    Registrado:
    26 Abril 2004
    Mensajes:
    1,910
    Me Gusta recibidos:
    150
    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
     
    #14
  15. josejulian

    josejulian Lanero novato

    Registrado:
    16 Septiembre 2004
    Mensajes:
    7
    Me Gusta recibidos:
    0
    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?
     
    #15
  16. cfranco-p

    cfranco-p Supermoderador Miembro del equipo Lanero VIP

    Registrado:
    22 Febrero 2004
    Mensajes:
    6,059
    Me Gusta recibidos:
    1,230
    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.
     
    #16
  17. 6Voltios

    6Voltios Lanero novato

    Registrado:
    6 Diciembre 2005
    Mensajes:
    54
    Me Gusta recibidos:
    2
    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.
     
    #17
  18. cfranco-p

    cfranco-p Supermoderador Miembro del equipo Lanero VIP

    Registrado:
    22 Febrero 2004
    Mensajes:
    6,059
    Me Gusta recibidos:
    1,230
    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.
     
    #18
  19. 6Voltios

    6Voltios Lanero novato

    Registrado:
    6 Diciembre 2005
    Mensajes:
    54
    Me Gusta recibidos:
    2
    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??
     
    #19
  20. PicGramer

    PicGramer Lanero novato

    Registrado:
    15 Abril 2004
    Mensajes:
    327
    Me Gusta recibidos:
    50
    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.
     
    #20

Compartir esta página