Professional Documents
Culture Documents
Este mais um post sugerido pelas buscas que trouxeram alguem a este blog. Nesta
srie vamos ver como controlar um LED usando um microcontrolador PIC.
O Objetivo
O objetivo desta srie mostrar o projeto do hardware e software de um pequeno
dispositivo que ilustra como controlar um LED usando um PIC. O dispositivo possui
um LED e um boto que ser usado para controlar o estado do LED (apagado, piscando
ou aceso).
O Projeto de hardware
Para este projeto selecionei um modelo de PIC bastante simples, o 12F675. O modelo
12F629 pode ser usado sem nenhuma alterao e simples alterar tanto o hardware
como o software para outros modelos.
O PIC 12F675 tem as seguintes vantagens para este projeto:
Na primeira maneira, com o LED ligado entre o pino do PIC e VSS, o valor do resistor
em srie (conforme a lei de Ohm) deve ser
(VDD - 0.7 - 2,0)/0,01 = 30 ohms
Analogamente, com o LED ligando entre o pino do PIC e VDD, o valor do resistor deve
ser
(VDD - 0.6 - 2,0)/0,01 = 40 ohms
No primeiro caso, o LED acende quando o pino do PIS est no nvel um, no segundo
quando est no nvel zero. No meu circuito adotei a primeira maneira com um resistor
de 33 ohms.
Para a ligao do boto poderia ser usado uma forma semelhante s vistas para o LED.
Olhando mais uma vez o datasheet, o PIC considera nvel zero um valor abaixo de
0.15*VDD (0.45V) e nvel um um valor acima de 0.25*VDD+0,8 (1,55V). Poderamos
calcular a partir destes dados valores apropriados para o resistor em srie com o boto
que garantam os nveis apropriados com um valor reduzido de corrente.
Entretanto, a Microchip j fez estes clculos e disponibiliza internamente ao PIC um
resistor de weak pull-up, que faz com que um pino aberto seja lido como em nvel um.
Desta forma, o boto pode ser ligado diretamente ao VSS e er lido como nvel zero
quando fechado e como nvel um quando aberto.
A lista de componentes para o circuito fica sendo:
1 LED
1 Bateria de 3V
; Estava
ACENDER
MOVLW
MOVWF
BSF
GOTO
; Estava
PISCAR
MOVLW
MOVWF
GOTO
ACESO
MODO_LED
LED
PRINC
PISCANDO
MODO_LED
PRINC
o timer
INTCON,T0IF ; limpa a interrupo do timer
.256-CNT_TIMER
TMR0 ; programa o timer
INTCON,T0IE
INTCON,GIE ; permite interrupes
; Controles do estado do
#define BOTAO_ANT
0x01
#define BOTAO_DEB
0x02
#define BOTAO_APERT 0x04
boto
; este bit indica o estado anterior
; este bit tem o valor c/ "debounce"
; este boto indica que foi detectado
; um pressionmento do boto
TRATA_BOTAO
BTFSC BOTAO
GOTO SOLTO
; testa o boto
; botao apertado
BTFSC MODO_BOTAO,BOTAO_ANT ; testa leitura anterior
GOTO APERT_10
BSF
MODO_BOTAO,BOTAO_ANT ; mudou
GOTO FIM_INT
APERT_10
; igual a vez anterior
BTFSC MODO_BOTAO,BOTAO_DEB
GOTO FIM_INT ; ja estava apertado
BSF
MODO_BOTAO,BOTAO_APERT ; apertou agora
BSF
MODO_BOTAO,BOTAO_DEB
GOTO FIM_INT
SOLTO
BTFSS
GOTO
BCF
GOTO
SOLTO_10
BCF
; botao solto
MODO_BOTAO,BOTAO_ANT
SOLTO_10
MODO_BOTAO,BOTAO_ANT ; mudou
FIM_INT
; igual a vez anterior
MODO_BOTAO,BOTAO_DEB