Manual
do
Maker
.
com
Fazer com Pic ou Arduino - Apesar de eu gostar dos dois, não é difícil escolher entre PIC ou Arduino, afinal, a interface com a MCU é muito mais alto nível no Arduino. Analisando as palavras-chaves que direcionaram leitores ao meu blog, encontrei a pesquisa de 'como tocar buzzer no PIC'. Então fiquei pensando de quão parecido podem ser os processos se utilizando uma IDE de alto nível como o MikroC, cuja licença adquiri semana passada. Decidi fazer esse tutorial baseado nos que postei sobre Arduino, ou seja, inserirei o link do post que fiz em Arduino, seguido do processo para fazê-lo em PIC.
O PIC tem diversas famílias, sendo que os recursos variam de uma para outra. Então, para os exemplos utilizarei predominantemente o PIC que está na board PIC.Duino, à venda na SmartRadio. Já fiz 3 compras e estou satisfeito com a transação. Esse é um PIC18F2520. Em alguns casos posso utilizar um PIC16F877A ou um PIC18F4550; nos últimos dois casos, gravando o pic com o MultiProg Plus compatível com o PicKit2, utilizando os softwares MPLab ou PicKit2.
Então, iniciando pela palavra-chave que me levou a escrever esse post:
Escrevi vários posts sobre como tocar som variando frequência com potenciômetro, linear, sirene e música. Para fazê-lo em Arduino, os posts são esses:
Buzzer - parte 1
Interação com o buzzer
Música com buzzer
Som de sirene no buzzer
Se quiser, compare a diferença. Tocar um som no buzzer com PIC é tão simples quanto em Arduino, basicamente iniciando a biblioteca de som e chamando a função de tocar. O init recebe como parâmetro o endereço da porta e o pino. A função de tocar recebe a frequência em hz e o tempo de duração em ms. Para um simples 'pi' com intervalo de 1/4s:
void playMusic(int freq){
Sound_Play(freq,250);
Delay_ms(1000);
}
void main(){
int tom = 250;
TRISA = 0; //output
Sound_Init(&PORTA,0);
while(1){
playMusic(tom);
if (tom <1001){
tom += 250;
}
else{
tom = 250;
}
}
No PIC.Duino PORTA pino 0 é como PORTA.B0, ou RA0 no datasheet (vide imagem nesse post). Esse pino está conectado à porta A0 da board. Se você programa em arduino, deve ter notado algo interessante; utilizei a porta designada como Input Analógica 0 para Output digital! Mas uma coisa é importante de notar; se você setar TRISA como output, todos os pinos relacionados à porta A serão output.
Se abrir o arquivo .hex no MPLab pode-se ver todo o código em asm! Nesse exemplo já entrou também a geração de frequências;p ara interagir avaliando o estado de um botão, eis um desenho no fritzing, utilizando uma Arduino para exemplo, mas não se esqueça que se trata do PIC.Duino, o que faz possível utilizar o pino A0 como saída digital para o buzzer.
E o código:
void playMusic(int freq){
Sound_Play(freq,25);
}
void main() {
bit state;
int tom = 250;
TRISA = 0; //output
TRISB = 0xFF; //input
Sound_Init(&PORTA, 0);
state =1;
while (1){
if (tom <1001){
tom += 250;
}
else{
tom = 250;
}
if (state == 0) {
Button(&PORTB, 7, 1, 0);
state = 1;
}
if (state == 1 && Button(&PORTB, 7, 1, 1)) {
state = 0;
playMusic(tom);
}
Delay_ms(10);
}
}
Como pode-se ver, é bastante simples o processo de controle do buzzer em PIC, utilizando uma IDE de alto-nível como a MikroC. Farei mais alguns posts sobre PIC, baseado em tutoriais que escrevi sobre Arduino. Por fim, um vídeo.
Se gostou, não deixe de compartilhar; dê seu like no video e inscreva-se no nosso canal Manual do Maker Brasil no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.