Autor Tema: onda senoidal con PIC  (Leído 14540 veces)

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

Desconectado Kamus23

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 63
onda senoidal con PIC
« en: 03 de Marzo de 2005, 13:13:00 »
Alguien sabe como generar una onda senoidal con PIC en lenguaje c necesito generar ondas de 25 Hz y 425Hz respectivamente???
Kamus de Acuario

Desconectado roc364

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 108
RE: onda senoidal con PIC
« Respuesta #1 en: 03 de Marzo de 2005, 19:51:00 »
Hola!  Al ser el pic un dispositivo digital, y la onda sinusoidal una senial analogica, la forma es utilizando un DAC. Este dispositivo puede ser tan simple como un manojo de resistencias, todo depende la resolucion que se desea.

Luego simplemente escribiendo valores en el puerto donde esta el DAC, se generan los distintos niveles de tension, y variando el tiempo entre las escrituras se varia la frecuencia.
saludos!!

PD: el codigo en C, deberias comenzarlo vos, luego postearlo y ya apareceran opiniones para mejorarlo, ya que faltan bastantes datos. ( tipo de pic, tipo de DAC, frecuencia del oscilador del pic, etc etc. )
Hay solo 10 tipos de personas, los que entienden el codigo binario, y los que no.

Viva La Patagonia Argentina!!

Desconectado akydes_

  • PIC12
  • **
  • Mensajes: 68
RE: onda senoidal con PIC
« Respuesta #2 en: 04 de Marzo de 2005, 15:25:00 »
hola amigos!.

Si utilizas C, en CCS hay una librería, llamada math.h, que te proporciona entre otras funciones, la función seno y coseno.

haz una llamada a ella #include <math.h>... ¡¡y listo!! Sonrisa

por otro lado, haz como te dice roc364: utiliza un conversor digital-analógico para generar dicha salida.

un saludo, y buena suerte.

Desconectado telekitor

  • PIC10
  • *
  • Mensajes: 30
RE: onda senoidal con PIC
« Respuesta #3 en: 06 de Marzo de 2005, 13:35:00 »
Puedes generar una onda cuadrada (0-5v)
en un pin del microcontrolador y esta señal
filtrarla paso bajo para que solo pase el primer
armonico, las señal del primer armonico es una sinusoide
de frecuencia igual a la onda cuadradad que has generado

el primer armonico es de frecuencia igual a la frecuencia
de la onda cuadrada que generes, el segundo el doble,
el tercero el triple ..etc   o sea que filtra paso bajo que pase la 1 pero no
 la 2 y superiores Giño este FOURIER como era Giño


SonrisaSonrisaSonrisaSonrisaSonrisaSonrisa

Desconectado akydes_

  • PIC12
  • **
  • Mensajes: 68
RE: onda senoidal con PIC
« Respuesta #4 en: 07 de Marzo de 2005, 00:44:00 »
curiosa e interesante propuesta, telekeitor Sonrisa

De todas formas, aquí va un enlace que te puede interesar:
GENERADOR DE ONDA SENOIDAL DE FRECUENCIA AJUSTABLE

O mediante algunos circuitos integrados, puedes montarlo como sigue:

GENERADOR DE ONDA SENOIDAL DIGITALMENTE CONTROLADO

Bueno, hay mil y una formas de hacerlo Muchas risas

Un saludo y buena suerte.

Desconectado Kamus23

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 63
RE: onda senoidal con PIC
« Respuesta #5 en: 07 de Marzo de 2005, 07:38:00 »
ok gracias por sus opiniones auque todas estan muy buenas las voy a probar y luego les cuento... aunque me llamo la atencion la de generar la onda cuadrada y luego filtrarla... una pregunta ese filtro pasabajas para que pase el primer armonico... es un filtro normal o acaso es otra clase de filtro...???
Kamus de Acuario

Desconectado telekitor

  • PIC10
  • *
  • Mensajes: 30
RE: onda senoidal con PIC
« Respuesta #6 en: 07 de Marzo de 2005, 10:48:00 »
Es un filtro paso bajo normal,  hay multiples implementaciones por ahi
filtros paso bajo(dejan psar las frecuencias bajas)
los hay pasivos (RC) y activos (RC+amplificadores) y dependiendo del orden
atenuan mas rapido o menos.

onda 25 hz filtro que deje pasar los 25 hz (1er armonico)
pero que ya no deje pasar el de 50Hz (2*25  2 armonico)

onda de 425 Hz deja pasar los 425 HZ(1er armonico)
pero ya no deje psasr los 850 Hz (2*425 2 armonico)

al menos si deja pasar el 2 armonico que lo atenue mucho

PayasoPayasoPayasoPayaso

Desconectado ppalou

  • PIC10
  • *
  • Mensajes: 36
RE: onda senoidal con PIC
« Respuesta #7 en: 10 de Marzo de 2005, 01:49:00 »
Escrito originalmente por akydes_
hola amigos!.

Si utilizas C, en CCS hay una librería, llamada math.h, que te proporciona entre otras funciones, la función seno y coseno.

haz una llamada a ella #include <math.h>... ¡¡y listo!! Sonrisa

por otro lado, haz como te dice roc364: utiliza un conversor digital-analógico para generar dicha salida.

un saludo, y buena suerte.


Podrias poner algún ejemplo de como se usa dicha función con esta libreria??

Gracias!

Desconectado akydes_

  • PIC12
  • **
  • Mensajes: 68
RE: onda senoidal con PIC
« Respuesta #8 en: 10 de Marzo de 2005, 03:05:00 »
Escrito originalmente por ppalou
Escrito originalmente por akydes_
hola amigos!.

Si utilizas C, en CCS hay una librería, llamada math.h, que te proporciona entre otras funciones, la función seno y coseno.

haz una llamada a ella #include <math.h>... ¡¡y listo!! Sonrisa

por otro lado, haz como te dice roc364: utiliza un conversor digital-analógico para generar dicha salida.

un saludo, y buena suerte.


Podrias poner algún ejemplo de como se usa dicha función con esta libreria??

Gracias!


Hola, incluye la librería math.h en tu proyecto:

Codigo:
#include <math.h>


y en este fichero de cabecera vienen las funciones:
Codigo:

////////////////////////////////////////////////////////////////////////////
//   float cos(float x)
////////////////////////////////////////////////////////////////////////////
// Description : returns the cosine value of the angle x, which is in radian
// Date : 9/20/2001
//
float cos(float x)
{
   float y, t, t2 = 1.0;
   int quad, i;
   float frac;
   float p[4] = {
      -0.499999993585,
       0.041666636258,
      -0.0013888361399,
       0.00002476016134
   };

   if (x < 0) x = -x;                  // absolute value of input

   quad = (int)(x / PI_DIV_BY_TWO);    // quadrant
   frac = (x / PI_DIV_BY_TWO) - quad;  // fractional part of input
   quad = quad % 4;                    // quadrant (0 to 3)

   if (quad == 0 || quad == 2)
      t = frac * PI_DIV_BY_TWO;
   else if (quad == 1)
      t = (1-frac) * PI_DIV_BY_TWO;
   else // should be 3
      t = (frac-1) * PI_DIV_BY_TWO;

   y = 0.999999999781;
   t = t * t;
   for (i = 0; i <= 3; i++)
   {
      t2 = t2 * t;
      y = y + p * t2;
   }

   if (quad == 2 || quad == 1)
      y = -y;  // correct sign

   return (y);
}

////////////////////////////////////////////////////////////////////////////
//   float sin(float x)
////////////////////////////////////////////////////////////////////////////
// Description : returns the sine value of the angle x, which is in radian
// Date : 9/20/2001
//
float sin(float x)
{
   return cos(x - PI_DIV_BY_TWO);
}


con lo cual, la llamada a dichas funciones sería tan simple como:

Codigo:

float angulo;
float SenAngulo;
angulo = <loquesea>;

SenAngulo = sin (angulo);



Éso es todo.
Un saludo y buena suerte.

Desconectado ppalou

  • PIC10
  • *
  • Mensajes: 36
RE: onda senoidal con PIC
« Respuesta #9 en: 11 de Marzo de 2005, 02:02:00 »
Gracias!

Desconectado Kamus23

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 63
RE: onda senoidal con PIC
« Respuesta #10 en: 15 de Marzo de 2005, 08:00:00 »
ok ya estoy  probando con los filtros y funciona muy BIEN... ademas me podrian decir si yo uso la libreria math.c de picc compiler... la onda senoidal sale por un pin... cualquiera y no me hara falta la conversion digital/analoga???
Kamus de Acuario

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: onda senoidal con PIC
« Respuesta #11 en: 15 de Marzo de 2005, 09:29:00 »
No, eso no es así.
La función seno de la librería math.c te permitirá calcular el valor del seno, y te devolverá una variable con ese valor, pero no hará nada más.
Luego tu programa hará lo que tú quieras; si quieres que salga por algún sitio, tendrás que programarlo y te hará falta un conversor digital-analógico, puesto que el pic no tiene salidas analógicas.

Desconectado telekitor

  • PIC10
  • *
  • Mensajes: 30
RE: onda senoidal con PIC
« Respuesta #12 en: 15 de Marzo de 2005, 20:50:00 »
el metodo de los filtros no necesitas ningun conversor analogico digital
la onda cuadrada a la salida del pic ya es analogica.
con los filtros solo te quedas con una parte de esa onda cuadrada
que es la que te interesa (la senoide)
tomando el la salida del filtro (analogica) ya tienes la señal que quieres

por su puesto que no te hace falta usar la libreria .math

PayasoPayasoPayasoSonrisa Gigante

Desconectado Kamus23

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 63
RE: onda senoidal con PIC
« Respuesta #13 en: 18 de Marzo de 2005, 09:41:00 »
la onda senidal utilizando los filtros pasa bajos ya funciona, pero ahora tengo un problema ya que la señal tiene componente DC, la estoy pasando por un condensador de acoplo de 1u en serie a una resistencia de 10K a gnd...
para poder verla en el osciloscopio pero cuando intento amplificarla con un operacional la señal se vuelve cuadrada noce que pasa...???
Kamus de Acuario

Desconectado damago

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
RE: onda senoidal con PIC
« Respuesta #14 en: 18 de Marzo de 2005, 11:20:00 »
Hola debes estar utilizando el operacional como comparador. Cuando la senoide es positiva, te saca +Vdd y cuando es negativa -Vdd (en caso de tenerlo alimentado con las 2 tensiones simetricas).

Debes utilizar realimentacion para controlar la ganancia. Un ejemplo es el tipico caso de operacional en modo no inversor:



dibujado con el super paint jeje creo k es asi. Busca en google operacional inversor. Habra miles de cosas.


Un saludo.