Autor Tema: detectar oponente SUMO  (Leído 7437 veces)

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

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
detectar oponente SUMO
« en: 03 de Diciembre de 2008, 14:27:27 »
saludos; esty realizando un robot de SUMO; y utilizo SRF08 para detectar al oponente; con el siguiente codigo
y no consigo hacerlo funcionar ... he leido este foro de arriba a abajo y no encuentro solucion; x favor ayudenme.
_____________________________________________
#include <16f876.h>
#fuses XT, PUT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use fast_IO(B)
#use fast_IO(C)
#use i2c(Master,sda=PIN_B4,scl=PIN_B3)

void main()
{
   char distancia_L, distancia_H, luz;

   set_tris_B(0x00);
   set_tris_C(0x00);

   output_high(pin_B0);      //asi veo que el pic funciona
   do
   {
      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  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_start();
      i2c_write(0xE1);                                                           // Dirección del SRF08 en lectura.
      luz = i2c_read(1);                                                         // Lee la luminosidad.

      delay_ms(100);
      distancia_H = i2c_read(1);                                                 // Lee el byte alto de la distancia.

      delay_ms(100);
      distancia_L = i2c_read(0);                                                 // Lee el byte bajo de la distancia.
      i2c_stop();

      output_C(luz);

   }while ( distancia_L);   //AKI VEO QUE HAY ALGO DELANTE Y AVANZO CON EL ROBOT.
}

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #1 en: 03 de Diciembre de 2008, 14:29:13 »
este codigo lo he repasado MIL veces y no consigo leer nada del sensor.

ayudenme con alguna idea para solucionarlo pls.

GRACIAS DE ANTEMANO.

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #2 en: 03 de Diciembre de 2008, 15:00:06 »
añado:

siempre leo FF; sea luz o byte alto o bajo de distancia...

ayuda por favor

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: detectar oponente SUMO
« Respuesta #3 en: 03 de Diciembre de 2008, 16:05:30 »
Hola.

Si es por I2C, de pronto te sirva este LINK.

Saludos
El papel lo aguanta todo

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #4 en: 04 de Diciembre de 2008, 12:21:21 »
gracias MLO; le exare un vistazo ahorita mismo.

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #5 en: 04 de Diciembre de 2008, 13:05:54 »
el LINK de arriba que contiene unos codigos para el SRF02 sirven igual para el SRF08 ???
gracias MLO

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: detectar oponente SUMO
« Respuesta #6 en: 04 de Diciembre de 2008, 13:23:24 »
Hola.

El modo de comunicacion es el mismo: I2C. Habria que revisar los datasheets de los dos sensores, me imagino que deben o pueden tener valores diferentes los comando para acceder a las variables, pero el proceso es exactamente el mismo.

Saludos
El papel lo aguanta todo

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #7 en: 04 de Diciembre de 2008, 13:56:42 »
que es lo que falla en este codigo ??? no lo hago funcionar MLO ¡¡¡

gracias:

_________________________________________________________

#include <16f876.h>
#fuses XT, PUT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use fast_IO(B)
#use fast_IO(C)
#use i2c(Master,sda=PIN_B4,scl=PIN_B3)

void main()
{
   char distancia_L, distancia_H;

   set_tris_B(0x00);
   set_tris_C(0x00);
   output_float(PIN_b3);
   output_float(PIN_b4);

   do
   {
      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(80);                                                              // 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(0x02);                                                           // Apunta a la ubicación 0x01 que es a partir donde se
      i2c_stop();
      i2c_start();
      i2c_write(0xE0|0x01);                                                      // Dirección del SRF08 en lectura.
      distancia_H = i2c_read(0);                                                 // Lee el byte alto de la distancia.
      distancia_L = i2c_read(1);                                                 // Lee el byte bajo de la distancia.
      i2c_stop();

      delay_ms(80);

      output_C(distancia_L);

   }while (true);
}

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #8 en: 04 de Diciembre de 2008, 13:58:45 »
b3 y b4 para el BUS i2c; y la puerta C, son unos LEDS que muestra el valor en binario de la parte baja de los dos bytes de la distancia.

pido humildemente su ayuda MLO__ ¡¡
muchas gracias

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: detectar oponente SUMO
« Respuesta #9 en: 04 de Diciembre de 2008, 14:05:28 »
Hola.

Coloca en la configuracion del I2C:
Código: [Seleccionar]
#use i2c (master,scl=PIN_b3,sda=PIN_b4,slow)
Quita el set_tris_B(0x00);

Recuerda que debe haber unas resistencias de pull up en las lineas de SDA y SCL, de unos 1.7k.

Las librerias que te pase deberian funcionar tambien para el SRF08, ya que tienen los mismos valores para los comandos.

Saludos
El papel lo aguanta todo

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #10 en: 04 de Diciembre de 2008, 17:28:22 »
 :(;

#include <16f876.h>
#fuses XT, PUT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#use fast_IO(B)
#use fast_IO(C)
#use i2c (master,scl=PIN_b3,sda=PIN_b4,slow)

void main()
{
   char distancia_L, distancia_H;

   set_tris_C(0x00);
   do
   {
      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(80);                                                              // 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();
      i2c_start();
      i2c_write(0xE0|0x01);                                                      // Dirección del SRF08 en lectura.
      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();

      delay_ms(80);

      output_C(distancia_L);

   }while (true);
}
___________________________________

he hecho los cambios que me has comentado; pero me sale por la puerta C (FF);
esty desesperado MLO__ :S
_____
unicamente necesito una rutina que al llamarla calcule si hay objetos cerca o no; (si no hay dara todo 0x00, si hay algo otros valores);
asi el robot sabrá si tiene al enemigo en el lado del sensor.

pero no consigo hacerlo funcionar; siempre lee 0xff..
q puede fallar ??

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #11 en: 04 de Diciembre de 2008, 18:00:28 »
parece que ha habido un cambio; ahora me lee 0x27,o sea me saca (00100111) por los leds;

pero no envia otra cosa...

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: detectar oponente SUMO
« Respuesta #12 en: 04 de Diciembre de 2008, 19:18:45 »
Hola.

Mira bien si es el registro que debes acceder, creo que el SRF08 tiene tambien una LDR para medir la luminosidad.

La secuencia creo que esta bien, de hecho se asemeja mucho a la que yo uso con el SRF02.

Saludos
El papel lo aguanta todo

Desconectado Nabil

  • PIC10
  • *
  • Mensajes: 20
Re: detectar oponente SUMO
« Respuesta #13 en: 05 de Diciembre de 2008, 14:23:49 »
saludos MLO__

pero el codigo esta bien ??, me refiero los pasos de start, write, read, estan en el orden en el que deben estar, con los delays en dnd deben estar ??

no esty del todo seguro de que sea esa la secuencia...

Muchas gracias de verdad MLO__.

un saludo desde españa.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: detectar oponente SUMO
« Respuesta #14 en: 05 de Diciembre de 2008, 14:56:36 »
La secuencia tuya hace exactamente lo mismo que la mia ....

Revisa si es la direccion 0x01 la que debes leer o no. En el caso del SRF02, esta en la direccion 0x02. Puedes estar leyendo un valor que no es, revisa eso en la datasheet del SRF08, ahi estan las direcciones de los registros y que guarda en cada una de ellas.

Saludos
El papel lo aguanta todo


 

anything