Generar sonidos con pic16f877a en Ansi C

#1
hola amigos , estoy por terminar un proyecto y deseo añadirle pitidos o sonidos cuando realice alguna acción de proceso .... entonces mi duda salta como usar algún método que me permita poder generar esos pitidos o melodías en un pic 16f877 con compilador Hitech en ansi C

he buscado ya muchas información pero solo encuentro métodos y librerías para Picc o mikroC o CCS . pero casi nada para Ansi C

me podrian dar Luz sobre como hacerlo , que librerías o método puedo usar según con las características que he mencionado :(

se los agradecería un montón
no importan si son ejemplos sencillos lo que necesito es como se dice un inicio de como por lo menos mandar un pitido decente a través de un zumbador o spekear
 
#3
hola y gracias por tu respuesta , lo que he logrado hasta ahora es hacer un sonido algo asi como un PUM PUM asi como cuando golpeas el microfono algo asi mediante un codigo simple de :
RB4=1 ; delay_us(500); RB4=0; delay_us(500); dentro de un FOR ;

LO QUE BUSCO ES mas hacer sonido o Pitidos algo asi como suenan los coches cuando retroceden o sonidos como una melodia Midi ....habrá una libreria en C o ansi C que sea compatible con el compilador Hitech para Pic16f87 ???? y mas o menos como seria un codigo ejemplo

voy a chekar lo que me dices :) , mientras espero respuesta de los demás compañeros , muchas gracias por tu ayuda amigo cosmefulanito04
 
#5
GRACIAS DOSMETROS!!! ese era el dato que me faltaba ahora si puedo generar sonidos :) y pitidos sin librerias en pic Ansi C para Pic16f877

gracias amigos ......... para los que se encuentren con la misma duda para con este compilador Hitech Ansi C les dejo la operacion aqui :

antes del void main va esto : void bocina(unsigned int);

luego viene el codigo que desean en : void main (){ bocina(1);bocina(3);} //ejemplo solo para probar

luego del cuerpo del void main viene la subrutina que he creado para el sonido

void bocina(unsigned int music){
int sonido;
switch(music){
case 1 :for(sonido=0;sonido<=40;sonido++){RC3=1;pausa(t20ms);RC3=0;pausa(t20ms);}fbreak;
case 2 :for(sonido=0;sonido<=60;sonido++){RC3=1;pausa(t10ms);RC3=0;pausa(t10ms);}break;
case 3 :for(sonido=0;sonido<=100;sonido++){RC3=1;pausa(t5ms);RC3=0;pausa(t5ms);}break;
}}

las variables pausa(t20ms),(t10ms),(t5ms) son otra subrutinas que he creado para otros eventos y para ahorrar codigo tambien las use para los sonidos :) pero lo pueden reemplazar con las constantes clasicas que son delay_Us(50) y demas ....


GRACIAS POR AYUDARME AMIGOS (Y)
 
Arriba