TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Agustina en 09 de Abril de 2008, 20:04:29
-
Alguien ha utilizado el metodo de BTC para reproducir sonidos con el pic? Los ejemplos que da el autor son de assembler (que para mi es chino).
He usado los integrados de ISD que andan muy bien, pero aqui estos integrados NO SE CONSIGUEN MAS... y si se consiguen salen mas de el doble que un pic de 18F.... que para hacer un pequeño sonido no se justifica para nada...
Para los que no esten familiarizados con el algoritmo BTC les dejo el link.
http://www.romanblack.com/picsound.htm
Saludos!! :g)
-
Hola linda, la versión 2 del programa lo deja en forma de una tabla, los valores de retorno van de arriba y hacia abajo y tendrías que hacer un registro de desplazamiento Con cada valor de la tabla, por mi parte no savia de este programita, muy útil, me voy a poner a desarrollarlo con un PIC, si te interesa luego te lo pongo en c hi-tech :mrgreen:
-
yo lo utulice pero el sonido no me salio muy bueno que digamos, supongo que seria porque no le implemente filtrados ni nada por el estilo, era una alarmita que emitia el sonido de tarzan jajajaj :mrgreen:
-
jajaaaaa!!! de tarzan!!! muy original jaja, lo hiciste en CCS? esoty buscando algun ejemplito, si tienes algo te lo agradeceria mucho!.
Creo que voy a implementarlo con eeprom 24lc32 y una salida con filtro RC como esta en la pagina del algoritmo BTC. No necesito de gran calidad asique creo que iria bien.
Lo que todavia no he aprendido es como grabar los datos directamente en la eeprom usando el GTP-USB por ejemplo
saludos! gracias por la ayuda :g)
-
Es bien sencillo. Abres Winpic800, seleccionas tu memoria en los desplegables, escribes (o abres fichero) el contenido que quieres programar, colocas el chip en el zócalo en su postura (puedes verlo con Ctrl-Alt-Z) y le das al botón de Programar.
-
Gracias nocturno! ahora voy a ver si me sale
-
mmm sugiero que agregues esa parte del codigo en ASM dentro del CCS con los #asm y #endasm, pues el codigo del btc es muy exacto y el compilador puede insertar algunos comandos extras. saludos.
-
Lo que pasa es que el programa genera una tabla con los bytes dependiendo la duracion del sonido y por lo general nunca entra dentro de la eeprom del pic. Por lo que creo que hay que guardar los datos en una memoria externe e ir leyendo de a uno los bytes para reproducir el sonido.
Por ejemplo... un sonido de 1 segundo ocupa unos 545 bytes. Planeo reproducirlo con un F88 que tiene solo 256 bytes en la eeprom.
-
bue,eso si, para eso abria que realizar un programita en VB manejando caracteres que los sacaria del asm o el C que genera el programita y luego concatenarlo para ponerlo en una memoria
-
Micro_cadaver, podrias postear el codigo de tu alarma de tarzan? he estado probando (y mucho) y no puedo hacer que reproduzca sonidos decentemente... solo ruido.
Esoty usando un 16F88 con una memoria 24LC32. Esta la cargo con un hex donde esta el sonido genrado por el programa de Roman Black. Pero solo escucho ruido :?
gracias!
-
ok agustina, pero dejame buscarlo porque lo hice hace años antes de conocer el ISD. saludos :-/
-
Muchas gracias micro_cadaver. He estado PELEANDO todo el fin de semana con esto y no logro hacerlo bien. Ya no se si es el harware o software. Cargo distintos sonidos para probar y al parecer reproduce "algo" distinto cuando cambio el sonido guardado en la eeprom... pero no se entiende.
Muchas gracias! :mrgreen:
-
esta es la rutina que uso actualmente... no se ya que hacer :( porque no puedo hacerlo andar! :x :x :x
void audio_out()
{
indice=0;
while(indice!=4096)
{
dato_memoria=read_ext_eeprom(indice);
bit_dato=bit_test(dato_memoria,0);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,1);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,2);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,3);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,4);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,5);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,6);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,7);
output_bit(PIN_B1, bit_dato);
delay_us(14);
indice++;
}
return;
-
otra vez yo :P
el programa de Roman Black graba los datos desde el MSB al LSB... y los estaba reproduciendo desde el LSB al MSB jejeje :mrgreen:
Gracias por todo! Si quieren seguir aportando sera bienvenido! ahora esoty tratando de mejorar la calidad del sonido ya que se escucha permanentemente un "silvido" bastante molesto...
-
hola, uff menos mal te salio porque no encontraba el codigo que hice :mrgreen: , hasta ahi llegue con el ruido molesto, intenta ponerle filtros.
-
esta es la rutina que uso actualmente... no se ya que hacer :( porque no puedo hacerlo andar! :x :x :x
void audio_out()
{
indice=0;
while(indice!=4096)
{
dato_memoria=read_ext_eeprom(indice);
bit_dato=bit_test(dato_memoria,0);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,1);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,2);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,3);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,4);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,5);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,6);
output_bit(PIN_B1, bit_dato);
delay_us(14);
bit_dato=bit_test(dato_memoria,7);
output_bit(PIN_B1, bit_dato);
delay_us(14);
indice++;
}
return;
Hola Agustina si fueras tan amable de poder postear el codigo de tu programa, lo que necesito hacer es emitir un sonido de alerta como por ejemplo "compresor parado" es por eso que necesito tu codigo porfa