Pages: [1] 2 3   Go Down
Author Topic: [SOLUCIONADO] dronesizer  (Read 2410 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola a todos, este es mi primer post por aquí.
Tengo un par de arduinos duemilanove, con el ATmega328.
De momento no se nada de programar y uso mis arduinos con los trabajos que hacen otros.
Lo último que he intentado es hacerme un dronesizer, que podeis ver en esta web : http://www.larsby.com/johan/?p=435
Estoy usando el segundo código, el que viene en los comentarios.
El problema es que siempre me sale la misma linea subrayada en amarillo :

TIMSK2 = 1< OCR2A = 127;

y los siguientes errores:

sketch_aug25d.cpp: In function 'void setup()':
sketch_aug25d:55: error: lvalue required as left operand of assignment
sketch_aug25d:57: error: expected primary-expression before 'asm'
sketch_aug25d:57: error: expected `;' before 'asm'

¿Alguna idea sobre que debo hacer para solucionarlo?
¿Puede afectar que no esté conectado el hardware (los potenciómetros, etc..) a las entradas analógicas a la hora de compilar o es algo independiente?
Muchas gracias.
« Last Edit: August 27, 2011, 06:22:48 am by nach79 » Logged

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pega aquí el codigo que has "copiado" al programa de Arduino.

te recomiendo que te mires algún tutorial porque estoy seguro que muchos errores los podras solucionar tu cuando hayas leido un poco de como programar.
Entiende que decir "no se nada de programar" y luego decir que me da estos errores, pues no parece justo que tu copies y pegues codigo y la gente tenga que arreglarte los programas sin que tu hayas intentado "aprender a programar".
Te lo digo de buen rollo y para tu beneficio.
un saludo.
Logged

* 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/

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, ningún problema.
No puse el código entero porque me pareció muy largo, por eso he dejado el link con el código.
No se nada de programar en C, pero si he estado tirando de google los últimos días para buscar información sobre el funcionamiento de los timers y solucionar el problema, aunque no lo he conseguido.
No pretendo que nadie me saque las castañas del fuego, me pareció que solo era una linea de código y tal vez alguien podía echarme un cable, aunque entiendo que pueda sonar muy cómoda mi pregunta.
Seguiré buscando.
Gracias
Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 743
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tienes que intentar poner la máxima información posible para que la gente pueda ayudarte ya que no sabemos lo que estás haciendo. Que los códigos sean largos es normal pero es mejor ponerlo en el post bien tabulado que tener que verlo malamente un una pagina. Para que se te pueda ayudar tienes que procurar cumplir algunas de las sugerencias http://arduino.cc/playground/Es/Consejos

He mirado y no se cual es el problema pero lo que si he visto es que el programa tiene tela ya que TIMSK2, OCR2A son registros internos del timer2 http://real2electronics.blogspot.com/2011/01/timer-2.html nunca he mirado eso pero sin tener ni idea de programación meterle mano a esto me parece muy osado. Es mejor dominar las bases que tirarse a la piscina ciegamente.

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias por los consejos ionhs. El link que me has dejado lo estuve leyendo ayer por la noche, pero como dices, no saqué nada en claro para poder solucionar el problema. Lo que no comprendo es que a veces un código que le ha funcionado a uno en su arduino, no le funcione a otro ¿A que se debe? ¿Puede ser por usar versiones distintas del compilador?

Dejo aquí el código tal como viene en la web :

Code:
//audio out variables

#define SINC_LENGTH 32

float sinC[4][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 }
,
{//square
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 }
,
{//saw
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 }
,
{//tri
0.0625,0.125,0.1875,0.25,0.3125,0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.0,0.9375,0.875,0.8125,0.75,0.6875,0.625,0.5625,0.5,0.4375,0.375,0.3125,0.25,0.1875,0.125,0.0625,0.0 }
};

float note =50;
float TEMP= 0.0;

int oldKnobs[6] ={
0,0,0,0,0,0};
int tempKnobs[6] ={
0,0,0,0,0,0};

enum waveFormType {
SIN, SQUARE,SAW,TRI, };

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);
//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();

}

//output to audio
void aWrite(byte i)
{
PORTB = PORTB & B000000;
PORTB = PORTB | i;
}

void oscillator()
{

switch(type)
{
case 0:
{
TEMP = (sinC[SIN][(int)oscCount1] );
TEMP += (sinC[SIN][(int)oscCount2] );
TEMP += (sinC[SIN][(int)oscCount3]);
if(LFOHz!=0.0)
TEMP *= (sinC[SIN][(int)lfoCount]);
break;

}

case 1:
{
TEMP = (sinC[SIN][(int)oscCount1] );
TEMP += (sinC[SIN][(int)oscCount2]);
break;
}

case 2:
{
TEMP = (sinC[SIN][(int)oscCount1] );
TEMP += (sinC[SIN][(int)oscCount2] );
TEMP += (sinC[SIN][(int)oscCount3] );
break;
}

case 3:
{
TEMP = (sinC[TRI][(int)oscCount1] );
TEMP += (sinC[TRI][(int)oscCount2] );
TEMP += (sinC[TRI][(int)oscCount3] );
if(LFOHz!=0.0)
TEMP *= (sinC[SIN][(int)lfoCount] );

break;

}

case 4:
{
TEMP = (sinC[TRI][(int)oscCount1] );
TEMP += (sinC[TRI][(int)oscCount2] );
break;
}

case 5:
{
TEMP = (sinC[SIN][(int)oscCount1] );
if(LFOHz!=0.0)
TEMP *= (sinC[SIN][(int)lfoCount] );

break;
}

case 6:
{
TEMP = (sinC[TRI][(int)oscCount1] );
if(LFOHz!=0.0)
TEMP *= (sinC[TRI][(int)lfoCount] );

break;
}

case 7:
{
TEMP = (sinC[SQUARE][(int)oscCount1] );
if(LFOHz!=0.0)
TEMP *= (sinC[SQUARE][(int)lfoCount] );

break;
}

case 8:
{
TEMP = (sinC[SQUARE][(int)oscCount1] );
TEMP -= (sinC[SQUARE][(int)oscCount2] );
TEMP += (sinC[SIN][(int)oscCount3] );
break;
}

case 9:
{
TEMP = (sinC[SIN][(int)oscCount1] );
TEMP -= (sinC[TRI][(int)oscCount2] );
TEMP += (sinC[SIN][(int)oscCount3] );
break;
}
case 10:
{
TEMP = (sinC[SAW][(int)oscCount1] );
TEMP += (sinC[SAW][(int)oscCount2] );
TEMP += (sinC[SAW][(int)oscCount3] );
break;
}
case 11:
{
TEMP = (sinC[SAW][(int)oscCount1] );
TEMP += (sinC[SAW][(int)oscCount2] );
TEMP -= (sinC[SAW][(int)oscCount3] );
break;
}
case 12:
{
TEMP = (sinC[SAW][(int)oscCount1] );
TEMP += (sinC[SAW][(int)oscCount2] );
TEMP -= (sinC[SAW][(int)oscCount3] );
if(LFOHz!=0.0)
TEMP *= (sinC[SAW][(int)lfoCount] );
break;

}
case 13:
{
TEMP = (sinC[SAW][(int)oscCount1] );
TEMP += (sinC[SAW][(int)oscCount2] );
TEMP -= (sinC[SAW][(int)oscCount3] );
if(LFOHz!=0.0)
TEMP *= (sinC[SAW][(int)lfoCount] );
break;

}

case 14:
{
TEMP = (sinC[TRI][(int)oscCount1] );
TEMP += (sinC[TRI][(int)oscCount2] );
TEMP -= (sinC[TRI][(int)oscCount3] );
if(LFOHz!=0.0)
TEMP *= (sinC[TRI][(int)lfoCount] );
break;

}
default:
{
TEMP = (sinC[SQUARE][(int)oscCount1] );
TEMP += (sinC[SQUARE][(int)oscCount2] );
TEMP += (sinC[SQUARE][(int)oscCount3] );
if(LFOHz!=0.0)
TEMP *= (sinC[SIN][(int)lfoCount] );
break;
}
}

aWrite((byte)((TEMP)*24)); //write to output

oscCount1+=globalHz1;
if(oscCount1>SINC_LENGTH)
oscCount1=0;
oscCount2+=globalHz2;
if(oscCount2>SINC_LENGTH)
oscCount2=0;
oscCount3+=globalHz3;
if(oscCount3>SINC_LENGTH)
oscCount3=0;
/*lfoCount+=LFOHz; //WTF WHERE I THINKING HERE ????
if(LFOHz>SINC_LENGTH)
LFOHz=0;
*/
lfoCount+=LFOHz;
if(lfoCount>SINC_LENGTH)
lfoCount=0;

}

void loop()
{

tempKnobs[0] =analogRead(0);
tempKnobs[1] =analogRead(1);
tempKnobs[2] =analogRead(2);
tempKnobs[3] =analogRead(3);
tempKnobs[4] =analogRead(4);
tempKnobs[5] =analogRead(5);

if(tempKnobs[0]!=oldKnobs[0])
{
//note = ((tempKnobs[0]/1024.0)*100.0);
//globalHz1 = ((440 * pow(2.0,(note-69.0)/12.0))/1562.50);

globalHz1 = ((tempKnobs[0]/1024.0)*1.70);
oldKnobs[0]=tempKnobs[0];

globalHz2 =globalHz1+ (((tempKnobs[1]/1024.0)*.25)-0.125);
globalHz3 =globalHz1+ (((tempKnobs[2]/1024.0)*.25)-0.125);

}
if(tempKnobs[1]!=oldKnobs[1])
{
globalHz2 =globalHz1+ (((tempKnobs[1]/1024.0)*.25)-0.125);
oldKnobs[1]=tempKnobs[1];
}
if(tempKnobs[2]!=oldKnobs[2])
{
globalHz3 =globalHz1+ (((tempKnobs[2]/1024.0)*.25)-0.125);
oldKnobs[2]=tempKnobs[5];
}
if(tempKnobs[3]!=oldKnobs[3])
{
LFOHz=((tempKnobs[3]/1024.0)*0.4);
oldKnobs[3]=tempKnobs[3];

}
if(tempKnobs[4]!=oldKnobs[4])
{
oldKnobs[4]=tempKnobs[4];
}
if(tempKnobs[5]!=oldKnobs[5])
{
type=tempKnobs[5]/51;// 20 modes
oldKnobs[5]=tempKnobs[5];
}

}

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fin, no se si tengo que darme por aludido con la gracia del post del cohete, pero bueno.
Antes de nada, dejar claro que no se nada de programación en C o C++, pero eso no significa que no tenga conocimientos o experiencia usando otros lenguajes. De ahí mi pregunta tan directa.
Ni siquiera se porque estoy dando explicaciones, pero bueno.
Creo que hay muchas otras formas de ayudar o enseñar a la gente que tirando de ironía.

Logged

Ciudad Real
Offline Offline
God Member
*****
Karma: 1
Posts: 751
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

en esta linea

TIMSK2 = 1< OCR2A = 127;

estas haciendo una doble asignación, por eso te da error. según lo que se quiere hacer es desplazar los bits de manera que TIMSK2 valdrá en función de lo que valga OCR2A, potencias de 2 ( 1,2,4,8,.....) según el numero de veces que desplaza un 1 a la izquierda.

yo diría que es así
TIMSK2 = 1< OCR2AM;

y que el = a 127 es el valor hipotético que debe valer .. esto ya no lo puedo asegurar
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mil gracias SrDonGato, luego lo probaré a ver si estás en lo cierto.
De todas formas intentaré ponerme en contacto con el autor del código para preguntarle que arduino está usando, software, etc...
No se como son las demás versones de arduino, pero si tienen integrados distintos (aparte del ATmega) tal vez por eso me esté dando problemas el tema del timer. No se, que lo mismo no tiene nada que ver, pero seguiré buscando.
Cuando encuentre alguna solución lo contaré por aquí.
Saludos!
Logged

Madriz
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Glober Arduiner
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

el bitshift son dos <<

http://arduino.cc/en/Reference/Bitshift
Logged

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fin, no se si tengo que darme por aludido con la gracia del post del cohete, pero bueno.
Antes de nada, dejar claro que no se nada de programación en C o C++, pero eso no significa que no tenga conocimientos o experiencia usando otros lenguajes. De ahí mi pregunta tan directa.
Ni siquiera se porque estoy dando explicaciones, pero bueno.
Creo que hay muchas otras formas de ayudar o enseñar a la gente que tirando de ironía.



nach no te lo tomes como nada personal, en serio, dudo que vaya con mala intención.
Es verano y mucha gente tiene tiempo libre y ha decidido iniciarse en Arduino, eso lleva a que diariamente aparece un post con alguna pregunta que con una busqueda en google se habria solucionado.
Esto se ha estado repitiendo durante mas de un mes y de ahi que en algunos momentos se tire de ironia, o como yo lo veo...un poco de humor.
repito no te molestes y a seguir dandole al Arduino, el post del cohete hay que verlo como gracioso sin tomarselo nadie personalmente.
Logged

* 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/

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 Sería falso por mi parte decir que no me ha sentado mal la gracia, porque además es algo que yo no haría. Hago gracias con mis amigos, pero no a costa de un desconocido con el que no tengo ninguna confianza.
Pero esa es mi postura y como esto es un foro en el que participa mucha gente, con distintas ideas y filosofías, creo que tu posición es la más adecuada. Mejor me lo tomo con humor, le quito seriedad y hago un reset para empezar de nuevo. No me va servir de nada pensar mal por aquí.

Por cierto que he probado lo que me comentaban SrDonGato y aero-yo, pero sin resultados. Sigue fallando igual.
Así que he escrito al creador del código, para pedirle información sobre que arduino ha usado, etc...
Si tengo alguna respuesta o consigo arreglar algo antes por mi cuenta (que lo dudo, porque llevo varios día dándole vueltas) os cuento.
Saludos y muchas gracias por la ayuda.
Logged

Ciudad Real
Offline Offline
God Member
*****
Karma: 1
Posts: 751
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mira a ver si se ha equivocado en un punto y coma

tienes esto

//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


mira a ver si es esto

//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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

He probado el código tal como lo propones, pero entonces la linea en la que da un error es la del sei():
TCCR2B = 0<<< sei(); // global interrupt enable

Luego por la tarde montaré el DAC y los potenciómetros para ver si cambia algo.
¿Puede variar algo al hacerlo así? Me refiero a que verificando el código desde el soft de arduino no funcione, pero si que pueda ser aceptado por la placa al estar "modificada" con componentes extras en las entradas o salidas del arduino, por ejemplo.
¿Es posible? o solo depende del ATmega y los demás integrados.
Muchas gracias!
Logged

Madriz
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Glober Arduiner
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Mi experiencia portando codigo de un micro a otro es que apenas cambian los pines, las funciones se mantienen igual sin problema.
Logged

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 956
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Sería falso por mi parte decir que no me ha sentado mal la gracia, porque además es algo que yo no haría. Hago gracias con mis amigos, pero no a costa de un desconocido con el que no tengo ninguna confianza.
Pero esa es mi postura y como esto es un foro en el que participa mucha gente, con distintas ideas y filosofías, creo que tu posición es la más adecuada.

Perdona Nach79, no habia visto tu post.

No, tranquilo, no me he reido de nadie ni nada por el estilo, y menos de ti, no magnifiques, no eres el protagonista del post.

siento no poder ayudarte con tu proyecto, para serte sincero ni tan siquiera se lo que es.

Si me entero de informacion o parecido lo posteare, como suelo hacer, por el mero hecho de hechar una mano a alguien simplemente.

El post esta escrito con un humor que podemos llamar "acido"  a lo mejor pero es simplemente una representacion un poco comica a estos ultimos meses, pero nada mas y de paso una forma de evadir tensiones...

Tambien queria mostrar lo que esos "locos" han hecho de hastaun cohete con arduino... "cagate lorito"...

Te invito a que participes y no lo tomes a personal.

Un saludo.
Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Pages: [1] 2 3   Go Up
Jump to: