domingo, 18 de junho de 2017

Estrobo duplo alternado para estacionamento - CCS


Olá, hoje temos uma postagem do senhor Renato "Estrobo duplo alternado para estacionamento".
lista de peças para montagem em bancada:

- matriz de contatos pequena
- pic16F628A, microcontrolador da Microchip
- 2 resistor de 220 ohm para limitar a corrente do LED
- 2 LED de 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)

O código fonte:
///////////////////////////////////////////////////////////////////////
//              Projeto: Estrobo duplo alternado para estacionamento //
//                 Nome: Renato Lôbo Rodrigues                       //
//                 Data: 12/03/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

//Estes registros encontra-se nas funções especiais de cada modelo de pic.

#byte tris_portA = 0x85   //direção do portA
#bit led1        = 0x05.0 //pino A0
#bit led2        = 0x05.1 //pino A1

int1 flag=false;
//___________________________________________
void estrobo()
{
   int8 f;              //variável do laço for
   flag=!flag;          //inverte a variável flag
   if(flag){            //se flag é verdadeiro
      for(f=0;f<10;f++) //laço de contagem de 0 até 9
      {
         led1 = !led1 ; //Acende ou apaga o led1
         delay_ms(30);  //tempo de 30 milisegundos
      }
   }else{               //caso flag seja falso
      for(f=0;f<10;f++) //laço de contagem de 0 até 9
      {
         led2 = !led2 ; //Acende ou apaga o led1
         delay_ms(30);
      }
   }
}

//Rotina principal
void main()
{
   int16 conta=0;             //cria uma variável conta igual a zero
   tris_portA = 0b11111100;   //pino A0 e A1 como saída
   led1 = 0;                  //apaga o led1
   led2 = 0;                  //apaga o led2   

   while(true)                //laço infinito
   {
      conta++;                //inrementa conta
      if(conta>=25000)        // se conta é maior ou igual a 25000
      {
         conta=0;estrobo();   //zera a contagem e chama rotina de estrobo
      }//fim do if
   }//fim do while
} //fim do main

Vídeo de demonstração:

https://drive.google.com/file/d/0B9fK-FRZeeWNQWNsSXRzZmdMTVE/view?usp=sharing

quinta-feira, 1 de junho de 2017

Selecionando LED na sequência usando um botão - CCS

Selecionando LED na sequência usando um botão


lista de peças para montagem em bancada:

- matriz de contatos pequena
- pic16F628A, microcontrolador da Microchip
- 4 resistor de 220 ohm para limitar a corrente do LED
- 4 LED de 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)

O código fonte:

///////////////////////////////////////////////////////////////////////
//              Projeto: Selecionar LED na sequência usando um botão //
//                 Nome: Renato Lôbo Rodrigues                       //
//                 Data: 18/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

//Estes registros encontra-se nas funções especiais de cada modelo de pic.
#byte tris_portA = 0x85   //direção do portA
#byte tris_portB = 0x86   //direção do portB
#bit bot1        = 0x06.3 //pino B3

#bit RBPU        = 0x81.7 //Registro pullup do portB 

#bit led1        = 0x05.0 //pino A0
#bit led2        = 0x05.1 //pino A1
#bit led3        = 0x05.2 //pino A2
#bit led4        = 0x05.3 //pino A3

//___________________________________________
//Rotina principal
void main()
{
   int1 st1 = true;  //status do botão
   int8 ponteiro = 0;//seleciona um LED de cada vez
   
   tris_portB = 0b11111111; //todos os pinos como entrada
   RBPU = 0;                //pull-up portB ativados
   
   tris_portA = 0b11110000; //pino A0,A1,A2,A3 como saída
   led1 = 1;         //liga led1
   led2 = 0;         //desliga led2   
   led3 = 0;         //desliga led3   
   led4 = 0;         //desliga led4   
   
   while(true)       //laço infinito
   {
      //funciona quando solta o botão (KeyUp)
      if (!bot1)   st1=false;
      delay_ms(50);           //um tempo para anular repique da chave
      if ( bot1 && st1==false)
      {
           st1=true;
           ponteiro++;
           if(ponteiro>3)ponteiro=0;
           led1 = 0 ;led2 = 0 ;led3 = 0 ;led4 = 0 ; //Apaga todos os LEDs
           switch (ponteiro)
           {
            case 0:led1 = 1 ; //Acende o led1
                  break;
            case 1:led2 = 1 ; //Acende o led2
                  break;
            case 2:led3 = 1 ; //Acende o led3
                  break;
            case 3:led4 = 1 ; //Acende o led4
                  break;
           }
           delay_ms(200); //um tempo para anular repique da chave
      }//fim do if
   }//fim do while
} //fim do main