# Como generar sonido con el pic 16F877? Sólo un "beeek"



## marhuen (Mar 4, 2011)

Buenas noches.

He desarrollado un pequeño programa que consiste en una alarma. El pic está conectada a 4 puertas de la casa, cuando una de estas puertas se abre, dejo 10 segundos para que el usuario la apague, si no lo hace saltará la alarma (se encenderá un led), también tengo un interruptor que enciende o apaga el sistema y un botón para resetear la alarma (el led). Ahora mi duda está...como puedo ponerle un altavoz para que suene? Es decir, no quiero ninguna melodía ni nada, con el "beek" del pc me basta, pero no tengo ni idea de como hacerlo (estoy empezando en esto de los microcontroladores) y he colocado el altavoz al lado del led para que cuando la alarma (el led) se encienda, también suene, pero al ejecutar en "Proteus" no hace nada. Me podéis echar una mano?

Gracias.

P.D: Adjunto la imagen del diseño


----------



## snakewather (Mar 4, 2011)

*Si estas trabajando en Pic Basic Pro:*

*INSTRUCCIÓN  SOUND*[/SIZE]
  FORMATO
SOUND NN_PIN, [TONO1,PERIODO1,TONO2,PERIODO2]
  SOUND, genera tonos audibles o ruido blanco en un pin del PIC. Se pueden combinar más de una frecuencia de 1 a 27 que son los tonos y de 128 a 255 que corresponde al ruido blanco.

   EJEMPLO:
  SOUND PORTB.0,[50,10,100,20] ;_ Se ha combinado dos frecuencias de 3937 Hz cona una duración de 10 ms y 7874 Hz con una duración de 20 ms._

*si estas programando en CCS:*
Las notas se generarán utilizando una librería que trae el CCS. La librería de llama “TONES.C” e incluye esta función:

generate_tone(frequency, duration)

Esta función nos permitirá crear las notas musicales. Para usarla debemos tener en cuenta los siguientes parámetros:

“frecuency” es una variable que tomará el valor de la nota que queramos generar.
“duration” es el tiempo que durará la nota y está dada en milisegundos.


----------



## marhuen (Mar 5, 2011)

Gracias por la respuesta, aunque me han quedado dudas. En el ejemplo que has puesto:

SOUND PORTB.0,[50,10,100,20] ; Se ha combinado dos frecuencias de 3937 Hz cona una duración de 10 ms y 7874 Hz con una duración de 20 ms.

La salida será un sonido de 10ms a 3937Hz a la vez con una de 20ms a 7874Hz? o primero una y luego la otra? De donde sale que ese 10 y ese 20 son milisegundos, porque son mili? de donde sale el valor de las frecuencias?

y por último, si lo que quiero es que mientras PORTA,5=1 salga un sonido "beeek" hasta que PORTA,5=0, como lo hago?

Gracias


----------



## Basalto (Mar 5, 2011)

Otra solucion mas facil es que le pongas un zumbador, que suene con 5V de continua.


----------



## marhuen (Mar 5, 2011)

Basalto dijo:


> Otra solucion mas facil es que le pongas un zumbador, que suene con 5V de continua.



Pero eso puedo hacerlo con proteus?


----------



## Basalto (Mar 5, 2011)

Pones un Buzzer y en editar le pones que funcione a 5 v. Mira esto http://es.wikipedia.org/wiki/Zumbador


----------



## marhuen (Mar 5, 2011)

Basalto dijo:


> Pones un Buzzer y en editar le pones que funcione a 5 v. Mira esto http://es.wikipedia.org/wiki/Zumbador



Voy a ver si proteus tiene este componente jejejej

P.D: Vale, si que lo tiene, esta tarde lo provaré a ver que tal va. Aunque...si la velocidad de reloj de mi pic es de 4Mhz, se escuchará algo? (como nosotros escuchamos hasta unos 20Khz...)


----------



## Basalto (Mar 5, 2011)

Pero es que el zumbador funciona con continua. Pones un pin a 1 y se suena seguido, el zumbador tiene dentro unas placas que vibran y provocan la frecuencia que escuchas. Cuando quieres que pare pones el pin a 0 y se acabo. Lo que tienes que mirar es cuanto consume que no pueden superar los 20 mA, por que si no tienes que poner un transistor. Por ejemplo, este te sirve y lo puedes colocar directamente al un pin del PIC http://es.farnell.com/kingstate/kpeg-272/timbre-piezo/dp/1193672


----------



## marhuen (Mar 5, 2011)

Basalto dijo:


> Pones un Buzzer y en editar le pones que funcione a 5 v. Mira esto http://es.wikipedia.org/wiki/Zumbador



He puesto el Buzzer exáctamente donde tenía el altavoz, lo he modificado para que funcione a 5v y está a una frecuencia de 500Hz y cuando se enciende el led (se pone a 1) el Buzzer no hace nada. Que puede pasar?


----------



## Basalto (Mar 5, 2011)

Es que el led esta en serie con el Buzzer, entonces en el led cae 1.4 voltios y gran parte en la resistencia, entonces casi no le llega tensión al Buzzer. Coloca el led en otra salida.


----------



## marhuen (Mar 5, 2011)

Basalto dijo:


> Es que el led esta en serie con el Buzzer, entonces en el led cae 1.4 voltios y gran parte en la resistencia, entonces casi no le llega tensión al Buzzer. Coloca el led en otra salida.



Cambiaré el puerto del Buzzer, tengo que ponerle algún tipo de resistencia o conectadola a otro puerto y que este genere 5v sobra?


----------



## Basalto (Mar 5, 2011)

No hace falta que conectas nada. Pero para imprementarlo yo utilizaria un transistor y piensa que cuanto mas tensión mas alto te va a sonar. Lo cual puedes darle 24 v, si vas a meter en trafo le pones un regulador a 24 v y otro de 5 v para el micro. Si te llega el volumen a 5 voltios esta bien


----------



## marhuen (Mar 5, 2011)

Basalto dijo:


> No hace falta que conectas nada. Pero para imprementarlo yo utilizaria un transistor y piensa que cuanto mas tensión mas alto te va a sonar. Lo cual puedes darle 24 v, si vas a meter en trafo le pones un regulador a 24 v y otro de 5 v para el micro. Si te llega el volumen a 5 voltios esta bien



Símplemente he puesto el Buzzer en el PORTA,1 que tenía libre y configurando todo para cuando se encienda el led de la alarma, también salga un 1 por el PORTA,1 nada más, necesito algo simple =)

EDITO: Lo que he hecho no funciona...uff, a ver que le pasa...

EDITO2: La resistencia del componente era muy baja, la he puesto a 10k y ya funciona. Gracias por las molestias =)


----------



## snakewather (Mar 6, 2011)

marhuen dijo:


> Gracias por la respuesta, aunque me han quedado dudas. En el ejemplo que has puesto:
> 
> SOUND PORTB.0,[50,10,100,20] ; Se ha combinado dos frecuencias de 3937 Hz cona una duración de 10 ms y 7874 Hz con una duración de 20 ms.
> 
> ...




*Hola por lo que veo si estas trabajando con PBP en el ejemplo:*

EJEMPLO:[/SIZE]
   SOUND  PORTB.0,[50,10,100,20] : Son dos sonidos primero el tono 15 que dura 10  milisegundos y despues el tono 100 que dura 20 ms en la practica he  notado que el segunda sonido se mazcla poquito el segundo tono cuando  esta por terminar el primero ya empezo a sonar el segundo.

de donde sale el valor de las frecuencias? 
 
*R= *salen por pin del puerto que eligas para SOUND en este caso SOUND PORTB.0

mientras PORTA,5=1 salga un sonido "beeek" hasta que PORTA,5=0, como lo hago?

*R=* WHILE (PORTA.5=1)
                SOUND PORTB.0,[50,10]
   WEND
         Instrucciones en caso de que PORTA.5=0


Ademas te dejo una imagen del isis donde debes de seleccionar los buzers, bocinas, motores, lamparas, leds que digan en su descripcion *ACTIVE* ya que son *ANIMADOS*, esto quiere decir que tienen movimiento visible(caso de motor), se ve que prenden y apagan (caso de leds) y producen sonido al simular por tus bocinas de la PC (en caso de bocinas y buzers)


Consulta este Curso de PBP:
https://www.forosdeelectronica.com/f24/curso-programacion-pic-bsic-pro-20658/

PD: Algunas cosas ya estan en el foro_.

_


----------



## FALKON707 (Mar 9, 2011)

Mis queridos amigos...¡¡¡

yo utlizo en pbp la siguiente sentencia:

*sound portb.0 [120,50]*

pero al momento de programar el pic me genera salidas de pulsos de 5 vol,  mas no los tonos, que puede ser la razon de eso ?


----------



## Basalto (Mar 10, 2011)

Es que los pulsos a una determinada frecuencia, al conectarlos a un altavoz son los tonos


----------



## josb86 (Mar 10, 2011)

es mas con una simple rutina como la de prender y apagar un led puedes producir un sonido

inicio:
   HIGH PORTc.7   
   pause 80
   low PORTc.7
   pause 80



goto inicio
end

aunque con "sound portb.0" hay un poco mas de control en que sonido quieres


----------



## bondadoso (Mar 16, 2012)

snakewather y con ccs como generaria un ruido blanco?? osea una señal que contenga todas las frecuencias,


----------



## sydjoe (Ene 29, 2013)

snakewather dijo:


> *Si estas trabajando en Pic Basic Pro:*
> 
> *INSTRUCCIÓN  SOUND*[/SIZE]
> FORMATO
> ...


Saludos a todos, quería preguntar como sabes el valor de la frecuencia cuando usas el comando sound?? Por ejemplo cuando dics: SOUND PORTB.0,[50,10,100,20] ; Se ha combinado dos frecuencias de 3937 Hz cona una duración de 10 ms y 7874 Hz con una duración de 20 ms. Como sabes que 50 o 100 equivalen a 3937hz y 7874Hz respectivamente??, espero su pronta respuesta, de ante mano gracias .


----------



## Basalto (Ene 30, 2013)

sydjoe dijo:


> Saludos a todos, quería preguntar como sabes el valor de la frecuencia cuando usas el comando sound?? Por ejemplo cuando dics: SOUND PORTB.0,[50,10,100,20] ; Se ha combinado dos frecuencias de 3937 Hz cona una duración de 10 ms y 7874 Hz con una duración de 20 ms. Como sabes que 50 o 100 equivalen a 3937hz y 7874Hz respectivamente??, espero su pronta respuesta, de ante mano gracias .



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

Note 1 es aprox. 78,74 Hz y Note 127 es aproz. 10000 Hz . Utiliza interpolación.


----------



## anthony123 (Mar 31, 2013)

snakewather dijo:


> Las notas se generarán utilizando una librería que trae el CCS. La librería de llama “TONES.C” e incluye esta función:
> 
> generate_tone(frequency, duration)
> 
> ...



Y cómo hago para asignar el pin en donde quiero que salga la nota? (Estoy en C)

Saludos!


----------



## D@rkbytes (Mar 31, 2013)

anthony123 dijo:


> Y cómo hago para asignar el pin en donde quiero que salga la nota? (Estoy en C)
> 
> Saludos!


El pin de salida del tono se define en la librería TONES.C
Por default viene declarado el pin RB0

Éste ejemplo que adjunto es el que viene incluido, reproduce las notas de la canción "Happy Birthday".

Suerte.


----------



## gattowx (Dic 12, 2014)

hola
se puede sacra sonidos como el de una vaca por medios del comando SOUND o FREQOUT


----------

