ImageImageImageImage
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

[programacion] Musica con pinguino

Muestranos tus proyectos y pidenos la ayuda que necesites

Moderator: Junta Directiva

Diaio
Forero Habitual
Forero Habitual
Posts: 159
Joined: Sun Aug 28, 2005 7:08 pm

[programacion] Musica con pinguino

Post by Diaio » Sun Dec 14, 2014 6:51 pm

Buenas, estoy intentando hacer un proyectito muy simple en principio pero que no consigo hacer funcionar.

El tema es que conectando unos led a la placa pinguino (18F2550) y un buzzer a la salida PWM 11, que suene la musica del ejemplo jinglebells que tenemos en playmusic, al tiempo que se enciende un led en la patilla 14 al ritmo de dicha sintonia.

User avatar
Sphinx
Usuario Experto
Usuario Experto
Posts: 639
Joined: Thu Apr 03, 2008 4:45 pm
Location: Madrid
Contact:

Re: [programacion] Musica con pinguino

Post by Sphinx » Mon Dec 15, 2014 9:45 am

Hola Diario,
¿ qué es lo que has hecho hasta ahora ? ¿ qué es lo que no consigues hacer funcionar ? ¿ Cómo podemos ayudarte ?

Slds,
Sphinx.
Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto.- Henry Ford
>> Mis experiencias y proyectos robóticos: http://linuxdroids.com

sistemasorp
Usuario Experto
Usuario Experto
Posts: 472
Joined: Fri Jan 29, 2010 9:51 pm

Re: [programacion] Musica con pinguino

Post by sistemasorp » Mon Dec 15, 2014 10:58 am

Un buzzer o un altavoz?, ya que el buzzer sólo emite pitidos en la misma frecuencia siempre.

Diaio
Forero Habitual
Forero Habitual
Posts: 159
Joined: Sun Aug 28, 2005 7:08 pm

Re: [programacion] Musica con pinguino

Post by Diaio » Mon Dec 15, 2014 8:07 pm

Un altavoz queria decir, se me fue la pinza.

Lo que quiero es que a la vez que suena la sintonia se encienda un lez, al mismo ritmo.
He hecho lo siguiente usando la libreria sound.c (https://code.google.com/p/pinguino32/so ... nd.c?r=288" onclick="window.open(this.href);return false;)

.
.
.
void jinglebells() {
Sound(11, E,(8<<R1_2),10);
toggle(14);
Sound(11, E,(8<<R1_2),10);
toggle(14);
Sound(11, E,(8<<R1),10);
toggle(14);
Sound(11, E,(8<<R1_2),10);
toggle(14);
Sound(11, E,(8<<R1_2),10);
toggle(14);
Sound(11, E,(8<<R1),10);
toggle(14);
Sound(11, E,(8<<R1_2),10);
toggle(14);
Sound(11, G,(8<<R1_2),10);
toggle(14);
Sound(11, C,(8<<R1_2),10);
toggle(14);
Sound(11, D,(8<<R1_2),10);
toggle(14);
.
.
.
.
...

}

void loop()
{

jinglebells();
sleep(1000);

}

No se si hay otra forma de hacerlo.
Por otro lado, otro problema es que no se que es R1,R1_2,R2... de tal forma que no puedo "traducir" ninguna partitura, por ejemplo (http://3.bp.blogspot.com/-pSk2RqAqtLo/U ... rismas.jpg" onclick="window.open(this.href);return false;)

sistemasorp
Usuario Experto
Usuario Experto
Posts: 472
Joined: Fri Jan 29, 2010 9:51 pm

Re: [programacion] Musica con pinguino

Post by sistemasorp » Tue Dec 16, 2014 4:51 pm

Según la propia librería es la duración de la nota en ms.

#define R4 8 // long (or four-measure rest)
#define R2 7 // double whole rest / breve rest
#define R1 6 // whole rest / semibreve rest
#define R1_2 5 // half rest / minim rest
#define R1_4 4 // quarter rest / crotchet rest
#define R1_8 3 // eighth rest / quaver rest
#define R1_16 2 // sixteenth rest / semiquaver rest
#define R1_32 1 // thirty-second rest / demisemiquaver rest
#define R1_64 0 // sixty-fourth rest / hemidemisemiquaver res

http://en.wikipedia.org/wiki/Note_value" onclick="window.open(this.href);return false;

Diaio
Forero Habitual
Forero Habitual
Posts: 159
Joined: Sun Aug 28, 2005 7:08 pm

Re: [programacion] Musica con pinguino

Post by Diaio » Tue Dec 16, 2014 6:52 pm

Pero no tiene sentido, entonces que seria R1_64, 0 ms? no tiene sentido poner algo que no hace nada.

Ranganok
Usuario Desarrollador
Usuario Desarrollador
Posts: 3874
Joined: Mon Nov 07, 2005 3:10 pm
Location: Barbaros del Valle
Contact:

Re: [programacion] Musica con pinguino

Post by Ranganok » Tue Dec 16, 2014 7:43 pm

Tiene sentido si cuentas que la instrucción de mover el literal a un registro ya consume algo de tiempo (unos pocos us).

A eso le tienes que añadir los jumps y comprobaciones de la función.

S2

Ranganok Schahzaman
skiras.blogspot.com

"En igualdad de condiciones la explicación más sencilla es la cierta"

sistemasorp
Usuario Experto
Usuario Experto
Posts: 472
Joined: Fri Jan 29, 2010 9:51 pm

Re: [programacion] Musica con pinguino

Post by sistemasorp » Tue Dec 16, 2014 8:25 pm

Diaio wrote:Pero no tiene sentido, entonces que seria R1_64, 0 ms? no tiene sentido poner algo que no hace nada.
Ten en cuenta que en el código hace un shift del número 8, así (8<<R1_64) es como decir (8<<0) que se queda en 8.

User avatar
Sphinx
Usuario Experto
Usuario Experto
Posts: 639
Joined: Thu Apr 03, 2008 4:45 pm
Location: Madrid
Contact:

Re: [programacion] Musica con pinguino

Post by Sphinx » Wed Dec 17, 2014 5:52 pm

Hola de nuevo Diaio,

Para que no te lies, ve directamente a la wiki de pinguino. http://wiki.pinguino.cc/index.php/Sound" onclick="window.open(this.href);return false;
Esa que he puesto es la definición de la función Sound.
No te debería ser muy dificil traducir cualquier partitura, puesto que puedes utilizar, como dice ahí, notas musicales DO, RE, MI, etc...
El primer parametro de la función es el pin de tu altavoz,
El segundo la nota musical.
El tercero la duración de la nota en milisegundos.
Y el cuarto, el volumen (de 0 a 10)

Respecto al código que has mostrado, me olvidaría. No creo que hacer un desplazamiento de un doublebyte ahí, vaya a provocar un delay concreto. Más bien creo que lo que se pretende pasar como valor de duración de la nota, 8 desplazado de su posición tantas veces como indica el el valor RX_y. Es decir, lo que queda en alguno de los ejemplos que hay en tu código es:

Teniendo en cuenta que 8 = 00000000 00001000 (binario)
- (8<<R1_2) == (8<<5) == 00000001 00000000(binario, desplazado 5 posiciones a la izquierda) = 512 ms
- (8<<R1_64) == (8<<0) == 00000000 00001000 = 8 ms
- etc...

Como te decía el tiempo de proceso de la instrucción, aunque si bien es cierto que algo es, no debería influir en la nota.

Espero que esto te ayude.

Saludos,
Sphinx.
Tanto si piensas que puedes, como si piensas que no puedes, estás en lo cierto.- Henry Ford
>> Mis experiencias y proyectos robóticos: http://linuxdroids.com

Ranganok
Usuario Desarrollador
Usuario Desarrollador
Posts: 3874
Joined: Mon Nov 07, 2005 3:10 pm
Location: Barbaros del Valle
Contact:

Re: [programacion] Musica con pinguino

Post by Ranganok » Wed Dec 17, 2014 7:50 pm

Vale, eso me pasa por responder sin mirarme bien el código....

Ok, tal y como yo lo veo el 8 de las instrucciones (8<<xxx) es el ritmo de la canción (tempo) y es duración de la nota mínima (supongo que será una semifusa), dado que las notas sin puntillo se doblan cada vez (una fusa dura lo que dos semifusas, una semicorchea dura dos fusas, etc.), es normal que halla puesto un desplazamiento.

Si quieres usar el mismo código puedes hacerlo simplemente pasando la partitura a parejas (Nota,duración) y aplicando las instrucciones:

Sound(Pin , Nota,(Tempo<<duración),volumen);

Incluso puedes hacer una matriz y aplicarlo de forma recursiva con un for o un while.

S2

Ranganok Schahzaman
skiras.blogspot.com

"En igualdad de condiciones la explicación más sencilla es la cierta"

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest