# Sonido en Buzzer usando PIC



## ideacs (Nov 7, 2009)

Hola uso el compilar CCS C y quiero enviar un sonido a un Buzzer, anteriormente usaba lenguaje Basic y era sumamente sencillo el codigo era

sound  0,(10,1) ... Donde el Cero indica el pin por el que saldra la señal de sonido

Pero no se el codigo para sacar sonido usando Lenguaje C... Alguien por alli que sepa como se hace 

Saludos!!!

Gracias


----------



## iDan (Nov 7, 2009)

Hey que tal... bueno la verdad amigo no sabria decirte como hacerlo en CCS C pero yo utilizo MikroC que es casi lo mismo y en este programa existe una libreria llamada *Sound Library* que manda distintos sonidos ya sea para un buzzer o una pequeña bocina pudiendo hacer si quieres hasta una melodia... mira te mando un ejemplo de un piano con PIC16F887 en MikroC (tal vez te sirva de algo):


```
void main ()
{
TRISB=0xFE;
Sound_Init(&PORTB,0);
while (1)
{
if(PORTB.F7==1)
Sound_Play(988,200);    /*Check Point*/
while(PORTB&0x80) ;
if(PORTB.F6==1)
Sound_Play(880,200);    /*1er numero: Freq en Hz... 2do numero: duracion en ms*/
while(PORTB&0x40) ;
if(PORTB.F5==1)
Sound_Play(784,200);
while (PORTB&0x20) ;
if(PORTB.F4==1)
Sound_Play(698,200);
while(PORTB&0x10) ;
if (PORTB.F3==1)
Sound_Play(659,200);
while (PORTB&8) ;
if (PORTB.F2==1)
Sound_Play(587,200);
while (PORTB&4) ;
if (PORTB.F1==1)
Sound_Play(523,200);
while (PORTB&2) ;
}
}
```

Tal vez en el programa CCS C este una libreria parecida a la que te menciono pero si te urge hacer lo que dices puedes hacerlo con MikroC... cualquier cosa me puedes preguntar.

Saludos ideacs


----------



## ideacs (Nov 7, 2009)

Gracias iDan =) es similar a lo que hacia en Basic  voy a checar si se puede

Saludos !!!


----------



## COSMICO (Dic 23, 2009)

Estoy aprendiendo mikroc.
y algo tan sencillo, me quedo grande..
necesito enviar un mensaje al lcd,,pero letra por letra,,debe desplazarse 
hasta cierta posicion,,detenerse y despues aparecer la otra en la misma secuencia
hasta completar la palabra
esto es lo que tengo..pero despalzo todo el mensaje y ademas como le coloco espacios 
entre frases esto ,' ', me da error
Te agradesco iDan por tu ayuda

char*mensaje[]= {'h','o','l','a','p','i','c','s','\0'};

void main(void)
{  TRISD = 0;

   Lcd_Config(&PORTD,0,2,1,7,6,5,4);

   Lcd_Out(1, 6, mensaje);

   while(1)
        {
            Lcd_Cmd(LCD_SHIFT_RIGHT);
	       Delay_ms(200);
        }
}


----------



## iDan (Dic 23, 2009)

Colombia?? un saludo inmenso amigo!!
Bueno ps yo tambien aun estoy aprendiendo sobre LCD asi que te puedo ayudar
en lo poco que se OK?? Mira sinceramente no se como es que quieres hacer tu
desplazamiento pero por lo que vi en tu programa hice yo un pequeño programa 
identico al tuyo con el PIC 16F84A:

char mensaje[8]={'M','i','k','r','o',' ','C','\0'};
void main(void)
{
TRISB=0;
Lcd_Init(&PORTB);
Lcd_Cmd(Lcd_Clear);
Lcd_Cmd(Lcd_CURSOR_OFF);
while(1)
{
Lcd_Out(1,16,mensaje);
Lcd_Cmd(LCD_SHIFT_RIGHT);
Delay_ms(200);
}
}

Ahora yo te pregunto:

Que PIC utilizas?
Creo que ya comprendi que desplazamiento quieres conseguir!


Saludos DIGICAM!!


----------



## COSMICO (Dic 23, 2009)

IDan,,
Amigo es un 873..
Mira, la idea es, que cada letra se desplace desde la primera posicion.
ej..0x80 hasta 0x88, si la palabra es "hola" la A=0X88,LA L=0X87,LA O=0X86, LA,L=0X85,,
una por una, espero ser claro,,si no me avisas,,,_


----------



## iDan (Dic 23, 2009)

Hola DIGICAM

Te realice un programa con el PIC16F84 y con tu idea de desplazamiento que me acabas de indicar (como yo la entendi) asi que te adjunto el circuito hecho en Proteus y el programa en Mikro C, pruebalo y me cuentas si esa era tu idea de desplazamiento porfavor!!


PD ya solo para que tu lo modifiques para el PIC que usas


Saludos!!


----------



## COSMICO (Dic 23, 2009)

Asi era exactamente que lo necesitaba. te cuento que yo no abria 
podido sin tu ayuda, hasta ahora estoy comenzando
Tratare de entenderlo..cualquier cosa te aviso..
GRACIAS AMIGO,,


----------



## iDan (Dic 23, 2009)

Ok amigo, no quise comentar el programa ya que perderia forma pero si tienes
alguna duda sobre este me avisas y yo con mucho gusto te ayudo!! no hay de
que amigo... para eso estamos aqui !! estas comenzado en todo lo
que es Mikro C?? hey que grado cursas??


----------



## COSMICO (Dic 24, 2009)

No..soy de la vieja data, acostumbrado al asembler,,
Cuando los pic apenas incursionaban en el mercado..
Lo poco que aprendi sobre c++. no lo puse muy en practica.
por que como te digo el asembler era lo mejor, de la epoca.
Y como el entendimiento se va con los años,ahora estoy un poco duro.Pero igual
quiero aprender..Oye,,tienes literatura sobre este tema de mikroc.
me gustaria para complementar..
y si, te pido el favor, comentes las variables y cual es su funcion..las que declaraste como: int p=-1,x,y;. A por cierto, para pasarloa pic873 tube que cambiar la p por una 
int a=-1,x,y; con la letra p me daba error al compilar ,,,
Agradesco tu ayuda..


----------



## iDan (Dic 24, 2009)

Hola DIGICAM


Bueno yo tambien estoy aprendiendo Assembler ya que me llamo mucho la atencion
y lo que mas me gusta es que te hace pensar mas a nivel del PIC, pero aun soy algo
novato !! *int p=-1,x,y;* o *int a=-1,x,y;* como tu lo pusiste, a veces el
compilador tiene lo que se llaman "palabras reservadas" si no me equivoco asi que me imagino que se originaria el error desde alli!! y el funcionamiento de estas variales es:

variable "p": Nos ayuda como tabulador para nuestro cursor del LCD, "p" al entrar al primer *for* de nuestro programa le suma 1 asi que dejara que nuestra primera letra que es la M pueda colocarse en nuestra primera casilla, al salir de los *for* y entrar de nuevo vuelve a sumarle para colocar el tabulador en nuestra siguiente casilla para dejar intacta la casilla anterior que tiene ya la letra M.


variable "x": Nos ayuda para dirigir o colocar nuestro cursor del LCD, al entrar en el primer *for* sus condicionales no contienen esta variable y tampoco esta en la parte del programa de este primero, pero al entrar en el segundo *for*, sus condicionales ya le dan un valor y una propiedad (colocar el cursor), desplazando asi el cursor desde el lado derecho del LCD hasta el lado izquierdo donde el tabulador "p" se lo permita; tambien si te das cuenta, por ejemplo: encontramos las lineas en el programa: *Lcd_Out(1,x,mensaje[y]);* y *Lcd_Out(1,x+1,mensaje[5]);*, la primera de estas cumple en colocar la letra que nos indica "y" por cada casilla para crear el efecto de deslizarse hasta llegar al tope del tabulador, y la segunda linea cumple colocando un espacio en blanco por cada casilla que ha pasado nuestra letra y nunca colocandose sobre esta para asi borrar su rastro.



variable "y": Nos ayuda a escojer la letra de nuestro arreglo, al entrar al primer *for* sus condicionales le dan valor y una propiedad (escojer).


Bueno amigo esto es lo que se podria decir el funcionamiento de estas variables en nuestro programa, si tienes alguna otra pregunta no dudes en decirme y yo te ayudo en lo que me sea posible OK??


Saludos!!


----------



## COSMICO (Dic 26, 2009)

Gracis iDan.
Quiero seguir en contacto contigo,para este proposito de aprender MikroC.
Si necesitas algo de asembler, con gusto te colaboro..
Hasta pronto!!


----------



## FRIDO (Abr 21, 2010)

oyes amigo vi tu programa y lo vi interesante y quisiera saqber si me pudieras publicar el programa simulado


----------



## iDan (Abr 21, 2010)

Hola FRIDO??


Dime quieres un video del programa simulado?? porque en el archivo que adjunte arriba esta el programa simulado en Proteus...


----------



## COSMICO (Abr 21, 2010)

Hola iDan como estas, espero bien.
Hace rato no posteaba aqui, te comento que me fue muy bien con lo del mensaje 
y hasta lo pase a ccs. ¿Tu sabes como generar este codigo 01100011 a una velocidad de 20kbps por un pin del micro.
Agradesco tu ayuda.


----------



## iDan (Abr 22, 2010)

Hola COSMICO


Hehe, tanto tiempo sin verte postear por aqui ... veo que quieres
enviar ese dato de forma serial verdad?? mira no se si entendi bien pero tal
vez te serviria si le hecharas un vistazo a la libreria de MikroC: *OneWire Library*
tiene velocidades de transmision de hasta 16kbps... no se si te sirva de mucho...
me cuentas como te fue asi logro ver como ayudarte en lo que pueda...


Saludos


----------



## ogonbat (Oct 23, 2010)

hola dan me gustaria contactarme contigo en privado ya que vi que te tomaste la molestia de responder a quien te solicito apoyo por eso me atrevi a escribirte estoy tratando de aprender mikroc y lenguaje c para desarrollar proyectos electronicos con pics en proteus y he visto que eres muy entendido en este tema la verdad que trato de aprender asi ya que no cuento con los recursos economicos para pagar mis estudios he buscado por todo internet a ver si alguien me enseña pero siempre encuentro respuestas que no me ayudan ojala puedas apoyarme en mi inquietud un abrazo ogonbat......


----------



## FRIDO (Oct 25, 2010)

idan dijo:


> hola frido??
> 
> 
> Dime quieres un video del programa simulado?? Porque en el archivo que adjunte arriba esta el programa simulado en proteus...



buenas de nuevo, dejame checarlo, grax, saludos 
despues te aviso si fue realmente lo que queria saber va.


----------



## rascueso (Oct 25, 2010)

Hola IDan algún dia que estés al dope no te armas un programita para hacer una alarmita que haga pi pi pi pi ---pausa---- pi pi pi pi ---pausa. Siempre quise conseguir un circuito que emita un sonido agradable con un buzzer pero nunca lo logre. No tengo conocimientos de programación pero me la rebusco para programar un pic.
La función de la alarmita seria para usarla en distintas aplicaciones ej. Para no dejar las luces prendidas del auto y giladas asi. saludosss


----------



## ogonbat (Oct 25, 2010)

hola  DAN  este es mi correo : Mejor leo las Normas de Participación@forosdeelectronica.com ogonbat.


----------



## hugo (Abr 7, 2011)

oye amigo quiciera saber si me podrias apoyar con unas ideas para hacer una calculadora basica en mickroc no se mucho en este leguaje pero me gustaria aprender y hacer esta pratica idan


----------



## COSMICO (Abr 7, 2011)

Hola amigo Idan.
Como estas , espero bien; hace tiempo no pasaba por este post.
De casualidad ya trabajaste lcd grafico?
Un saludo!


----------



## pachi (Abr 13, 2011)

hola como estas me parecio muy interesante tu piano pero tengo una consulta y nose si me podrias ayudar, bueno la consulta es la siguiente en que circuito ejecutas ese tu programa porfavor te agradeceria mucho si me lo podrias subir al foro porfavor gracias de antemano


----------

