Sonido Buzzer Usando PIC con Lenguaje C

#1
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
 
#2
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):

Código:
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
 
#4
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);
}
}
 
Última edición:
#5
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!!
 
Última edición:
#6
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,,,_
 
#7
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!!
 

Adjuntos

#8
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,,
 
#9
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??
 
#10
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..
 
#11
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 :oops:!! 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!!
 
#12
Gracis iDan.
Quiero seguir en contacto contigo,para este proposito de aprender MikroC.
Si necesitas algo de asembler, con gusto te colaboro..
Hasta pronto!!
 
#14
Hola FRIDO??


Dime quieres un video del programa simulado?? porque en el archivo que adjunte arriba esta el programa simulado en Proteus...
 
#15
Hola iDan como estas, espero bien.:apreton:
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.(y)
 
#16
Hola COSMICO


Hehe, tanto tiempo sin verte postear por aqui :apreton:... 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 ;)
 
#17
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......
 
#19
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
 
Arriba