Protocolo I2C entre 2 pic 16f876

Bueno esto es lo que yo entrego la comunicacion entre los dos pics es por medio del puerto C, que es donde se tiene el I2C, las lineas SDA y SCL. En el archivo todo se compila en el mplab los archivos RETARDOS/I2C son guardados como .INC y el master/slave como .ASM.

Si alguien tiene mas dudas pues mas o menos ya le entendi a este tema.

Suerte y espero le sirva a alguien.

PD: Estan ya calados no tienen fallas (solo podria ser de HW).:cool:
 

Adjuntos

  • comunicacion I2C.rar
    4.4 KB · Visitas: 326
Hola gente, me gustaría comunicar dos microcontroladores por el bus I2c. Ya probé programando uno como master (PIC16F877), y como esclavos tengo una memoria 24C02, y un reloj DS1307, esta comunicación me salió perfecta, pero nunca pude programar un microcontrolador como esclavo, me gustaría usar un PIC16F873: Espero que alguien haya hecho la experiencia y pueda compartirla conmigo, aclaro que sigo programando en assembler, traté de descargar ese archivo, pero no pude saludos Darío.
 
Saludos amigos
Les comento un poco lo que quiero hacer: Un pic 16f876 en modo maestro quiero que le de información a un pic 16f876 modo esclavo. Hasta ahora lo que intenta hacer mi programa es prender un par de leds en la puerta B del esclavo cada vez que recibe un dato válido.
El programa cuando lo pruebo en protoboard no está funcionando, y no se como simular en mplab v7.4 la comunicación I2C.

Anexo les pongo el código de ambos programas

PIC Maestro
***********************************************************************
Código:
;Programa de Prueba Micro maestro
;se conecta mediante I2C con micro esclavo

	LIST		P=16F876
	INCLUDE		<P16F876.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

	CBLOCK 0x21 
	ENDC
	
	ORG	0
	goto Inicio
	ORG	4
	goto Interrupcion
	
Inicio
	clrf PORTC			;limpio puerto c
	clrf PORTB			;limpio puerto b
	bsf STATUS,RP0		;cambio al banco 1
	movlw b'11111100'	                ;inicializa PORTC como entradas
	movwf PORTC		;PORTC 0,1 leds de visualizacion	
	clrf PORTB			;inicializo como salidas para leds	
	movlw b'10000000'
	movwf SSPSTAT		;Velocidad Standard con niveles I2C
	movlw .9
	movwf SSPADD		;Velocidad del bus 100KHz
	bsf PIE1,SSPIE		;activo interrupcion del MSSP
	bcf STATUS,RP0		;cambio al banco 0
	movlw b'00101000'	                ;Modo maestro con 7 bits de direccion
	movwf SSPCON		;Módulo MSSP encendido
	bcf PIR1,SSPIF		;clear de la bandera del I2C
	movlw b'10000000'
	movwf INTCON		;activacion general de interrupciones

lazo
	bsf PORTB,0
	bcf PORTB,1
	call Retardo_1s
	bcf PORTB,0
	bsf PORTB,1
	call Retardo_1s
	call S_START
	movlw 0xA2			;Direccion esclavo b'1010001'
					;modo escritura, ultimo bit 0	
	call SEND_B			;Indico al micro que voy a escribir
	movlw 0x30			;en la posición 0x30
	call SEND_B
	movlw 0x00
	call SEND_B
	call S_STOP
	goto lazo			                ;del maestro via I2C

Interrupcion
	retfie

	INCLUDE <RETARDOS.INC>
	INCLUDE <I2C_Lib.INC>
	end
**************************************************************************
Los retardos de 1 segundo y la librería de I2C funcionan bien

Ahora el código del PIC esclavo
*************************************************************************
Código:
;Programa de Prueba Micro esclavo
;se conecta mediante I2C con micro maestro


	LIST		P=16F876
	INCLUDE		<P16F876.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

	CBLOCK  0x21
	ENDC
	
	ORG	0
	goto Inicio
	ORG	4
	goto Interrupcion
	
Inicio
	clrf PORTC			;limpio puerto c
	clrf PORTB			;limpio puerto b
	bsf STATUS,RP0		;cambio al banco 1
	movlw b'11111100'	                ;inicializa PORTC como entradas
	movwf PORTC		;PORTC 0,1 leds de visualizacion
	clrf PORTB			;inicializa PORTB como salida de leds		
	movlw b'10000000'
	movwf SSPSTAT		;Velocidad Standard con niveles I2C
	movlw 0xA2
	movwf SSPADD		;Direccion del esclavo
	bsf PIE1,SSPIE		;activo interrupcion del MSSP
	bcf STATUS,RP0		;cambio al banco 0
	movlw b'00111110'	                ;Modo esclavo con 7 bits de direccion
	movwf SSPCON		;Módulo MSSP encendido
	bcf PIR1,SSPIF		;clear de la bandera del I2C
	movlw b'10000000'
	movwf INTCON		;activacion general de interrupciones

lazo
	nop			;lazo infinito esperando datos
	goto lazo			;del maestro via I2C

Interrupcion
	btfss PIR1,SSPIF	;Pregunto si fue interrupcion del I2C
	goto fin		;no fue
	bcf PIR1,SSPIF	;limpio bandera
	bsf PORTB,0	;prendo leds
	bcf PORTB,1
	call Retardo_500ms	;espero tiempo para verlo
	bcf PORTB,0	;apago leds
	bsf PORTB,1
	call Retardo_200ms	;espero a ver leds
fin
	retfie

	INCLUDE <RETARDOS.INC>
	end
***********************************************************************

Como verán, el programa es bastante simple. Se me ocurre que puede ser un error de configuración de algún registro pero no consigo dar con el error.

Muchas gracias de antemano por cualquier ayuda que me puedan ofrecer








necesito la libreria i2c para realizar la comunicacion,
 
El último mensaje de @shougo fue en 12/09/2006. Así que dudo mucho que te responda.

Mira el ejemplo del archivo comprimido que subió @arsfigo07 en su post #21, usa la librería "I2C.INC"
Posiblemente te sirva su ejemplo o la librería.

Suerte.
 
Hola GEnte, capaz puedan ayudar con esto quiero comunicar como veo en esta parte del foro 2 pic mediante I2C estoy utilizando CCS, pero el problema que no logro la comunicacion quiero creer que es problema del simulador porque es algo basico un pic escanea una serie de teclas y al precionar quiero que envie ese dato a otro pic y que me lo muestre en el LCD, eso es lo que quiero hacer por ahora, igual mas adelante no va hacer eso pero quiero lo basico que es eso ahora pero no sale. Voy a adjuntar el archivo. a ver que se puede hacer. Seguro es algo que estoy pasando por alto y no lo veo.

por ejemplo si preciono una tecla que esta en fila 1 columna 1 envia el dato 11 y en el display del otro pic muestra el 11, si preciono columna 2 fila 1, el 12 y asi...
como tambien si preciono colimna 1 y fila 2 que muestre el 21. nose si me explico osea el primer numero es la fila y el sugundo la columna.

estaria bueno si fuera mediante una interrupcion, la deteccion del pic esclavo.

Gracias
 

Adjuntos

  • com i2c.zip
    268.9 KB · Visitas: 6
Última edición:
Atrás
Arriba