Utilizando PIC 16F628A com push-button e leds 17

Nos testes deste post vamos utilizar o PIC 16F628A em conjunto com um botão/chave tipo push-button e um led para demonstrar como definir uma porta do microcontrolador como entrada e usar esses dados para acionar outras saídas do chip. Se você está começando com microcontroladores da família PIC, recomendamos ler primeiramente este post de Como gravar seu 1º programa com PIC.

Todos os componentes utilizados nesse post você encontra na loja FILIPEFLOP, como protoboard, leds, resistores e outros componentes.

Loja FILIPEFLOP

Para este projeto, vamos utilizar o seguinte material :

Ligamos os 2 leds às portas 0 e 1 (pinos 17/RA0 e 18/RA1 do PIC 16F628A, respectivamente), e o botão será ligado à porta 3 (pino 2/RA3 do PIC 16F628A). A alimentação do CI é feita pelo pino 5 (GND), e pino 14 (Vcc/5V). A pinagem do PIC 16F628A segue o esquema abaixo:

Pinagem 16F628AA cada toque no botão, a variável Status será atualizada, e as saídas correspondentes aos leds serão acionadas alternadamente : 1 toque no botão acende o led1, o 2o. toque acende o led2, o 3o. toque acende o led1 novamente, e assim por diante.

Os dois resistores ligados aos leds são limitadores de corrente, e o resistor ligado ao push-button funciona como um resistor pull-up, evitando acionamentos incorretos da porta 3.

Circuito PIC 16F628A Push Leds

No programa, usamos BOTAO para nos referirmos à porta 3, PINO_LED1 para a porta 0 e PINO_LED2 para a porta 1. A variável Status recebe os valores 0 ou 1, conforme o acionamento do botão, e tem o seu valor invertido à cada acionamento, por meio do comando status=!status.

Para efetuarmos a leitura de uma determinada porta, simplesmente usamos o comando INPUT_STATE(PORTA), e para escrita, usamos o comando OUTPUT_BIT(PORTA, VALOR).

Gostou ? Conte-nos sua experiência com este post e conheça um pouco sobre a nossa confiável trajetória de vendas da FILIPEFLOP!

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

17 Comentários

  1. Olá amigo se por um acaso eu quisesse que ao rodar o programa um led já comesse aceso e o outro apagado e ao acionar o botão o aceso apagaria e o apagado acendece e ao acionar denovo voltasse a primeira situação?

    1. Boa tarde Bruno,

      Você pode fazer isso colocando esses 2 comandos imediatamente antes da linha com o “While” :

      output_bit(PINO_LED1, 1);
      output_bit(PINO_LED2, 0);

      Abraço.

      Adilson – Equipe FILIPEFLOP

      1. Olá ! Como faço para usar esse processo com cinco ledes?

  2. Olá! onde posso conseguir a biblioteca desse PIC?

    1. Bom dia Fernando,

      Na nossa instalação do MPLab e do compilador, a biblioteca dos dispositivos fica na pasta C:Program Files (x86)PICCDevices

      Abraço

      Adilson – Equipe FILIPEFLOP

  3. Legal, tava procurando esse circuito, só q qdo ligo, no proteus, os leds fica piscando, acende um e outro e ficam assim, qdo aciono o botton eles para e fica um acesso direto, o que fiz de errado.
    To querendo usar no 16f877, pois preciso de 27 portas.
    Obrigado,
    e meus parabens.
    ps voce mandaria os pics gravados ???

  4. Boa, gostei muito!
    Uma pergunta, Se eu quiser fazer uma sequencia (tipo 5 leds) e que no ultimo 6º toque do botão ele apaga-se todos os leds, como eu faço?

    1. Boa noite Octavio,

      Minha sugestão é utilizar um contador, que ao chegar ao 6o. toque desliga todas as portas.

      Abraço.

      Adilson – Equipe FILIPEFLOP

  5. ESTOU COM UM PROBLEMA NO CIRCUITO DO PIC16F628A NÃO ESTA SAINDO 25MA NOS PINOS NA SIMULAÇAO VIA PROTEUS, ESTOU FAZENDO UMA SEQUENCIA DE PISCA DE 8 LEDS COM RESISTORES 330 OHMS SAI 5 VOLTS MAS A CORRENTE SAI 0,000005A, PQ?

  6. Professor Fernando desculpe incomodar vc, mas é que eu to começando agora em microcontroladores e to com um projeto que queria transformar. Será que vc pode me ajudar? é um projeto que ja funciona com lcd mas eu quero transformar ele !! se o senhor professor Fernando puder me ajudar eu fico agradecido.

  7. Professor Bruno tem como fazer um led acender com duas entradas de um pic 16f628a.ex . pinto b1 e pino b2 sendo acionado juntos por um button …no caso curtocircuitando os dois com um button e acendendo o led em b5 no caso?

  8. boa noite
    eu posso colocar o botão com dois terminais ao invés de 4?
    se eu colocar o de duas pernas como fica o esquema?

  9. Olá amigos.

    Estudei programação de microcontroladores há alguns anos atrás e por falta de prática, resolvi re-estudar os assuntos. Quando usei um programa para escrever o código, e comparando o que usei com esses que vocês sugerem, vi que há algumas diferenças em sintaxe (posso estar enganado). Por exemplo, quando estudei programação usava TRISA = 0b00000000; para definir os pinos do PORTA como saídas, porém não consigo fazer o mesmo com o MPLAB, sempre aparece uma mensagem de erro dizendo TRISA é um identificador não definido. Estou cometendo algum erro? Há algum material que mostre como expressar as funções no MPLAB?

    Desde já agradeço pela atenção.

    1. Ah, esqueci de falar que quando tento acessar as interrupções pelo método que conhecia, tbm é gerado um erro. O engraçado é que quando fiz o curso, tbm era em linguagem C.

    2. Vocês poderiam mostrar um exemplo usando interrupções com o TIMER0, por favor? Isto está me deixando maluco! Os modos que costumava fazer não funcionam, nem os que encontro na internet.

      SOCORROOO!!!

  10. Olá!

    Estou com uma dúvida em uma programação.
    preciso acionar um Buzzer mandando 0 na saida do pic16F84A, com eu faria isso?

    Desde já agradeço!

    Lucas Lage Marques Fernandes
  11. Olá, onde consigo esse arquivo 16F628A.h, com essas funções que você chamou na sua main?