[Anterior] [Indice] [Siguiente] | ||
III. GENERADOR DE FUNCIONES
Figura 6.
Este generador de funciones tiene la capacidad de generar onda seno, cuadrada, triangular y rampa; utiliza el puerto paralelo como salida y así permitri el uso de las señales generadas en cualquier tipo de circuito. El diagrama esquematico de este generador se aprecia en la figura 6.
El componente más importante es el conversor digital analogo DAC0808, el cual convierte la señal generada por el softaware de manera digital, a una señal analoga propia para el trabajo de cualquier clase de circuito.
El programa que se desarrollo para esta aplicación es el siguiente:
//Programa Generador de funciones
# include <iostream.h>
# include <dos.h>
# include <conio.h>
# include <stdlib.h>
# include <stdio.h>
# include <math.h>
void seno();
void triangular();
void cuadrada();
void rampa();
int calper(int);
int puerto=0x378;
main()
{
char op;
do{
clrscr();
gotoxy(25,3);cout<<"*** GENERADOR DE FUNCIONES ***";
gotoxy(25,8);cout<< "(A).Seno";
gotoxy(25,10);cout<< "(B).Triangular ";
gotoxy(25,12);cout<< "(C).Cuadrada ";
gotoxy(25,14);cout<< "(D).Rampa";
gotoxy(25,16);cout<< "(E).Salir";
gotoxy(25,18);
cout<< "ELIJA LA OPCION DESEADA:";
op=getche();
switch(op){
case 'A':
seno();
break;
case 'B':
triangular();
break;
case 'C':
cuadrada();
break;
case 'D':
rampa();
break;
default :
cout<<"Opcion no valida"<<endl;
break;
}
}while (op!='E');
return 0;
}
void seno()
{ clrscr();
int frec, periodo, Vpuerto, n;
gotoxy(25,10);cout<<"Ingrese en Hz la frecuencia de la se¤al: ";
cin>>frec;
periodo=calper(frec);
do{
clrscr();
gotoxy(25,8);cout<<"Onda Seno, F= "<<frec<<"Hz";
gotoxy(25,16);cout<<"Oprima cualquier tecla para continuar";
//? ? ? ? ?
}while(!kbhit());
}
void triangular()
{ clrscr();
int frec, periodo, Vpuerto, n;
gotoxy(25,10);cout<<"Ingrese en Hz la frecuencia de la se¤al: ";
cin>>frec;
periodo=calper(frec);
do{
clrscr();
gotoxy(25,8);cout<<"Onda Triangular, F= "<<frec<<"Hz";
gotoxy(25,16);cout<<"Oprima cualquier tecla para continuar";
for(n=0;n<=(periodo/2);n++){
Vpuerto= 255*n/(periodo/2);
outportb(puerto+2,0x1);
outportb(puerto,Vpuerto);
delay(1);
}
for(n=(periodo/2);n==0;n--){
Vpuerto=255*n/(periodo/2);
outportb(puerto+2,0x1);
outportb(puerto,Vpuerto);
delay(1);
}
}while(!kbhit());
}
void cuadrada()
{ clrscr();
int frec, periodo, pcuadrada;
gotoxy(25,10);cout<<"Ingrese en Hz la frecuencia de la se¤al: ";
cin>>frec;
periodo=calper(frec);
pcuadrada=periodo/2;
do{
clrscr();
gotoxy(25,8);cout<<"Onda Cuadrada, F= "<<frec<<"Hz";
gotoxy(25,16);cout<<"Oprima cualquier tecla para continuar";
outportb(puerto+2,0x1);
outportb(puerto,0xFF);
delay(pcuadrada);
outportb(puerto,0x00);
delay(pcuadrada);
}while(!kbhit());
}
void rampa()
{ clrscr();
int frec, periodo, Vpuerto, n;
gotoxy(25,10);cout<<"Ingrese en Hz la frecuencia de la se¤al: ";
cin>>frec;
cout<<"Oprima cualquier tecla para continuar";
periodo=calper(frec);
do{
clrscr();
gotoxy(25,8);cout<<"Onda Rampa, F= "<<frec<<"Hz";
gotoxy(25,16);cout<<"Oprima cualquier tecla para continuar";
for(n=0;n<=periodo;n++){
Vpuerto= 255*n/periodo;
outportb(puerto+2,0x1);
outportb(puerto,Vpuerto);
delay(1);
}
}while(!kbhit());
}
int calper(int frecuencia)
{
int periodo=0;
periodo=1000/frecuencia;
return periodo;
}
El anterior programa presenta como limitante el que solo se puede generar funciones cuyo rango de frecuencia este entre 0 y 10KHz; además falta estipular bien la generación de la onda seno, la cual debe ser montada sobre un nivel DC para que se puedan simular los valores negativos que tiene la función, en la segunda mitad de su periodo.
[Anterior] [Indice] [Siguiente] | ||