Autor Tema: duda con funciones de i2c en CCS  (Leído 9715 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
duda con funciones de i2c en CCS
« en: 11 de Septiembre de 2009, 02:08:19 »
Buenas amigos!!!
Ando haciendo unas pruebas con el bus i2c y me surgieron algunas dudas. Queria saber si las funciones i2c_write() e i2c_read() agregan automaticamente el bit de R/W. O yo tengo q agregar en el bit0 de la direccion la operacion q voy a realizar?

| start | A7 A6 A5 A4 A3 A2 A1 | R/W | ACK | ... DATA ... | ACK | stop | idle |

Saludos y gracias desde ya!!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: duda con funciones de i2c en CCS
« Respuesta #1 en: 11 de Septiembre de 2009, 09:17:44 »
No, tu tienes que mandar el byte con la dirección + el bit de escritura/lectura. 
No contesto mensajes privados, las consultas en el foro

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: duda con funciones de i2c en CCS
« Respuesta #2 en: 11 de Septiembre de 2009, 11:03:29 »
Entonces si mi esclavo tiene la direccion 0x5D (0b1011101), y quiero escribir tengo q hacer algo asi:
Código: [Seleccionar]
i2c_start();      //condicion de start
i2c_write(0b10111010);   //direccion 0x5D modo escritura
i2c_write(0x13);     //registro de configuracion
ack=i2c_write(0b00010101);//resetea, modo2 (escaneo contínuo), habilita escaneo electrodos
i2c_stop();

Porq en ese caso el esclavo no responde con el ack. Solo lo hace cuando en el primer write pongo i2c_write(0x5D); :?

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: duda con funciones de i2c en CCS
« Respuesta #3 en: 11 de Septiembre de 2009, 11:17:29 »
Mirá esta es la librería para escribir/leer una memoria serial:

Código: C
  1. i2c_start();
  2.    i2c_write(0xa0);
  3.    i2c_write(address>>8);
  4.    i2c_write(address);
  5.    i2c_start();
  6.    i2c_write(0xa1);
  7.    data=i2c_read(0);
  8.    i2c_stop();

Y si write te devuelve un 1 es un nack.
No contesto mensajes privados, las consultas en el foro

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: duda con funciones de i2c en CCS
« Respuesta #4 en: 11 de Septiembre de 2009, 12:02:48 »
Hmm, a ver si entiendo. La direccion de la memoria serial es 0x50 (1010000), entonces primero mandamos un 0xA (010100000) diciendo q vamos a escribir, luego enviamos la parte alta y baja de la direccion de memoria. Volvemos a enviar la direccion, pero esta vez con un 1 al final para indicar lectura, leemos el dato del esclavo y terminamos. Estoy en lo cierto?

Por lo tanto en mi caso, si la direccion es 0x5D, tengo q enviar 0xBA para escribir, y 0xBB para leer. Y el ack tiene q ser igual a 0 para indicar q la operacion fue valida. Es asi?

Gracias por tu aclaracion suky!!
« Última modificación: 11 de Septiembre de 2009, 12:17:40 por gera »

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: duda con funciones de i2c en CCS
« Respuesta #5 en: 11 de Septiembre de 2009, 12:23:30 »
Exactamente, debería ser 0xBA para escribir y 0xBB para leer.
No contesto mensajes privados, las consultas en el foro

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: duda con funciones de i2c en CCS
« Respuesta #6 en: 11 de Septiembre de 2009, 13:30:11 »
Muchas gracias suky!!! :-/ :-/
Ahi logre hacerlo andar. Todavia tiene problemas, pero ese es otro tema jeje.
adios!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: duda con funciones de i2c en CCS
« Respuesta #7 en: 12 de Septiembre de 2009, 15:45:34 »
y donde se recibe o lee el ACK o NACK?
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: duda con funciones de i2c en CCS
« Respuesta #8 en: 12 de Septiembre de 2009, 15:49:57 »
i2c_write devuelve la condición de ack.


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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: duda con funciones de i2c en CCS
« Respuesta #9 en: 12 de Septiembre de 2009, 15:56:51 »
digamos que me conecto a una memoria, esta devuelve un ack? en que parte explícitamente del código que dejaste esta eso?
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: duda con funciones de i2c en CCS
« Respuesta #10 en: 12 de Septiembre de 2009, 16:13:03 »
No, en la librería de la memoria externa no hace uso del ack, osea no testea si se recibe o no el ack cuando escribe la dirección. Si lo hace cuando envío un byte (o varios, escritura en página) y espera a que la memoria haga el proceso de guardado interno:

Código: C
  1. while(status==1)
  2.    {
  3.    i2c_start();
  4.    status=i2c_write(0xa0);
  5.    }
  6.    i2c_stop();

« Última modificación: 12 de Septiembre de 2009, 16:17:55 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: duda con funciones de i2c en CCS
« Respuesta #11 en: 13 de Septiembre de 2009, 11:29:37 »
aaaah ok, entonces el write_i2c es una función que devuelve un valor

En este caso deuveleve un 0 =ACK y un 1=NACK

Esa parte no me la sabía, pasa que siempre vi al i2c en alto nivel, no veía los detalles, ahora lo entiendo mejor. Entonces si quiero preguntar por todos los ACK's debo hacer algo parecido, no?

Gracias, por la respuesta, saludos
.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: duda con funciones de i2c en CCS
« Respuesta #12 en: 13 de Septiembre de 2009, 18:09:24 »
Claro, lo q hago yo es ir guardandolos en un arreglo, en caso de haber un nack, se donde se produjo. Otra forma es repetir una operacion mientras haya nack, o ir haciendo un AND entre los ack.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: duda con funciones de i2c en CCS
« Respuesta #13 en: 13 de Septiembre de 2009, 18:28:22 »
ok, muchas gracias por contestar, que bueno es darse cuenta como trabaja el I2C a fondo :mrgreen:

saludos
.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: duda con funciones de i2c en CCS
« Respuesta #14 en: 13 de Septiembre de 2009, 18:45:29 »
Yo habia estudiado el bus i2c en circuitos digitales.. pero no me terminaba de cerrar hasta ahora q le puse mano encima jaja.

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein


 

anything