fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

I2C en PIC

4 Respuestas
3 Usuarios
0 Reactions
2,245 Visitas
kristianmiranda
Respuestas: 3
Topic starter
(@kristianmiranda)
New Member
Registrado: hace 18 años

Buenas tardes a todos!!
Soy nuevo en este foro y bstante novato con temas relacionados con la programación PIC. Espero no soltar ninguna bobada..jeje.
Tengo un problema a la hora de utilizar I2C en un pic18f4580. Estoy intentando comunicar dos pics 18f4580 mediante i2c y por ejemplo en un nodo lo configuro como master y el otro como slave. En el nodo programado como master, al realizar la condicion de i2c_start() y seguidamente la de i2c_write(), es en esta ultima que se queda "pillado". Me he dado cuenta poniendo printf's entre lineas de codigo. El codigo seria el siguiente;

BYTE data;
printf("1");
data=5;
printf("2");
i2c_start();
printf("3");
i2c_write(0xa0);
printf("4"); --> Este printf ya no me aparece por el HYPERTERMINAL
i2c_write(data);
printf("5");
i2c_stop();

Se queda bloqueado en el primer 12c_write...
A que puede ser debido?Puede ser que esté a la espera de alguna respuesta del slave?

Espero que me podais ayudar!!!!

Muchas gracas!!

PD: Para comunicar dos pic's por i2c es necesario que un pic este en modo slave y otro en master o si estan los dos en modo master tambien funcionaaria?

Responder
3 respuestas
garrocha
Respuestas: 1110
(@garrocha)
Ardero
Registrado: hace 19 años

Sobre I2C no puedo ayudarte, pero aqui tienes un par de post que puede te sean de utilidad

http://foro.webdearde.com/viewtopic.php?f=16&t=984 " onclick="window.open(this.href);return false;

http://foro.webdearde.com/viewtopic.php?f=16&t=525 " onclick="window.open(this.href);return false;

Responder
morlok
Respuestas: 32
(@morlok)
Eminent Member
Registrado: hace 19 años

Revisa si tienes bien las resistencias de pushpull , me pasaba lo mismo al intentar leer un sensor de temperatura que trabajaba como esclavo i2c, tenia que tener 2 resistencias externas de 1k puestas a 5 V, una en cada pin.

Responder
kristianmiranda
Respuestas: 3
Topic starter
(@kristianmiranda)
New Member
Registrado: hace 18 años

Gracias!Era lo de las resistencias. No se las habia puesto porque creia que las llevaba integradas el pic!
Pero aora me surge otro problema... 😕 Una vez entra en la interrupcion int_ssp del dispositivo Slave, con un i2c_read() cojo el valor pero solo coje el primero que es la direccion del device 😕 😕
Como hago para poder cojer todos los valores que se envian desde el dispositivo master?os pongo el codigo para aclarar un poco el tema 😛

DISPOSITIVO MASTER

BYTE data;
data=5;
i2c_start(); // Condicion de Start
i2c_write(0xa0); // Device address
i2c_write(data); // Device data
i2c_stop(); // Stop condition

DISPOSITIVO SLAVE

#int_ssp
void i2c_isr()
{
int a;
while(i2c_poll()){ //¿he recibido alguna trama de master
a=i2c_read();
}
printf("%i",a);
}

Porque solo me coje el valor 0xa0 y no me coje el valor 5 (data=5)??
Que es lo que hago mal??

Y una ultima cosa, trabajar en modo multimaster es muy complicado?hay algun ejemplo por aqui??Alguien me podria poner algun ejemplo sencillo??
Muchisimas gracias!!!

Responder
Compartir: