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...
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
) 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.