TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: exque en 01 de Abril de 2008, 05:03:34

Título: Programar SRF10 con cable USB
Publicado por: exque en 01 de Abril de 2008, 05:03:34
Hola a todos! Estoy haciendo un proyecto sobre un UAV, y ahora estoy poniéndole un sensor SRF10 para que mida la altura a la que está volando.
Mi duda es que he encontrado ejemplos del lenguaje en C sobre el srf10 pero no me van bien. El sensro es el SRF!0 y está conectado al PC mediante el cable USBI2C (convierte el I2C a USB). Me gustaría si alguien podría facilitarme el código para poder medir con ese sensor. Gracias
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 01 de Abril de 2008, 14:55:52
Hola.

Yo poseo codigo pero para el manejo del SRF02, no se si te sirva. Comentame para postearlo. listo?

El SRF02 tambien se comunica por I2C (o por serial) y posee un solo transductor (emisor-receptor), es mas pequeno y tambien mide a 6 metros. No se si en tu aplicacion sea util o no.
Título: Re: Programar SRF10 con cable USB
Publicado por: exque en 01 de Abril de 2008, 15:22:22
Hola, me iría defábula ya que en mi proyecto tambén he comprado el SRF02 y lo tendré mañana. Muchas gracias, haber si también puedo conseguir el del srf10 si lo tiene alguien. También lo usas por USB? gracias;)
Si alguien tiene el srf10 que me lo comente pro aquí si puede ;)
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 01 de Abril de 2008, 18:19:37
Mi proyecto es simple, yo configuro y manejo el SRF02 con un PIC6F873A a travez del i2c y despliego la info a traves de una LCD, controlo la adquisicion del dato  por medio de una interrupcion CCPx y envio el dato por el serial cada vez que sea diferente, el dato por la LCD siempre se esta actualizando. Llegue a conectar 4 modulos (no habia $$$$ para mas!!!! :-)). Pero se me ocurre que se podria enviar la informacion por un TLP u otro modulo de RF por serial y recibirla de igual manera para luego pasarla a USB (aqui en el foro hay verdaderos monstruos de los que he aprendido mucho sobre USB).

Sin mas posteo el codigo (ojala lo haga bien, si sale mal......mil disculpas soy como tarugo con esto del post!!!!!) para el manejo de un SRF02 midiendo en cms:

main:

Código: [Seleccionar]

#include <16F873A.H>
#fuses PUT,BROWNOUT,NOWDT,NOLVP,XT,PROTECT,WRT_50%,CPD //Fusibles de programacion
#use delay(clock=4M)                                  //Frecuencia de trabajo
#use i2c (master,scl=PIN_C3,sda=PIN_C4,slow)              //Habilita funciones I2C por hardware
#use fast_io (C) //Configuracion de los puertos
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)          //Habilita las funciones RS232, velocidad a 9600 baudios

#define Tx printf
#define Rx getc
#define Tx_char putc
#define lcd_xy lcd_gotoxy
#define lcd_char lcd_putc

int I2C_Buffer [16];            //buffer de recepción de un dispositivo I2C
int1 data=0;

#include <I2C_16-18FXXX.H>            //Incluye rutinas I2C básicas de propósito general           
#include <SRF02_multidir.H>          //Incluye rutinas de control del sónar SRF02 multidireccion
#include "lcdb.c" //Incluye rutinas para el manejo de la LCD en el puerto B

#int_CCP2 //Interrupcion  para el control de la medida
void go_done_isr(void)
{
if(data)
data = false;
else
data = true;
}

void main()

    int16   resultado1,resultado_old=0;

    SETUP_ADC_PORTS(NO_ANALOGS);
SETUP_CCP2(CCP_CAPTURE_FE);
enable_interrupts(INT_CCP2);
enable_interrupts(GLOBAL);
    lcd_init();
   
    lcd_char("\fSRF02 - M.L.O"); 
    putc(0x0c);
    Tx("SRF02 - M.L.O\r\n");
    delay_ms(1000);

    lcd_char("\f");
    while(true)
    {
if(data)
{
SRF02_cm(SRF02_1);//SRF02_1 : 0xE0
resultado1=make16(I2C_Buffer[0],I2C_Buffer[1]);
lcd_xy(1,1);
Tx(lcd_char,"dx:%lu cm             ",resultado1);
if(resultado1 != resultado_old)
{
Tx("dx: %lu cm \r\n", resultado1);
resultado_old = resultado1;
}
}
else
{
lcd_xy(1,1);
lcd_char("ESPERANDO ACTIVACION");
}
}


Y aqui van las librerias:

I2C_16-18FXXX.H:
Código: [Seleccionar]

VOID Leer_I2C(Dir_I2C,I2C_Dir_Ini,I2C_N_Bytes)
{
   int   indice=0;
   int   contador;
   i2c_start();                //Secuencia de inicio
   i2c_write(Dir_I2C);            //Dirección I2C del dispositivo modo escritura
   i2c_write(I2C_Dir_Ini);          //Envia dirección interna del dispositivo
   i2c_stop();                  //Envía secuencia de stop
   i2c_start();                //Envía secuencia de inicio
   i2c_write(Dir_I2C|0b00000001);    //Envía dirección I2C del dispositivo en modo lectura

   For(contador=I2C_N_Bytes-1;contador>=1;contador--)    //Ultimo byte a leer ??
      {
      I2C_Buffer[indice]=i2c_read();    //No, leer el byte, envíar ACK y almacenar en el buffer
      indice++;                  //Siguiente posición en el buffer
      }
   I2C_Buffer[indice]=i2c_read(0);      //Si, lee último byte, envía NACK y almacena en el buffer
   i2c_stop();                      //Secuencia de stop   
}


VOID Escr_I2C(Dir_I2C,I2C_Dir_Ini,I2C_N_Bytes)
{
   int   indice=0;
   int   contador;
   i2c_start();                //Secuencia de inicio
   i2c_write(Dir_I2C);            //Dirección I2C del dispositivo modo escritura
   i2c_write(I2C_Dir_Ini);          //Envia dirección interna del dispositivo

   For(contador=I2C_N_Bytes;contador>=1;contador--)    //Ultimo byte a escribir ??
      {
      i2c_write(I2C_Buffer[indice]); //No, leer byte del buffer y enciarlo al dispositivo I2C
      indice++;                  //Siguiente posición del buffer
      }
   i2c_stop();                    //Secuencia de stop
}


SRF02_multidir.H:
Código: [Seleccionar]

#define   SRF02_1   0xE0            //Dirección I2C del SRF02_1
#define   SRF02_2 0XE2 //Direccion I2C del SRF02_2

/*************************************************************************************************
SRF02_Ejec():El SRF02 ejecuta un determinado comando.
dir es la direccion correspondiente del SRF02*/

void SRF02_Ejec(int SRF02_Comando,int dir)
{
   i2c_start();               //Secuencia de inicio
   i2c_write(dir);            //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(SRF02_Comando);      //Enviar comando a ejecutar
   i2c_stop();                  //Secuencia de stop
   delay_ms(80);               //Temporización de 80mS necesaria para realizar la ejecución

/*Secuencia para la lectura del resultado medido por el SRF02 */

   Leer_I2C(dir,0x2,0x02);      //Realiza la medida del resultado
}

/**********************************************************************************************
SRF02_in(): Realiza una medida en pulgadas.El resultado se almacen en I2C_Buffer */

void SRF02_in(int dir)
{
   SRF02_Ejec(0x50,dir);            //Ejecuta el comando
}

/**********************************************************************************************
SRF02_cm(): Realiza una medida en centímetros.El resultado se almacen en I2C_Buffer */

void SRF02_cm(int dir)
{
   SRF02_Ejec(0x51,dir);            //Ejecuta el comando
}

/**********************************************************************************************
SRF02_us(): Realiza una medida en microsegundos.El resultado se almacen en I2C_Buffer */

void SRF02_us(int dir)
{
   SRF02_Ejec(0x52,dir);            //Ejecuta el comando
}


/***********************************************************************************************************
SRF02_Reset(): Fuerza un reinicio del SRF02, realizando un ciclo de autoajuste. Es similar al Power Up */

void SRF02_Reset(int dir)
{
   i2c_start();               //Secuencia de inicio
   i2c_write(dir);            //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(0x60);            //Enviar comando para la transmisión de una ráfaga
   i2c_stop();                  //Secuencia de stop
   delay_ms(80);               //Temporización de 80mS necesaria para realizar la ejecución
}

/***********************************************************************************************************
SRF02_I2C_Dir(): Cambia la dirección I2C del SRF02. SRF02_New_Dir debe expresar la nueva dirección I2C */

void SRF02_I2C_Dir(int SRF02_New_Dir, int SRF02_Last_Dir)

{
   i2c_start();               //Secuencia de inicio
   i2c_write(SRF02_Last_Dir);  //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(0xA0);            //1ª secuencia para el cambio de dirección
   i2c_stop();                  //Secuencia de stop

   i2c_start();               //Secuencia de inicio
   i2c_write(SRF02_Last_Dir); //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(0xAA);            //2ª secuencia para el cambio de dirección
   i2c_stop();                  //Secuencia de stop
   
   i2c_start();               //Secuencia de inicio
   i2c_write(SRF02_Last_Dir); //Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(0xA5);            //3ª secuencia para el cambio de dirección
   i2c_stop();                  //Secuencia de stop

   i2c_start();               //Secuencia de inicio
   i2c_write(SRF02_Last_Dir);//Dirección I2C del SRF02 modo escritura
   i2c_write(0x00);            //Dirección interna 0x00 (registro de comandos)
   i2c_write(SRF02_New_Dir);      //Nueva dirección I2C
   i2c_stop();                  //Secuencia de stop
}


Yo uso el compilador CCS v4.057 (fue justamente en este foro donde me inicie..........gracias).

La libreria de la LCD es la estandar del CCS, solo que le cambie los pines para poder trabajar con mi tarjeta entrenadora (tiene la configuracion del C18 de Microchip), asi que no creo que halla problema con esa libreria.

Espero te sirva.......

Chao
Título: Re: Programar SRF10 con cable USB
Publicado por: exque en 02 de Abril de 2008, 05:10:18
Muchas gracias MLO! está de lujo. Lo malo que no uso el Proteus porque no estoy familiarizado con él. Lo que me gustaría es que me salieran los datos que va recogiendo el sensor por pantalla (tipo printf) a ver si me puedes ayudar. merci! o sino como se hace el circuito del srf02 con el proteus para poderlo simular
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 02 de Abril de 2008, 10:54:02
Ok!

El programa tambien envia el dato por el serial (RS232), tipo printf, solo que envia el dato cada vez que es diferente, la variable de distancia esta en resultado1, asi que la puedes trabajar directamente con ese nombre para calcular lo que tu quieras. El SRF02 no lo he podido simular en proteus, pero coloco el i2c debugger y miro si envia los datos correspondientes, obviamente el dato mostrado de distancia es el maximo a 16 bits, es decir 0xFF 0xFF lo que equivale a 65535cm (aun no he podido hacer que el i2c envie datos como yo quiero para simular las distancias). Si quieres que el dato por el serial se actualice siempre, solo hay que comentar el condicional if(resultado != resultado_old) y ya, el serial se inundara de datos!!!!!! :mrgreen:

El esquematico en proteus es el siguiente:
(http://img512.imageshack.us/img512/4573/srf02tk8.th.jpg) (http://img512.imageshack.us/my.php?image=srf02tk8.jpg)

En la imagen, el modulo debugger del i2c corresponde al SRF02, las resistencias de pull-up son de 2k7 y el terminal virtual muestra lo que saldria por el puerto COM de un PC.

Si lo vas a conectar a un PC debes agregar el MAX232 entre el pic y el PC, ya que el uC trabaja con logica TTL y hay que adecuar el tipo de senal. Una vez conectado, abres el hyperterminal de Windows y ya a ver distancias!!!!.



Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 02 de Abril de 2008, 11:04:49
Mil disculpas por la imagen!!!! ni yo veo bien!!!
Voy a enviarla mas grande ok? adjunto tambien el archivo de simulacion (uso el Proteus v6.7 SP3)



Título: Re: Programar SRF10 con cable USB
Publicado por: exque en 03 de Abril de 2008, 20:59:54
gracias! mañana mismo lo pruebo allí donde estoy haciendo el proyectoy te comento! gracias de nuevo portu aportación!
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 04 de Abril de 2008, 11:36:37
Ok :mrgreen:

quedo en espera de tus comentarios.....muchos exitos :-/
Título: Re: Programar SRF10 con cable USB
Publicado por: exque en 07 de Abril de 2008, 07:22:36
Pues en el Proteus salen muy bien lso resultados! gracias! ahora a ver si puedo encontrar el código en C o C++ para que algún compilador me lo compile y pueda ejecutarlo y que el sensor mida las distancias y me vayan saliendo por pantalla por ejemplo con printf. Merci!
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 07 de Abril de 2008, 11:01:17
Hola.

Hay algo que no entiendo bien. Tu conectas el sensor directamente al PC? No estas utilizando un PIC para el sensor? Porque si necesitas el dato de altura pordrias colocar un transmisor inalambrico y recibir la senal de distancia y procesarla en el PC. Segun entiendo, el sensor esta en tierra conectado al PC por medio del USB cierto?.

Título: Re: Programar SRF10 con cable USB
Publicado por: exque en 08 de Abril de 2008, 04:58:04
Tengo el sensor SRF10 o el SRF02 conectado al USBI2C, el cual está conectado por cable USB al PC (puerto COM2). Los pillé de www.superrobotica.com
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 08 de Abril de 2008, 10:32:52
Hola.

Te envio el ejecutable para leer el dato desde el computador, es una aplicacion que permite configurar el SRF02 o SRF10 desde el PC con la tarjeta USBI2C, espero te sirva.

chao.
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 08 de Agosto de 2008, 19:00:26
Hola harold

El esquematico en proteus es el siguiente:

(http://img176.imageshack.us/img176/7214/srf02gt6.jpg)

El SRF02 se puede manejar por serial o por i2c, yo lo manejo por i2c asi que hay que dejar el pin4 al aire, las resistencias son de 2k7.

Saludos
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 19 de Agosto de 2008, 14:34:56
como hago para ke en las salidas de la distancia me genere un tono el cual valla aumentando o disminuyendo deacuerdo a la distancia si es muy cerca es mas fuerte y si es mas lejos es mas devil el tono muchas gracias por tu ayuda
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 19 de Agosto de 2008, 14:47:29
ESTOY SIMULANDO EL PROGRAMA Y ME SALE EN EL MODULO LCD ESPERANDO ACTIVACION KE LE DIGITO EN EL VIRTUAL TERMINAL PARA KE COMIENZE A LEEER LA DISTANCIA AMIGO MUCHAS GRACIAS POR TU AYUDA
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 19 de Agosto de 2008, 19:13:13
Hola.

Debes cambiar de estado a los LOGICSTATE que estan conectados en RA0 o en RC1 .... a cualquiera de los dos. En la simulacion te va a salir el maximo valor  de distanica siempre, pero en hard da la medida de distancia .... esta probado el circuito  8).

Para lo del tono, puedes asignar un valor en un delay por medio de una interrupcion en funcion de la distancia... para generar una onda cuadrada de diferente frecuencia, y esa salida la conectas a un buzzer piezo.

Saludos.
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 20 de Agosto de 2008, 02:58:40
sera ke me puedes decir en que parte pongo las librerias del ccs ya lo tengo instalado pero no se bien donde poner las librerias ke tu me estas dando estoy muy interesado en este tema gracias por su ayuda
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 20 de Agosto de 2008, 03:25:39
AMIGO SERA KE ME PUEDES DECIR EN EL CCS DONDE PONGO LAS LIBRERIAS ES QUE ESTOY COMPILANDO EL PROGRAMA PERO SALE EL ERROR DE LAS LIBRERIAS COMO HAGO PARA ADJUNTARLAR EN EL CCS ESTOY INTERESADO EN ESTE CIRCUITO MAÑANA MISMO COMPRARE LOS IMPLEMENTOS PARA PROBAR EL CTO MUCHISIMAS GRACIAS AMIGO
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 20 de Agosto de 2008, 13:06:18
AMIGO YA COLOCOKE LAS DOS LIBRERIAS QUE HAS PUESTO AKI EN EL FORO PRO TENGO PROBLEMAS CON LA LIBRERIA DEL LCD SERA KE LA PUEDES PONER MUCHAS GRACIAS
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 20 de Agosto de 2008, 13:23:34
Hola.

Las librerias van en la misma carpeta donde esta el proyecto principal, con respecto a la libreria de la LCD, puedes usar la que tiene el CCS por defecto, cambiale el nombre a #include<LCD.C> y no te olvides cambiar el puerto, ya que creo que la libreria LCD.C esta para conectar la LCD al puerto D.

Saludos.
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 21 de Agosto de 2008, 03:07:15
amigo sera ke puedes poner las librerias como las tienes kiero montarlo igual que en el proteus gracias
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 21 de Agosto de 2008, 22:36:57
amigo porfavor ayudame con las librerias del ccs del lcd porfavor poseo problemas sera ke me puedes enviar las ke tu utilizaste muchas gracias
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 21 de Agosto de 2008, 22:43:23
Hola.

La libreria de la LCD es la siguiente.

Código: C
  1. #define use_portb_lcd TRUE
  2.  
  3. #define LCD_OFF                 0x08
  4. #define CURSOR_ON               0x0E
  5. #define CURSOR_OFF              0x0C
  6. #define BLINK_ON                0x0D
  7. #define BLINK_OFF               0x0C
  8. #define SHIFT_LEFT              0x1C
  9. #define SHIFT_RIGHT             0x18
  10. #define CURSOR_RIGHT    0x14
  11. #define CURSOR_LEFT             0x10
  12. #define CGRAM                   0x40
  13.  
  14.  
  15. struct lcd_pin_map {
  16.            BOOLEAN rs;
  17.            BOOLEAN rw;
  18.            BOOLEAN enable;
  19.            BOOLEAN unused;
  20.            int     data : 4;
  21.         } lcd;
  22.  
  23.  
  24. #if defined use_portb_lcd
  25.    #locate lcd = getenv("sfr:PORTB")    // This puts the entire structure over the port
  26.    #define set_tris_lcd(x) set_tris_b(x)
  27. #else
  28.    #locate lcd = getenv("sfr:PORTD")    // This puts the entire structure over the port
  29.    #define set_tris_lcd(x) set_tris_d(x)
  30. #endif
  31.  
  32.  
  33. #define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines
  34. #define lcd_line_two 0x40    // LCD RAM address for the second line
  35.  
  36.  
  37. BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
  38.                              // These bytes need to be sent to the LCD
  39.                              // to start it up.
  40.  
  41.  
  42.                              // The following are used for setting
  43.                              // the I/O port direction register.
  44.  
  45. struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
  46. struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in
  47.  
  48.  
  49.  
  50. BYTE lcd_read_byte() {
  51.       BYTE low,high;
  52.       set_tris_lcd(LCD_READ);
  53.       lcd.rw = 1;
  54.       delay_cycles(1);
  55.       lcd.enable = 1;
  56.       delay_cycles(1);
  57.       high = lcd.data;
  58.       lcd.enable = 0;
  59.       delay_cycles(1);
  60.       lcd.enable = 1;
  61.       delay_us(1);
  62.       low = lcd.data;
  63.       lcd.enable = 0;
  64.       set_tris_lcd(LCD_WRITE);
  65.       return( (high<<4) | low);
  66. }
  67.  
  68.  
  69. void lcd_send_nibble( BYTE n ) {
  70.       lcd.data = n;
  71.       delay_cycles(1);
  72.       lcd.enable = 1;
  73.       delay_us(2);
  74.       lcd.enable = 0;
  75. }
  76.  
  77.  
  78. void lcd_send_byte( BYTE address, BYTE n ) {
  79.  
  80.       lcd.rs = 0;
  81.       while ( bit_test(lcd_read_byte(),7) ) ;
  82.       lcd.rs = address;
  83.       delay_cycles(1);
  84.       lcd.rw = 0;
  85.       delay_cycles(1);
  86.       lcd.enable = 0;
  87.       lcd_send_nibble(n >> 4);
  88.       lcd_send_nibble(n & 0xf);
  89. }
  90.  
  91.  
  92. void lcd_init() {
  93.     BYTE i;
  94.     set_tris_lcd(LCD_WRITE);
  95.     lcd.rs = 0;
  96.     lcd.rw = 0;
  97.     lcd.enable = 0;
  98.     delay_ms(15);
  99.     for(i=1;i<=3;++i) {
  100.        lcd_send_nibble(3);
  101.        delay_ms(5);
  102.     }
  103.     lcd_send_nibble(2);
  104.     for(i=0;i<=3;++i)
  105.        lcd_send_byte(0,LCD_INIT_STRING[i]);
  106. }
  107.  
  108.  
  109. void lcd_gotoxy( BYTE x, BYTE y) {
  110.    BYTE address;
  111.  
  112.    if(y!=1)
  113.      address=lcd_line_two;
  114.    else
  115.      address=0;
  116.    address+=x-1;
  117.    lcd_send_byte(0,0x80|address);
  118. }
  119.  
  120. void lcd_putc( char c) {
  121.    switch (c) {
  122.      case '\f'   : lcd_send_byte(0,1);
  123.                    delay_ms(2);
  124.                                            break;
  125.      case '\n'   : lcd_gotoxy(1,2);        break;
  126.      case '\b'   : lcd_send_byte(0,0x10);  break;
  127.      default     : lcd_send_byte(1,c);     break;
  128.    }
  129. }
  130.  
  131. char lcd_getc( BYTE x, BYTE y) {
  132.    char value;
  133.  
  134.     lcd_gotoxy(x,y);
  135.     while ( bit_test(lcd_read_byte(),7) );
  136.     lcd.rs=1;
  137.     value = lcd_read_byte();
  138.     lcd.rs=0;
  139.     return(value);
  140. }
  141.  
  142. void lcd_command(byte cmd)
  143. {
  144.         lcd_send_byte(0, cmd);
  145. }

El unico cambio esta en que configuro los pines de manera diferente a la habitual para que quede mas sencillo rutear  8)

Saludos

Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 31 de Agosto de 2008, 22:04:18
CUANTO ES LO MAX  DE KILOBITES KE PUEDO CARGAR EN EL HEX AL PIC
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 01 de Septiembre de 2008, 10:22:54
Hola.

Eso depende el pic que estes utilizando, por ejemplo, para el 18F452 el tamano es de 32kB en la Flash y 1536B en la RAM. Esta infomacion esta en el datasheet del micro.

Saludos
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 10 de Septiembre de 2008, 18:13:29
amigo con que programa puedo ver lo ke hace el programa dentro del pic activando sus cosas internas y todo gracias
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 10 de Septiembre de 2008, 19:03:08
Hola.

Hay varios programas. Entre los que conozco y manejo un poco estan el Proteus ISIS y el PIC Simulator. El Proteus te permite simular todo lo del entorno como switches, sensores, leds, teclados, lcd y amplio etc, el PIC Simulator tambien, pero el entorno no es el mismo.

Saludos
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 03 de Octubre de 2008, 00:53:50
amigo ayudame con lo de la señal variada en frecuencia para la alarma porfavor muchas gracias queroa contarte ke ya tengo el sensor y estoy realizando las pruebas tal cual muchas gracias por tu ayuda
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 03 de Octubre de 2008, 01:07:22
AYUDA POR FAVOR AMIGO""""" Para lo del tono, puedes asignar un valor en un delay por medio de una interrupcion en funcion de la distancia... para generar una onda cuadrada de diferente frecuencia, y esa salida la conectas a un buzzer piezo""""" NOSE COMO EMPEZAR CON ESTO POR FAVOR AYUDAME YA ESTOY SIMULANDO Y FUNCIONA LO DE LA DIS CON EL SENSOR
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 03 de Octubre de 2008, 12:58:11
Hola.

Mira, tu adquieres en una variable la distancia, la cual esta entre 15 y 600 ese es el valor que debes usar para asignar el tono por medio de un timer, lo puedes hacer directamente o usar una regla de 3 para cuadrar ese valor con la frecuencia que quieres obtener.

La funcion de interrupcion seria algo asi:

Código: C#
  1. #int_TIMER0
  2. void frecuencia_isr(void)
  3. {
  4.  ++ints_timer0;
  5.  if(ints_timer0>=value)
  6.  {
  7.   ints_timer0=0;
  8.   output_toggle(salida);// salida es el pin que defines para la salida del buzzer
  9.  }
  10. }

La frecuencia estara determinada por la configuracion del Timer0, y value es el valor que se carga en funcion de la distancia.

Saludos
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 03 de Octubre de 2008, 13:12:00
amigo lo kiero poner por el puerto RA1 ste codigo lo colocaria abajo del codigo de #int_CCP2  o donde explicame gracias
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 03 de Octubre de 2008, 13:16:33
Hola.

El codigo lo dice muy claro al principo #int_TIMER0, ya que aprobechamos el desborde del mismo para generar la frecuencia. Si vas a colocar la salida por RA1 debes colocar el #define salida pin_a1.

Saludos
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 19 de Octubre de 2008, 21:03:48
amigo me salen estos errores al poner el timer0

undefined identifier value
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 20 de Octubre de 2008, 00:38:24
Hola.

Postea el codigo para mayor facilidad de ubicar el error
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 20 de Octubre de 2008, 15:02:02
el problema del error ke me sale es en el timer saliendome un error ke defina la variable value el codigo es el mismo estoy poniendo la rutina del timer antes de la interrupcion y declarando el puerto de salida pero la verdad nose como definir esa varaible gracias por tu ayuda
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 22 de Noviembre de 2008, 17:35:24
sera ke me puede ayudar a hcer solo el pwm para un pic 16f873A gracias
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 22 de Noviembre de 2008, 19:10:17
 :D :D :D

Como lo quires?
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 22 de Noviembre de 2008, 19:30:45
el pwm ke se pueda variar la onda con un pulsador ...cada vez ke se presione el pulsador el motor gire mas rapido y la salida por ra1 gracias
Título: Re: Programar SRF10 con cable USB
Publicado por: MLO__ en 22 de Noviembre de 2008, 19:45:43
No seria mejor con un teclado?????????????????????????

Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 22 de Noviembre de 2008, 22:49:07
ps la verdad es para continuar el problema de la sirena de proximidad para el robot entoncs con el pulsador simulo la variable no es un poco mas facil
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 09 de Febrero de 2009, 16:42:43
kien me puede ayudar a unir el programa de la medicion por ultrasonido con este sonido el cual he logrado sacar con el mismo pic 16f873a dado ke la variable que tenemos en la medicion por ultrasonido es la que necesitamos para variar la frecuencia del tono el cual he sacado para q asi pueda variar debido a la distancia necesito ayuda urgente por favor es un proyecto que he venido desarrollando de proximidad para mi robot muchas gracias por la ayuda
Título: Re: Programar SRF10 con cable USB
Publicado por: hard8507 en 09 de Febrero de 2009, 17:42:45
kien me puede a ayudar a que la variable de la medicion por ultrasonido se utilize como la frecuencia que tiene en el programa del tono y asi pueda sonar una sirena para mi robot indicando el cual este cerca o lejos de una pared gracias addjunto las librerias y los programas  y librerias porfa ayundeme gracias