# Caja musical PIC16F84A



## idontcar3 (Jun 26, 2010)

he visto que hay un tema aca con este mismo asunto pero la solucion no es la que muchos esperan y con esas 5000 visitas.. decidi hacer este tema que ojala ayude a muchos con esto.

se trata de hacer una "caja musical" con un pic.

asi podremos tener una melodia con un pic, a muchos de seguro que les provoco hacerse algo asi...

pues es algo complejo.. agarrense.. 

yo tengo la version 7.2 de ISIS Proteus y buscando entre los ejemplos encontre un circuito de timbre con dos melodias







adentro se tiene el circuito, codigo ASM, el Hex listo para el PIC y etc etc..

utiliza el pic 16f84A.

bueno ahora.. ¿ y si no me gustan esas dos melodias?, ¿como me hago las mias?

enhorabuena 

pues me pase 2 semanas aprendiendo codigo ASM y editando probando y demas ese codigo que tiene asi que.. manos a la obra

probamos el circuito.. lo vemos.. analizamos y demas.. ahora.. para nuestra melodia, recomiendo el MPlab de microchip, muy bueno.. y como un festival de musica que huvo hace poco aca, completamente gratis.

entonces, abrimos Doorbell.asm y nos vamos a esta linea:


```
; Tune 0 Data
; Bach 'Badinerie' from Suite No 2
```

a partir de aca esta la melodia.. notemos algo..

esta el codigo de la nota.. y su duracion.. un ejemplo:


```
retlw 0x1A	;D
	retlw 0x3C	;120
	retlw 0x17	;B
	retlw 0x3C	;120
```

eso del 120 no quiere decir que dura 120 milisegundos ni nada de eso.. es, basicamente, la duracion de la nota, muscalmente hablando.. miremos esto:






uan redonda.. dura lo mismo que dos blancas, una blanca lo mismo que 2 negras, y por consiguiente, una redonda dura lo mismo que 4 negras

algo confuso.. lo se..

lo que esto quiere decir:


```
retlw 0x1A	;D
	retlw 0x3C	;120
	retlw 0x17	;B
	retlw 0x3C	;120
```

es que se tocara la nota D (Re) por aproximadamente un segundo, seguida de la nota B (Si) por la misma duracion.. ¿que determina la duracion de la nota?

el tempo amigos..


			
				Wikipedia dijo:
			
		

> En terminología musical, el tempo (en plural, tempi), movimiento o aire es la velocidad con que debe ejecutarse una pieza de música.



de seguro muchos han visto esto en partituras:






el tempo se traduce a:

la cantidad de notas negras que se tocan en un minuto

la imagen nos dice que se tocan 120 notas negras en un minuto, osea que cada una duraria 0.5 segundos

entonces como supodnre, ud ya tendran su melodia hecha, o la tomaran de otro lado.

asi que fijense en el tempo al que esta y nos vamos a:


```
;Routines to play the tunes
playtune0     movlw   0x13
	      movwf   PORTB
	      movlw   0x50
    	      movwf   tempo
	      movlw   tune0 / 0x100
	      movwf   tptrh
	      movlw   tune0 % 0x100
	      movwf   tptrl
	      goto    playtune
```

fijemonos en estas dos lineas:


```
movlw   0x50
    	      movwf   tempo
```

aca en esta instruccion. movlw, cargaremos nuestro tempo.

el que viene marcado es de 80. para fijar el nuestro debemos fijarlo en hexadecimal.. para los que no saben hexadecimal (como yo al principio).

esta pagina pasa de decimal a hexa

entonces con nuestro tempo fijado nos vamos a editar la melodia.

vamos de nuevo a


```
; Tune 0 Data
; Bach 'Badinerie' from Suite No 2
```

recuerden que son dos melodias, pero si quieren eliminan todos los datos de la otra para ahorrar espacio y no le colocan el otro pulsador.

entonces procedemos a editar.

si se fijan, mas arriba en el codigo estan "las notas" pero.. no son esas realmente..me dedique a sacarlas yo mismo.. una a una.. aca se las dejo


```
notas

	retlw 0x00	;c2
	retlw 0x01	;c#2
	retlw 0x02	;D2
	retlw 0x03	;D#2
	retlw 0x04	;E2
	retlw 0x05	;F2
	retlw 0x06	;F#2
	retlw 0x07	;G2
	retlw 0x08	;G#2
	retlw 0x09	;A2
	retlw 0x0A	;A#2
	retlw 0x0B	;B2
	retlw 0x0C	;C3
	retlw 0x0D	;C#3
	retlw 0x0E	;D3
	retlw 0x0F	;D#3
	retlw 0x10	;E3
	retlw 0x11	;F3
	retlw 0x12	;F#3
	retlw 0x13	;G3
	retlw 0x14	;G#3
	retlw 0x15	;A3
	retlw 0x16	;A#3
	retlw 0x17	;B3
	retlw 0x18	;C4
	retlw 0x19	;C#4
	retlw 0x1A	;D4
	retlw 0x1B	;D#4
	retlw 0x1c	;E4
	retlw 0x1D	;F4
	retlw 0x1E	;F#4
	retlw 0x1F	;G4
	retlw 0x20	;G#4
	retlw 0x21	;A4
	retlw 0x22	;A#4
	retlw 0x23	;B4
	retlw 0x24	;C5
```

ahora la de los tiempos:


```
tiempos:
	retlw 0x07	;57
	retlw 0x3C	;120x	  0:00.096
	retlw 0x18	;193	  0:00.040
	retlw 0x1B	;218	  0:00.047
	retlw 0x1D	;232	  0:00.049
	retlw 0x78	;240x	  0:00.193
	retlw 0xF0	;480x	  0:00.391
	retlw 0x3E	;498	  0:00.102
	retlw 0x43	;538	  0:00.107
	retlw 0x48	;582	  0:00.116	
	retlw 0x4D	;617	  0:00.129
```

las que tienen una X son las que encontre mas "reales" a la hora de escribir la musica
la duracion no es de fiarse por que las probe antes y creo que fue entre dos tempos distintos, no se que pasa ahora mi pc que se cualga un poco al grabar y asi no puedo examinar esto

entonces solo queda escribir nuestra melodia.. un ejemplo..

Himno de la alegria (Sinfonía n.º 9, Ludwig van Beethoven

```
retlw 0x1c	;E4
	retlw 0x1c	;E4
	retlw 0x1D	;F4
	retlw 0x1F	;G4
	retlw 0x1F	;G4
	retlw 0x1D	;F4
	retlw 0x1c	;E4
	retlw 0x1A	;D4
	retlw 0x18	;C4
	retlw 0x18	;C4
	retlw 0x1A	;D4
	retlw 0x1c	;E4
	retlw 0x1c	;E4
	retlw 0x1A	;D4
	retlw 0x1A	;D4
```

parece bien no?... pues no.. ¿ que tiene de mal?..

nos falto la duracion de las notas.. pues solo las colocamos.


```
retlw 0x1c	;E4
	retlw 0x78	;240
	retlw 0x1c	;E4
	retlw 0x78	;240
	retlw 0x1D	;F4
	retlw 0x78	;240
	retlw 0x1F	;G4
	retlw 0x78	;240
	retlw 0x1F	;G4
	retlw 0x78	;240
	retlw 0x1D	;F4
	retlw 0x78	;240
	retlw 0x1c	;E4
	retlw 0x78	;240
	retlw 0x1A	;D4
	retlw 0x78	;240
	retlw 0x18	;C4
	retlw 0x78	;240
	retlw 0x18	;C4
	retlw 0x78	;240
	retlw 0x1A	;D4
	retlw 0x78	;240
	retlw 0x1c	;E4
	retlw 0x78	;240
	retlw 0x1c	;E4
	retlw 0x78	;240
	retlw 0x1A	;D4
	retlw 0x78	;240
	retlw 0x1A	;D4
	retlw 0xF0	;480
```

notese que la ultima la dejamos sonar de mas por que asi va la cancion.

hasta aca todo bien, ya tenemos nuestra melodia hecha para el pic solo queda compilar a hex y quemar el pic pero se nos va un detalle..

el circuito de proteus esta pensado para un pic con cristal de cuarzo de 1mhz y pues por aca solo consigo de 4mhz ¿en que les afecta que tengan mi misma suerte?.. en mucho..

primero.. las notas seran una o dos octavas mas agudas

lease Octava

y pues la duracion no sera la misma.. sera mucho mas corta, pero me las he arreglado..

adjunto esta un rar con las melodias.. 

PIC1.mid es la que queria meter al pic pero la duracion de las notas es algo larga.
asi que solo hace falta dejar salir al musico interior para hacer unos arreglos para que la musica sea uniforme como se escucha en PIC2.mid

no encontre otra forma de hacerles llegar esto, no encuentro reproductores para el foro, y menos de midi

con esto todo claro.. para aquellos que tengan otra version de proteus adjunto el rar de la carpeta PIC Doorbell.

bueno espero haber ayudado a otros 5000 mas y ante cualquier duda solo escribir y esperar respuesta.


----------



## thenot (Jun 26, 2010)

Cuando tenga mas tiempo lo leeré detenidamente y probare, ya que probando es la mejor forma para aprender.. según yo..  y de música no cacho una así que esto esta de pelos .. =)

Saludos man.. y gracias.. siga así =D


----------



## HADES (Jun 26, 2010)

Bueno dire que aprendiste mas Duno! y pues bueno yo si no me hubiera animado a entrarle al ASM y pues bueno te felicito que seguramente mas de alguno se cruzara con esto saludos y segui asi!

HADES


----------



## idontcar3 (Jun 26, 2010)

fijate que con esto fue que aprendi el ASM, todo por el ocio.

dunno va con las dos "N"'s todos nos equivocamos

saludos a ti tambn


----------



## fernandoae (Jun 27, 2010)

Lindo laburo te mandaste pero esto se puede hacer muy facil con picbasic que ya tiene el comando, hay uno para sacar frecuencias (frec,duracion), uno para ruido rosa a distintas frecuencia o notas.


----------



## idontcar3 (Jun 27, 2010)

fernandoae dijo:


> Lindo laburo te mandaste pero esto se puede hacer muy facil con picbasic que ya tiene el comando, hay uno para sacar frecuencias (frec,duracion), uno para ruido rosa a distintas frecuencia o notas.



.......:cabezon:

u.u.. pensar que perdi mucho tiempo en esto.. teniendo para sacar la frecuencia de las notas que aca las tengo..


bueno igual aprendi ASM.. revisare eso del picbasic a ver que tal .. muchas gracias fernandoae


----------



## Yang (Jun 27, 2010)

"la imagen nos dice que se tocan 120 notas negras en un minuto, osea que  cada una duraria 0.5 segundos" con esto se puede temporizar los tiempo estandar, bueno gracias por la enseñanza, yo tambien había observado Doorbell.asm pero me complicaba mas en obtener notas de ese tipo
    retlw 0x00    ;c2
    retlw 0x01    ;c#2
    retlw 0x02    ;D2
    retlw 0x03    ;D#2
    retlw 0x04    ;E2

nomenclatura ingles (frecuencias de cada nota musical),  gracias!


----------



## idontcar3 (Jun 27, 2010)

Yang dijo:


> "la imagen nos dice que se tocan 120 notas negras en un minuto, osea que  cada una duraria 0.5 segundos" con esto se puede temporizar los tiempo estandar, bueno gracias por la enseñanza, yo tambien había observado Doorbell.asm pero me complicaba mas en obtener notas de ese tipo
> retlw 0x00    ;c2
> retlw 0x01    ;c#2
> retlw 0x02    ;D2
> ...



pues fijate que asi aprendi yo.. con la notacion inglesa.. me parece mas facil con las primeras 7 letras del ABC que con el poema pero bueno.. como nos podamos entender


----------



## skott (Jul 25, 2010)

lo mejor que e encontrado con respecto a melodias con pic puesto que me hacia muchas bolas con el asm muy bune aporte ahora a practica


----------



## mecatrodatos (Jul 25, 2010)

dejo reproducción de notas obtenidas con el pic basic pro


----------



## idontcar3 (Jul 25, 2010)

mecatrodatos dijo:


> dejo reproducción de notas obtenidas con el pic basic pro



tendra ud el codigo fuente?..

me gustaria ojearlo por favor


----------



## mecatrodatos (Jul 28, 2010)

que tal te dejo el código 



```
'****************************************************************
'*  Name    :  Programa de Producción de musica 2010: Tema 1    *
'*  Author  : [mecatrodatos                                     *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 28/07/2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

'-----------Inicializacion ---------

    define OSC 20           ' Establece la frecuencia de operación del microcontrolador
                            'A 20 MHz.
    TRISB = %11111000          ' Configura RB0 - 3 de PORTB como salida
    
    PORTB = %00000000        ' Establece todos los pines en PORTB en Bajo (0 V).          



' La variable "x" representa la octava nota. La longitud de tiempo que la
' corchea (x) es detereminada por el valor fijado en 200.
' Un cuarto de nota es dos veces una corchea o 2x.

    x var Word 
    
' Estas son las constantes que se utiliza para declarar las frecuencias Como señala.
'Por ejemplo los grupos de autoayuda representa Super G de alta que tiene una frecuencia de 1568 Hz.
    
    shg con  1568
    shef con 1244
    shc con  1046
    shbf con 932
    shaf con 830
    hg con   784
    hf con   698
    hef con  622
    hd con   587
    hc con   523
    hbf con  466
    haf con  415
    g con    392
    f con    349
    ef con   311
    d con    293
    c con    261
    bf con   233
    af con   208
    lg con   196
    lf con   174
    lef con  155
    ld con   146
    lc con   130
    lbf con  116
    laf con  103
    slg con  98
    slf con  87
    slef con 78
    sld con  73
    slc con  65
    
'-------------programa principal------------    
    
    x = 200             ' Una nota de sesiones (x) será de 200 ms largo.
      
  Pause 1000            ' Pausa 1000 ms antes de iniciar la generación de tonos.
    
' linea 1  

  FreqOut 1, x, g       ' Usamos FreqOut Para generar un tono. 1 representa
'pin de salida RB1 en el PIC16F88. "X" simboliza la
'corchea. "G" se define como la frequecy 392 Hz.
                        
  FreqOut 1, x, f       
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 4*x, ef
  FreqOut 1, 4*x, d
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 4*x, ef
  FreqOut 1, 4*x, d
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  
 'linea 2
 
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 3*x, d
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, af
  FreqOut 1, 8*x, ef
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 2*x, hef
  
  'linea 3
  
  FreqOut 1, 2*x, hef
  FreqOut 1, 4*x, hd
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 4*x, hef             
  FreqOut 1, 4*x, hd                         
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 2*x, hd
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  
  'linea 4
  
  FreqOut 1, x, hbf
  FreqOut 1, x, haf
  FreqOut 1, 9*x, hef
  FreqOut 1, 4*x, 0  
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, c
  FreqOut 1, x, d 
  FreqOut 1, 2*x, lg 
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, 2*x, c
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, c
  FreqOut 1, x, d
  FreqOut 1, 2*x, lg 
  FreqOut 1, x, ef
  FreqOut 1, x, d
  
  'linea 5 
  
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, 2*x, c 
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, c
  FreqOut 1, x, d
  FreqOut 1, 2*x, lg
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, d
  FreqOut 1, 2*x, c
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, x, hc
  FreqOut 1, x, hd
  FreqOut 1, 2*x, g
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, 2*x, hc
  
  'linea 6
  
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, x, hc
  FreqOut 1, x, hd
  FreqOut 1, 2*x, g
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, 2*x, hc
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, x, hc
  FreqOut 1, x, hd
  FreqOut 1, 2*x, g
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hd
  FreqOut 1, 2*x, hc
  FreqOut 1, 2*x, hg
  FreqOut 1, 2*x, shC
  
  'linea 7
  
  FreqOut 1, 2*x, shef
  FreqOut 1, 4*x, shg
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 4*x, ef
  FreqOut 1, 4*x, d
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 4*x, ef
  FreqOut 1, 4*x, d
  
  'linea 8
  
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 3*x, d
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, af
  FreqOut 1, 8*x, ef
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 2*x, hef
  
  'linea 9
  
  FreqOut 1, 2*x, hef
  FreqOut 1, 4*x, hd
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 4*x, hef             
  FreqOut 1, 4*x, hd                         
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 2*x, hd
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, x, haf
  FreqOut 1, 6*x, hef             
  End
```


----------



## Meta (Jul 28, 2010)

Que bueno el proyecto. Eso si, los Chinitos de la suerte y los Japos están mucho con este tipo de temas.


----------



## idontcar3 (Jul 28, 2010)

mecatrodatos dijo:


> que tal te dejo el código




mm no encuentro mayor diferencia que el microcontrolador..
sera por mi computadora?.. la simulacion en proteus va lenta "due exesive CPU load"

sera esto el micro controlador? 


```
define xtal 4
device 16f84A
'tempo = 150
'60/150 = duracion de una nota negra
'redonda = 1600
'blanca = 800
'negra = 400
'corchea = 200
'semi corchea = 100
'Ejemplo del comando
'FREQOUT portb.0, 2000, 7200 sacar una frecuencia 
'de 7,2 Khz durante 2 segundos por el Puerto B.0

start:
'primer compas
Freqout portb.0, 400, 659
Freqout portb.0, 200, 493
Freqout portb.0, 200, 523
Freqout portb.0, 400, 587
Freqout portb.0, 200, 523
Freqout portb.0, 200, 493
'segundo compas
Freqout portb.0, 400, 440
Freqout portb.0, 200, 440
Freqout portb.0, 200, 523
Freqout portb.0, 400, 659
Freqout portb.0, 200, 587
Freqout portb.0, 200, 523
'tercer compas
Freqout portb.0, 400, 493
Freqout portb.0, 200, 493
Freqout portb.0, 200, 523
Freqout portb.0, 400, 587
Freqout portb.0, 400, 659
'cuarto compas
Freqout portb.0, 200, 523
Freqout portb.0, 400, 440
Freqout portb.0, 800, 440
'quito compas
pause 200
Freqout portb.0, 400, 587
Freqout portb.0, 200, 698
Freqout portb.0, 400, 880
Freqout portb.0, 200, 783
Freqout portb.0, 200, 698
'sexto compas
Freqout portb.0, 400, 659
pause 500
Freqout portb.0, 200, 523
Freqout portb.0, 400, 659
Freqout portb.0, 200, 587
Freqout portb.0, 200, 523
'tercer compas
Freqout portb.0, 400, 493
Freqout portb.0, 200, 493
Freqout portb.0, 200, 523
Freqout portb.0, 400, 587
Freqout portb.0, 400, 659
'cuarto compas
Freqout portb.0, 200, 523
Freqout portb.0, 400, 440
Freqout portb.0, 800, 440

                                
END
```

las pausas son los silencios, lo divido en compases para mejor lectura, no quise mandarme a escribir todas las octavas con el var y


----------



## wilor8 (Ago 10, 2010)

eh leido atentamete el programa que dejastes pero tengo un duda con una isntrucciones dadas

movwf   tempo
movlw   tune0 / 0x100

lo q no tengo claro es operador "/" con respecto a la tabla "tune0"; no entiendo que es lo q lee o retorna a "w"

Si puedes me explicas mejor por que usan ese operador.

Gracias


----------



## iirvviinngg (Sep 29, 2010)

Hola. Buen día.
Todo el código esta entendible, pero tengo la misma duda que el compañero @wilor8.
¿Por qué divides y le sacas el modulo ?

movlw   tune0 / 0x100
movwf   tptrh
movlw   tune0 % 0x100

Espero tu respuesta. Gracias.


----------



## pepechip (Sep 29, 2010)

esos signos son directivas del MPLAB, y se colocan cuando las tablas de datos superan las 256 primeras posiciones de memoria.


----------



## iirvviinngg (Oct 10, 2010)

¿Cómo podemos hacer la conversión de 1Mhz a 4Mhz para el Cristal Oscilador?
Gracias.


----------



## Yang (Oct 14, 2010)

iirvviinngg dijo:


> ¿Cómo podemos hacer la conversión de 1Mhz a 4Mhz para el Cristal Oscilador?
> Gracias.


 No entiendo muy bien tu pregunta, podrias reeplantearla.

Si te refieres a convertir un cristal de 1Mhz a un cristal de 4Mhz, no se.
Si te refieres a convertir ese codigo del doorbell de 1Mhz a 4Mhz, el autor del hilo explica muy bien como se logra, usando tablas de la frecuencia de cada nota musical, si tienes un cristal de 4Mhz debes generar tus tablas de duración de los ciclos del micro o por interrupciones, te recomiendo usar el PICTimerCalculator.


----------



## sebaa (Dic 20, 2010)

Muy bueno, lo voy a probar. Y para reproducir el sonido que me conviene usar?


----------



## idontcar3 (Dic 20, 2010)

sebaa dijo:


> Muy bueno, lo voy a probar. Y para reproducir el sonido que me conviene usar?



el siguiente circuito 







claro que al PIC le colocas su respectivo oscilador y la salida  dependera de a donde la dirijas en los pines


----------



## sebaa (Dic 20, 2010)

Gracias, no lo habia visto


----------



## idontcar3 (Dic 20, 2010)

sebaa dijo:


> Gracias, no lo habia visto



si, la verdad que en el original de ISIS no tiene los filtros y puede que se escuche algo feo
un abrazo


----------



## Meta (Dic 20, 2010)

Hola:






http://www.publicaciones.urbe.edu/index.php/telematique/article/view/264/584

Saludo.


----------



## idontcar3 (Dic 20, 2010)

Meta dijo:


> Hola:
> 
> 
> 
> ...



Esto solo se cumple si el tempo queda establecido a 60 pero.. eso es muy lento para una pieza :S quizas para mas antiguas (clasica) si


----------



## vicmen (Mar 12, 2011)

wow excelente.. justo ahora estoy llevando digital 3 estamos usando este compilador salu2


----------



## xryux00 (Nov 2, 2011)

idontcar3 dijo:


> mm no encuentro mayor diferencia que el microcontrolador..
> sera por mi computadora?.. la simulacion en proteus va lenta "due exesive CPU load"
> 
> sera esto el micro controlador?
> ...






ya probe tu codigo y funciona bien pero aun no entiendo  como es que sacas esto

Freqout portb.0, 800, 440

si alguien me podria dar alguna ayuda se lo agradeceria mucho
es que quiero aprender para poder ponerle mas melodias a mi pic  grax de antemano


----------



## idontcar3 (Nov 3, 2011)

xryux00 dijo:


> ya probe tu codigo y funciona bien pero aun no entiendo  como es que sacas esto
> 
> Freqout portb.0, 800, 440
> 
> ...




Es una instruccion de PBP (Pic Basic Pro)

http://www.todopic.com.ar/pbp_sp.html#freqout


----------



## xryux00 (Nov 8, 2011)

bueno creo q*ue* no me exprese bien si se que son instrucciones lo q*ue* no entiendo es como hizo para saber que nota era la que representa ese numero(800, 440)ya se q*ue* uno es el tiempo y el otro es la frecuencia pero quisiera saber como  sacar la frecuencia de una  cancion o melodia????????

me dicen q*ue* tengo q*ue* utilizar la instruccion sound dicen q*ue* es mejor q*ue* me podrian aconsejar la verdad  recien estoy comenzando... con esto del picbasic 
 graciasss!!!!!!!!!!!!


----------



## Chico3001 (Nov 9, 2011)

La frecuencia esta dada por la nota... 440Hz corresponde a la nota "LA", aqui te dejo las frecuencias de cada nota para cada octava....

Primera octava:
---------------
Do  1: 65,406
Do# 1: 69,296
Re  1: 73,416
Re# 1: 77,782
Mi  1: 82,407
Fa  1: 87,307
Fa# 1: 92,499
Sol 1: 97,999
Sol#1: 103,826
La  1: 110
La# 1: 116,541
Si  1: 123,471 

Segunda octava:
---------------
Do  2: 130,813
Do# 2: 138,591
Re  2: 146,832
Re# 2: 155,563
Mi  2: 164,814
Fa  2: 174,614
Fa# 2: 184,997
Sol 2: 195,998
Sol#2: 207,652
La  2: 220
La# 2: 233,082
Si  2: 246,942 

Tercera octava:
---------------
Do  3: 261,626
Do# 3: 277,183
Re  3: 293,665
Re# 3: 311,127
Mi  3: 329,628
Fa  3: 349,228
Fa# 3: 369,994
Sol 3: 391,995
Sol#3: 415,305
La  3: 440
La# 3: 466,164
Si  3: 493,883 

Cuarta octava:
---------------
Do  4: 523,251
Do# 4: 554,365
Re  4: 587,33
Re# 4: 622,254
Mi  4: 659,255
Fa  4: 698,456
Fa# 4: 739,989
Sol 4: 783,991
Sol#4: 830,609
La  4: 880
La# 4: 932,328
Si  4: 987,767 

Quinta octava:
---------------
Do  5: 1046,502
Do# 5: 1108,731
Re  5: 1174,659
Re# 5: 1244,508
Mi  5: 1318,51
Fa  5: 1396,913
Fa# 5: 1479,978
Sol 5: 1567,982
Sol#5: 1661,219
La  5: 1760
La# 5: 1864,655
Si  5: 1975,533 

Sexta octava:
---------------
Do  6: 2093,005
Do# 6: 2217,461
Re  6: 2349,318
Re# 6: 2489,016
Mi  6: 2637,02
Fa  6: 2793,826
Fa# 6: 2959,955
Sol 6: 3135,963
Sol#6: 3322,438
La  6: 3520
La# 6: 3729,31
Si  6: 3951,066

Septima octava:
---------------
Do  7: 4186,009
Do# 7: 4434,922
Re  7: 4698,636
Re# 7: 4978,032
Mi  7: 5274,041
Fa  7: 5587,652
Fa# 7: 5919,911
Sol 7: 6271,927
Sol#7: 6644,875
La  7: 7040
La# 7: 7458,62
Si  7: 7902,133 

Octava octava:
(valga la redundancia 
---------------
Do  8: 8372,018
Do# 8: 8869,844
Re  8: 9397,273
Re# 8: 9956,063
Mi  8: 10548,082
Fa  8: 11175,303
Fa# 8: 11839,822
Sol 8: 12543,854
Sol#8: 13289,75
La  8: 14080
La# 8: 14917,24
Si  8: 15804,266


----------



## idontcar3 (Nov 9, 2011)

xryux00 dijo:


> bueno creo q no me exprese bien si se que son instrucciones lo q no entiendo es ...



wow menudo trabajo con esa tipografia chico3001, yo uso esta tabla que tiene los mismos valores, no llega hasta la octava octava 
pero  igual me sirve


----------



## Chico3001 (Nov 9, 2011)

jajajaja... dame chance... eso lo hice a las 2 am...


----------



## xryux00 (Nov 10, 2011)

muy bueno gracias a todos ahora solo tengo q ver como crear una melodia con sus tiempos y todo !!!!!


----------



## aaronjeremias (Nov 24, 2011)

ya corri el programa en mplab y si me lo compila lo que tengo duda es: que es lo que conectas una bocina o un buzzer y la otra duda es en donde lo conectas, yo etoy usando un pic16f877a que es basicamente de la misma famila pero no se donde esta la salida y como controlas los sonidos gracias


----------



## gustavo (Nov 24, 2011)

Muy interesante esta este tema! buen laburo, saludos!


----------



## xryux00 (Dic 2, 2011)

aaronjeremias dijo:


> ya corri el programa en mplab y si me lo compila lo que tengo duda es: que es lo que conectas una bocina o un buzzer y la otra duda es en donde lo conectas, yo etoy usando un pic16f877a que es basicamente de la misma famila pero no se donde esta la salida y como controlas los sonidos gracias



pues  en tu programacion tienes q ver por q pin estas  mandandole  la frecuencia pues  seria bueno q subieras  tu programa


----------



## L lawlied (Dic 22, 2011)

ola tengo un problema al momento de compilar el archibo  
no se q pasa me sale un error  en el basic ..si pudieran ayudarme
porq lo encuentro muy interesante este tema


----------



## SERGIOD (Dic 22, 2011)

L lawlied dijo:


> ola tengo un problema al momento de compilar el archibo
> no se q pasa me sale un error  en el basic ..si pudieran ayudarme
> porq lo encuentro muy interesante este tema



sube tu programa para leerlo aca y si nosotros lo podemos compilar mejor no


----------



## L lawlied (Dic 23, 2011)

es el que an posteado aca  este es 

```
'****************************************************************
'*  Name    :  Programa de Producción de musica 2010: Tema 1    *
'*  Author  : [mecatrodatos                                     *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 28/07/2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

'-----------Inicializacion ---------

    define OSC 20           ' Establece la frecuencia de operación del microcontrolador
                            'A 20 MHz.
    TRISB = %11111000          ' Configura RB0 - 3 de PORTB como salida
    
    PORTB = %00000000        ' Establece todos los pines en PORTB en Bajo (0 V).          



' La variable "x" representa la octava nota. La longitud de tiempo que la
' corchea (x) es detereminada por el valor fijado en 200.
' Un cuarto de nota es dos veces una corchea o 2x.

    x var Word 
    
' Estas son las constantes que se utiliza para declarar las frecuencias Como señala.
'Por ejemplo los grupos de autoayuda representa Super G de alta que tiene una frecuencia de 1568 Hz.
    
    shg con  1568
    shef con 1244
    shc con  1046
    shbf con 932
    shaf con 830
    hg con   784
    hf con   698
    hef con  622
    hd con   587
    hc con   523
    hbf con  466
    haf con  415
    g con    392
    f con    349
    ef con   311
    d con    293
    c con    261
    bf con   233
    af con   208
    lg con   196
    lf con   174
    lef con  155
    ld con   146
    lc con   130
    lbf con  116
    laf con  103
    slg con  98
    slf con  87
    slef con 78
    sld con  73
    slc con  65
    
'-------------programa principal------------    
    
    x = 200             ' Una nota de sesiones (x) será de 200 ms largo.
      
  Pause 1000            ' Pausa 1000 ms antes de iniciar la generación de tonos.
    
' linea 1  

  FreqOut 1, x, g       ' Usamos FreqOut Para generar un tono. 1 representa
'pin de salida RB1 en el PIC16F88. "X" simboliza la
'corchea. "G" se define como la frequecy 392 Hz.
                        
  FreqOut 1, x, f       
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 4*x, ef
  FreqOut 1, 4*x, d
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 4*x, ef
  FreqOut 1, 4*x, d
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  
 'linea 2
 
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 3*x, d
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, af
  FreqOut 1, 8*x, ef
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 2*x, hef
  
  'linea 3
  
  FreqOut 1, 2*x, hef
  FreqOut 1, 4*x, hd
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 4*x, hef             
  FreqOut 1, 4*x, hd                         
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 2*x, hd
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  
  'linea 4
  
  FreqOut 1, x, hbf
  FreqOut 1, x, haf
  FreqOut 1, 9*x, hef
  FreqOut 1, 4*x, 0  
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, c
  FreqOut 1, x, d 
  FreqOut 1, 2*x, lg 
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, 2*x, c
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, c
  FreqOut 1, x, d
  FreqOut 1, 2*x, lg 
  FreqOut 1, x, ef
  FreqOut 1, x, d
  
  'linea 5 
  
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, 2*x, c 
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, c
  FreqOut 1, x, d
  FreqOut 1, 2*x, lg
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, d
  FreqOut 1, 2*x, c
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, x, hc
  FreqOut 1, x, hd
  FreqOut 1, 2*x, g
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, 2*x, hc
  
  'linea 6
  
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, x, hc
  FreqOut 1, x, hd
  FreqOut 1, 2*x, g
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, 2*x, hc
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, x, hc
  FreqOut 1, x, hd
  FreqOut 1, 2*x, g
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hd
  FreqOut 1, 2*x, hc
  FreqOut 1, 2*x, hg
  FreqOut 1, 2*x, shC
  
  'linea 7
  
  FreqOut 1, 2*x, shef
  FreqOut 1, 4*x, shg
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 4*x, ef
  FreqOut 1, 4*x, d
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 4*x, ef
  FreqOut 1, 4*x, d
  
  'linea 8
  
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, g
  FreqOut 1, x, f
  FreqOut 1, x, ef
  FreqOut 1, x, c
  FreqOut 1, 3*x, d
  FreqOut 1, x, ef
  FreqOut 1, x, d
  FreqOut 1, x, c
  FreqOut 1, x, bf
  FreqOut 1, x, af
  FreqOut 1, 8*x, ef
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 2*x, hef
  
  'linea 9
  
  FreqOut 1, 2*x, hef
  FreqOut 1, 4*x, hd
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 4*x, hef             
  FreqOut 1, 4*x, hd                         
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hg
  FreqOut 1, x, hf
  FreqOut 1, x, hef
  FreqOut 1, x, hc
  FreqOut 1, 2*x, hd
  FreqOut 1, x, hef
  FreqOut 1, x, hd
  FreqOut 1, x, hc
  FreqOut 1, x, hbf
  FreqOut 1, x, haf
  FreqOut 1, 6*x, hef             
  End
```


----------



## L lawlied (Dic 23, 2011)

oegan como se hase q salga musica del 16f84a pero con el basicpro ????


----------



## L lawlied (Dic 24, 2011)

fernandoae dijo:


> Lindo laburo te mandaste pero esto se puede hacer muy facil con picbasic que ya tiene el comando, hay uno para sacar frecuencias (frec,duracion), uno para ruido rosa a distintas frecuencia o notas.




como es eso amigo podias dar un ejemplo estoy interesado en este proyecto...


----------



## dinoelectro (Dic 25, 2011)

que buen proyecto idontcar, y que bien explicado esta todo.... ahora mismo me pondre a experimentar con este tema que para mi es totalmente nuevo


----------



## alecmander (Dic 26, 2011)

Hola muy lindo loco!! te felicito, yo hice algo parecido pero en CCS lo dejo aca por si alguien lo quiere ver:
https://www.forosdeelectronica.com/f24/generar-sonido-pic16f628a-37544/
yo lo que hice fue agarra la guitarra, sacar las notas, anotarlas y directo al pic!!!


----------

