Autor Tema: Comunicacion pic a pic 16f84a, problema con simulacion.  (Leído 2098 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado TRUEMALKAVIAN

  • PIC10
  • *
  • Mensajes: 10
Comunicacion pic a pic 16f84a, problema con simulacion.
« en: 22 de Octubre de 2011, 23:26:13 »
Buenas. este es un proyecto de comunicacion de un pic a otro , como el pic que mas e usado (unico en realidad ) es el 16f84a y por otra parte es los que tengo a la mano . son los pic elejidos para el proyecto.

en primera instancia  la intencion es simular la comunicacion pic a pic a traves de una sola linea,  la primera parte realice un codigo simple que me envia 3 tipo de codigos (tren de 8 bit .) los cuales ya  estan predeterminados ;  "1010 1101" , "1000 1001" y "1010 1010" ( el primer bit es bit-alto para poder detectarlo cuando se envia la informacion).
estos tres tipos de casos seran selecionados por tres botones en el puerto B. tiene un retardo entre pulso igual para cado uno . esta parte la simule en proteus y en la salida de A0 coloque un osciloscopio y pude comprobar que se enviaba la señales como correspone (claro despues de topda una tarde acomodando el codigo por extraños ruidos que habia y otros problemas, hasta que por fin pude hacer que funcionara. ) .

luego de comprobar que el envio era correcto me dispuse a realizar el receptor, en esta parte lo hice a traves de interrupciones por la pata b0 cuando esta detectara el primer bit mandari la interrupcion, luego desativarias la interrupciones globales y empezaria a testear cada "retardo" si hay bit alto o bajo , despues de testear cada uno va guardando la informacion en un registro llamado memoria, los intervalo a los que hace esto es el mismo retardo que esta en el progrma de envio. al finalizar los 8 bit de informacion los pasa a otro registro llamado "info" para su posterior manupulacion. limpiamos en bit de interrupcion del B0 e activamos la interrupcion global de nuevo.

en la rutina principal hacemos  una resta del registro "info" menos W en cada caso con el valor de dato enviado del otro pic ( valores predeterminados ) si el resultado da cero
enviamos a un subrutina, sino limpiamos los bit 0,1 de status para continuar, en la subtrutinas solo limpiamos el bit z del status y mandamos señal (led ) en el puerto b en los bit 1,2,3 de caracter informativo. y esta rutina la mantenemos en ciclo permanente...



 :5]  y  llegamos al problema El problema :  al simularlo en proteus ambos pic  ,cada uno con si respectivo codigo .hex y sus debidas conexiones el circuito no hace nada, aunque al parece el reloj que marca el paso del tiempo de la simulacion parece andar en milesimas y marca "cpu" a un alto porcentaje de uso  ( infieron que se refiere al pic pero desconosco su significado si alguien me pudiera explicar esa parte selo agradeceria  :oops: ) por otro al presiona unos d elos botones de entrada del primer pic este se queda "enclavado" y al mirar al osciloscopio no muestra nada ( recordando que cuando probe solo el pic de envio de datos funcionaba ala perfeccion ). 
en verdad no se si es posible correr ambos pic al mismo tiempo o no ...
en su defecto como podria simular el segundo pic que requiere un tren de bit preciso a un intervalo predeterminado ? como se simularia esa parte para comprobar si esta correcto.


en el archivo adjunto les tengo ambos codigos e archivos de proteus.

en cuanto al alcance delproyecto tenia pensado comprar unos de esas piezas que venden de "trasmisor rf " como este http://www.electronica.com.ve//ventas/catalog/product_info.php?cPath=57&products_id=2791
 y receptor   como este http://www.electronica.com.ve//ventas/catalog/product_info.php?cPath=57&products_id=2793  mi pregunta en este caso es : en caso de usar estos dispositivos solo tendria que conectar mi pata de salida de data a la entrada de data del trasmisor y la del receptor a la respectiva para del otro pic y ya??? o hay que agregar algo mas  (ademas de los rutinas de comprobacion de datos, codigos de data y demas ) pero obviando esa parte , seria "asi de sencillo" conectar y ya?¿


gracias por su ayuda de antemano.  :-/

aqui les dejo las rutinas del tx y rx

TX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxx


   LIST  P=16F84A
   #include <P16F84A.inc>
    __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
;--------------------------------------------------------------------
   ORG 0X00
   GOTO INICIO
   ORG 0X04
   GOTO INTERRUP
DELAY1      EQU 0X12
MEMORIA      EQU 0X13
DELAY2      EQU   0X14
DELAY3       EQU 0X15
;-------------------------------------------------------------------
INICIO      CLRW
         BANKSEL TRISB
         MOVLW 0XFF
         MOVWF TRISB
         CLRF TRISA
         BANKSEL PORTA
         
RUTINA      BCF PORTA,0
         BTFSC PORTB,0
         CALL INFO1
         

         BTFSC PORTB,1
         CALL INFO2
         BTFSC PORTB,2
         CALL INFO3
         GOTO RUTINA

         
         
ARRIBA      BSF PORTA,0
         CALL RETARDO
         RETURN
         


ABAJO      BCF PORTA,0
         CALL RETARDO
         RETURN
         
      

INFO1      CALL RETARDO2         ; 1010 1101
         CALL RETARDO2
         CALL ARRIBA      ;1
         CALL ABAJO      ;0
         CALL ARRIBA      ;1
         CALL ABAJO      ;0
      
         CALL ARRIBA      ;1
         CALL ARRIBA      ;1
         CALL ABAJO      ;0
         CALL ARRIBA      ;1
         RETURN

INFO2      CALL RETARDO2         ; 1000 1001
         CALL RETARDO2
         CALL ARRIBA
         CALL ABAJO
         CALL ABAJO
         CALL ABAJO
      
         CALL ARRIBA
         CALL ABAJO
         CALL ABAJO
         CALL ARRIBA
         RETURN

INFO3      CALL RETARDO2         ;1010 1010
         CALL RETARDO2
         CALL ARRIBA
         CALL ABAJO         
         CALL ARRIBA
         CALL ABAJO
         
         CALL ARRIBA
         CALL ABAJO         
         CALL ARRIBA
         CALL ABAJO         
         RETURN









RETARDO     CLRF DELAY1
BUCLE00      CLRW            ; ESTOS RETARDOS CUMPLE LA FUNCION DE DAR UN LAPSO DE TIEMPO PARA QUE SE EJECUTE EL MOVIMIENDO FISICO DE UNA BOBINA A OTRA
         MOVLW 0XFF
         MOVWF DELAY1         ; SE COLOCO FF DEBIDO A QUE LA CONFIGURACION DE CADA MOTOR ES INDIPENDIENTE  PARA CADA UNO Y HAY QUE SEGUIR UNA CURVA
BUCLE1     DECFSZ DELAY1,1      ; CARACTERISTICA DEL FABRICANTE PARA DETERMINAR EL LAPSO CORRECTO PARA EL MISMO, PARA EFECTOS PRACTICOS DEL PROTEUS "FF" ES MAS QUE SUFICIENTE
         GOTO BUCLE1
         RETURN

INTERRUP   NOP
         RETFIE


RETARDO2    CLRF DELAY2
         CLRF DELAY3
         MOVLW 0XFF
         MOVWF DELAY3
BUCLE4      CLRW            ; ESTOS RETARDOS CUMPLE LA FUNCION DE DAR UN LAPSO DE TIEMPO PARA QUE SE EJECUTE EL MOVIMIENDO FISICO DE UNA BOBINA A OTRA
         MOVLW 0XFF
         MOVWF DELAY2         ; SE COLOCO FF DEBIDO A QUE LA CONFIGURACION DE CADA MOTOR ES INDIPENDIENTE  PARA CADA UNO Y HAY QUE SEGUIR UNA CURVA
BUCLE3     DECFSZ DELAY2,1      ; CARACTERISTICA DEL FABRICANTE PARA DETERMINAR EL LAPSO CORRECTO PARA EL MISMO, PARA EFECTOS PRACTICOS DEL PROTEUS "FF" ES MAS QUE SUFICIENTE
         GOTO BUCLE3
         DECFSZ DELAY3
         GOTO BUCLE4
         RETURN

END




Y AQUI LA DEL RX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


   LIST  P=16F84A
   #include <P16F84A.inc>
    __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
;--------------------------------------------------------------------
   ORG 0X00
   GOTO INICIO
   ORG 0X04
   GOTO INTERRUP
;--------------------------------------------------------------------
DELAY2      EQU   0X14
DELAY3       EQU 0X15
MEMORIA     EQU 0X12
INFO      EQU   0X16
DELAY1      EQU 0X13
;-------------------------------------------------------------------
INICIO     CLRW
         BANKSEL TRISA
         CLRF   TRISB
         BSF     TRISB,0
         
         BANKSEL PORTA
         BSF INTCON,7         ; ACTIVAMOS INTERRUPCIONES GLOBALES
         BSF INTCON,4         ; INTERRUPCION EXTERNA DE B0

REINICIO    CLRW   
         MOVLW 0XAD            ; PARA INTERROGAR SI LO QUE SE MANDO ES INFO1  1010 1101
         SUBWF INFO,0
         BTFSC STATUS,2
         GOTO INFO1
         BCF STATUS,0
         BCF STATUS,1
         
         CLRW
         MOVLW 0X89            ;   1000 1001
         SUBWF INFO,0
         BTFSC STATUS,2
         GOTO INFO2
         BCF STATUS,0
         BCF STATUS,1

         CLRW
         MOVLW 0XAA            ;1010 1010
         SUBWF INFO,0
         BTFSC STATUS,2
         GOTO INFO3
         BCF STATUS,0
         BCF STATUS,1
         GOTO REINICIO


;----------------------------------------mostrando informacione n forma de led------------------------------
INFO1      BCF STATUS,2
         BSF PORTB,1
         BCF PORTB,2
         BCF PORTB,3
         GOTO REINICIO
       
INFO2      BCF STATUS,2
         BCF PORTB,1
         BSF PORTB,2
         BCF PORTB,3
         GOTO REINICIO
       
INFO3      BCF STATUS,2
         BCF PORTB,1
         BCF PORTB,2
         BSF PORTB,3
         GOTO REINICIO
       


RETARDO     CLRF DELAY1
BUCLE00      CLRW            ; ESTOS RETARDOS CUMPLE LA FUNCION DE DAR UN LAPSO DE TIEMPO PARA QUE SE EJECUTE EL MOVIMIENDO FISICO DE UNA BOBINA A OTRA
         MOVLW 0XFF
         MOVWF DELAY1         ; SE COLOCO FF DEBIDO A QUE LA CONFIGURACION DE CADA MOTOR ES INDIPENDIENTE  PARA CADA UNO Y HAY QUE SEGUIR UNA CURVA
BUCLE1     DECFSZ DELAY1,1      ; CARACTERISTICA DEL FABRICANTE PARA DETERMINAR EL LAPSO CORRECTO PARA EL MISMO, PARA EFECTOS PRACTICOS DEL PROTEUS "FF" ES MAS QUE SUFICIENTE
         GOTO BUCLE1
         RETURN

INTERRUP   CLRF MEMORIA      ; TODO LOS BIT LOS PONEMOS EN CERO
         BCF INTCON,7      ;DETENEMOS LAS INTERRUPCIONES MIENTRA RECIBE LA INFORMACION
WAIT      BTFSS PORTB,0      ;OBVIAMENTE EL PRIMER BIT ES UN BIT ALTO (POR LA INTRRUPCION)
         GOTO WAIT
         BSF MEMORIA,7
         CALL RETARDO
         NOP
         NOP
         BTFSS PORTB,0
         GOTO S1
         BSF MEMORIA,6
S1         CALL RETARDO
         NOP
         NOP
         BTFSS PORTB,0
         GOTO S2
         BSF MEMORIA,5
S2         CALL RETARDO
         NOP
         NOP
         BTFSS PORTB,0
         GOTO S3
         BSF MEMORIA,4
S3         CALL RETARDO
         NOP
         NOP
         BTFSS PORTB,0
         GOTO S4
         BSF MEMORIA,3
S4         CALL RETARDO
         NOP
         NOP
         BTFSS PORTB,0
         GOTO S5
         BSF MEMORIA,2
S5         CALL RETARDO
         NOP
         NOP
         BTFSS PORTB,0
         GOTO S6
         BSF MEMORIA,1
S6         CALL RETARDO
         NOP
         NOP
         BTFSS PORTB,0
         GOTO S7
         BSF MEMORIA,0
S7         CALL RETARDO
         NOP
         NOP
         CLRW
         CLRF INFO
         MOVFW MEMORIA
         MOVWF INFO      ; PASAMOS LA INFORMACION A UN REGISTRO APARTE
         BCF INTCON,1      ; LIMPIAMOS LA INTRRUPCION
         BSF INTCON,7        ; HABILITAMOS LA INTERUPCIONES DE NUEVO
         
         RETFIE


END



XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX




gracias por su paciencia.  :oops: :oops: :oops:
\../......TrueMalkavian...... \../

Desconectado TRUEMALKAVIAN

  • PIC10
  • *
  • Mensajes: 10
Re: Comunicacion pic a pic 16f84a, problema con simulacion.
« Respuesta #1 en: 23 de Octubre de 2011, 16:20:29 »
Lo siento me equivoque de archivo adjunto  :oops:
aqui les dejo el correcto  :D
\../......TrueMalkavian...... \../