Mostrando postagens com marcador microcontroladores PIC CCS. Mostrar todas as postagens
Mostrando postagens com marcador microcontroladores PIC CCS. Mostrar todas as postagens

sábado, 15 de julho de 2017

Reproduzindo som MP3 com auxilio do PIC.

             Olá quando pensamos em reproduzir sons MP3 imaginamos sempre um chip ou talvez algum microcontrolador que possua isso em seu hardware(mas são caros e de difícil aquisição, o que prejudica o uso em pequenos projetos), mas existe uma outra possibilidade, estou me referindo aos módulos DSPLAYERS que pode ser controlados por qualquer microcontrolador, bastando para isso ter acesso ao seu set de instruções.
             Veja na figura abaixo a aparência de um modulo DSPLAYER,já vem equipado com entrada USB, comunicação rs_232 para fazer a interface e saída de som analógica(alto falantes) + saídas para fone de ouvido. Neste site tem um exemplo de como usa-lo com arduino além de explorar melhor seus aspectos construtivos https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299.


            Graças ao meu parceiro Renato que tem me enviado vários materiais para postar (pois como já disse anteriormente em outros "post", estou tendo dificuldade para desenvolver novos projetos), este projeto conta com os recursos principais para fazer funcionar o modulo usando um microcontrolador PIC.Agradeço muito nosso colaborador por compartilhar conosco sua experiencia com este módulo.Ele ainda me deixou uma dica "Se alguém se interessar posso produzir o circuito impresso, só entrar em contato: -> Renato : lobosoft@oi.com.br".

A aparência do protótipo pronto ficou assim:



O código fonte:

 Programa principal: Código para compilação no CCS.

////////////////////////////////////////////////////////////////////////////////
//              Projeto: Aparelho de som com modulo DFPlayer Mini             //
//                 Nome: Renato Lôbo Rodrigues                                //
//                 Data: 12/07/17                                             //
//                Email: lobosoft@oi.com.br                                   //
////////////////////////////////////////////////////////////////////////////////

#include "config_pic675.h"

void main()
{
   int1 st1=false, st2 = false, st3=false, st4 = false, play = true, di = false;
   int8 equ = 1,disp = 1;
   tris_bot1 = 1;
   tris_bot2 = 1;
   tris_bot3 = 1;
   tris_bot4 = 1;
   tris_bot5 = 1;
   GPPU      = 0;
   delay_ms(2000);
   Uart_SendCMD(0x06 , 0 , 0x16 ) ;  //volume inicial
   delay_ms(200);
   sorteia();
   delay_ms(200);
   Tocar();   
   delay_ms(200);          
   Proxima_trilha();
   delay_ms(500);
 
   while(true)
   {
      if( bot1) st1 =false;         //Equalizador
      delay_ms(50);
      if(!bot1 && !st1)
      {
         st1 = true;
         equ++;
         if(equ>5)equ=1;
         if(equ==1)equaliza(1);
         if(equ==2)equaliza(2);
         if(equ==3)equaliza(3);
         if(equ==4)equaliza(4);
         if(equ==5)equaliza(5);
         delay_ms(1000);
      }
      if( bot2) st2 =false;         //troca o dispositivo: Memoria/Pendrive
      delay_ms(50);
      if(!bot2 && !st2)
      {
         st2 = false;
         di=~di;
         if(di) disp=2; else disp=1;
         dispositivo(disp);
         delay_ms(500);
      } 
 
      if(!bot3) st3 =false;         //toca tudo altomaticamente
      delay_ms(50);
      if( bot3 && !st3  && play)
      {
         st3 = true;
         Proxima_trilha();
         delay_ms(200);
      }

      if( bot4) st4 =false;         //tocar/pausa
      delay_ms(50);
      if(!bot4 && !st4)
      {
         st4 = true;
         play = ~play;
         if (play)Tocar();else Pausa();
         delay_ms(500);
      }         
   }
}

Configuração do PIC 12F675

////////////////////////////////////////////////////////////////////////////////
//              Projeto: configuração de cabeçalho de projeto com pic12F675   //
//                 Nome: Renato Lôbo Rodrigues                                //
//                 Data: 12/07/17                                             //
//                Email: lobosoft@oi.com.br                                   //
////////////////////////////////////////////////////////////////////////////////
#include "12F675.h"
#use delay(clock=4Mhz)
#include "DFPlayer.h"
//=======================================================================
//Configurando fusiveis
//=======================================================================
#fuses NOWDT
#fuses PUT
#fuses NOBROWNOUT
#fuses NOMCLR
#fuses INTRC_IO
#fuses PROTECT
//=======================================================================
//Configurando I/O de direção dos pinos
//=======================================================================
#bit  bot1        = 0x05.0
#bit  bot2        = 0x05.2
#bit  bot3        = 0x05.3
#bit  bot4        = 0x05.4
#bit  bot5        = 0x05.5

#bit  tris_bot1   = 0x85.0
#bit  tris_bot2   = 0x85.2
#bit  tris_bot3   = 0x85.3
#bit  tris_bot4   = 0x85.4
#bit  tris_bot5   = 0x85.5

#bit  GPPU        = 0x81.7


Biblioteca do DSPlayer Mini

////////////////////////////////////////////////////////////////////////////////
//              Projeto: Biblioteca para acessar o DFPlayer Mini              //
//                 Nome: Renato Lôbo Rodrigues                                //
//                 Data: 12/07/17                                             //
//                Email: lobosoft@oi.com.br                                   //
////////////////////////////////////////////////////////////////////////////////


#use rs232(baud=9600,xmit=PIN_A1,rcv=PIN_A2, ERRORS)

static unsigned INT8 Send_buf[10] = {0} ;


void SendCmd(unsigned INT8 leng)
{
INT8 i = 0 ;
putc(0x7E);
for(i=0; i<leng; i++)//dados
{
putc(Send_buf[i]);
}
putc(0xEF);
}

void DoSum( unsigned INT8 *Str, unsigned INT8 len)
{
   unsigned INT16 xorsum = 0;
   unsigned INT8 i;
   for(i=0; i<len; i++)
   {
      xorsum = xorsum + Str[i];
   }
   xorsum = 0 -xorsum;
   *(Str+i) = (unsigned INT8)(xorsum >>8);
   *(Str+i+1) = (unsigned INT8)(xorsum & 0x00FF);
}
void Uart_SendCMD(unsigned INT8 CMD ,unsigned INT8 feedback , unsigned INT16 dat)
{
   Send_buf[0] = 0xFF;                       //bytes reservados
   Send_buf[1] = 0x06;                       //comprimento
   Send_buf[2] = CMD;                        //instruções de controle
   Send_buf[3] = feedback;                   //A necessidade de feedback
   Send_buf[5] = (unsigned INT8)(dat);       //datal
   Send_buf[4] = (unsigned INT8)(dat >> 8);  //datah
   DoSum(&Send_buf[0],6);                    //Verifique
   SendCmd(8);                               //Esta transmissão da trama de dados
}

void Arquivo_musica(int8 pasta,int8 numero)
{
   int16 pasta_numero;
   pasta_numero = (pasta * 256) | numero ;
   Uart_SendCMD(15 , 0, pasta_numero);
}

void Proxima_trilha()
{
   Uart_SendCMD(1 , 0, 0);
}

void Trilha_anterior()
{
   Uart_SendCMD(2 , 0, 0);
}

void Diminuir_volume()
{
   Uart_SendCMD(5 , 0, 0);
}

void Aumentar_volume()
{
   Uart_SendCMD(4 , 0, 0);
}

void Volume(int8 vol)
{
   Uart_SendCMD(6 , 0, vol);
}

void Equaliza(int8 equa)
{
   Uart_SendCMD(7 , 0, equa);
}

Void Pausa()
{
   Uart_SendCMD(14 , 0, 0);
}

Void Tocar()
{
   Uart_SendCMD(13 , 0, 0);
}

void dispositivo(int8 disp)
{
   Uart_SendCMD(9 , 0, disp);
}
void sorteia()
{
   Uart_SendCMD(24 , 0, 3);
}
void sequencia()
{
   Uart_SendCMD(24 , 0, 1);
}

Até a próxima pessoal.


sexta-feira, 5 de maio de 2017

Acionando led pelo CCS (por:Renato Lôbo Rodrigues).


Olá pessoal que acompanha o blog, está é uma contribuição do nosso colega Renato Lôbo Rodrigues e ele deixou o seguinte programa no qual liga e desliga um LED através de um botão.
Programa indicado para iniciantes e quem mais se interessar pelo método de programação no CCS, sem usar  funções próprias do CCS.Há recursos onde o datasheet deve ser consultado para eventuais dúvidas dos registradores usados.


O código fonte:
 
lista de peças para montagem em bancada:
- matriz de contatos pequena
- pic16F628A, microcontrolador da Microchip
- resitor de 220 ohm para limitar a corrente do LED
- resitor de 10k ohm como pu-up da entrada do pino RA3
- LED 3 ou 5 mm vermelho
- botão de contato
- cabinhos para ligações dos componentes
- fonte de 5V, pode ser um carregador de celular ou suporte de 3 pilhas(4,5V)

///////////////////////////////////////////////////////////////////////
// Projeto: Ligar e desligar um led através de um botão //
// Nome: Renato Lôbo Rodrigues //
// Data: 10/03/17 //
// Email: lobosoft@oi.com.br //
///////////////////////////////////////////////////////////////////////
#include <16F628A.h>
#use delay (clock = 4Mhz)
//Configure os fusíveis em acordo com o pic selecionado, consultar o arquivo <16F628.h> e datasheet.
#fuses NOWDT
#fuses PUT
#fuses NOBROWNOUT
#fuses NOMCLR
#fuses INTRC_IO
#fuses PROTECT
//Estes registros encontra-se nas funções especiais de cada modelo de pic, 
//pag 16 do datashet no mapa de memória.
#bit tris_bot1 = 0x85.3 //direção do pino A3
#bit bot1 = 0x05.3 //pino A3
#bit tris_led1 = 0x85.0 //direção do pino A0
#bit led1 = 0x05.0 //pino A0
//___________________________________________
//Rotina principal
void main()
{
int1 st1 = false; //status do botão
tris_bot1 = 1; //pino A3 em "um" como entrada
tris_led1 = 0; //pino A0 em "zero" como saída
led1 = 0; //inicia com "zero" apagando o led1
while(true) //laço infinito
{
//funciona quando aperta o botão (KeyDown)
if ( bot1) st1=false;    //
if (!bot1 && st1==false)
{
st1=true;
led1 = !led1 ; //inverte, acende ou apaga o led1
delay_ms(100); //um tempo para deboulce
}//fim do if
}//fim do while
} //fim do main

Muito obrigado Renato Lôbo Rodrigues por contribuir com o blog!