Go Down

Topic: [SOLUCIONADO] dronesizer (Read 2 times) previous topic - next topic

nach79

Sin problemas, además no puedo enfadarme contigo si me miras con esos ojos  :smiley-mr-green:

nach79

Quote
Esta linea es un pufo de cuidado, para empezar, sei() es una funcion void, no devuelve nada, y <<<???


Tampoco he conseguido que funcione el primer código (el primero que puse es una versión actualizada, incluyo el otro del que hablo ahora abajo), en esta ocasión me salen fallos en esta linea:

TIMSK2 = 1&lt;&lt;&lt;SINC_LENGTH)

Y los fallos son:

sketch_aug26b.cpp: In function 'void setup()':
sketch_aug26b:57: error: 'lt' was not declared in this scope
sketch_aug26b:57: error: expected `;' before ')' token
sketch_aug26b:60: error: 'gt' was not declared in this scope
sketch_aug26b:60: error: expected `)' before ';' token
sketch_aug26b:60: error: expected `;' before ')' token
sketch_aug26b:63: error: 'gt' was not declared in this scope
sketch_aug26b:63: error: expected `)' before ';' token
sketch_aug26b:63: error: expected `;' before ')' token
sketch_aug26b:66: error: 'gt' was not declared in this scope
sketch_aug26b:66: error: expected `)' before ';' token
sketch_aug26b:66: error: expected `;' before ')' token

Code: [Select]
//audio out variables
float TEMP= 0.0;

#define SINC_LENGTH 32

float sinC[3][SINC_LENGTH] = {
  {//sinus
    0.59754515,0.69134176,0.7777851,0.8535534,0.9157348,0.96193975,0.9903926,1.0,0.9903927,0.9619398,0.9157348,0.8535534,0.77778506,0.69134164,0.597545,0.49999985,0.40245464,0.30865806,0.22221464,0.14644638,0.08426499,0.03806007,0.009607285,0.0,0.009607464,0.038060457,0.08426553,0.14644706,0.22221544,0.30865896,0.4024556,0.5000008,  }
  ,
  {//saw
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  }
  ,
  {//tri
    0.03125,0.0625,0.09375,0.125,0.15625,0.1875,0.21875,0.25,0.28125,0.3125,0.34375,0.375,0.40625,0.4375,0.46875,0.5,0.53125,0.5625,0.59375,0.625,0.65625,0.6875,0.71875,0.75,0.78125,0.8125,0.84375,0.875,0.90625,0.9375,0.96875,1.0,  }
};

int incomingByte = 0; // for incoming serial datar

int pin0val =0;

enum waveFormType {
  SIN, SQUARE,TRI,  };

/*
float vol1=1.0;
float vol2=1.0;
float vol3=1.0;
float vol4=1.0;*/

float globalHz1 =0.001;
float oscCount1=0;

float globalHz2 =0.001;
float oscCount2=0;

float globalHz3 =0.001;
float oscCount3=0;

float LFOHz =0.001;
float lfoCount=0;

int type=0;

void setup()
{

  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  Serial.begin(9600);

  randomSeed(analogRead(0));

  //Timer2 setup  This is the audio rate timer, fires an interrupt at 15625 Hz sampling rate
  TIMSK2 = 1&lt;&lt;&lt;SINC_LENGTH)
    oscCount1=0;
  oscCount2+=globalHz2;
  if(oscCount2&gt;SINC_LENGTH)
    oscCount2=0;
  oscCount3+=globalHz3;
  if(oscCount3&gt;SINC_LENGTH)
    oscCount3=0;
  lfoCount+=LFOHz;
  if(LFOHz&gt;SINC_LENGTH)
    LFOHz=0;

}

void calculateHz(float in,float detune1, float detune2)
{

  globalHz1 = ((440 * pow(2.0,(in-69.0)/12.0))/1562.50);
  globalHz2 = (440 * pow(2.0,(detune1-69.0)/12.0))/1562.50;
  globalHz3 = (440 * pow(2.0,(detune2-69.0)/12.0))/1562.50;

  /*
  Serial.print("  ");
   Serial.print(globalHz1*100000, DEC);
   Serial.print("  ");
   Serial.print(globalHz2*100000, DEC);
   Serial.print("  ");
   Serial.print(globalHz3*100000, DEC);
   */
}

void loop()
{

  LFOHz = (analogRead(3)/(SINC_LENGTH*10.0));
  type=analogRead(5)/51;// 20 modes
  float note = ((analogRead(0)/1024.0)*100.0);
  calculateHz(note,note-(((analogRead(1)/1024.0)*2.0)-1.0),note-(((analogRead(2)/1024.0)*2.0)-1.0));

  /*
  Serial.println("vol ");

   Serial.print(vol,DEC);

   Serial.println(" LFOHz");
   Serial.print(LFOHz,DEC);

   Serial.print("analog 1: ");
   Serial.print( analogRead(1),DEC);

   Serial.print("___ analog 2: ");
   Serial.print( analogRead(2),DEC);

   Serial.print(" type ");
   Serial.print(type);

   Serial.print(" Note ");
   Serial.print((int)(note) );
   Serial.println(" ");

   */
}


No se, es muy raro que no me funcionen ninguno de los dos códigos y en cambio si le funcionen al autor, no?



Sergegsx

al definir las array las termina con
Code: [Select]
,  }

segun http://arduino.cc/es/Reference/Array
deberia acabar con el ultimo elemento de la lista
int myArray[10]={9,3,2,4,3,2,7,8,9,11};

Code: [Select]

float sinC[3][SINC_LENGTH] = {
  {//sinus
    0.59754515,0.69134176,0.7777851,0.8535534,0.9157348,0.96193975,0.9903926,1.0,0.9903927,0.9619398,0.9157348,0.8535534,0.77778506,0.69134164,0.597545,0.49999985,0.40245464,0.30865806,0.22221464,0.14644638,0.08426499,0.03806007,0.009607285,0.0,0.009607464,0.038060457,0.08426553,0.14644706,0.22221544,0.30865896,0.4024556,0.5000008 }
  ,
  {//saw
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
  ,
  {//tri
    0.03125,0.0625,0.09375,0.125,0.15625,0.1875,0.21875,0.25,0.28125,0.3125,0.34375,0.375,0.40625,0.4375,0.46875,0.5,0.53125,0.5625,0.59375,0.625,0.65625,0.6875,0.71875,0.75,0.78125,0.8125,0.84375,0.875,0.90625,0.9375,0.96875,1.0 }
};


prueba a ver si el numero de errores se reduce o igual hay algo que yo no se.
* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Igor R

#18
Aug 26, 2011, 05:43 pm Last Edit: Aug 26, 2011, 06:52 pm by Igor R Reason: 1
El codigo no lo han puesto bien en la web, por ejemplo en : if(oscCount3&gt;SINC_LENGTH) o en ;&lt

Esto es porque la conversion en html de los simbolos no se ha realizado correctamente. Hay varias erratas ahi....
TIMSK2 = 1&lt;&lt;&lt;SINC_LENGTH)
if(oscCount2&gt;SINC_LENGTH)
etc.

Por ejemplo, &gt; es el signo > y &lt; es <




fm

Hola,

por lo que he podido leer del código (la verdad es que no le he podido dedicar mucho tiempo), lo que se pretende es generar una forma de onda digital usando uno de los puertos con salidas discretas. El código en discordia lo que entiendo que debería hacer es llamar de forma periódica a la función oscillator. Para ello utiliza el timer counter 2 del AVR para producir una interrupción periódica. Por lo que entiendo que el código pretende hacer, es configurar el comparador 2 para que cada vez que llegue a un valor determinado se llame a la rutina de interrupción (aka oscillator).

Por lo tanto este código:
Code: [Select]
//Timer2 setup This is the audio rate timer, fires an interrupt at 15625 Hz sampling rate
TIMSK2 = 1< OCR2A = 127;
TCCR2A = 2; // CTC mode, counts up to 127 then resets
TCCR2B = 0<<< sei(); // global interrupt enable

}

// timer 2 is audio interrupt timer
ISR(TIMER2_COMPA_vect)
{
OCR2A = 127;
oscillator();

}


Debería quedar de la siguiente forma para que compile:

Code: [Select]

// cargo en el registro OCR2A - Output Compare Register A - 127, este valor se compara continuamente con
// el contador TCNT2, que se actualiza automaticamente por el micro con un "tick" dependiente de la configuración
// de preescalado del timer 2
OCR2A = 127;

// Configuro el contador en modo CTC (Clear Timer on Compare Match) - resetear el timer cuando
// TCNT2 sea igual que OCR2A (e.d. 127)
TCCR2A = 2;
TCCR2B = 0;

// Configuro el bloque del contador 2 para que genere una interrupción cada vez que hay un overflow
// en el contador.
TIMSK2 = 1;
...
sei (); // enable interrupts


}
// timer 2 is audio interrupt timer
// Rutina de interrupción que se llamará cada vez que el contador 2 haga overflow.
ISR(TIMER2_COMPA_vect)
{
   OCR2A = 127; // aunque esta linea no sea necesaria, déjala
   oscillator();
}


Siguiendo la lógica de la configuración no me termina de cuadrar. Ya que con el código que hay arriba, el contador nunca llegará a dar la vuelta (overflow) y no se invocará la rutina de interrupción. Esto es debido a que el contador 2 esta configurado en mode CTC, es decir, cuando el contador TCNT2 sea igual que OCR2A, pongo el contador a cero.

Por lo tanto el código quedaría así:

Code: [Select]


// cargo en el registro OCR2A - Output Compare Register A - 127, este valor se compara continuamente con
// el contador TCNT2, que se actualiza automaticamente por el micro con un "tick" dependiente de la configuración
// de preescalado del timer 2
OCR2A = 127;

// Configuro el contador en modo CTC (Clear Timer on Compare Match) - resetear el timer TCNT2 cuando
// TCNT2 sea igual que OCR2A (e.d. 127)
TCCR2A = 2;
TCCR2B = 0;

// Configuro el bloque del contador 2 para que genere una interrupción cada vez que hay un overflow
// en el contador.
TIMSK2 = 2;
...
sei (); // enable interrupts


}
// timer 2 is audio interrupt timer
// Rutina de interrupción que se llamará cada vez que el contador 2 haga overflow.
ISR(TIMER2_COMPA_vect)
{
OCR2A = 127;
oscillator();

}


Por otro lado, donde en el código pone "&gt" cámbialo por ">" y donde pone "&lt" cámbialo por "<". Ahora debería estar dando fallos de compilación.

A ver si con esto te compila y funciona. Si no es así, publica la fuente de donde has sacado el código y lo miro.


Un saludo
   

Go Up