quinta-feira, 11 de maio de 2017

Usando timer 0 com o CSS (por: Renato Lôbo Rodrigues)

           Olá pessoal que acompanha o blog, temos mais uma postagem do senhor Renato Lôbo,um programa escrito em C para compilador CCS, que faz piscar um LED usando o timer0 configurado pelos registradores, usando como referência o datasheet do PIC6F628A da Microchip.
http://ww1.microchip.com/downloads/en/DeviceDoc/40044G.pdf

lista de peças para montagem em bancada:
- matriz de contatos pequena
- pic16F628A, microcontrolador da Microchip
- resistor de 220 ohm para limitar a corrente do LED
- LED 3 ou 5 mm vermelho
- cabinhos para ligações dos componentes
- fonte de 5V, pode ser um carregador de celular ou suporte de 3 pilhas(4,5V)
A simulação:




foto do projeto:


O código fonte :

///////////////////////////////////////////////////////////////////////
//              Projeto: pisca-pisca usando timer0                   //
//                 Nome: Renato Lôbo Rodrigues                       //
//                 Data: 11/05/17                                    //
//                Email: lobosoft@oi.com.br                          //
///////////////////////////////////////////////////////////////////////
#include <16F628A.h>
#use delay (clock = 4Mhz)
//Configure os fusíveis em acordo com o pic selecionado
#fuses NOWDT
#fuses PUT
#fuses NOBROWNOUT
#fuses NOMCLR
#fuses INTRC_IO
#fuses PROTECT

#byte tris_portA = 0x85 //direção dos pinos do portA
#byte tris_portB = 0x86 //direção dos pinos do portB

#bit led1      = 0x05.0 //pino A0

//##############################################################################
#bit GIE           = 0x0b.7 //interrupção blobal
#bit TOIE          = 0x0b.5 //interrupção timer0
#bit TMR1ON        = 0x10.0 //interrupção timer1
#bit TMR2ON        = 0x12.2 //interrupção timer2

#byte tmr0         = 0x01   //preload do timer0

#byte OPTION_REG = 0x81    //registro no endereço 0x81 do banco1

//___________________________________________
//Rotina de interrupção do timer0
#int_rtcc
void rotina_t0()
{
   static int8 conta;
   conta++;               // conta 125 vezes o tempo do timer0(4ms) para completar 500 miliseguundos
   if (conta==125)      //125*4ms = 500ms => ciclo de 1 segundo
   {
      led1=~led1;       //inverte a saída ligando ou desligando o LED.
      conta = 0;
   }
   tmr0 = 6;            //inicia a contagem em 6 e vai até 256(onde estoura)
}
//___________________________________________
//Rotina principal
void main()
{
   //pinos configurado como entrada por segurança  (alta impedância)
   tris_portA = 0b11111110; //todos os pinos do portA como entrada exceto pino A0 como saída
   tris_portB = 0b11111111; //todos os pinos do portB como entrada
   
   led1 = 1;       //Acende o led1

   //registro configurado para 4 milisegundos(veja pagina 25 do datasheet)
   OPTION_REG = 0b10000011;//1   = pull-up desabilitado
                           //0000= deixe tudo zero como padrão
                           //011 =prescaler dividido por 16

   tmr0 = 6;                        //preload do timer0 para 4ms
   GIE = 1;                         //interrupção global ativa
   TOIE = 1;                        //interrupção timer0 ativa
   TMR1ON = 0;                      //desabilita timer1
   TMR2ON = 0;                      //desabilita timer2
  

   while(true)     //laço infinito
   {
     
   }
}

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!