Full Version : Signal Generator DAC 0808 (GCC)
avr >>TECHNICAL & HARDWARE >>Signal Generator DAC 0808 (GCC)


AVR_Admin- 04-17-2006
Signal Generator???||Generador de señales


This code generates diferent signals: Sine, Sawtooth, square and a ramdon signal based on the logistic equation... The Output is the port D, and it should be connected to an DAC(I test it with DAC 0808). The ADC ables to make the signal more or less "bigger" (Amplitude). I used the ADC mux 0, so the entry should be connected to a voltage divisor, and it ables to vary the frequency of operation... The problem of this code is that it makes the conversion just on the begining of the program, so in fact you can´t vary the frequency "live", it must be reseted.

Dont be optimistic about the use of this generator... its maximum frequency its about 20 Hz... with a crystal of 1MHz.

I used an ATMEL ATMEGA8535... I woul apreciate to know if someone makes some improvements or make a better generator than mine...:-)

CODE

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>


int a[255];
unsigned tmp;
unsigned i;
float k;
uint8_t led;
uint8_t lo_val;
uint8_t hi_val;
uint8_t state;



void compara()
{
while(tmp<lo_val)
{
tmp++;
}
if (PINB==0x00)
{
 //Este es el generador aleatorio
  led=255*k;    
  k=k*4*(1-k);
  tmp=0;
}
 

else if(PINB==0x01)
{
 if(i==127)
  led=0xFF;
 if(i==254)
  led=0x00;
 tmp=0;
 i++;
 if(i==255)
  i=0;
   //Este es la señal cuadrada
}
 
else if(PINB==0x10)
{
 led++;
 if(led==255)
  led=0;
 tmp=0;//Este es la señal diente...
}
 
else
{
 led = a[i];
 tmp = 0;
 i++;
 if(i==255)
  i=0; //Este es la señal seno
}
}




SIGNAL(SIG_OVERFLOW0)
{                                                    
outp(led,PORTD);
compara();
outp(200,TCNT0);
}


SIGNAL(SIG_ADC)
{
lo_val=inp(ADCL);
hi_val=inp(ADCH);
}



int main(void)
{
a[0]=131; a[1]=134; a[2]=137; a[3]=140; a[4]=144; a[5]=147; a[6]=150; a[7]=153;
a[8]=156; a[9]=159; a[10]= 162; a[11]= 165; a[12]=168;a[13] = 171;a[14]= 174;a[15] =177;a[16]=180;a[17]=183;a[18]=185;a[19]=188;a[20]=191;
a[21]=194;a[22]= 196;a[23]=199;a[24]= 201;a[25]= 204;a[26]=206;a[27]= 209;a[28] =211;a[299]= 214;a[30]=216;a[31]=218;a[32]=220;a[33]=222;
a[34]=225;a[35]= 227;a[36]=229;a[37]= 230;a[38]= 232;a[39]=234;a[40]= 236;a[41]=237;a[42]= 239;a[43]=240;a[44]= 242;a[45]= 243;a[46]=245;
a[47]=246;a[48]= 247;a[49] =248;a[50]=249;a[51] =250;a[52] =251;a[53] =252;a[54] =252;a[55] =253;a[56]=254;a[57]= 254;a[58]= 255;a[59]= 255;
a[60]=255;a[61]=255;a[62] =255;a[63]= 255;a[64] =255;a[65]= 255;a[66] =255;a[67]= 255;a[68]= 255;a[69] =254;a[70] =254;a[71] =253;a[72]= 252;
a[73]=252;a[74]= 251;a[75] =250;a[76]= 249;a[77] =248;a[78]= 247;a[79]= 246;a[80] =245;a[81]= 243;a[82] =242;a[83] =240;a[84] =239;a[85] =237;
a[86]=236;a[87]= 234;a[88] =232;a[89]= 230;a[90] =229;a[91]= 227;a[92]= 225;a[93] =222;a[94]= 220;a[95] =218;a[96] =216;a[97] =214;a[98] =211;
a[99]=209;a[100]= 206;a[101]= 204;a[102]= 201;a[103]= 199;a[104]= 196;a[105]= 194;a[106] =191;a[107] =188;a[108] =185;a[109] =183;a[110]= 180;a[111] =177;
a[112]=174;a[113]= 171;a[114] =168;a[115]= 165;a[116]= 162;a[117]= 159;a[118]= 156;a[119]= 153;a[120]= 150;a[121]= 147;a[122] =144;a[123]= 140;a[124] =137;
a[125]=134;a[126]= 131;a[127] =128;a[128]= 125;a[129]= 122;a[130]= 119;a[131] =116;a[132]= 112;a[133]= 109;a[134]= 106;a[135] =103;a[136]= 100;a[137] = 97;
a[138]=94;a[139] = 91;a[140]  =88;a[141] = 85;a[142] = 82;a[143] = 79;a[144] = 76;a[145] = 73;a[146] = 71;a[147] = 68;a[148]  =65;a[149]=  62;a[150] = 60;
a[151]=57;a[152] = 55;a[153]  =52;a[154] = 50;a[155] = 47;a[156] = 45;a[157] = 42;a[158] = 40;a[159]= 38;a[160] = 36;a[161] = 34;a[162]=  31;a[163] = 29;
a[164]=27;a[165] = 26;a[166]  =24;a[167] = 22;a[168] = 20;a[169] = 19;a[170] = 17;a[171] = 16;a[172] = 14;a[173] = 13;a[174]  =11;a[175]=  10;a[176]  = 9;
a[177]=8;a[178]  = 7;a[179]   =6;a[180]  = 5;a[181]  = 4;a[182]  = 4;a[183] =  3;a[184]  = 2;a[185]  = 2;a[186]  = 1;a[187]  = 1;a[188] =  1;a[189]  = 1;
a[190]=1;a[191]  = 1;a[192]   =1;a[193]  = 1;a[194]  = 1;a[195]  = 1;a[196] =  1;a[197]  = 2;a[198]  = 2;a[199]  = 3;a[200]  = 4;a[201] =  4;a[202] =  5;
a[203]=6;a[204]  = 7;a[205]   =8;a[206]  = 9;a[207]  =10;a[208]  =11;a[209] = 13;a[210]  =14;a[211]  =16;a[212]  =17;a[213]  =19;a[214] = 20;a[215] = 22;
a[216]=24;a[217] = 26;a[218]  =27;a[219] = 29;a[220] = 31;a[221] = 34;a[222]  =36;a[223] = 38;a[224]  =40;a[225] = 42;a[226] = 45;a[227]=  47;a[228]=  50;
a[229]=52;a[230] = 55;a[231]  =57;a[232] = 60;a[233] = 62;a[234] = 65;a[235]  =68;a[236] = 71;a[237]  =73;a[238] = 76;a[239] = 79;a[240]=  82;a[241]=  85;
a[242]= 88;a[243]=  91;a[244]=  94;a[245]=  97;a[246]= 100;a[247]= 103;a[248] =106;a[249]= 109;a[250] =112;a[251]= 116;a[252]= 119;a[253]= 122;a[254]=125;

outp(0xFF,DDRD);
outp((1<<TOIE0),TIMSK);
outp(0, TCNT0);
outp(1, TCCR0);
outp(0, ADMUX);
outp((1<<ADEN)|(1<<ADSC)|(1<<ADIE),ADCSRA);
led = 0;
tmp = 0;
k=0.8;
i = 5;
DDRB = 0x00;
PORTB = 0xFF;
sei();
while(1)
{
}
}





Forumer™ is Voted #1 Free Forum Hosting provider
Build your own community today with the largest message board hosting company.