hola nano...no entiendo muy bien eso de las felicitaciones...porqué no funciona este proyecto, por eso pido ayuda aqui :)
En cuanto funcione algo, te acepto esas felicitaciones ;)
saludos!
velocidad de muestreo tienen ls datos a reproducir?
Que cantidad de datos tienes almacenados a reproducir?Bueno el array consta de 15807 bytes, bueno esta es la expresion del array:
frecuencia del pwm debe ser igual o k veces la frecuencia de sampleo, igual hay que tener presente la resolucion que tendra el pwm para la frecuencia elegida, para cargar el ciclo de trabajo de forma correctala resolucion del pwm, si mal no recuerdo, es de 10 bits, ya que uso el pwm del PIC18F4550 ( creo que usa 2 bytes, pero no enteros). Respecto a la velocifad de muestreo, se que según el Teorema de Nyquist, ha de ser como mínimo 5 veces más rápida, pero por aqui ( por internet me refiero) he leído 10. Asi que esa "x" veces...no se cual es la adiente. he probado hacer todo esto a base de pruebas e iteraciones..pero son demasiadas..es mas fácil ganar con la loteria...:)
Primero digo cómo he resampleadotodo esto veo que es antes de iniciar nada con el PWM, que por cierto, n entiendo bien lo de combertir los 10 bits a 8bits, me suena una funcion en C estilo "(int)dato(byte)" de conversión, ??
Con matlab:
Uso esta instrucción para cargar el wav original (44100Hz, 8 bits)
[datos,Fs,NBits,Opts]=wavread('E:\Proyectos_carpeta_seguridad\PIC\PWM en C18\bocina3.wav')
La instrucción directa para resamplear es esta:
datos =resample(datos,p,q)
donde “datos ” es el resultado del resample( se sobreescribe), datos el archivo del array ( aún no es un array en C propiamente dicho) , y p y q son dos parámetros del resampleo, p/q veces el sampleo original.
Como no sabemos qué números son esos, hay que usar una instrucción previa:
[p,q]=rat(8000/Fs,0.0001), donde Fs es la frecuencia de sampleo original, del archivo bocina3 (44100Hz), 8000 es el resultado del sampleo que queremos, y el vector [p,q] como resultado para poner en la instrucción anterior.
datos=resample(datos,39,215)
Ahora queda adecuar esos datos, para ponerlos en una tabla y “migrarlos” a C, del modo siguiente:
datos = datos *127
datos = datos +127
datos = fix(datos)
csvwrite('E:\Proyectos_carpeta_seguridad\PIC\PWM en C18\datos.csv',datos);
Con Excel
Ahora abrimos el ficherocreado “ datos.csv “
Aparece una columna con el array de datos, en forma de columna. En opción “buscar y reemplazar”, en la casilla “buscar” la dejamos en blanco ( busca los espacios) y en reemplazar añadimos una coma “,”. Seleccionamos la columna ( entera) de la derecha de la columna de datos, y hacemos el cambio ( damos aceptar a buscar y reemplazar).
Con Notepad.
Ahora abrimos un archivo txt , previa copia de esas dos columnas de Excel, y cambiamos un poco para adecuarlo a C, es decir, poner al principio const char nombre[número de columnas de la columna en Excel] ={los números mas la coma añadida}. Ese archivo lo guardamos con extensión “.h” y ya tenemos el archivo de sonido resampleado a 8000 Hz y en forma de array de chars, para leerlo en C.
y la frecuencia del PWM debe de ser al menos el doble de la maxima frecuencia que desees escuchar (teorema del muestreo).
Hola Suky! Bueno, a no ser que el sonido sea el de una metralleta de un juego de Spectrum... tampoco me va bien :D pero como dice Omix, quizas el fallo resida en el Proteus. En la ventana de avisos se me llena, que no carga ciertos ficheros .asm y la velocidad de simulación no es real..bueno, qu eno va bien. otra cosa Suky, en el que me has mandado, usas las dos salidas del PWM, en vez de una, ¿ has hecho un ejemplo estilo a aquel de CCS que puse yo? Es decir,¿ colocas 2 speackers?
Omix! En cuanto pueda monto un circuito, pero de momento no lo puedo probar, no tengo speacker y componentes y me voy de vacaciones, os dejo aqui "solicos". De momento me lo bajo ! Lo que podrias decir como has montado la salida? si has puesto un filtro, o como lo has hechoPues el circuito es bastante simple solamente conecte una red RC al pin de PWM (RC2), la resistencia que puse es de unos 470R y el condensador de 100nF y directo ahi conecte un minispeaker puesto que no disponia de un amplificador. Se oye bien, pero muy flojillo, a ver si puedo conseguir un ampli y relizo la prueba definitiva.
Omix! En cuanto pueda monto un circuito, pero de momento no lo puedo probar, no tengo speacker y componentes y me voy de vacaciones, os dejo aqui "solicos". De momento me lo bajo ! Lo que podrias decir como has montado la salida? si has puesto un filtro, o como lo has hechoPues el circuito es bastante simple solamente conecte una red RC al pin de PWM (RC2), la resistencia que puse es de unos 470R y el condensador de 100nF y directo ahi conecte un minispeaker puesto que no disponia de un amplificador. Se oye bien, pero muy flojillo, a ver si puedo conseguir un ampli y relizo la prueba definitiva.
Un saludo.
Si, solamente el filtro pasa bajo, tal como indica una nota de aplicación de microchip (no recuerdo ahora mismo cual es). Tambien he visto en alguna revista electronica que ni siquiera usan filtro alguno, atacan directamente con el pin del micro el altavoz.Omix! En cuanto pueda monto un circuito, pero de momento no lo puedo probar, no tengo speacker y componentes y me voy de vacaciones, os dejo aqui "solicos". De momento me lo bajo ! Lo que podrias decir como has montado la salida? si has puesto un filtro, o como lo has hechoPues el circuito es bastante simple solamente conecte una red RC al pin de PWM (RC2), la resistencia que puse es de unos 470R y el condensador de 100nF y directo ahi conecte un minispeaker puesto que no disponia de un amplificador. Se oye bien, pero muy flojillo, a ver si puedo conseguir un ampli y relizo la prueba definitiva.
Un saludo.
Sin filtro pasa-alto?
Podes utilizar doble buffer, así mientras se reproduce el audio con uno de ellos cargas el otro.
Saludos!
Y el vídeo? :shock: :mrgreen:eso me pregunto yo también, no se el motivo por el cual no lo muestra, imagino que algún moderador podrá arreglar el link de youtube para que se vea en el foro