Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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.
Pero no tiene sentido, entonces que seria R1_64, 0 ms? no tiene sentido poner algo que no hace nada.
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
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.
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.
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