Autor Tema: Sharp GP2D02, no funciona  (Leído 3328 veces)

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

Desconectado mldavid

  • PIC10
  • *
  • Mensajes: 18
Sharp GP2D02, no funciona
« en: 04 de Febrero de 2006, 17:54:00 »
Hola a todos, estoy montando un robot y le he montado un Sharp GP2D02, que te envia la distancia de forma serie por una pata, adjunto el codigo que segun el datasheet tendria que funcionar y no lo hace, me devuelve solo unos.

Adjunto el codigo solo de la parte del sensor.

Código: [Seleccionar]
[BR][BR]#include <16f876A.h>[BR]#fuses HS,NOWDT,NOPROTECT,PUT[BR]#use delay (clock=20000000)[BR]#use fast_io(b)[BR]#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)[BR]#build(reset=0x1, interrupt=0x5)  // PARA NO BORRAR EL BOOTLOADER[BR]#ORG 0x0F00,0x0FFF {}             // PARA NO BORRAR EL BOOTLOADER[BR][BR][BR]#DEFINE SEN_IN   PIN_A4   //AMARILLO Vout del sensor[BR]#DEFINE SEN_OUT  PIN_B3   //VERDE Vin del sensor[BR][BR]void main(void)[BR]{[BR][BR]int8 i,dist=0;[BR][BR]   disable_interrupts(GLOBAL);[BR][BR]   output_bit(SEN_OUT,1);[BR]   delay_ms(1000);[BR][BR]   output_bit(SEN_OUT,0);     // Comienza la medicion[BR]   delay_ms(70);              // Retardo de 70 ms[BR]   while(input(SEN_IN)==0);   // Esperamos que nos responda[BR][BR]   for(i=8;i>0;i--){          //Captura de bits que llegan de mayor a menor peso[BR][BR]      output_bit(SEN_OUT,1);[BR]      delay_ms(1);[BR]      output_bit(SEN_OUT,0);    //Genero el flanco[BR]      delay_ms(1);[BR]      if(input(SEN_IN)==1)[BR]         bit_set(dist,i-1);[BR][BR]   }[BR][BR]   printf("Dis: %u
",dist);  //Me muestra por el ordenador la distacia[BR][BR][BR]}[BR][BR][BR]



A ver si alguien ya lo ha montado y le funciona mejor que a mi. ;)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Sharp GP2D02, no funciona
« Respuesta #1 en: 05 de Febrero de 2006, 00:38:00 »
He estado revisando el datasheet de ese sensor, y he visto un par de cosas que difieren de tu código:
1- el tiempo que tarda en enviarte cada bit es de 0.2ms, debiendo estar el clock 0.1ms a nivel alto, y 0.1ms a nivel bajo. En tu programa los mantienes 1ms
2- la lectura del bit la deberías hacer cuando subes el pulso, puesto que ese es el punto medio y te garantizas que te entregará un bit estable.

Pongo aquí un par de modificaciones a tu soft y ya nos contarás si funciona:

Codigo:
#include <16f876A.h>
#fuses HS,NOWDT,NOPROTECT,PUT
#use delay (clock=20000000)
#use fast_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#build(reset=0x1, interrupt=0x5) // PARA NO BORRAR EL BOOTLOADER
#ORG 0x0F00,0x0FFF {} // PARA NO BORRAR EL BOOTLOADER


#DEFINE SEN_IN PIN_A4 //AMARILLO Vout del sensor
#DEFINE SEN_OUT PIN_B3 //VERDE Vin del sensor

void main(void)
{

  int8 i,dist=0;

  disable_interrupts(GLOBAL);

  output_bit(SEN_OUT,1);
  delay_ms(1000);

  output_bit(SEN_OUT,0); // Comienza la medicion
  delay_ms(70); // Retardo de 70 ms
  while(input(SEN_IN)==0); // Esperamos que nos responda
  output_bit(SEN_OUT,1);
  delay_us(100);
  for(i=8;i>0;i--){ //Captura de bits que llegan de mayor a menor peso
    output_bit(SEN_OUT,0);
    delay_us(100);
    if(input(SEN_IN)==1)
      bit_set(dist,i-1);
    output_bit(SEN_OUT,1);
    delay_us(100);
  }
  delay_us(1400);
  output_bit(SEN_OUT,0);

  printf("Dis: %u
",dist); //Me muestra por el ordenador la distacia

}


Desconectado mldavid

  • PIC10
  • *
  • Mensajes: 18
RE: Sharp GP2D02, no funciona
« Respuesta #2 en: 05 de Febrero de 2006, 03:17:00 »
Gracias nocturno66, pero el codigo continua devolviendome todo unos, voy a ver si consigo otro sensor, es posible que este estropeado.

Desconectado mldavid

  • PIC10
  • *
  • Mensajes: 18
RE: Sharp GP2D02, no funciona
« Respuesta #3 en: 05 de Febrero de 2006, 12:27:00 »

Bueno, por fin, esto ya funciona, me dio por comprobar la salida de las patas con el osciloscopio y para mi sorpresa no salia nada, por lo que he cambiado las patas a C0 y C1 y ya esta, gracias nocturno66 por tu tiempo, tu codigo funciona bien.

Por cierto como puedo utilizar la pata A4, siempre da problemas por se colector abierto.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Sharp GP2D02, no funciona
« Respuesta #4 en: 05 de Febrero de 2006, 13:47:00 »
Ponle una resistencia de Pullup desde la salida del pic a Vdd. Con una de 10K irá bien.

¿Qué tal funciona el sensor?, ¿es preciso?. Estaba pensando en comprar uno: ¿dónde lo has comprado y cuánto te ha costado?

Desconectado mldavid

  • PIC10
  • *
  • Mensajes: 18
RE: Sharp GP2D02, no funciona
« Respuesta #5 en: 05 de Febrero de 2006, 14:10:00 »

Lo he comprado en http://www.superrobotica.com/Sensores.htm, son de aqui de España y cuesta 26€+IVA+Portes.

Respecto a la precision, esta bien para robots, pero la medida depende mucho del objeto contra el que choca (con un espejo se vuelve loco), asi como de la luz que haya en ese momento.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: Sharp GP2D02, no funciona
« Respuesta #6 en: 05 de Febrero de 2006, 15:22:00 »
M. Nocturno, los de Superrobótica ¿no son los de Mairena del Aljarafe? ¿a 1 Km de tu casa?

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Sharp GP2D02, no funciona
« Respuesta #7 en: 05 de Febrero de 2006, 16:44:00 »
Si, estan aquí al lado, en Gelves.


 

anything