Manual

do

Maker

.

com

fazer com PIC ou Arduino?

fazer com PIC ou Arduino?

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:

Buzzer

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!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.