Autor Tema: Necesito ayuda con bus I2c  (Leído 2906 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
Necesito ayuda con bus I2c
« en: 23 de Abril de 2005, 07:53:00 »
Alguien me podria decir que tengo que hacer para acceder a los registros de un dispositivo I2c?

Primero hago un i2c_start(), luego un i2c_write con la direccion del dispositivo, y luego los i2c_read() para leer el dato, pero como hago para leer el dato de un registro del dispositivo I2c?

Estoy tratando de usar el SRF08 (sensor de ultrasonidos por I2c)...

Desconectado Meybel

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 60
RE: Necesito ayuda con bus I2c
« Respuesta #1 en: 23 de Abril de 2005, 08:33:00 »
Acabo de terminar este proyecto que te puede servir:

Codigo:
// Programa para un medidor de distancias hasta un objeto utilizando sensor por
//  ultrasonido SRF08 para bus I2C.
//
/////////////////////////////////////////////////////////////////////////////////////////

#include <16F84A.h>      // Librería predefinida para CCS.
#fuses XT, PUT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use fast_IO(A)
#use fast_IO(B)
#use i2c(Master,sda=PIN_A4,scl=PIN_A3)
#include <lcd_4bit.c>

int16 dist_alarma = 10;

void main()
{
   int16 distancia;
   char distancia_L, distancia_H, luz;
   
   LCD_init ();
   set_tris_A(0b00000000);
   output_float(PIN_A3);
   output_float(PIN_A4);
   while (1)
   {
      i2c_start();   // Bit de Start.
      i2c_write(0xE0);   // Dirección del SRF08 en escritura.
      i2c_write(0x00);// El registro de comando está en la ubicación 0.
      i2c_write(0x51);// 0x51 es el comando de cálculo de distancia en cm.
      i2c_stop();   // Bit de Stop.
      delay_ms(100);   // Espera más de 65 ms hasta la lectura.
      i2c_start();   // Bit de Start.
      i2c_write(0xE0);   // Dirección del SRF08 en escritura.
      i2c_write(0x01);// Apunta a la ubicación 0x01 que es a partir donde se
      i2c_stop();// encuentran los registros para leer luz y distancia.
      i2c_start();   
      i2c_write(0xE1);   // Dirección del SRF08 en lectura.
      luz = i2c_read(1);   // Lee la luminosidad.
      distancia_H = i2c_read(1);// Lee el byte alto de la distancia.
      distancia_L = i2c_read(0);// Lee el byte bajo de la distancia.
      i2c_stop();
      distancia = make16(distancia_H,distancia_L);// Valor de la distancia.
      printf(LCD_putc, "fLuz: %u Lux
Dist.: %lu cm", luz, distancia);         

   }
}



Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: Necesito ayuda con bus I2c
« Respuesta #2 en: 25 de Abril de 2005, 02:58:00 »
Gracias Meybel, ese ejemplo era justo lo que necesitaba ver, lo he probrado y me funciona perfectamente para medir distancias, pero al medir la luz, me muestra siempre 6, haya luz intensa o se encuentre completamente a oscuras....

Otra cosa, que me he dado cuenta, es que no se porque pero cuando mi bot se encuentra en el suelo y le enciendo, la primera distancia que mide es 0 cm., aunke se encuentre a 300 cm. de un objeto, luego las sucesivas mediciones las hace perfectas. Sin embargo si levantamos ligeramente del suelo al bot, la 1ª medida la hace perfecta.

Tambien, keria preguntar, si es necesario los i2c_stop() seguidos de i2c_start() tras cada trama de datos que enviamos al I2c.

Y por ultimo, me podrias explicar como funcionan los sucesivos registros de eco? ¿Que utilidad tienen? He visto que hay registro de primer eco, de segundo eco, etc. Y tambien preguntar si has llegado a usar el modo ANN, y sabes como actua mas o menos.


Un saludo, y gracias de antemano Giño

Desconectado Meybel

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 60
RE: Necesito ayuda con bus I2c
« Respuesta #3 en: 26 de Abril de 2005, 16:06:00 »
Tornar, ignoro porque no mide bien la luz tu circuito. Sólo te puede decir que mi circuito mide la luz perfectamente. Lo único que se me ocurre es que el sensor esté defectuoso. Lo correcto sería probarlo con otro, pero claro, al precio que tienen. Te insisto, funciona perfemente en el circuito que tengo montado.

Meybel.

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: Necesito ayuda con bus I2c
« Respuesta #4 en: 27 de Abril de 2005, 02:54:00 »
Gracias Meybel, probare esta semana tu programa tal cual, ya que solo tome trozos de codigo que inserte en mi programa, a ver si es que estoy haciendo algo mal, y si veo que sigue igual, kizas el sensor de luz este defectuoso.

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: Necesito ayuda con bus I2c
« Respuesta #5 en: 28 de Abril de 2005, 03:17:00 »
Ya me funciona correctamente el sensor de luz tambien, el problema era que tras enviar el comando de medir distancias, hacia un i2c_stop(), y en vez de usar aki el delay_ms, lo usaba despues del siguiente i2c_start().

Desconectado Meybel

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 60
RE: Necesito ayuda con bus I2c
« Respuesta #6 en: 28 de Abril de 2005, 04:51:00 »
Enhorabuena, me alegra que mi programa te haya sido de utilidad.


 

anything