TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: m-o-s en 16 de Mayo de 2008, 06:40:25
-
Hola compañeros, estoy utilizando dos pic 16f8xx como exclavo y pic 18f252 como maestro. El exclavo lo utilizo unicamente para controlar un lcd, es decir solo recibe informacion y visualiza. Todo funciona bien hasta que he añadido un sensor de temperatura.
El caso es que el pic exclavo muestra todos los datos que le voy enviando, cada 10 segundos el pic maestro lee la temperatura del sensor ds1621 que va por bus I2C, a partir de aqui ya el pic exclavo no se comunica con el maestro.
Por las pruebas que estoy haciendo, pienso que el pic exlavo (encargado solo de visualizar) se queda bloqueado al ver que la direccion enviada no es la suya.
No se que se puede hacer para que el pic exclavo al recibir una direccion que no es la suya, la borre y se mantenga a la espera de que le llegue su direccion.
Estos registros son los que tiene el pic exclavo mientras esta funcionando bien:
SSPBUF 0x0013 0b00000000
SSPCON 0x0014 0b00110110
SSPCON2 0x0091 0b00000000
SSPSTAT 0x0094 0b00110000
SSPADD 0x0093 0xE4 ; esta es la direccion que le tengo puesta al pic exclavo
PIR1 0x0F9E 0b00001000
Y asi es como se queda el pic exclavo cuando hago una lectura del sensor ds1621:
SSPBUF 0x0013 0b10011110 ; esta direccion que aparece aqui es la que le tengo puesta al sensor ds1621
SSPCON 0x0014 0b01110110
SSPCON2 0x0091 0b00000000
SSPSTAT 0x0094 0b00010001
SSPADD 0x0093 0xE4
PIR1 0x0F9E 0b01001000
;
No se como configurar el exclavo para que esto no pase, me trae de cabeza. Un saludo compañeros. :(
-
mos hace un largo rato que no uso I2C pero te digo un par de consejos
1) Si estás en modo 7bits para el direccionamiento, si mal no recuerdo el último bit no se usaba ya que este indicaba si el comando que se recibía era de lectura o de escritura. Es allí donde las direcciones eran PARES siempre ya que la IMPAR correspondía al mismo dispositivo en operaciones de lectura
2) En los pics es tu código el responsable de hacer que responda o no. Y si está queriendo responder o envía un ACK por el bus es porque reconoce la dirección con lo cual estás teniendo claramente un problema de conflicto de direcciones entre tu esclavo y el nuevo integrado que agregaste al bus.
3) Tienes resistencias de pullup? suelen ser necesarias aunque esto disminuye la velocidad del bus son imprescindibles cuando usas varios ICs
-
Hola compañero, si la tengo puesta los ( resistores pull-up), el bit de escritura/lectura eso esta controlado. El problema esta en que me falta codigo para el pic exclavo, para que cuando se de esa situacion en la que por el bus venga una direccion que no sea la suya haga caso omiso y siga esperando su direccion. Sigo probando pero hay algo que no hago. Un saludo compañero. :P
-
Hola compañero, si la tengo puesta los ( resistores pull-up), el bit de escritura/lectura eso esta controlado. El problema esta en que me falta codigo para el pic exclavo, para que cuando se de esa situacion en la que por el bus venga una direccion que no sea la suya haga caso omiso y siga esperando su direccion. Sigo probando pero hay algo que no hago. Un saludo compañero. :P
A ver, vayamos por partes.
1. Si tu tienes a tu maestro y a tu esclavo solos en la red , tu software funciona?
2. Si le agregas el esclavo a la red pero direccionas solo al esclavo tu software funciona?
Quiero separar lo que pueda ser conflicto de bus con lo que sea simplemente la lógica de tu esclavo.
-
EL circuito funciona siempre y cuando el maestro no direccione a otro dispositivo.
Ahora, cuando le pido que lea la temperatura que lo hago cada 10 segundos es cuando el pic exclavo ya deja de recibir datos,
y si los dejo solos maestro y exclavo y quito el sensor de temperatura le pasa igual. El pic exclavo sigue funcionando pero sin detectar ninguna direccion, con lo que ya no recibe datos.
Se activa el señalizador en el pic exclavo de que no se ha leido el byte de direccion SSPCON,SSPOV, tambien se activa otro bit señalizador PIR1,ADIF. :P
-
seria mejor que pusiera el codigo completo porque algo hace tu mal ahi, segun he leido cuando el master envia al esclavo algun datos el master espera una respuesta de comprobacion (llamado ACK), un consejo te doy para que te puedan ayudar, es poner todos los datos y si usa alguna libreria tambien.
Saludos
-
Hola compañeros ya lo tengo resulto, solo tenia que liberar SSPBUF y asunto resuelto. Gracias compañeros un abrazo. :-)
-
Hola compañeros ya lo tengo resulto, solo tenia que liberar SSPBUF y asunto resuelto. Gracias compañeros un abrazo. :-)
Me alegro mucho :)
Saludos