Autor Tema: como guardar 20 muestras de una señal seno en un bufer  (Leído 3097 veces)

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

Desconectado resistencia

  • PIC10
  • *
  • Mensajes: 7
como guardar 20 muestras de una señal seno en un bufer
« en: 26 de Junio de 2008, 14:27:42 »
por favor alguien que me pueda ayudar de como puedo guardar 20 muestras de una señal seno capturadas por el ADC del atmega32  en un buffer, y posteriormente en viarlo al puerto serie para que lo capture labview(codigo en lenguaje c para atmega) :? URGENTE

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: como guardar 20 muestras de una señal seno en un bufer
« Respuesta #1 en: 26 de Junio de 2008, 14:54:03 »
Hola.

Pues guardalo en la EEPROM del PIC y luego, cuando completes las 20 medidas, lo envias por el serial uno a uno.  :-) Si tienes algun codigo postealo, seria mas facil.

Saludos
El papel lo aguanta todo

Desconectado resistencia

  • PIC10
  • *
  • Mensajes: 7
Re: como guardar 20 muestras de una señal seno en un bufer
« Respuesta #2 en: 26 de Junio de 2008, 15:09:57 »
Hola.

Pues guardalo en la EEPROM del PIC y luego, cuando completes las 20 medidas, lo envias por el serial uno a uno.  :-) Si tienes algun codigo postealo, seria mas facil.

Saludos

gracias por responderme:

queria decirte que es para un atmega y que ademas estas muestras las llevare a puerto serie y que las tomara el labview.

aqui esta el codigo

interrupt [ADC_INT] void adc_isr(void)   //interrupcion de captura de datos del adc
{
unsigned char adc_data,se;
// Read the 8 most significant bits
// of the AD conversion result
adc_data=ADCH;
se=adc_data;
// Place your code here
ADCSRA|=0x40;
}


while (1)                                          //codigo que supuestamente me deberia enviar los datos encodigo binario al puerto serial
      {
      // Place your code here   
     
         for (i=0;i<=20;i=i+0.00083){
               //   se=adc_data;
            puts(se);
     
                            }

      };
}

lo que no se y aun no he probado es que si la instrucion puts me envia el codigo binario al puerto serial.

gracias


Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: como guardar 20 muestras de una señal seno en un bufer
« Respuesta #3 en: 26 de Junio de 2008, 16:05:35 »
Bienvenido al foro resistencia!

Tengo algunas curiosidades:
1- ¿Para qué es el OR del ADCSRA con el valor 0x40?
2- ¿Por qué en el incremento del for colocas "i+0.00083"? ¿No son 20 datos no más? Con ese incremento el for ejecutará más de 24000 ciclos!  :shock:
3- Si colocas el for de esa forma, siempre vas a enviar un mismo valor, no deberías hacer un arreglo para guardar las 20 posiciones en RAM, o mejor aún, guárdalas en EEPROM como te mencionó MLO? Y luego vas cambiando la dirección de donde tienes el dato para que envíes los 20 datos diferentes.

Ok saludos, nos leemos! :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: como guardar 20 muestras de una señal seno en un bufer
« Respuesta #4 en: 26 de Junio de 2008, 16:19:08 »
Hola.

Vamos por partes.
Me imagino que es parte del codigo, ya que, aunque no he programado ese tipo de micros, el C tiene como un orden que se cumple en todos los compiladores. Me parece que le falta algo de estructura a tu codigo.

Código: C
  1. #inlcude <xxxx.h> //Incluir librerias para el manejo de la USART
  2. #inlcude <xxxx.h> //Incluir librerias para el manejo del ADC
  3.  
  4. interrupt [ADC_INT]...
  5. ...
  6. void main (void)
  7. {
  8.  //colocar la funcion para configuracion de la USART y el ADC
  9.  while(1)
  10.  {
  11.   ...
  12.  }
  13. }

Deben coincidir la configuracion de la USART (baudios, numero de bits, paridad) con la del terminal del VI en LabView. Asi mismo, debe haber alguna funcion para configurar el ADC (numero de bits de resolucion, tiempo de conversion, etc), de no haberla, me imagino que se puede acceder a los registros SFR para configurarlos con los valores correspondientes.

La funcion puts coloca el string correspondiente al dato enviado. Mira el codigo ASCII.


Saludos

EDITO: Gracias por la correccion Javier -se me enredaron los dedos!!-
« Última modificación: 26 de Junio de 2008, 16:58:38 por MLO__ »
El papel lo aguanta todo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: como guardar 20 muestras de una señal seno en un bufer
« Respuesta #5 en: 26 de Junio de 2008, 16:25:40 »
me imagino que se puede acceder a los registros SRF para configurarlos con los valores correspondientes.
MLO es un detalle, pero no será "SFR", de las siglas Special Function Registers? O estás hablando de otra cosa cuando dices "SRF"?  :?
Saludos!

EDITO: No hay problema MLO, a mí también se me enredan muchas veces. :mrgreen:
« Última modificación: 26 de Junio de 2008, 17:07:49 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado resistencia

  • PIC10
  • *
  • Mensajes: 7
Re: como guardar 20 muestras de una señal seno en un bufer
« Respuesta #6 en: 26 de Junio de 2008, 17:02:28 »
Bienvenido al foro resistencia!

Tengo algunas curiosidades:
1- ¿Para qué es el OR del ADCSRA con el valor 0x40?
2- ¿Por qué en el incremento del for colocas "i+0.00083"? ¿No son 20 datos no más? Con ese incremento el for ejecutará más de 24000 ciclos!  :shock:
3- Si colocas el for de esa forma, siempre vas a enviar un mismo valor, no deberías hacer un arreglo para guardar las 20 posiciones en RAM, o mejor aún, guárdalas en EEPROM como te mencionó MLO? Y luego vas cambiando la dirección de donde tienes el dato para que envíes los 20 datos diferentes.

Ok saludos, nos leemos! :mrgreen:

OK.
el or (0x40)en el ADCSRA es para poder iniciar la conversion, y si me parece no estoy seguro , que con ese incremento tomaria todas esos valores. en si lo que necesito, es que con una señal de entrada senoidal (Vin(t)=5sen(377t)) que entra al adc del micro debo capturar 20 muestras por periodo de esta señal, almacenarlos los datos en un buffer y enviarlos por el puerto serie, espero que con esto me puedan ayudar

Desconectado resistencia

  • PIC10
  • *
  • Mensajes: 7
Re: como guardar 20 muestras de una señal seno en un bufer
« Respuesta #7 en: 26 de Junio de 2008, 17:23:19 »
OK.
el or (0x40)en el ADCSRA es para poder iniciar la conversion, y si!, me parece no estoy seguro  que con ese incremento tomaria todas esos valores. en si lo que necesito, es que con una señal de entrada senoidal (Vin(t)=5sen(377t)) que entra al adc del micro debo capturar 20 muestras(sampling) por periodo de esta señal, almacenarlos los datos en un buffer y enviarlos por el puerto serie, espero que con esto me puedan ayudar, ademas de saber con que instruccion puedo enviar esos datos binarios que me genera el adc al puerto serie, y que creo yo que los estoy guardando en mi variable (se).
ahh si eso es parte del codigo mas que todo donde tengo mi programa principal todo lo demas esta ya configurado
 
 
 

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: como guardar 20 muestras de una señal seno en un bufer
« Respuesta #8 en: 26 de Junio de 2008, 19:37:53 »
No conozco ese tipo de micro que tú usas, sólo he trabajado con los microcontroladores PIC de microchip.
Así que no sé cuáles son sus características...

Sin embargo lo que sí es cierto es que ese código está bastante "escuálido"... claro, estás comenzando.
Ahora bien, pregunto: está funcionando la conversión A/D de esa forma?
Puedes hacer una prueba colocando el valor de "se", es decir, el valor de la conversión, en uno de los puertos del micro. Conectas leds con resistencias a cada uno de los 8 pines y wala! puedes ver si cambia el valor en binario con la conversión A/D...
Claro, obviamente no puede ser con la onda senoidal, porque de lo rápido no verías nada... yo diría que hagas la prueba variando la tensión con un potenciómetro.
Entonces has un código con un ciclo infinito de lectura del convertidor - envío al puerto...
Después que consigas eso, haces lo mismo pero no enviándolo al puerto del micro, sino por puerto serial al pc...
Sería otro ciclo infinito de lectura del convertidor - envio por puerto serial. Y ves el valor en el hyperterminal u otro software para monitoreo de puertos.

Después que tengas seguro que funciona el convertidor y la transmisión serial, pues ya puedes comenzar a preocuparte por el "sampling" o muestreo.... para ello tendrás que usar un temporizador (me imagino que el micro posee módulos de "timers" verdad?)... que temporice 0.83ms.. entonces cada vez que ocurra una interrupción por el temporizador será tiempo de hacer una nueva muestra.

Pero tienes que ir dando los pasos en orden para que las cosas salgan bien.
En cuanto hagas lo que te menciono puedes postear tus avances.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web