Hola,
Estoy programando (en CCS) dos pics que se comunican entre ellos por i2c (16f88 y 16f873a). Uno de ellos (pic16f873a) controla un modulo LCD de 20x4.
Envio datos de master a slave continuamente y el slave los recibe pero quiero poder controlar la secuencia dado que el pic principal tiene mas tareas a parte de atender al bus I2C, y si creara una interrupcion esta estaria funcionando siempre, y si por otro lado leyera el bus I2C en un momento, probablemente el emisor no estuviera sincronizado (si no recibe bit de ack no deberia enviar nada, pero no se como funciona en realidad).
Actualmente el master tiene un adc y envia el dato a el slave que es el pic16f873a, querria cambiarlo y que el pic16f873a fuera el master y el pic16f88 el esclavo, pero tendria que gestionar el envio de datos para que fuera el master el que enviara una peticion a el esclavo y entonces este le enviara el dato, y no se como hacerlo.
--------------------------------------------------------------------------------------------
He probado leyendo i2c_isr_state() para ver si en algun momento dejaba de emitir el master pero esta siempre emitiendo (en el lcd tengo puesto el estado y el dato y el estado va alternando entre 0,1 y 2. Y el dato es adress, dato1 y dato2).
Tambien he probado con la interrupcion #INT_SSP
void ssp_interupt ()
pero como no controlo en envio en el master (siempre envia) esta siempre activada en el esclavo...
Igualmente habia visto que la comunicacion se finalizaba escribiendo de slave a master i2c_write(0) pero no obtengo los resultados esperados...
Espero que alguien pueda explicarme el proceso. No he visto mucha informacion en cuanto a controlar en envio y una peticion por parte del master, solo el ejemplo que viene en ccs sobre el control de una memoria i2c pero no lo entiendo cuando trabaja con los registros...
Por otro lado, tengo otra duda, y es como enviar un dato de 10bits (del adc) a traves de i2c que envia (creo) solo 8bit. Habia pensado en enviar dos nibbles pero (a demas de que no me acuerdo de la instruccion para separar el dato y luego juntarlo) debe haber una forma mas sencilla... De hecho hace algunas semanas consegui enviar el dato y me funcionaba, pero modifique el programa y no me acuerdo de que hice...
Gracias
Estoy programando (en CCS) dos pics que se comunican entre ellos por i2c (16f88 y 16f873a). Uno de ellos (pic16f873a) controla un modulo LCD de 20x4.
Envio datos de master a slave continuamente y el slave los recibe pero quiero poder controlar la secuencia dado que el pic principal tiene mas tareas a parte de atender al bus I2C, y si creara una interrupcion esta estaria funcionando siempre, y si por otro lado leyera el bus I2C en un momento, probablemente el emisor no estuviera sincronizado (si no recibe bit de ack no deberia enviar nada, pero no se como funciona en realidad).
Actualmente el master tiene un adc y envia el dato a el slave que es el pic16f873a, querria cambiarlo y que el pic16f873a fuera el master y el pic16f88 el esclavo, pero tendria que gestionar el envio de datos para que fuera el master el que enviara una peticion a el esclavo y entonces este le enviara el dato, y no se como hacerlo.
--------------------------------------------------------------------------------------------
He probado leyendo i2c_isr_state() para ver si en algun momento dejaba de emitir el master pero esta siempre emitiendo (en el lcd tengo puesto el estado y el dato y el estado va alternando entre 0,1 y 2. Y el dato es adress, dato1 y dato2).
Tambien he probado con la interrupcion #INT_SSP
void ssp_interupt ()
pero como no controlo en envio en el master (siempre envia) esta siempre activada en el esclavo...
Igualmente habia visto que la comunicacion se finalizaba escribiendo de slave a master i2c_write(0) pero no obtengo los resultados esperados...
Espero que alguien pueda explicarme el proceso. No he visto mucha informacion en cuanto a controlar en envio y una peticion por parte del master, solo el ejemplo que viene en ccs sobre el control de una memoria i2c pero no lo entiendo cuando trabaja con los registros...
Por otro lado, tengo otra duda, y es como enviar un dato de 10bits (del adc) a traves de i2c que envia (creo) solo 8bit. Habia pensado en enviar dos nibbles pero (a demas de que no me acuerdo de la instruccion para separar el dato y luego juntarlo) debe haber una forma mas sencilla... De hecho hace algunas semanas consegui enviar el dato y me funcionaba, pero modifique el programa y no me acuerdo de que hice...
Gracias