Autor Tema: Comunicar Pic's mediante un solo pin  (Leído 2791 veces)

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

Desconectado escalera

  • PIC10
  • *
  • Mensajes: 18
Comunicar Pic's mediante un solo pin
« en: 30 de Julio de 2012, 12:18:55 »
Hola, no se si alguien pueda ayudarme tengo un problema, quiero comunicar 2 PIC, uno de ellos que es un 16F1827 maneja un contador de pulsaciones y el display, ademas de tener multiplexados 4 botones a la pata MCLR controlados con un 74LS145, los botones hice una rutina que funciona bien hasta ahora, siempre y cuando no oprima 2 botones a la vez porque sino el PIC se reseta, el otro PIC es un 12F1822, esta conectado a un DS1302, el cual ya programe para la lectura del reloj en modo BURST, para el que quiera ese algoritmo ahorita lo pongo aqui, ambos micros estan conectados por 2 patas, una es el MCLR del PIC 2 a PORTB,2; esa la quiero usar como si fuese de control para envio y recepcion por la otra pata que quiero usar; la otra pata esta conectada de RA1(12F1822) a RB1(16F1827), ambas patas son RC, a que quiero llegar?, quiero saber si podrian orientarme porque quiero hacer una rutina de envio de datos y que UART leea esa informacion y la guarde en el registro RCREG; hice unas rutinas y ambos se supone estaran a 9600 baudios de recepcion y la rutina "maneja"(segun) 9600 baudios, pero al simular en proteus, RCREG se llena con "FF" por lo que los datos del DS1302 no se envian, alguien puede orientarme?

PD. Ambos PIC estan a velocidad de 4Mhz y es con FOSC interno; y no puedo mandar la señal por las patas TX, tiene que ser por la misma pata la recepcion y transmision y controlar cuando seran entradas o salidas mediante una interrupcion de MCLR del PIC12F1822

Rutina DS1302 (la adjunto porque veo que muchos la buscan y yo la busque en internet y no vi informacion asi que diseñe esta rutina y funciona en proteus, aun no lo veo fisico ya que no puedo hacer la conexion de los PIC)


LEERCLOCK
   BCF INTCON,GIE
   MOVLW 0x22
   MOVWF FSR0
   BSF PORTA,5 ;CE
   MOVLW 0xBF
   MOVWF OUTCLOCK
   CALL ENVIRELOJ
   CALL RECIRELOJ
   INCF FSR0,F
   CALL RECIRELOJ
   INCF FSR0,F
   CALL RECIRELOJ
   INCF FSR0,F
   CALL RECIRELOJ
   INCF FSR0,F
   CALL RECIRELOJ
   INCF FSR0,F
   CALL RECIRELOJ
   INCF FSR0,F
   CALL RECIRELOJ
   BCF PORTA,5 ;CE
   BCF PORTA,2
   BSF INTCON,GIE
   RETURN
ENVIRELOJ
   MOVLB 0x01
   BCF PORTA,4   ;I/O
   CLRF BSR
   MOVLW 0x08
   MOVWF COUNTBIT
ENVIANREL
   BCF PORTA,2
   BCF STATUS,C
   RRF OUTCLOCK,F
   BCF PORTA,4
   BTFSC STATUS,C
   BSF PORTA,4   ;I/O
   BSF PORTA,2 ;SCLK
   DECFSZ COUNTBIT,F
   GOTO ENVIANREL
   RETURN
RECIRELOJ
   MOVLB 0x01
   BSF PORTA,4
   CLRF BSR
   MOVLW 0x08
   MOVWF COUNTBIT
RECIBIREL
   BCF PORTA,2
   BCF STATUS,C
   BTFSC PORTA,4
   BSF STATUS,C
   BSF PORTA,2 ;SCLK
   RRF INDF0,F
   DECFSZ COUNTBIT,F
   GOTO RECIBIREL
   RETURN
« Última modificación: 30 de Julio de 2012, 16:59:37 por escalera »
?????

Desconectado escalera

  • PIC10
  • *
  • Mensajes: 18
Re: Comunicar Pic's mediante un solo pin
« Respuesta #1 en: 31 de Julio de 2012, 12:29:31 »
Ya no, ya esta solucionado igual gracias, a los que busquen la forma de adaptarlo, usen proteus y su osciloscopio virtual para adaptar el envio del voltaje al ritmo del clock del pic, aqui les dejo el mio

;################################
DEBIT
   MOVLW 0x50 ; PARA 9600 BAUDIOS / XTAL DE 4 MEGAZ HZ.
   MOVWF CONTBAU
   NOP
   NOP
X02
   NOP
   NOP
   DECFSZ CONTBAU,1
   GOTO X02
   RETLW 0x00
;***************************************************
TXRUTINA
   BCF INTCON,GIE
   NOP
   NOP
   BCF PORTA,1 ; START BITS
   CALL DEBIT
   MOVLW 08H ; SIETE BITS
   MOVWF COUNTBIT
   NOP
S7
   RRF TXENV,1
   BTFSS STATUS,C ; 0
   GOTO S4 ; FUE CERO 1
   BSF PORTA,1 ; FUE UNO 1
   GOTO S5 ; 2
S4
   BCF PORTA,1 ; 2
S5
   CALL DEBIT ; DELAY ENTRE BITS 3
   DECFSZ COUNTBIT,1
   GOTO S7
   BSF PORTA,1 ; STOP BITS
   CALL DEBIT
NOENV   
   CLRF BSR
   BSF INTCON,GIE
   RETLW 0x00
;#########################################
?????

Desconectado escalera

  • PIC10
  • *
  • Mensajes: 18
Re: Comunicar Pic's mediante un solo pin
« Respuesta #2 en: 03 de Agosto de 2012, 16:36:36 »
NECESITO AYUDA!!! ALGUIEN PODRIA DECIRME PORQUE EN PROTEUS FUNCIONA Y EN FISICO NO FUNCIONA?, EL PROGRAMA NO INICIA, ES COMO SI NO UBIERA COMUNICACION :/
?????

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comunicar Pic's mediante un solo pin
« Respuesta #3 en: 03 de Agosto de 2012, 19:08:15 »
Adivinos no somos, así que sería bueno que muestres la configuración de fuses, el esquema, etc  ;-)

Y respecta las normas del foro, no escribas en mayúscula. 

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado escalera

  • PIC10
  • *
  • Mensajes: 18
Re: Comunicar Pic's mediante un solo pin
« Respuesta #4 en: 04 de Agosto de 2012, 12:40:12 »
Bueno una disculpa por lo de las mayusculas :D, bueno los fuses los tengo de la siguiente manera

    __config _CONFIG1, _FCMEN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _BOREN_ON & _CPD_ON & _CP_ON & _MCLRE_OFF & _PWRTE_ON & _WDTE_OFF & _FOSC_INTOSC;XT
    __config _CONFIG2, _LVP_OFF &  _WRT_OFF

en la configuracion la puse de la siguiente manera

    BSF BSR,0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x68              ;   b'01100110'  d'102'  "f"
    MOVWF OSCCON          ; !!Bank!! TMR1H - OSCCON - EEADRH - Unimplemented
   CLRF BSR
   CLRF FSR0
    CLRF PORTA           ; !!Bank!! PORTA - TRISA - WDTCON - SRCON
    MOVLW 0x06
   MOVWF PORTB           ; !!Bank!! PORTB - TRISB - PORTB - TRISB
    BSF BSR,0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x06           ;   b'00000110'  d'006'
    MOVWF ADCON1         ; !!Bank!! ADCON0 - ADCON1 - RAM - RAM
    MOVLB 0x02;CLRF OSCCON       ; !!Bank Register-Bank(0/1)-Select
    BANKSEL ANSELA       ; !!Bank Register-Bank(0/1)-Select
    CLRF ANSELA         ; !!Bank!! Unimplemented - Unimplemented - CM2CON0 - ANSEL
    CLRF ANSELB           ; !!Bank!! PORTE - TRISE - CM2CON1 - ANSELH
   BANKSEL WPUA
   CLRF WPUA
   CLRF WPUB
    MOVLB 0x01       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x01           ;   b'00000001'  d'001'
    MOVWF PORTB          ; !!Bank!! PORTB - TRISB - PORTB - TRISB
    MOVLW 0x20           ;   b'01100000'  d'096'  "`"
    MOVWF PORTA          ; !!Bank!! PORTA - TRISA - WDTCON - SRCON
   CLRF BSR
   BSF PORTB,1
   BSF PORTB,2
   MOVLB 0x01
   MOVLW 0x20
   MOVWF PIE1
    MOVLW 0x02           ;   b'10000010'  d'130'
    MOVWF OPTION_REG     ; !!Bank!! TMR0 - OPTION_REG - TMR0 - OPTION_REG
   BANKSEL SPBRGL
    MOVLW 0x19           ;   b'00011001'  d'025'
    MOVWF SPBRGL          ; !!Bank!! TXREG - SPBRG - RAM - RAM
    BCF TXSTA,4          ; !!Bank!! RCSTA - TXSTA - RAM - RAM
    CLRF BSR       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x1B           ;   b'00011011'  d'027'
    MOVWF PR2            ; !!Bank!! T2CON - PR2 - RAM - RAM
    MOVLW 0xF0
   MOVWF INTCON
    CLRF BSR
   MOVLW 0x20
   MOVWF FSR0
   BCF INTCON,GIE
ERASEREG
   CLRF INDF0
   INCF FSR0,F
   BTFSS FSR0,7
   GOTO ERASEREG
   CLRF TMR0
   BCF INTCON,TMR0IF
   BSF INTCON,GIE
    MOVLW 0x06           ;   b'01000000'  d'064'  "@"
    MOVWF PORTB          ; !!Bank!! PORTB - TRISB - PORTB - TRISB
   BANKSEL RCSTA
    BSF RCSTA,7          ; !!Bank!! RCSTA - TXSTA - RAM - RAM
   BCF TXSTA,5
   BSF RCSTA,4
BAUDER
   BSF BAUDCON,4
   BTFSS BAUDCON,4
   GOTO BAUDER
   CLRF BSR

y la rutina de envio es esta (la de recepcion es mediante UART)

;################################
   ORG 0x0F00
;################################
DEBIT  
    MOVLW   0x50;12            ; PARA 9600 BAUDIOS / XTAL DE 4 MEGA HZ. (si pongo 0x50 en vez de 0x12, si funciona en proteus, pero en caso contrario recibe "00" ó "EF" ó "FE"
    MOVWF   CONTBAU
X02      
    CLRWDT
    NOP
    DECFSZ  CONTBAU,1
    GOTO    X02
   NOP
   NOP
    RETLW   00H
;***************************************************
TXRUTINA
   BCF INTCON,GIE
    BCF      PORTB,1         ; START BITS
    CALL     DEBIT
    MOVLW    08H         ; SIETE BITS
    MOVWF    COUNTBIT    
    NOP    
S7      
   RRF      TXENV,1
    BTFSS    STATUS,C             ;                      0
    GOTO     S4                   ; FUE CERO             1
    BSF      PORTB,1              ; FUE UNO              1
    GOTO     S5                   ;                      2
S4      
   BCF      PORTB,1              ;                      2

S5
    CALL     DEBIT                ; DELAY ENTRE BITS     3              
    DECFSZ   COUNTBIT,1
    GOTO     S7  
    BSF      PORTB,1              ; STOP BITS
    CALL     DEBIT
    CALL     DEBIT            
   BANKSEL TXREG
   MOVF RCREG,W
   CLRF BSR
   CLRF PCLATH
   BSF INTCON,GIE
   RETLW 0x00
;#########################################

estas rutinas ambos PIC las tienen; esta rutina solo es para el 12f1822
;#############################################
IOCAE
   BANKSEL IOCAP
   MOVLW 0xFF
   XORWF IOCAF,W
   ANDWF IOCAF,F
   BTFSC IOCAN,3
   GOTO DESHAP1A
   CLRF IOCAP
   BSF IOCAN,3
   CLRF BSR
   BSF PORTA,1
   BANKSEL TRISA
   BCF TRISA,1
   CLRF BSR
   GOTO ENDINTERR0
DESHAP1A
   CLRF IOCAN
   BSF IOCAP,3
   BANKSEL TRISA
   BSF TRISA,1
   CLRF BSR
   GOTO ENDINTERR0
ENDINTERR0
   MOVLW 0x01
   XORWF INTCON,W
   ANDWF INTCON,F
   GOTO ENDINTERR   
;###################################

y la uso para la interrupcion por cambio y el inicio es igual salvo unas cosillas para la interrupcion por cambio

;3####################################
   CLRF BSR
   CLRF FSR0
    CLRF PORTA           ; !!Bank!! PORTA - TRISA - WDTCON - SRCON
    BSF BSR,0       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x06           ;   b'00000110'  d'006'
    MOVWF ADCON1         ; !!Bank!! ADCON0 - ADCON1 - RAM - RAM
    MOVLB 0x02;CLRF OSCCON       ; !!Bank Register-Bank(0/1)-Select
    BANKSEL ANSELA       ; !!Bank Register-Bank(0/1)-Select
    CLRF ANSELA         ; !!Bank!! Unimplemented - Unimplemented - CM2CON0 - ANSEL
   BANKSEL WPUA
   CLRF WPUA
    MOVLB 0x01       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x0A           ;   b'01100000'  d'096'  "`"
    MOVWF PORTA          ; !!Bank!! PORTA - TRISA - WDTCON - SRCON
   MOVLW 0x20
   MOVWF PIE1   
    MOVLW 0x02           ;   b'10000010'  d'130'
    MOVWF OPTION_REG     ; !!Bank!! TMR0 - OPTION_REG - TMR0 - OPTION_REG
   BANKSEL SPBRGL
    MOVLW 0x19           ;   b'00011001'  d'025'
    MOVWF SPBRGL          ; !!Bank!! TXREG - SPBRG - RAM - RAM
    BCF TXSTA,4          ; !!Bank!! RCSTA - TXSTA - RAM - RAM
   BANKSEL IOCAN
   MOVLW 0x08
   MOVWF IOCAN
    CLRF BSR       ; !!Bank Register-Bank(0/1)-Select
    MOVLW 0x1B           ;   b'00011011'  d'027'
    MOVWF PR2            ; !!Bank!! T2CON - PR2 - RAM - RAM
   MOVLW 0xD8
   MOVWF INTCON
    CLRF BSR
   MOVLW 0x20
   MOVWF FSR0
ERASEREG
   CLRF INDF0
   INCF FSR0,F
   BTFSS FSR0,7
   GOTO ERASEREG
   CLRF TMR0
   BANKSEL RCSTA
    BSF RCSTA,7          ; !!Bank!! RCSTA - TXSTA - RAM - RAM
   BCF TXSTA,5
   BSF RCSTA,4
BAUDER
   BSF BAUDCON,4
   BTFSS BAUDCON,4
   GOTO BAUDER
   CLRF BSR
;##################################

y pues si ocupas que te pase las rutinas para el envio avisame para postearlas, bueno mejor de una vez adjunto la del 16f1827

   BCF PORTB,2
   MOVLW 0x0F
   MOVWF TXENV
   MOVLP 0x0F
   CALL TXRUTINA
   BSF BSR,0
   BSF PORTB,1
   CLRF BSR
   BSF PORTB,2
   BSF CONTROLRECI,0
ESPERARES
   CLRF BOTONES
   BTFSC CONTROLRECI,0
   GOTO ESPERARES
   BSF PORTB,1
   BSF BSR,0
   BCF PORTB,1
   CLRF BSR
   BCF PORTB,2
   RETURN

esa es la que normalmente uso para envio de datos y luego espera mediante una interrupcion la recepcion de un grupo de datos, que levanten una bandera y dejen seguir con el programa.

si ocupas algo mas dime, de verdad quisiera saber que hago mal :/y pues el porque funciona en proteus y en fisico no; con el esquema te refieres a las conexiones?


PD: Hice una modificacion, cheque los registros y vi que tenia BRGH = 0 y SPBRG = 25, cheque en las tablas y estaba enviando a una velocidad de 2500 baudios si mal no recuerdo, al ponerle BRGH = 1, y la rutina de envio como la saque de aqui, en proteus funciona, fisico no :/, aun no veo el error, creo que la tablilla ha de tener un problema que no veo; la tablilla no es mia, me la dio mi maestro y me dijo que hiciera un programa para prueba, es como un proyecto.

La pata RA3 del 12f1822 esta conectada a el RB2 del 16f1827 y estas a su vez van a una resistencia de 10Kohms conectada a corriente
« Última modificación: 06 de Agosto de 2012, 01:20:53 por escalera »
?????

Desconectado escalera

  • PIC10
  • *
  • Mensajes: 18
Re: Comunicar Pic's mediante un solo pin
« Respuesta #5 en: 05 de Agosto de 2012, 10:55:02 »
Encontre un error mio, me faltaba poner BRGH = 1, poniendolo asi en proteus funciona la velocidad de 9600 baudios, osea a la rutina darle el 12 para el retardo
« Última modificación: 05 de Agosto de 2012, 11:15:55 por escalera »
?????

Desconectado escalera

  • PIC10
  • *
  • Mensajes: 18
Re: Comunicar Pic's mediante un solo pin
« Respuesta #6 en: 11 de Agosto de 2012, 23:07:55 »
Bueno, quiero cerrar el hilo, al final fue error completamente mio, porque al micro 12F1822 le habia configurado la interrupcion INT/IOC del pin RA2 y RA2 estaba con el DS1302 por lo que estaba en un ciclado infinito y no permitia que el programa continuara, al final ya logre comunicarlo, modifique las rutinas para utilizar la comunicacion a 19230 Baudios y ya puedo leer y escribir el reloj en Modo Burst, asi como deshabilitar el CH(clock halt) del reloj; no se si quieran que suba algun algoritmo para lectura del clock o la rutina de comunicacion a 19230 Baudios
?????


 

anything