# Generar audio con PIC



## nandezfox (Jul 5, 2006)

Quiero generar audio con un PIC16F84, obviamente no pretendo sacar señales de audio stereo ni con una calidad de sonido envolvente, solo lo necesario como para reproducir palabras.

cualquier ayuda, link, agradezco de antemano.


----------



## maunix (Jul 14, 2006)

Hay integrados que guardan audio y reproducen en PCM.  No necesitarías el pic para eso.

Saludos


----------



## norikatzu (Jul 16, 2006)

hola. sabes amigo no te hagas problemas, ay un programa que convierte wav, mp3 y otros formatos, a formato de asembler. vasta con que le hagas una conversión de formato lo puedes aplicar al pic. y lo bueno es que no ocupa mucha memoria....!!!


----------



## tiopepe123 (Jul 16, 2006)

http://www.romanblack.com/picsound.htm

aunque como ves consume mucha memoria.

Si quieres hacer dicho proyecto pasate a micros mas modernos y mas practicos como pic16f876 o 877 o el pic18f452, al fin y al cabo es lo mismo, pero mas modernos.

El programador es compatible.


----------



## cooperharris (Mar 24, 2008)

hola a todos compañeros , ciertamente  la opcion de  añadir  un chipcorder a el circuitos seria la  mas recomendable, si quieres obtener salidas de audio de gran calidad y duracion, pero buscando la economia la idea de Norikatzu me parece bastante viable, nos darias  algunas direcciones de estos conversores a assembler?, y su implementacion en los PIC , gracias  de antemano.


----------



## norikatzu (Mar 24, 2008)

claro amigo dejame buscar las direcciones en mi Pc y las publicare aqui para que sea de mucha ayuda a todos.

ahora con respecto a tiopepe123 tiene razòn, si alguien piensa poner una musica mas larga o mejorar el tono de la musica en ese caso si que necesitara un microcontrolador de mayor capacidad o en tal caso usar una memoria de la serie 27XXX.....


----------



## daos (Dic 4, 2008)

Alguien tiene ya hecho un proyecto con el sound encoder de roman?
quiero hacer una prueba con un dspic supongo q tiene buena capacidad para soportar la memoria que requiere el programa que me genere el sound encoder.
me parece maravilloso que solo meta el codigo y ya! jaja

Si tienen un proyecto hecho con su diagrama y codigo hagamelo saber!

solo necesito que reproduzca 5 segundos, tendrá suficiente memoria el dspic? 

Saludos


----------



## ELIUSM (Dic 5, 2008)

Hola! Te cuento que el programa que se baja en el primer link que aparece en todo este post, funciona muy bien. Revísenlo realmente. Genera cualquier cosa, hasta archivos Wav en ASM.
Para que veas si cabe en tu dsPIC, bája el programa y genera un archivo de 5 segundos, y a ver cuánta memoria ocupa.

Te dejo el enlace directo: http://www.romanblack.com/BTcSE20.zip


Ahora si, un detallito. Ayer generé un ASM, pero... que pasa si en vez de ponerle un cristal definido, le pongo otro de mayor o menos velocidad? El sonido se hace rápido o lento verdad?
No me fijé dónde es que se define la velocidad aqui.

Lo que si es más fácil de hacer, claro, es generar pitos tipo PCSPK (pitos de computador) con PIC.

Saludos!


----------



## janvama (Dic 18, 2008)

Muy interesante el Programita sw www.RomanBlack.com PicSound.

Alguien sabe como pasar el archivo generado a una eeprom externa?

Andrew.


----------



## daaran (Jun 30, 2009)

buenas, estoy probando a reproducir un sonido con el pic. pase el archivo wav con el btcse20 y saque el bin.  Este lo meto en un eeprom , y el pic la lee. pero como es el montaje de la salida hacia el altavoz?

aparte de la resistencia y el condensador,  el "output" va directamente al altavoz?

tampoco entiendo como trata los bytes del archivo para  luego reproducirlos, si esque hay que hacer algo...
muchas  gracias


----------



## thomasezequiel (Sep 8, 2009)

nandezfox   El MC141501P puede ser de utilidad.


----------



## gallocula (Ene 3, 2010)

buenas.. quisiera saber si alguno conoce algun grabador de .mp3 que deje tocar las opciones si es stereo-mono y la frecuencia de muestreo... ya que estoy en un proyectito y quiero reproducir sonidos de una bateria con microcontroladores (no me molesta que entre 1 solo sonido en un micro)... la cosa es que entre.. porque los que grabe recién ocupan 8k para arriba .. y me fije en las opciones avanzadas y decia que estaba grabado en stereo y con una frec de muestreo de 44khz.


Desde ya saludos.


----------



## Meta (Ene 3, 2010)

Coge los puert B como salida, cada uno de ello tiene una resistencia de diferentes valores cmo, 220, 330, 420, etc 


```
R1-----+
R2-----|
R3-----|
R4-----+------º Out. (Salida musical).
R5-----|
R6-----|
R7-----|
R8-----|
       |
       |
     MASA
```


----------



## COSMICO (May 24, 2010)

hola amigo meta.
 ahora veo este post y casualmente estaba intentando generar 
sonidos con un pic, pero en ccs
como tradusco esta tabla de btc sound encoder al c..

encontre unas tablas con notas musicales su frecuencia y tiempos 
pero no se nada de musica, y mucho menos como suena cada nota..
me puedes ayudar con esto..


----------



## Meta (May 24, 2010)

Estimado amigo.

Lo único que tienes que hacer es activar los puertos que desees a su salida.

Un cordial saludo.


----------



## COSMICO (May 25, 2010)

Ok amigo meta.
Si. ya habia leido tu respuesta a otro miembro del foro.
Conoces algun programa, como un piano que muestre 
las notas al ser oprimida sus teclas y de el sonido de cada una.
Quiero generar mis propios sonidos; ya sabiendo como suena cada nota 
con los tiempos y frecuencias de las tablas creo que puedo hacerlo..


----------



## Meta (May 25, 2010)

No la conozco. Puedes sacar ideas con fotos.


----------



## antiworldx (May 25, 2010)

Hasta donde tengo entendido, ya que mi facultad es control y no señales, con transformadas Z puedes generar cualquier sonido, ya sean notas limpias o con armonicos para hacer sonidos mas complejos (justo como los sintetizadores digitales).
La pregunta aqui es, sabes transformada Z?
Con calculos de matematica discreta puedes hacer sonidos de una guitarra, flauta, piano, etc etc y sacarlos por el pwm al estilo de un amplificador clase D.


----------



## COSMICO (May 25, 2010)

Gracias amigo meta.
ya encontre el pianito que tanto buscaba y con los datos que me diste
ya estoy listo..
Claro que si amigo antiworldx, pero conociendo los tiempos 
la frecuencia de cada nota y su sonido
no tendria la necesidad de complicarlo tanto matematicamente..
Gracias


----------



## antiworldx (May 25, 2010)

Ok, es por si se te antoja hacer ruidos mas elaborados, quiza te sirva la referencia.


----------



## COSMICO (May 10, 2011)

Ok gracias.
me ayude con un programa llamado mozart, y buscando por internet las notas musicales de algunas canciones, ya pude hacer algo aceptable.
Gracias de nuevo.


----------



## jcristhian_1 (May 11, 2011)

Hola a todos, seria interesante saber como generar  sonidos usando transformada z, antiworldx ¿podrias comentar mas sobre el tema?


----------



## antiworldx (May 11, 2011)

Pues en teoria... un generador sencillo de sonidos, es usando un par de senos en Z, de manera que se modifica W para obtener dos senos de diferente frecuencia, y al sumarlos, tenemos un sonido con una fundamental y una armónica.

Audio =              z K1 sin(ω T1)                           z K2 sin(ω T2)   
                ----------------------     +    -----------------------
                z2 − 2 z cos(ω T1) + 1           z2 − 2 z cos(ω T2) + 1

T1 y T2 son las constantes que modifican la frecuencia de ambas frecuencias 
K1 y K2 modifican la amplitud de cada una.


----------



## jcristhian_1 (May 11, 2011)

Voy repasar mi transformada z, pero me parece muy interesante y muy apropiado para ser programado, Gracias


----------



## Romyggar (Jun 28, 2011)

antiworldx dijo:


> Pues en teoria... un generador sencillo de sonidos, es usando un par de senos en Z, de manera que se modifica W para obtener dos senos de diferente frecuencia, y al sumarlos, tenemos un sonido con una fundamental y una armónica.
> 
> Audio =              z K1 sin(ω T1)                           z K2 sin(ω T2)
> ----------------------     +    -----------------------
> ...





jcristhian_1 dijo:


> Voy repasar mi transformada z, pero me parece muy interesante y muy apropiado para ser programado, Gracias



Yo también estoy diseñando un generador de sonidos simple con un PIC16F876A...lo de la transformada Z no es mala idea, pero si creen poder modelar a assembler (ó C) una función tan compleja? y en un PIC de medio rango (16F84)???

El problema de memoria se soluciona de varias maneras:
*Para manipular en tiempo real el sonido que estes generando:*
1 - usando la RAM (no alcanza).

2- Usando RAM Externa (si alcanzaría, pero siempre se borrarian los datos)

*Solamente para Reproducir Sonidos:*
1 - Usando la EEPROM (no alcanza).

2 - Usando La Memoria FLash como Tabla de datos (solo 8bit por linea, y ademas esta el problema de las tablas mayores a 255, y la paginacion....cosa que es solucionable).

3 - Usando la memoria FLASH pero leyéndola directamente como su fuera la EEPROM (14bit por linea), si cada muestra es de 8 bit (1 Byte), se obtendrian 7168 Bytes si se tienen unas 4k lineas de FLASH [(4096x14bit)/8Bit]

*Con la solucion 3 hay nuevos inconvenientes:*
- uno es que la lectura o escritura desde la FLASH es un poco diferente a la de la EEPROM (se deben escribir 4 lineas de codigo al tiempo)

- Habría que empaquetar los 14 bit en 2 Registros y acomodar los 2 bit faltantes desde la siguiente lectura.

- habría que evitar la ejecución de las lineas de código con las muestras de sonido... también hay que tener en cuenta la paginación de memoria (no se si realmente importe)

- habría que ver los tiempos de lectura cuando se usa la FLASH.... 

- también hay que mirar si el PIC soporta Auto-lectura/escritura .,....bastante trabajo pero creo que valdría la pena probarlo..

Salu2


----------



## antiworldx (Jun 28, 2011)

Bien... por eso es que existen los dsPIC, con un pic, usar una ecuacion recurrente de transformada Z, sin instrucciones mac, ni módulo, ni redondeo de acumulador, es un verdadero martirio, sin contar que el tiempo de proceso se incrementa sustancialmente, de manera que cada muestra puede tomar hasta 20mS en un micro de 8bits!!!!


----------



## AYAS (Jun 12, 2013)

Hola a todos.
He estado buscando como reproducir sonido desde el pic16f877a, ya he leido todos los comentarios aquí escritos pero no he entendido nada.
Ya tengo el BTc sound encoder, pero no sé qué archivo (de los que genera) usar para el sonido en el ni como programar el sonido en PIC CCS.
Otra duda que tengo es ¿cómo es el esquemático para conectar el parlante (una bocina de 8ohms a 0.25W) al pic 16f877a?
Si alguien sabe, dígame, porfa.


----------



## COSMICO (Jun 12, 2013)

CCS tiene librerías para reproducir notas musicales
revisa en los ejemplos. EX_TONES.C


----------



## AYAS (Jun 12, 2013)

De hecho lo acabo de encontrar y ya le hice unas pruebas tanto en proteus como en físico.
Me encantó! =D
Me servirá mucho para mi proyecto (un despertador).
Gracias de todas formas ejeje.
De todos modos me gustaría aprender a cargar archivos btc en PIC CCS.
Alguien sabe como se hace?


----------



## RALDTech (Mar 11, 2015)

hola a todos, 

espero alguien me pueda guiar, descargue el programa de black y muy bueno por cierto, converti mi sonido a asm, btc y el otro pero no logro entender como hacer para ejecutar el codigo.

alguien me puede explicar con detalle como hacer para que funcione?

gracias


----------



## TRILO-BYTE (Mar 13, 2015)

hola no se que lenguaje de programacion uses

la verdad reproducir audio es muy facil

hay 2 tipos de sonido que puedes generar audio como reproducir una cancion o simplemente por tonos beep beep

el de los tonos es muy facil de entender solo hay que generar un tren de pulsos a una frecuencia determinada y durar un tiempo generando eses tonos, los tonos como dije son trenes de pulsos que van de 0 a X Hz

ya sera tu cuenta hacer escalas mucicales do,re,mi ,etc.

*la segunda *

tambien es facil de entendery puedes hacer el experimento con un pic con un ADC.

la idea es asi como lees el ADC enviar por un puerto de 8 bits el DAC lo puedes hacer con un DAC R2R
y podrar reproducir una melodia
otra forma un poco mas compleja pero igualmente buena es en lugar de ocupar 8 bits de todo un puerto puedes ocupar solo 1 pin

eso se hace con PWM ya sea por software o por el modulo CCP de los pic

la idea es asi como lees del del ADC le que lees del ADC lo metes a un registro y este registro modifica el ancho de pulso del PWM. el pwm debe trabajar a unos 12khz para tener un sonido aceptable.


teniendo esta pequeña teoria del sonido por ADC te puedes dar cuenta que en lugar de tener un ADC puedes tener una memoria nose una EEPROM por ejemplo
que tenga una frase grabada la idea asi como lees la EEPROM enviarla atraves del DAC  ya sea R2R o el DAC por PWM

no es dificil

yo recomendaria que intentarar primero el experimento del ADC y el DAC para que te des una idea

espero que mi respuesta haya aclarado algunas dudas respecto al audio.
hay algoritmos mas complejos y hardwares mas robustos que implican MP3 y tarjetas SD pero si no sabemos prender un led y un rele pues mejor ni le movemos.

la idea de usar transformada Z y un pic16f84a en ASM se me hace una idea fumada pues si es posible  pero es muy obsoleto es como tratar de cosntruir una nave espaciael con herramientas de piedra , cuero y madera


----------



## RALDTech (Mar 13, 2015)

hola

gracias por responder.

mira yo tengo un programa que descargue de romanblack.com, el me convierte el archivo wav que ocupo en tres tipo uno es asm, C o binario el problema que tengo es no entiendo como usar ese archivo, yo programa en C con PIC C COMPILER pero no logro entender como relacionar mi programa con la libreria que me da ese programa. Creo que es una secuencia numerica que solo debo leer en formato de array pero no estoy seguro.

tu has usado este programa? sabras como puedo hacer para ejecutarlo con C?

gracias.


----------



## D@rkbytes (Mar 13, 2015)

Es muy complicado y obsoleto el proceso propuesto en esa página.
Aparte para hacer compatible con PICC Compiler el código generado, tardarás bastante y se necesita mucha memoria.

Algo sencillo, es generar tonos con PIC Compiler. Mira este ejemplo: _Música de Happy Birthday con PICC_

Algo más desarrollado, es usando una memoria microSD y guardar archivos WAV o MP3.
Si son archivos WAV PCM, los puedes leer secuencialmente desde la memoria usando comunicación SPI y por medio del módulo CCP usar PWM para generar el audio. Así como te explicó TRILO-BYTE.
Si son archivos MP3, puedes usar un decodificador externo y el proceso de comandos lo realizas con el PIC.


----------



## RALDTech (Mar 14, 2015)

hola 

gracias por la respuesta. 

supongo que no sabras como se puede hacer para crear sonidos como lasers o espadas laser o cosas asi con esos tonos?... ya hice un test y funciono bien pero ocupo un sonido solido.

saludos


----------



## D@rkbytes (Mar 14, 2015)

Para generar ese tipo de sonidos uso PICBasic Pro con MicroCode Studio.
Ese lenguaje cuenta con dos instrucciones con las que se pueden generar sonidos muy fácilmente.
*SOUND* _Pin_,[_Note_,_Duration_{,_Note_,_Duration..._}]
*FREQOUT* _Pin_,_Onms_,_Frequency1_{,_Frequency2_}

Con algunos bucles y el cambio de valor de variables, puedes lograr el sonido que deseas.

La instalación incluye ejemplos y en la ayuda el uso de las instrucciones.


----------



## RALDTech (Mar 14, 2015)

gracias por la respuesta.

yo uso pic c compiler, no sabras de algo para usar en este compilador. 

saludos


----------



## D@rkbytes (Mar 14, 2015)

Si. Te deje el enlace de un ejemplo.


D@rkbytes dijo:


> Mira este ejemplo: _Música de Happy Birthday con PICC_


----------



## TRILO-BYTE (Abr 19, 2015)

un  truco que hago es el siguiente

hacer un tono es facil haciendo un tren de pulsos y una duracion 

para modificar sonidos solo varias la frecuencia del tren de pulsos 
algo asi
haces una funcion que te genere un tren de pulsos con un timer

int sonido(in frecuencia)
{
   //haces aqui tu codigo
}


 for(i=0 ; i!=1000 ; i++  )
{
  sonido(i);
  delay(//tu delay);
}


y hacer esto con un pèqueño bucle sea for o while 
este bucle te va hacer el varrido de hacer tonos se oira feo como los antiguos *atari 2600*
pero podras hacer sonidos como los de los juegos ochenteros


----------

