| 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) { } } |