[tutorial] acender led por um botão (PIC)

postagem de conteudo sobre programação de microcontroladores pic
Post Reply
User avatar
Kodo no Kami
Admin
Admin
Posts: 743
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

[tutorial] acender led por um botão (PIC)

Post by Kodo no Kami » Wed Jan 25, 2017 8:58 am

e ae galera nesse tutorial vou ensinar acender um led por um botão ligado a um PIC, como sempre vou esta usando o simulador proteus e o compilador mikroC tambem devo lembrar que sei pouca coisa de eletronica o basico do basico, bom para começar vou abrir o proteus

Image

agora selecionamos o PIC que no caso vou usar o mesmo do tutorial anterior que é o 16f84a, tambem buscamos o led e o resistor embora boa parte dos tutorias eu abordo apenas a logica esquecendo um pouco ate da lei de ohms (lembrando que em projetos reais nao pode faltar os resistores se não os demais componentes vão queimar), no caso desse tutorial realmente vamos precisar de um resistor para que o circuito funcione como esperado e nao pelo motivo de queimar o componentes em si (ps: tambem buscamos o botão que eu esqueci kkkk)

Image

a logica desse circuito vai ser bem simples quando apertar o botao vai passar corrente para um dos pinos do microcontrolador que no caso vai ser o RA0, ele vai detectar caso isso aconteça e depois enviar corrente tambem por outro pino que vai ativar o led que no caso vai ser o RB1, quando apertar o botao novamente ele vai desativar aquele o outro pino (RB1) que vai apagar o led ou seja cada vez que apertar o botao vai acender o led caso esteja apagado ou vai apagar caso esteja aceso

Image

a corrente que vai passar pelo botão pode ser externa, pode ser a mesma que alimenta o microcontrolador ou ate mesmo ser gerada por um dos pinos do microcontrolador que é nosso caso ja que vamos usar o pino RB0

Image

o resistor nesse caso vamos usar para pull down, para fazer isso colocamos um resistor mais alto e interligamos em com gnd, com isso quando apertar o botão vai passar corrente com o resistor ali a tendência da corrente é ir para o local mais facil que é o pino (RA0) e não direto para o terra ja que existe uma pequena resistencia naquela direção por outro lado quando soltar o botao o pino RB0 não vai enviar corrente para RA0 e vai ter o terra entre o RA0 ou seja 0v no RA0 com isso o microcontrolador vai ter essa base de 5v e 0v o que não aconteceria sem o pull down (lembrando que em um projeto real tambem ia precisar de um resistor em serie com o led para nao queimar ele)

Image

nosso circuito esta pronto agora falta escrever o programa do PIC para isso vamos usar o mikroC, abrimos ele criamos um projeto novo e selecionamos aquele modelo de PIC

Image

no nosso codigo primeira coisa que vamos especificar qual o pino que vai ser de saida e qual vai ser de entrada, no nosso caso o pino RA0 que vai ser entrada e os de saida vão ser o RB0 e RB1, para facilitar vou especificar todos pinos RA como entrada e todos os RB como saida usando o TRISA e TRISB

Code: Select all

void main() {
   TRISA = 0b11111111;
   TRISB = 0b00000000;
}
como o pino RB0 vai sempre enviar corrente entao deixamos ele ativado e o pino RB1 vamos iniciar com ele desligado

Code: Select all

void main() {
   TRISA = 0b11111111;
   TRISB = 0b00000000;
   
   PORTB.RB0 = 0x1;
   PORTB.RB1 = 0x0;
}
agora criamos um loop infinito para ficar repetindo

Code: Select all

void main() {
   TRISA = 0b11111111;
   TRISB = 0b00000000;
   
   PORTB.RB0 = 0x1;
   PORTB.RB1 = 0x0;
   
   while(1){
   }
}
dentro do loop usamos a condição if e checamos o pino RA0 se for igual a 1 quer dizer que tem corrente passando por ele

Code: Select all

void main() {
   TRISA = 0b11111111;
   TRISB = 0b00000000;
   
   PORTB.RB0 = 0x1;
   PORTB.RB1 = 0x0;
   
   while(1){
      if(PORTA.RA0 == 0x1){
      }
   }
}
criamos uma variavel que vai ser para armazenar o estado atual ou seja quando for apertando o botao o que vai definir se vai aceder ou apagar vai ser essa variavel que vou chamar de estado, tambem definimos um valor padrao para começar que no meu caso vai ser o 0 ou seja apagado

Code: Select all

void main() {
   int estado = 0;

   TRISA = 0b11111111;
   TRISB = 0b00000000;
   
   PORTB.RB0 = 0x1;
   PORTB.RB1 = 0x0;
   
   while(1){
      if(PORTA.RA0 == 0x1){
      }
   }
}
dentro do if basta a gente atribuir a variavel para ela mesmo usando uma negação antes ou seja se o valor dentro dela for 0 vai virar um ou se ele for 1 vai virar 0

Code: Select all

void main() {
   int estado = 0;

   TRISA = 0b11111111;
   TRISB = 0b00000000;
   
   PORTB.RB0 = 0x1;
   PORTB.RB1 = 0x0;
   
   while(1){
      if(PORTA.RA0 == 0x1){
         estado = !estado;
      }
   }
}
agora basta atribuir essa variavel para o pino RB1

Code: Select all

void main() {
   int estado = 0;

   TRISA = 0b11111111;
   TRISB = 0b00000000;
   
   PORTB.RB0 = 0x1;
   PORTB.RB1 = 0x0;
   
   while(1){
      if(PORTA.RA0 == 0x1){
         estado = !estado;
         PORTB.RB1 = estado;
      }
   }
}
colocamos um pequeno delay com isso nosso programa esta pronto bastando compilar

Code: Select all

void main() {
   int estado = 0;

   TRISA = 0b11111111;
   TRISB = 0b00000000;
   
   PORTB.RB0 = 0x1;
   PORTB.RB1 = 0x0;
   
   while(1){
      if(PORTA.RA0 == 0x1){
         estado = !estado;
         PORTB.RB1 = estado;
         Delay_ms(200);
      }
   }
}
Image

depois de compilar basta jogar dentro do PIC e testar se estiver tudo certo quando apertar o botão vai acender o led

Image

se apertar o botão novamente vai apagar o led

Image

bom galera o led foi apenas um exemplo pode ser usado para ativar, desativar ou ate mesmo monitorar qualquer coisa como acender uma lampada, abrir um portão, ligar um motor, ativar o android numero 17 (prefiro a 18 XD )

by kodo no kami
Image

que desagradavel ~ mirai kuriyama

User avatar
51M0N
Admin
Admin
Posts: 880
Joined: Fri Jan 02, 2015 2:06 pm

Re: [tutorial] acender led por um botão (PIC)

Post by 51M0N » Thu Jan 26, 2017 7:47 am

legal mano, desembolando eletrônica ai essa parte de pic..ehehehe . O bom que tem softwares que simulam para ver qq esta acontecendo.
Image
"Você, eu, nem ninguém vai bater tão duro como a vida. Mas não se trata de bater duro. Se trata de quanto você aguenta apanhar e seguir em frente (...). É assim que se consegue vencer." by Rocky Balboa

Post Reply

Return to “PIC”