apostila micro control adores picbasic pro lazaro
TRANSCRIPT
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
1/77
1
Apostila de Microcontroladores PIC
Utilizando a linguagem de programao PICBASIC
Lzaro Aparecido Pires de Camargo
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
2/77
2
Sumrio
1.Introduo .............................................................................................................. 32.Acessando os pinos de I/O ................................................................................... 53.Instruo FOR ... NEXT ......................................................................................... 7
4.Instruo IF...THEN...ELSE...ENDIF ...................................................................... 95.Instruo WHILE...WEND...................................................................................... 116.Instruo GOSUB ................................................................................................. 137.Exerccios de Reviso - Conceitos Bsicos........................................................ 178.Conectando um LCD em um microcontrolador PIC ........................................... 209.Conectando um display de 7 Segmentos............................................................ 2410.Conversor A/D..................................................................................................... 2711.Comunicao Serial............................................................................................ 3312.Utilizando a memria EEPROM interna do PIC ................................................. 4013.Instruo PWM.................................................................................................... 4314.Controle de um motor de passo utilizando o microcontrolador PIC............... 4415.Utilizando Interrupes ...................................................................................... 5416.Conectando um teclado no PIC ......................................................................... 5817.Mdulo Comparador Analgico ........................................................................ 6218.Microcontrolador PIC 12F675............................................................................. 6619.Resumo do Compilador PicBasic Pro (PBP)..................................................... 70
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
3/77
3
1. Introduo
Microcontrolador PIC 16F877A
Caractersticas:
33 pinos de I/O (entradas / sadas) digitais; 8192 (8K) palavras de 14 bits para programa em memria FLASH; 368 bytes de memria RAM e 256 bytes de memria EEPROM interna para dados; 3 timers (2 timers de 8 bits e 1 timer de 16 bits); 1 canal de comunicao USART serial e 1 timer watdog conversor A/D (analgico digital) com 8 canais; frequncia de operao de at 20MHz
Os 33 pinos de I/O esto organizados em 5 portas:
PORTARA5 RA4 RA3 RA2 RA1 RA0
PORTBRB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
PORTCRC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
PORTD
RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0
PORTERE2 RE1 RE0
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
4/77
4
Os pinos de I/O podem ser configurados como entrada ou sada, dependendo dos valores dos registrosTRIS
TRIS = 1 - pino como entrada (Input)
TRIS = 0 - pino como sada (Output)
TRISA configura a PORTA, TRISB configura a PORTB e assim por diante.
Exemplo: TRISB = %00000011 configura os pinos da PORTB da seguinte forma:
Exerccio 1 : Como foram configurados os pinos (como entrada ou sada) abaixo:
a) TRISB = %10010001
1 0 0 1 0 0 0 1
Configurao da PORTB:
entrada saida
b) TRISC =%11110000
1 1 1 1 0 0 0 0
Configurao da PORTC:
c) TRISD =%00000000
0 0 0 0 0 0 0 0
Configurao da PORTC:
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
5/77
5
2.Acessando os pinos de I/O
1) Simule os programas, indicando o valor do PORTB aps executa-los:
a)TRISB = %00000000
PORTB.7 = 1
PORTB.2 = 1
END
b)LED1 VAR PORTB.1LED5 VAR PORTB.5LED6 VAR PORTB.6
TRISB = %00000000
LED1 = 1LED5 = 1LED6 = 1
END
c)LED3 VAR PORTB.3
TRISB = %00000000
VOLTA:LED3 = 1
PAUSE 1
LED3 = 0
PAUSE 1
GOTO VOLTA
END
2) Elabore um programa que faa RB4 =1 e RB7=1 e os demais pinos do PORTB iguais a zero:
3) Elabore um programa em que os pinos RB0 e RB7 ficaram piscando juntos (RB0=1 e RB7=1......RB0= 0 eRB7= 0..)
4) Elabore um programa em que os pinos RB0 e RB7 ficaram piscando de forma alternada (RB0=1 eRB7=0......RB0= 0 e RB7= 1..)
PORTB=%
PORTB=%
PORTB=%
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
6/77
6
5) Elabore um programa que realize as seguintes operaoes:
a) ativar o pino RB2 durante 2msb) depois ativar o pino RB4 durante 5msc) depois ativar o pino RB5 durante 1ms
6) Elabore um programa que realize as seguintes operaes:
a) Definir uma variavel MOTOR conectada ao pino RB2b) Ativar MOTOR durante 4 ms e desligar Motor durante 3ms de forma continua
7) Elabore um programa que ative a PORTB, da seguinte forma:
RB7 ON OFF ON ON OFF ONRB6 ON OFF ON ON OFF ONRB5 ON OFF ON ON ON OFFRB4 ON OFF ON ON ON OFFRB3 OFF ON OFF OFF ON OFF
RB2 OFF ON OFF OFF ON OFFRB1 OFF ON OFF OFF OFF ONRB0 OFF ON OFF OFF OFF ON
Cada estado da PORTB deve ficar durante 2 ms.
8) Modifique o exercicio 7, utilizando a PORTD
9) Elabore um programa para que todos os pinos da PORTB e PORTC fiquem ligando e desligando, a cada 5ms.
10) Modifique o exercicio 9, incluindo a PORTD
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
7/77
7
3. Instruo FOR...NEXT
FOR conta = inicioTO fim{STEP {-} Inc}{Corpo}
NEXT {Conta}
O loop FOR.. NEXT permite que os programas executem um nmero de declaraes (o Corpo) por algumasvezes usando uma varivel como contador.
Exemplos:
FOR i = 1 TO 10 Conta de 1 a 10Serout 0, N2400,[#i, ] Envia cada numero para
Pin0 serialmenteNEXT i Retorna e faz a proxima contagem
Serout 0,N2400,[10] Envia um avano de linha
FOR B2 =20 TO 10 STEP -2 Conta de 20 a 10 de 2 em 2
Serout 0, N2400, [#B2, ]
NEXT B2 retorna e faz a proxima contagem
Serout 0,N2400,[10] Envia um avano de linha
1) Simule os programas, indicando o valor do PORTB aps executa-los:
a) A VAR BYTE
TRISB = %00000000
PORTB = %10000000
FOR A = 0 TO 3
PORTB = PORTB >> 1
PAUSE 2
NEXT A
END
b)A VAR BYTE
TRISB = %00000000
PORTB = %10000000
FOR A = 0 TO 3 STEP 2
PORTB = PORTB >> 1
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
8/77
8
PAUSE 2
NEXT A
END
c) CONTADOR VAR BYTE
TRISB = %00000000
FOR CONTADOR = 0 TO 9
PORTB = CONTADORPAUSE 2
NEXT CONTADOR
END
d)X VAR BYTE
TRISB = %00000000VOLTA:
PORTB = %10000000
FOR X=1 TO 4
PAUSE 4PORTB = PORTB >> 1
NEXT X
GOTO VOLTA
END
2) Modifique o programa 1a, para que o FOR seja executado durante 5 vezes.
3) Modifique o programa 1c , para que a variavel CONTADOR varie de 0 ate 255.
4) Elabore um programa que faa o pino RB0 ir para 0 durante 1ms e ir para 1 durante 2ms, repetindo istodurante 4 vezes.
5) Elabore um programa que faa o pino RB4 ir para 1 durante 3ms e ir para 0 durente 1 ms, repetindo istodurante 20 vezes.
6) Modifique o programa 1d, para que todos os pinos da PORTB, sejam acionados;
7) Modifique o programa 1d, para que os pinos sejam acionados, no sentido contrario;
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
9/77
9
4. Instruo IF...THEN...ELSE...ENDIF
IF Comp {AND/OR Comp...} THEN RotuloIF Comp{AND/OR Comp} THEN
DeclaraoELSE
DeclaraoENDIF
If...Then avalia os termos da comparao p/ verdadeiro ou falso. Se for verdadeiro, a operao aps o Then executada. Se ele resultar em falso, a operao aps o Then no executada. Comparaes que resultemem 0, so consideradas falsas. Qualquer outro valor considerado verdadeiro. Exemplos:
If PortA.0 = 0 Then pushd ' Se a pino RA0 for igual' a zero, salte para o
' rtulo pushd
If B0 10 Then ' Se B0 for diferente de 10, faaB0 = B0 + 1 ' incrementa B0B1 = B1 - 1 ' incrementa B1
Endif
1) Simule o programa:a)
CHAVE1 VAR PORTD.0CHAVE2 VAR PORTD.1MOTOR1 VAR PORTB.0MOTOR2 VAR PORTB.1
TRISD = %00011111
TRISB = %00000000INICIO:
IF CHAVE1 = 1 THEN
MOTOR1 = 1PAUSE 1
ELSE
MOTOR1 = 0
PAUSE 1
ENDIF
IF CHAVE2 =1 THEN
MOTOR2 = 1PAUSE 1
ELSE
MOTOR2 = 0
PAUSE 1
ENDIF
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
10/77
10
GOTO INICIO
END
2) Modifique o programa acima para controlar 8 motores conectados ao PORTB da seguinte forma:
se RD0 = 1 , entao MOTOR1 e MOTOR2 ligadosse RD0 = 0 , entao MOTOR1 e MOTOR2 desligados
se RD2 = 1, entao MOTOR3 e MOTOR4 ligadosse RD2 = 0, entao MOTOR3 e MOTOR4 desligados
se RD4 = 1, entao MOTOR5, MOTOR6, MOTOR7, MOTOR8 ligadosse RD4 = 0, entao MOTOR5, MOTOR6, MOTOR7, MOTOR8 desligados
3) Simule o programa:
CONTADOR VAR BYTELED VAR PORTC.0TRISB = %00000000OUTPUT LED
CONTADOR = 0INICIO:
PAUSE 2
CONTADOR = CONTADOR + 1
PORTB=CONTADOR
IF CONTADOR = 5 THENLED = 1PAUSE 10LED = 0
ENDIF
GOTO INICIO
END
4) Modifique o programa 3, para que, se a varivel CONTADOR for maior que 8, ligar o pino RC2 durante 5milisegundos.
5) Modifique o programa 3, para que, se varivel CONTADOR for igual a 3, ligar o pino RC1 durante 3milisegundos.
6) Modifique o programa 3, para que se a varivel CONTADOR for igual a 10, ligar o pino RC6 durante 4milisegundos . e quando a varivel contador for igual a 50, ligar o pino RC7, durante 8 milisegundos.
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
11/77
11
5. Instruo WHILE...WEND
WHILECondioDeclarao......
WEND
Executa repetidamente "Declarao" enquanto (While) a Condio for verdadeira. Exemplo:
i = 1
WHILE i
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
12/77
12
c)TRISB = %00000000
WHILE PORTB < 9
PAUSE 2PORTB = PORTB + 1
WEND
END
d)
TRISD = %00011111TRISB = %00000000
WHILE PORTD.3 = 0
WHILE PORTD.4 = 0
PORTB = ~PORTBPAUSE 1
WEND
WEND
END
2) Modifique o programa 1.a, para o Sensor conectado no pino RD2;
3) Modifique o programa 1.b. para o CONTADOR conectado no pico RD4;
4) Modifique o programa 1.c para que a PORTB seja incrementada ate o valor 5
5) Elabore um programa que:
a) escrever %00000000 no PORTB
b) enquanto o pino RD7 = 0, escrever %01010101 no PORTB
6) Elabore um programa , que, enquanto o pino RD5 = 0, fazer o pino RC0 piscar a cada 1 ms.
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
13/77
13
6. Instruo GOSUB
Salta para a subrotina em Rotulo.
GOSUB beep Executa subrotina chamada beep..............
beep: High 0 Ligue o Led ligado em Pin0
Sound 1,[80,10] Bipe no Alto-falanteLow 0 'Desliga o LedReturn Volta p/ rotina principal
1) Simule os programas abaixo:a)
LAMPADA1 VAR PORTB.7LAMPADA2 VAR PORTB.0
LAMPADA3 VAR PORTB.1LAMPADA4 VAR PORTB.2LAMPADA5 VAR PORTB.3
TRISB = %00000000
PORTB = %00000000
LAMPADA2 = 1GOSUB SUBROTINA1
LAMPADA3 = 1
GOSUB SUBROTINA1LAMPADA4 = 1GOSUB SUBROTINA1LAMPADA5 = 1
END
SUBROTINA1:
PAUSE 1
LAMPADA1 = 1PAUSE 2LAMPADA1 = 0PAUSE 1
RETURN
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
14/77
14
b)CONTADOR VAR BYTEPAINEL VAR PORTB
TRISB = %00000000PORTB = %00000000
GOSUB DIREITAGOSUB ESQUERDAGOSUB DIREITAGOSUB ESQUERDA
END
DIREITA:
PORTB = %10000000FOR CONTADOR=0 TO 8
PAUSE 1
PORTB = PORTB >> 1NEXT CONTADORRETURN
ESQUERDA:
PORTB = %00000001FOR CONTADOR=0 TO 8PAUSE 1PORTB = PORTB
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
15/77
15
a)ATUADOR1 VAR PORTB.0ATUADOR2 VAR PORTB.3ATUADOR3 VAR PORTB.7
TRISB = %00000000PORTB = %00000000
ATUADOR1 = 1
PAUSE 1ATUADOR1 = 0PAUSE 1
ATUADOR2 = 1PAUSE 1
ATUADOR2 = 0PAUSE 1
ATUADOR3 = 1PAUSE 1
ATUADOR3 = 0PAUSE 1
ATUADOR1 = 1
PAUSE 1ATUADOR1 = 0PAUSE 1
ATUADOR2 = 1PAUSE 1
ATUADOR2 = 0PAUSE 1
ATUADOR3 = 1PAUSE 1
ATUADOR3 = 0PAUSE 1
ATUADOR1 = 1
ATUADOR2 = 1ATUADOR3 = 1END
b)
MAQUINA1 VAR PORTB.0MAQUINA2 VAR PORTB.2MAQUINA3 VAR PORTB.4MAQUINA4 VAR PORTB.5MAQUINA5 VAR PORTB.6
TRISB = %00000000PORTB = %00000000HIGH MAQUINA1PAUSE 1HIGH MAQUINA2PAUSE 1LOW MAQUINA1LOW MAQUINA2
MAQUINA3 = 1PAUSE 2HIGH MAQUINA1
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
16/77
16
PAUSE 1HIGH MAQUINA2PAUSE 1LOW MAQUINA1LOW MAQUINA2
MAQUINA4 =1PAUSE 3HIGH MAQUINA1PAUSE 1
HIGH MAQUINA2PAUSE 1LOW MAQUINA1LOW MAQUINA2
MAQUINA5 = 1
END
3) Elabore um programa que chame 4 vezes a subrotina DIREITA e 3 vezes a subrotina ESQUERDA doexercicio 1b, e simule:
4) Crie uma subrotina que acione os pinos RB0 e RB1 durante 1ms, e chame esta subrotina 5 vezes;
5) Crie uma subrotina que acione o pino RB7 tres vezes em intervalos de 1ms, e chame esta subrotina 2vezes;
6) Crie uma subrotina que ative todos os pinos do PORTB durante 2ms e depois desative durane 3ms, echameesta subrotinha 5 vezes;
7) Quais so as vantagens de se utilizar subrotinas em um programa?
8) Qual a ultima instruo em uma subrotina?
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
17/77
17
PORTB =
7. Exercicios Reviso - Conceitos Bsicos
1) Quantos bits possuem as variveis declaradas, abaixo:
MOTOR_1 VAR BIT
SERVIDOR VAR BYTE
SOLENOIDE VAR PORTB.6
RELE VAR PORTA.2
ELETRO VAR WORD
2) Classifique as seguintes constantes como Decimal, Binria, Hexadecimal ou Caracteres:
3) Como esto configurados ospinos das portas (entrada ou sada),com os seguintes valores dosregistros TRIS:
a) TRISB = %00110001
b) TRISC = %11100101
4) Simule os programas abaixo:a)
LED5 VAR PORTB.5LED7 VAR PORTB.7
TRISB = %00000000PORTB = %00000000
LED5 = 1
LED7 = 1
END
b)A VAR BYTE
TRISB = %00000000PORTB = %10000000
FOR A = 0 TO 5
PORTB = PORTB >> 1
Constante Tipo Constante Tipo45 %11111111
100 "2007"%00110011 240"TIMAO" $FE$BA %10001111
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
18/77
18
PORTB =
PORTB =
PAUSE 5NEXT AEND
c)SENSOR2 VAR PORTD.2ROTOR VAR PORTB.0
TRISD = %00011111
TRISB = %00000000
PORTB = %00000000INICIO:
IF SENSOR2 = 1 THEN
ROTOR = 1PAUSE 10
ELSEROTOR = 0PAUSE 5
ENDIF
GOTO INICIO
END
d)TEMP VAR PORTD.1LED3 VAR PORTB.3
TRISD = %00011111TRISB = %00000000PORTB = %00000000
INICIO:WHILE TEMP = 1
LED3 = 1WEND
LED3 = 0
GOTO INICIOEND
5) Elabore um programa que faa o pino RB4 = 1 e os demais pinos do PORTB iguais a zero:
6) Elabore um programa que faa o pino RB2 ir para 0 durante 2 ms e ir para 1 durante 3 ms, repetindo istodurante 8 vezes.
7) Reescreva o programa abaixo utilizando subrotinas:
DINAMO VAR PORTB.7MOTOR VAR PORTB.2SENSOR VAR PORTD.0
ALTOFALANTE VAR PORTB.0
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
19/77
19
TRISB = %00000000
DINAMO = 0MOTOR = 0PAUSE 2DINAMO = 1SOUND ALTOFALANTE,[80,100]DINAMO = 0PAUSE 3
MOTOR = 1DINAMO = 1SOUND ALTOFALANTE,[80,100]DINAMO = 0PAUSE 1
MOTOR = 0DINAMO = 1SOUND ALTOFALANTE,[80,100]DINAMO = 0PAUSE 10
MOTOR = 1END
8)Simule o programa abaixo:
LEITOR1 VAR PORTD.1LEITOR2 VAR PORTD.2
TRISD = %00011111TRISB = %00000000
INICIO:
PORTB = %00000000
WHILE LEITOR1 = 0
PORTB.5 = 1PORTB.6 = 1PAUSE 1PORTB.5 = 0PORTB.6 = 0PAUSE 1
WENDPAUSE 1
PORTB = %00000001PAUSE 1
GOTO INICIOEND
9) Reescreva o programa 8, para que a instruo while ocorra quando a varivel leitor2 for igual a 1;
10) Elabore um programa (utilizando while):
a) Enquando a PORTA = %00001111, fazer o pino RB0 ligar e desligar em intervalos de 1ms .b) Depois, escrever %11111111 no PORTB
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
20/77
20
8. Conectando um LCD em um microcontrolador PIC
Um LCD um perifrico inteligente que se comunica com o mundo externo atravs de 8 ou 4 bits. semprepreciso iniciar o display, programando-o. Os mdulos LCD so encontrados em diferentes configuraes, porexemplo:
2 x 16 = 2 linhas por 16 colunas2 x 20 = 2 linhas por 20 colunas4 x 20 = 4 linhas por 20 colunas
Os pinos de conexo de um modulo LCD so:
Terminal Smbolo Nome e Funo1 Vss Terra, 0V2 Vdd Alimentao, +5V3 Vo Ajuste da tenso de contraste4 RS Seleo Dados/Controle5 R/W Leitura/Escrita no LCD6 E Enable Habilitao7 D0 D0 bit menos significativo (LCD)8 D1 D19 D2 D2
10 D3 D311 D4 D412 D5 D513 D6 D614 D7 D7 bit mais significativo (MSB)
Escrevendo em um LCD utilizando o PIC BASIC PRO
Para escrever informaes em um mdulo LCD, pode-se utilizar o comando LCDOUT.
So enviados comandos ao LCD, deve-se escrever $FE, seguido pelo comando desejado. Alguns comandosteis esto listados na tabela a seguir:
Comando Operao$FE,1 Limpa o display$FE,2 Retorno (inicio da primeira linha)$FE,$0C Cursor desligado
$FE,$0E Cursor sublinhado ligado$FE,$0F Cursor piscante$FE,$10 Move o cursor uma posio esquerda$FE,$14 Move o cursor uma posio direita$FE,$C0 Move o cursor para o inicio da segunda
linha$FE,$94 Move o cursor para o inicio da terceira
linha$FE,$D4 Move o cursor para o inicio da quarta linhaTambem deve-se definir como a conexo do LCD no microcontrolador, utilizando-se comandos DEFINE.
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
21/77
21
1) Simule o programa abaixo: (obs. No se esquea de configurar o modulo LCD na simulao)
MicrocontroladorPIC
LCD
RB7
RB6
RB5
RB4
RB1
RB0 E
RS
D7
D6
D5
D4
R/W GND
DEFINE LCD_DREG PORTB ;PORTB conectado nas linhas de dados do LCD
DEFINE LCD_DBIT 4 ;Define o primeiro pino da PORTB conectado no LCD
DEFINE LCD_RSREG PORTB ;Define que o pino RS do LCD esta ligado no PORTB
DEFINE LCD_RSBIT 1 ;Define que o pino RB1 esta ligado no sinal RS do LCD
DEFINE LCD_EREG PORTB ;Define que o pino E do LCD esta ligado no PORTB
DEFINE LCD_EBIT 0 ;Define que o pino RB0 esta ligado no sinal E do LCD
DEFINE LCD_BITS 4 ;Define o modo de comunicao de 4 bits com o LCD
DEFINE LCD_LINES 2 ;Define display de 2 linhas
DEFINE LCD_COMMANDUS 2000 ;Define atraso para envio de comandos para o LCD
DEFINE LCD_DATAUS 50 ;Define atraso para envio de dados para o LCD
INICIO:
LCDOUT $FE,1 ;Limpa LCDLCDOUT "OI" ;Escreve "OI" no LCD
PAUSE 1 ;Espera 1ms
LCDOUT $FE,$C0 ;Move o cursor para a segunda linhaLCDOUT "GENTE AMIGA" ;Escreve "GENTE AMIGA"
goto inicio
end
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
22/77
22
2) Modifique o programa 1, para escrever seu nome no LCD;
3) Simule o programa abaixo:
DEFINE LCD_DREG PORTB ;PORTB conectado nas linhas de dados do LCD
DEFINE LCD_DBIT 4 ;Define o primeiro pino da PORTB conectado no LCD
DEFINE LCD_RSREG PORTB ;Define que o pino RS do LCD esta ligado no PORTB
DEFINE LCD_RSBIT 1 ;Define que o pino RB1 esta ligado no sinal RS do LCD
DEFINE LCD_EREG PORTB ;Define que o pino E do LCD esta ligado no PORTB
DEFINE LCD_EBIT 0 ;Define que o pino RB0 esta ligado no sinal E do LCD
DEFINE LCD_BITS 4 ;Define o modo de comunicao de 4 bits com o LCD
DEFINE LCD_LINES 2 ;Define display de 2 linhas
DEFINE LCD_COMMANDUS 2000 ;Define atraso para envio de comandos para o LCD
DEFINE LCD_DATAUS 50 ;Define atraso para envio de dados para o LCD
CONTADOR VAR BYTE
INICIO:
LCDOUT $FE,1 ;Limpa LCDLCDOUT "CONTADOR = ",#CONTADOR ;Escreve valor da variavel contador
CONTADOR = CONTADOR + 1 ;Incrementa variavel contador
PAUSE 1 ;Espera 1ms
GOTO INICIO
END
4) Modifique o programa do item 3, para contador de 5 em 5;
5) Mude o tipo da varivel CONTADOR para WORD:
CONTADOR VAR WORD
O que ocorre com o programa?
6) Elabore um program que mostre as seguintes mensagens em um display LCD :
Se o pino RD0 = 1
Mensagem : Servidor Ligado
Se o pino RD0 = 0
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
23/77
23
Mensagem : Servidor Desligado
7) Modifique o programa do item 3, para que quando a contagem chegar em 10, escrever no LCD TESTECONCLUIDO
8) Elabore um programa que, se os pinos RD7 e RD6 estiverem ligados, deve mostrar a mensagemlampadas ligadas, e se os pinos RD7 e RD6 estiverem desligados, deve mostrar a mensagem lmpadasdesligadas
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
24/77
24
9. Conectando um display de 7 Segmentos
Conectando um display de 7 segmentos no microcontrolador PIC
Um display de 7 segmentos tem o seguinte aspecto:
Pode-se conectar um display de 7 segmentos anodo comum ao PIC 16F84 da seguinte forma:
Number Segments Hex
0 1100 0000 $C0
1 1111 1001 $F9
2 1010 0100 $A4
3 1011 0000 $B0
4 1001 1001 $99
5 1001 0010 $92
6 1000 0010 $82
7 1111 1000 $F8
8 1000 0000 $80
9 1001 1000 $98
Confi ura o de um dis la catodo
Exemplo para escrever O em umdisplay de 7 segmentos anodocomum:
TRISB = %00000000
PORTB = %11000000
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
25/77
25
1) Para os programas a seguir, considere um display de 7 segmentos tipo anodo comum, conectado aoPORTB do PIC16F84.
Explique o que faz cada instruo dos programas abaixo, e simule os programas, indicando o que mostradono display de 7 segmentos.
a)TRISB = %00000000
VOLTA:
PORTB = %11000000
PAUSEUS 1
PORTB = %11111001
PAUSEUS 1
PORTB = %10100100
PAUSEUS 1
GOTO VOLTA
END
b)
TRISA = %00011111TRISB = %00000000
INICIO:
IF PORTA.4 = 1 THEN
PORTB = %10011001
ELSE
PORTB =%00000000
ENDIF
GOTO INICIOEND
c)SENSOR1 VAR PORTA.1TRISA = %00011111TRISB = %00000000
VOLTA:PORTB = %00000000
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
26/77
26
WHILE SENSOR1 = 1
PORTB = %11111001
WEND
GOTO VOLTA
END
d)
X VAR BYTE
NUMERO1 VAR BYTE
TRISB = %00000000PORTB = %00000000
LOOP:FOR X = 9 TO 0 STEP -1
GOSUB CONVERTE
PORTB = NUMERO1
PAUSE 1
NEXT X
GOTO LOOP
CONVERTE:
LOOKUP X,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$98],NUMERO1
RETURN
END
2) Modifique o programa 1a para mostrar no display os simbolos A, be C.
3) Modifique o programa 1b , para que quando o pino RA2 = 1, escrever 2 no display, e quando RA2 = 0escrever -.
4) Modifique o programa 1c, para que enquanto o pino RA1 = 1, mostre H no display.
5) Modifique o programa 1d, para que mostre os simbolos E,T,E,P,2,0,0,5,E,L
6) Modifique o programa 1d para escrever seu nome
7) modifique os programas 1a, 1b, e 1c para que utilize o hardware abaixo, com um display de 7 segmentostipo catodo comum, conectado em um PIC 16F876, e simule.
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
27/77
27
10. Conversor A/D
Leitura de Tenses Analgicas com o PIC
Em muitas aplicaes, pode ser necessrio realizar a leitura de grandezas analgicas do mundoexterior. Normalmente, utilizam-se sensores especiais para converter a grandeza desejada em um nvel detenso proporcional. Pode-se efetuar a leitura destas tenses por intermdio de um conversoranalgico/digital, cuja funo converter a tenso analgica em um nmero binrio, proporcional tensoanalgica.
Nos conversores A/D, utiliza-se uma tenso de referncia (normalmente chamada de Vref), que servede fundo de escala para o sinal de sada do conversor, ou seja, as sadas do conversor estaro todas emnvel 1, quando a tenso de entrada do conversor for igual ou maior que a tenso de Vref.
Para um conversor A/D com resoluo de 10 bits e tenso de referncia de 5V, o valor de cada bit ser:
Valor de cada bit = 5 / (210 1) = 4,8876mV
Um resultado igual a 100 (em decimal) , teremos uma tenso de 100 *4,8876mV = 0,48876V
Para um conversor A/D com resoluo de 8 bits e tenso de referncia de 5V, o valor de cada bit ser:
Valor de cada bit = 5 / (28 1) = 19,61mV
Um resultado igual a 100 (em decimal), teremos uma tenso de 100 * 0,01961V = 1,961V
Modulo conversor A/D do PIC 16F877
O mdulo conversor A/D do PIC 16F877 tem 8 canais como mostra a figura abaixo:
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
28/77
28
Instruo ADCIN ADCIN Canal, Var
A instruo ADCIN le o "canal" do conversor a/d e armazena o resultado na varivel "Var".
Antes de ADCIN ser usada, deve-se fazer as seguintes operaes:
a) Definir como sera feita a converso utilizando "DEFINE"b) o registro TRIS deve ser ajustado, para que o pino utilizado seja configurado como entrada.c) configurar o Registro ADCON1
Exemplo1: Leitura do canal 0 (RA0):LEITURA VAR BYTE 'define uma varivel de 8 bits
DEFINE ADC_BITS 8 'ajusta numero de bits do conversor A/DDEFINE ADC_CLOCK 3 'ajusta fonte de clockDEFINE ADC_SAMPLEUS 50 'ajusta o tempo de amostragem em us
TRISA = %11111111 ' PORTA como entradaTRISB = %00000000 'PORTB como sadaADCON1 = %00000010 'PORTA como entrada analgica
ADCIN 0,LEITURA ' Le canal 0 (RA0) e armazena na varivel Leitura
PORTB = LEITURA ' Escreve Leitura no PORTBEND
As configuraes do registro ADCON1 esto mostradas abaixo:
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
29/77
29
O bit 7 de ADCON1 controla se o resultado e justificado para a direita ou para a esquerda, como mostra afigura:
Resultados de 8 bits, devem ser justificados para a esquerda (ADCON1.7 = 0).
Resultados de 10 bits, devem ser justificados para a direita (ADCON1.7 = 1).
Exemplo 2: Leitura do canal 0, mostrando o resultado no PORTD:
DEFINE ADC_BITS 8 ' ajusta nmero de bits do conversor A/DDEFINE ADC_CLOCK 3 ' ajusta fonte de clockDEFINE ADC_SAMPLESUS 50 ' ajusta o tempo de amostragem em us
CONVERSOR VAR BYTE
TRISA = %11111111
TRISD = %00000000
ADCON1 = %00000010
INICIO:
ADCIN 0,CONVERSOR
PORTD = CONVERSOR
PAUSE 1
GOTO INICIO
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
30/77
30
Para os exercicios abaixo, faa os programas para o PIC 16F877, anote os programas e simule.
1) Modifique o exemplo1, para ler o canal 2 (RA2) e mostrar o resultado no PORTC;
2) Modifique o exemplo2, para ler o canal 7 (RE2) e mostrar o resultado no PORTB;
3) Modifique o exemplo 2, para ler o canal 3 e mostrar o resultado no PORTD, e para ler o canal 6 e mostrar oresultado no PORTB;
4) Explique o que faz cada intruo dos programas abaixo, e simule o programa, indicando o valor do PORTBaps executa-los:
DEFINE ADC_BITS 10 ' ajusta nmero de bits do conversor A/DDEFINE ADC_CLOCK 3 ' ajusta fonte de clockDEFINE ADC_SAMPLESUS 50 ' ajusta o tempo de amostragem em us
ADVAL VAR WORD
TRISA = %11111111
TRISB = %00000000
ADCON1 = %10000010
INICIO:
ADCIN 0,ADVAL
IF ADVAL > 200 THEN TESTE2
PORTB = %00000001
GOTO INICIO
TESTE2:
IF ADVAL > 400 THEN TESTE3
PORTB = %00000011
GOTO INICIO
TESTE3:
IF ADVAL > 600 THEN TESTE4
PORTB = %00000111
GOTO INICIO
TESTE4:
IF ADVAL > 800 THEN TESTE5
PORTB = %00001111
GOTO INICIO
TESTE5:
PORTB = %00011111
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
31/77
31
GOTO INICIO
END
5) Modifique o programa 4, para o conversor trabalhar com 8 bits;
6) Explique o que faz cada instruo dos programas abaixo, e simule o programa:
'Define parametros do display LCD
DEFINE LCD_DREG PORTDDEFINE LCD_DBIT 4DEFINE LCD_RSREG PORTDDEFINE LCD_RSBIT 0DEFINE LCD_EREG PORTDDEFINE LCD_EBIT 1
DEFINE LCD_BITS 4DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2DEFINE LCD_DATAUS 5
'Define parametros do conversor A/D
DEFINE ADC_BITS 10 ' ajusta numero de bits do conversor A/DDEFINE ADC_CLOCK 3 ' ajusta fonte de clock (3=rc)DEFINE ADC_SAMPLEUS 50 ' ajusta tempo de amostragem em microssegundos
LEITURA_AD VAR WORD
LEITURA_MV VAR WORD
TRISA = %111111111
ADCON1 = %10000010
LCDOUT $FE,1 ' LIMPA DISPLAYLCDOUT "VALOR DO A/D"
INICIO:
ADCIN 0,LEITURA_AD
LEITURA_MV = LEITURA_AD * 5
LCDOUT $FE,$C0LCDOUT " "LCDOUT $FE,$C0LCDOUT #LEITURA_AD," ",#LEITURA_MV,"mV"PAUSE 2
GOTO INICIO
END
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
32/77
32
7) Modifique o programa 5 para o conversor A/D trabalhar com 8 bits;
8)Elabore um programa para ler o canal 1 do conversor A/D, e quando a tenso for maior que 2V, ligar o pinoRB7
9)Elabore um programa para ler os canais 0 e 3 do conversor A/D, e quando a tenso do canal 0 for maiorque a tenso do canal 3, ligar o pino RC0;
10) Elaborar um programa para indicar em um display de 7 segmentos a tenso no canal 2 do conversor A/D ,e desenhe o hardware.
11)Elaborar um programa para mostrar em um display LCD os valores dos canais 0 e 1;
12)Elaborar um programa para mostrar em um display LCD as seguintes mensagens:a) quando a tenso do canal 4 do a/d for menor que 2V, escrever :"Sinal Baixo"b) quando a tenso do canal 4 for maior ou igual a 2V, escrever:"Sinal Alto"
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
33/77
33
11. Comunicao SerialComunicao Serial com o PIC
possivel realizar a comunicao entre um microcontrolador e um PC atraves da porta serial, utilizando ocircuito de interfae MAX232, como mostrado abaixo:
A comunicao realizada de forma serial e assincrona, e os sinais tem niveis RS232 como mostra a figura.
Para se realizar uma comunicao serial utilizando a linguagem PICBASIC, podem ser utilizadas duasinstrues:
SEROUT Pino,Modo,[item, item, ....] para enviar um ou mais itens ao Pino indicado em formatoassincrono padro usando 8 bits de dados, sem paridade e umstop bit (8N1).
SERIN Pino,Modo,(qual,qual),(#)item,item,... para receber um ou mais itens no Pino no fomatoassncrono padro usando 8 bits de dados, sem paridade e umstop bit (8N1).
A opo Modo definida no arquivo MODEDEFS.BAS. Para usa-lo, adicione a linha : INCLUDE"modedefs.bas"
Modo Baud Rate Estado
T2400 2400 VerdadeiroT1200 1200 VerdadeiroT9600 9600 VerdadeiroT300 300 VerdadeiroN2400 2400 VerdadeiroN1200 1200 InvertidoN9600 9600 InvertidoN300 300 Invertido
Um valor numrico (uma variavl ou uma constante) ir enviar o caracter ASCII correspondente:13 - retorno a primeira coluna10 - avano de linha
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
34/77
34
Um valor nmerico precedido por um (#) , ir enviar a representao ASCII de seu valor decimalPor exemplo:se W0 =123, entao #W0 (ou #123) enviar : ' 1' , ' 2' , '3' .1) Simule e explique o programa:
INCLUDE "modedefs.bas"
DEFINE CHAR_PACING 500
TX var PORTC.6
INICIO:
SEROUT TX,T2400,["Oi pessoal!!!",13,10]GOTO INICIO
END
2) Modifique o programa 1, para enviar serialmente, a mensagem "Sou uma pessoa Feliz!!!!".
3) Modifique o programa 1, para enviar serialmente, a mensagem " Sou um Processador Feliz!!!!", com avelocidade de 9600 bps.
4) Modifique o programa 1, para enviar serialmente, a mensagem "TIMAO" somente 5 vezes.
5) Simule e explique o programa:
INCLUDE "modedefs.bas"
DEFINE CHAR_PACING 500
RX var PORTC.7VALOR var BYTE
TRISB = %00000000
INICIO:SERIN RX,T2400,VALOR ;aguarda at que o caracter seja recebido
serialmente; e armazena na variavel VALOR
PORTB = VALORPAUSE 1GOTO INICIO
END
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
35/77
35
6) Modifique o programa 5, para trabalhar com uma velocidade de 300bps:
7) Simule e explique o programa:
INCLUDE "modedefs.bas"
DEFINE CHAR_PACING 500
RX var PORTC.7B2 var BYTE
TRISB = %00000000
INICIO:SERIN RX,T2400,["A"],B2 ;aguarda at que o caracter "A" seja recebido
serialmente;e depois armazena o proximo valor recebido na
variavel B2PORTB = B2PAUSE 1
GOTO INICIO
END
8) Modifique o programa para que aguarde o caracter "W" para depois armazenar o
proximo valor recebido.
9) Simule e explique o programa:
INCLUDE "modedefs.bas"
DEFINE CHAR_PACING 500
SAIDA var PORTC.6CONTADOR var BYTE
TRISB = %00000000CONTADOR = 0
INICIO:
PORTB = CONTADORCONTADOR = CONTADOR + 1SEROUT SAIDA,T9600,["contador= ",#CONTADOR, 13, 10]
PAUSE 1
GOTO INICIO
END
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
36/77
36
10) Modifique o programa 9, para que a contagem ocorra de 5 em 5 unidades (0...5....10..)
11) Modifique o programa 9, para que a contagem comee com 200, e decresca de 2 em 2 (200...198....196)
12) Simule e explique o programa:
INCLUDE "modedefs.bas"
DEFINE OSC 4
CHAVE0 var PORTD.0TX var PORTC.6
TRISD = %00011111
VAI:
IF CHAVE0 = 1 THEN
SEROUT TX,T2400,["CHAVE0 LIGADA", 13, 10]PAUSE 1
ELSE
SEROUT TX,T2400,["CHAVE0 DESLIGADA", 13, 10]PAUSE 1
ENDIF
GOTO VAI
END
13) Modifique o programa 12, para que :
a) se CHAVE0 = 1 , enviar serialmente "INICIO DO PROCESSO"b) se CHAVE0 = 0 , enviar serialmente "TERMINO DO PROCESSO"
14) Modifique o programa 12, para que leia o estado de 3 sensores e enviar serialmente uma mensagemrelatando o estado de cada sensor, se esta ligado ou desligado.
15) Simule e explique o programa:
INCLUDE "modedefs.bas"
RX var PORTC.7TX VAR PORTC.6B0 var BYTE
INICIO:SERIN RX,T2400,B0
IF (B0 < "a") or (B0 > "z") then IMPRIMA
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
37/77
37
B0 = B0 - $20
IMPRIMA:SEROUT TX,T2400,[B0]
GOTO INICIO
END
16) Modifique o programa 15, para que caso seja recebido o caracter "q" ou "s", envie a mensagem"TERMINO" se for recebido outro caracter, enviar a mensagem "PROCESSANDO".
17) Simule e explique o programa:
Include "modedefs.bas"
SO VAR PORTB.6
B0 var byteB1 var byte
loop: For B0 = 3 To 1 Step -1For B1 = 0 To 10 Step B0
Serout SO,T2400,[#B1," "]Next B1
Serout SO,T2400,[13,10]Pause 1
Next B0
Goto loop
18) Modifique o programa 17 para efetuar a contagem ate 20
19) Simule e explique o programa:
include "modedefs.bas"
B10 VAR BYTETX VAR PORTC.0
loop1:
Pause 1B10 = B10 + 1
Select Case B10
Case 1SEROUT TX,T2400,["loop1 case 1",10,13]
Case 2SEROUT TX,T2400,["loop1 case 2",10,13]
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
38/77
38
Case 4SEROUT TX,T2400,["loop1 case 4",10,13]
Case is >5ClearSEROUT TX,T2400,[10,13]GoTo loop2
Case is >2
SEROUT TX,T2400,["loop1 case 3,5",10,13]
END SELECTGoTo loop1
loop2: Pause 1B10 = B10 + 1Select Case B10
Case 1
SEROUT TX,T2400,["loop2 case 1",10,13]
Case 2SEROUT TX,T2400,["loop2 case 2",10,13]
Case 4SEROUT TX,T2400,["loop2 case 4",10,13]
Case is
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
39/77
39
Write B1,B2Next B1
For B1 = 0 To B0Read B1,B2Serout SO,T2400,[#B2," "]
Next B1Serout SO,T2400,[13,10,13,10]Goto loop
21) Simule e explique o programa:
include "modedefs.bas"DEFINE CHAR_PACING 500SO VAR PORTB.1SI VAR PORTB.0B0 var byteB1 var byteloop:
Serin SI,T2400,B0B1 = 255
Lookdown B0,["0123456789ABCDEF"],B1If B1 = 255 Then loopSerout SO,T2400,[#B1,13,10]Goto loop
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
40/77
40
12. Utilizando a memria EEPROM interna do PIC
Utilizando a memria EEPROM interna do PIC
O PIC 16F877 possui uma memria EEPROM (Electrically Erasable Programmable Read-OnlyMemory) que pode ser utilizada como memria de dados. Sua principal vantagem em relao a RAM esta nofato de no perder as informaes com a falta de alimentao.
Sua principal utilizao esta nos sistemas que devem memorizar dados como o ltimo nmero discado
em telefones, ajustes de som, cor, brilho, e outros em televisores, memria das estaes nos rdios, cdigospersonalizados de acesso, entre vrias outras possibilidades.
No PICBASIC, existem duas instrues para acessar a memria EEPROM interna:
WRITE endereo, valor ; escreve um valor na memria EEPROM interna do PIC
READ endereo, VAR ; l o contedo de um endereo da EEPROM interna e armazenaem VAR
1) Simule e explique o programa, quais endereos da EEPROM so acessados, e que valores so escritos?
VAR1 VAR BYTE ;define varivel VAR1TRISB = %00000000 ;configura PORTB como sada
VAR1 = 09
WRITE $20,VAR1 ;escreve o contedo de VAR1 no endereo 20h da;EEPROM
PAUSE 1 ;espera 1ms
READ $20,PORTB ;le o contedo do endereo 20h da memria;EEPROM, e transfere para PORTB
END ;fim do programa
2) Simule e explique o programa, quais endereos da EEPROM so acessados, e que valores so escritos?
B0 VAR BYTEB1 VAR BYTEB2 VAR BYTE
TRISB = %00000000
INICIO:
WRITE 0,5WRITE 1,6WRITE 2,7
READ 0,B0READ 1,B1READ 2,B2
PORTB = B0PAUSE 1PORTB = B1PAUSE 1PORTB = B2
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
41/77
41
WRITE 0,0WRITE 1,0WRITE 2,0PAUSE 1
GOTO INICIOEND
3) Elabore um programa para escrever os nmeros de 20 a 25 na memria EEPROM do PIC;
4) Elabore um programa para armazenar seu pronturio, a data do seu nascimento a partir do endereo 10hda memria EEPROM do PIC;
5) Elabore um programa :
a) Primeiro, armazene o valor 01233438 na memria EEPROM;b) Depois mostre cada digito em um display LCD
6) Modifique o programa 5, para a data de hoje, completa (dd/mm/aaaa);
7) Elabore um programa para armazenar seu nome completo na memria EEPROM e depois mostre nodisplay de LCD;
8) Elabore um programa para armazenar os nmeros de 0 a 100 na memria EEPROM e depois leia estesvalores e transmita serialmente por um pino do PIC;
9) Elabore um programa para preencher toda a memria EEPROM com o valor 01h;
10) Simule o programa abaixo e explique seu funcionamento:
VAR1 VAR BYTE
TRISB = %00000000
INICIO:
RANDOM VAR1
WRITE 0,VAR1
PORTB = var1
GOTO INICIO
END
11) Pesquise quantas posies de memria tem o PIC 16F877 e elabore um programa para escrever AAh emtodos os endereos da EEPROM;
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
42/77
42
12) Elabore um programa para escrever valores entre 0 e 255 aleatoriamente na memria EEPROM em todosos endereos;
13) Elabore um programa para para preencher 10 posies de memria EEPROM com valores aleatrios, edepois, leia estes endereos e escreva no PORTB;
14) Elabore um programa:
a) Se Pino RD1 = 1
preencher a memria EEPROM com 02h, e escrever no LCD , MEMORIA OKb) Se Pino RD1 = 0
preencher a memria EEPROM com 20h, e escrever no LCD, MEMORIA RUIM
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
43/77
43
13. Instruo PWM
O comando PWM tem a seguitnte sintaxe: PWMPin. Duty, Cycle
Este comando usado para gerar uma seqncia de pulsos modulados em largura (Pulse WidthModulation),em um pino de sada Pin. Cada ciclo de modulao consiste de 256 pontos. O Duty Cycle paracada ciclo de PWM inicia em 0 (0%) at 255 (100%). Este ciclo de PWM repetido quantas vezes for definidono parmetro Cycle.
O tempo alcanado com o uso do parmetro Cycle do comando PWM dependente da freqncia dooscilador utilizado
Oscilador Durao (Cycle)4MHz ~ 5ms20MHz ~ 1ms
1) Simule o programa, e verifique o estado do pino desada do PWM com o osciloscpio do simulador:
SAIDA VAR PORTB.7
CICLO_DE_TRABALHO VAR BYTE
OUTPUT SAIDA
CICLO_DE_TRABALHO = 10
PWM SAIDA,CICLO_DE_TRABALHO,1 ;Produz uma seguencia de pulsos PWM, comduty ;cycle definido pela varivelCICLO_DE_TRABALHO, ;no PINO RB7, por 1 ciclo
END
2) Modifique o programa 1, utilizando os seguintes valores para a varivel CICLO_DE_TRABALHO:
CICLO_DE_TRABALHO FORMA DE ONDA1050100127150200255
3) Modifique o programa 1, para que a sada do PWM seja o pino RD0;
4) Elabore um programa que:
Se pino RC0 = 1 e RC1 = 0 e RC2 = 0, PWM de 20% no pino RB3
Se pino RC1 = 1 e RC0 =0 e RC2 = 0, PWM de 50% no pino RB4
Se pino RC2 = 1 e RC0= 0 e RC1 = 0, PWM de 80% no pino RB6
5) Elabore um programa para gerar um PWM no pino RD1, que tenha tenha um ciclo de trabalho de 0% a100%6) Elabore um programa para gerar um PWM no pino RB2, que tenha um ciclo de trabalho de 60% a 0%.
7) Altere o programa 5, para mostrar em um LCD, qual o ciclo de trabalho do PWM
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
44/77
44
14. Controle de um motor de passo utilizando o microcontrolador PIC
Motores de passo so dispositivos mecnicos eletro-magnticos que podem ser controlados digitalmenteatravs de um hardware especifico ou atravs de softwares. So usados em equipamentos onde a preciso um fator muito importante. So usados em larga escala em impressoras, plotters, scanners, drivers dedisquetes, discos rgidos e muitos outros aparelhos.Para realizar o controle de um motor de passo preciso energizar as bobinas do motor de forma correta, parase obter o movimento desejado.Pode-se controlar o motor de 3 formas:
a) Passo Completo 1 (Full-step)
# Somente uma bobina energizada a cada passo;#Menor torque;#Pouco consumo de energia;# Maior velocidade.
b) Passo Completo 2 (Full-step)
# Duas bobinas so energizadas a cad passo;# Maior torque;#Consume mais energia que o passo completo 1;# Mairo velocidade.
No do passo Bobina DecimalA B C D
1 1 1 0 0 122 0 1 1 0 63 0 0 1 1 34 1 0 0 1 9
c) Meio passo (Half-step)
# A combinao do passo completo 1 e do passo completo 2 gera um efeito de meio passo;# Consome mais energia que os passos anteriores;# muito mais preciso que os passos anteriores;# O torque prximo ao do Passo completo 2;# A velocidade menor que as dos passos anteriores.
No do passo Bobina DecimalA B C D
1 1 0 0 0 82 1 1 0 0 123 0 1 0 0 44 0 1 1 0 65 0 0 1 0 26 0 0 1 1 37 0 0 0 1 18 1 0 0 1 9
No do passo Bobina DecimalA B C D
1 1 0 0 0 82 0 1 0 0 4
3 0 0 1 0 24 0 0 0 1 1
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
45/77
45
Exemplo 1 : Controle de um motor de passo com Passo Completo 1 (Full step):
; Controle de um motor de passo; PIC 16F877; Passo Completo 1 (Full step); Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1
; Bobina D - pino RC0
TRISC = %00000000 ;PORTC como saida
INICIO:
PORTC = %00001000 ;passo 1
PAUSE 1
PORTC = %00000100 ;passo 2
PAUSE 1
PORTC = %00000010 ;passo 3
PAUSE 1
PORTC = %00000001 ;passo 4
PAUSE 1
GOTO INICIO
END
Passo 1
Passo 2
Passo 3
Passo 4
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
46/77
46
Exemplo 2 : Controle de um motor de passo com Passo Completo 2 (Full step):
; Controle de um motor de passo; Passo Completo 2 (Full-step); PIC 16F877; Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1
; Bobina D - pino RC0
TRISC = %00000000 ;PORTC como saida
INICIO:
PORTC = %00001100 ;passo 1
pause 1
PORTC = %00000110 ;passo 2
PAUSE 1
PORTC = %00000011 ;passo 3
PAUSE 1
PORTC = %00001001 ;passo 4
PAUSE 1
GOTO INICIO
END
Exemplo 3 : Controle de um motor de passo com Meio passo (Half step):
; Controle de um motor de passo; Meio passo (Half-step); PIC 16F877
Passo 1
Passo 2
Passo 3
Passo 4
Passo 1
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
47/77
47
; Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1; Bobina D - pino RC0
TRISC = %00000000 ;PORTC saida
PORTC = %00000000 ;limpa PORTC
inicio:
PORTC = %00001000 ;passo 1
pause 1
PORTC = %00001100 ;passo 2
PAUSE 1
PORTC = %00000100 ;passo 3
PAUSE 1
PORTC = %00000110 ;passo 4
PAUSE 1
PORTC = %00000010 ;passo 5
PAUSE 1
PORTC = %00000011 ;passo 6
PAUSE 1
PORTC = %00000001 ;passo 7
PAUSE 1
PORTC = %00001001 ;passo 8
PAUSE 1
GOTO INICIO
END
Passo 2
Passo 3
Passo 4
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
48/77
48
A direo (esquerda/direita) de um motor de passo
Para mudar a direo de rotao do motor, simplesmente inverta a seqncia dos passos conforme osexemplos abaixo:
Passo completo 1 (direita)No do passo Bobina Decimal
A B C D1 1 0 0 0 8
2 0 1 0 0 43 0 0 1 0 24 0 0 0 1 1
Passo completo 1 (esquerda)No do passo Bobina Decimal
A B C D1 0 0 0 1 12 0 0 1 0 23 0 1 0 0 44 1 0 0 0 8
Exemplo 4 : Direita - Esquerda; Controle de um motor de passo PIC 16F877; direita/esquerda (Full-step); Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1; Bobina D - pino RC0
TRISC = %00000000 ;PORTC como saida
INICIO:PORTC = %00001000 ;passo 1PAUSE 1PORTC = %00000100 ;passo 2PAUSE 1PORTC = %00000010 ;passo 3PAUSE 1PORTC = %00000001 ;passo 4PAUSE 5PORTC = %00000001PAUSE 1PORTC = %00000010
PAUSE 1PORTC = %00000100PAUSE 1PORTC = %00001000PAUSE 1GOTO INICIOEND
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
49/77
49
Construindo o hardware para conectar o motor de passo no microcontrolador
Para acionarmos um motor de passo, precisamos de um hardware especifico,chamado driver:
MotorMicrocontrolador Driver
Pode-se construir drivers utilizando transistores de potncia como o BD135, TIP 31, etc. A maneiramais fcil adquirir drivers prontos, como o ULN2003 ou ULN2803, que nada mais so que arrays detransistores Darlington que podem controlar correntes de at 500mA, que esto em forma de circuitosintegrados prontos para serem usados em interfaces que necessitem controlar motores de passos,solenides, reles, motores DC e muitos outros dispositivos.
O CI ULN2003 tem 7 entradas que podem controlar at 7 saidas.
O CI ULN2803 tem 8 entradas que podem controlar at 8 sadas. Com ele podemos controlar ate 2 motores
de passo simultaneamente.
Exerccios:
1) Modifique o exemplo 1, para que o motor de passo seja acionado pela PORTB:
Bobina A : Pino RB7Bobina B: Pino RB6
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
50/77
50
Bobina C: Pino RB5Bobina D: Pino RB4
2) Modifique o exemplo 2, para que o motor de passo, realize 2 rotaes completas
3)Modifique o exemplo 3, para que o motor de passo realize 3 rotaes completas
4) Modifique o exemplo 4, para que o motor de passo realize:
a) 2 rotaes para a direita, depois,b) 3 rotaes para a esquerda, depois,c) 1 rotao para a direita
5) Simule o programa abaixo e explique o que faz, quantas vezes o motor completa uma rotao completa?
; Controle de um motor de passo; Passo Completo 1 (Full-step); PIC 16F877; Motor ligado no PORTC; Bobina A - pino RC3
; Bobina B - pino RC2; Bobina C - pino RC1; Bobina D - pino RC0
CONTADOR VAR BYTE
TRISC = %00000000 ;PORTC como saida
for CONTADOR =0 TO 2 STEP 1
PORTC = %00001000 ;passo 1pause 1
PORTC = %00000100 ;passo 2PAUSE 1PORTC = %00000010 ;passo 3PAUSE 1PORTC = %00000001 ;passo 4PAUSE 1
NEXT CONTADOR
END
6) Modifique o exemplo 5, para que o programa realize 9 rotaes completas7) Modifique o exemplo 5 para que o programa realize 10 rotaes para a direita e 10 rotaes para esquerda
8) Modifique o exemplo 5, para que o programa realize 20 rotaes (utilize a instruo FOR);
9) Simule o programa abaixo, e explique:
; Controle de um motor de passo; Passo Completo 1 (Full-step); PIC 16F877 - Motor ligado no PORTC; Bobina A - pino RC3; Bobina B - pino RC2; Bobina C - pino RC1
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
51/77
51
; Bobina D - pino RC0
CHAVE0 VAR PORTB.0
TRISB = %11111111 ;PORTB como entradaTRISC = %00000000 ;PORTC como saida
INICIO:
if CHAVE0 = 1 THEN
PORTC = %00001000 ;passo 1PAUSE 1PORTC = %00000100 ;passo 2PAUSE 1PORTC = %00000010 ;passo 3PAUSE 1PORTC = %00000001 ;passo 4PAUSE 1
ELSEPORTC = %00000001 ;passo 1
pause 1PORTC = %00000010 ;passo 2PAUSE 1PORTC = %00000100 ;passo 3PAUSE 1PORTC = %00001000 ;passo 4PAUSE 1
ENDIF
GOTO INICIO
END
10) Modifique o exemplo 9, para que:
a) Se o PINO RB7 = 1, girar para a esquerdab) Se o PINO RB6 = 1, girar para a direita11) Simule o programa abaixo, e explique:
X VAR BYTENUMERO1 VAR BYTE
TRISB = %00000000TRISC = %00000000
PORTB = %00000000
FOR X = 0 TO 9 STEP 1
GOSUB CONVERTEPORTB = NUMERO1
PORTC = %00001000 ;passo 1pause 1PORTC = %00000100 ;passo 2PAUSE 1PORTC = %00000010 ;passo 3
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
52/77
52
PAUSE 1PORTC = %00000001 ;passo 4PAUSE 1
NEXT X
CONVERTE:
LOOKUP X,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$98],NUMERO1
RETURN
END
12) Modifique o exemplo 11, para que o motor gire 5 vezes apenas
13) Modifique o exemplo 11, para que o motor gire no sentido contrario (esquerda)
14) Elabore um programa que gire cinco vezes para a direita e 5 vezes para a esquerda, e enquanto o motorestiver girando para a direita mostra d no display e mostrar e, enquanto o motor estiver girando para aesquerda.15) Simule o programa abaixo e explique:
DEFINE LCD_DREG PORTBDEFINE LCD_DBIT 0DEFINE LCD_RSREG PORTBDEFINE LCD_RSBIT 6DEFINE LCD_EREG PORTBDEFINE LCD_EBIT 7
DEFINE LCD_BITS 4DEFINE LCD_LINES 2DEFINE LCD_COMMANDUS 2000DEFINE LCD_DATAUS 50
CONTADOR VAR BYTE
TRISC = %00000000 ;PORTC saidaPORTC = %00000000 ;limpa PORTC
Lcdout $fe, 1Lcdout "MOTOR DE PASSO"
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
53/77
53
FOR CONTADOR = 0 to 20 step 1
LCDOUT $FE,$C0LCDOUT "ROTACAO = ", #CONTADOR
PORTC = %00001000 ;passo 1pause 1PORTC = %00001100 ;passo 2
PAUSE 1PORTC = %00000100 ;passo 3PAUSE 1PORTC = %00000110 ;passo 4PAUSE 1PORTC = %00000010 ;passo 5PAUSE 1PORTC = %00000011 ;passo 6PAUSE 1PORTC = %00000001 ;passo 7PAUSE 1PORTC = %00001001 ;passo 8
PAUSE 1
NEXT CONTADOR
END
16) Modifique o exemplo 15, para que o motor gire 50 vezes
17) Modifique o exemplo 15, para que o motor gire 1000 vezes para a direita e 1000 vezes para a esquerda.Mostrar no LCD Rot. Para Dir =. Rot . para Esq=
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
54/77
54
15. Utilizando Interrupes
A interrupo uma tcnica particular do PIC que permite interceptar eventos externos ao programaem execuo, interrompe momentaneamente a operao do programa em andamento, controla oevento com uma subrotina apropriada e retorna para a execuo do programa.
O PIC16F84 contm 4 tipos de interrupo:
1. A troca de estado em RB0 (External interrupt RB0/INT pin).2. Ao final da contagem do registro TMR0 (TMR0 overflow interrupt).
3. A troca de estado sobre uma das linhas de RB4 a RB7 (PORTB change interrupts).
4. Ao final da escrita sobre um endereo da EEPROM (EEPROM write complete interrupt).
Habilitando interrupes
A interrupo de qualquer um destes eventos pode ser conseguido habilitando ou desabilitando bits doregistro INTCON:
1. INTE (bit 4) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre a linha RB02. T0IE (bit 5) se este bit estiver em 1 habilitar a interrupo de final de contagem do registro TMR0
3. RBIE (bit 3) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre uma das linhasde RB4 a RB7
4. EEIE (bit 6) se este bit estiver em 1 habilitar a interrupo de final de escrita sobre um endereo daEEPROM
5. GIE (bit 7) este bit tem que estar em 1 para habilitar qualquer interrupo (Global INterrupt Enable bit)
Dado que qualquer interrupo gera uma chamada do endereo 04H, no registro INTCON estar qualinterrupo foi gerada.
No registro INTCON se tem:
1. INTF (bit 1) Se vale 1 a interrupo um estado gerado na troca de estado em RB0.
2. T0IF (bit 2) Se vale 1 a interrupo um estado gerado no termino da contagem do timer TMR0.
3. RBIF (bit 0) Se vale 1 a interrupo um estado gerado na troca de estado de uma dos pinos RB4 aRB7.
Obs.: Como no tem um bit especificando interrupo de fim de esrita na EEPROM, a rotina para tratar essainterrupo deve verificar se os outros bits de sinalizao de interrupo esto em 0.
A rotina de interrupo deve zerar o bit sinalizador aps tratar a interrupo.
Quando for gerada uma interrupo o PIC desabilita automatimamente o bit GIE (global Interrupt Enable) doregistro INTECON de modo a desbilitar todas as interrupes restantes. Para poder retornar ao programaprincipal e reinicializar em 1 este bit deve-se utilisar a instruo em assembler RETFIE.
Mais informaes:
http://www.dpi.ufv.br/disciplinas/inf251/files/processadores/cursopic/node1.html
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
55/77
55
Utilizando interrupes com o PICBASIC
Para se utilizar interrupes com o PICBASIC deve-se utilizar a seguinte estrutura:
ON INTERRUPT GOTO minha_interrupcao rotina de atendimento de interrupo minha_interrupo
INTCON = %10010000 habilita interrupo no pino RB0
.....
DISABLE desabilita interrupominha_interrupcao:
LED = 1RESUME retorna para o programa principalENABLE habilita interrupes
Interrupo utilizando o pino RBO/INT
1) Simule o programa e explique seu funcionamento:
CHAVE0 VAR PORTB.0
LED7 VAR PORTB.7
TRISB = %00000001 'configura RB0 como entrada
ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupao
INTCON = %10010000 'habilita interrupao INTE
OPTION_REG.6 = 1 'na subida do sinal
LOOP:
LED7 = 1 'faz pino RB7 = 1
GOTO LOOP ' para sempre
'subrotina de atendimento de interrupao
DISABLE 'desabilita interrupcoes
INTERRUPCAO:
'caso ocorra uma interrupcao
LED7 = 0 'faz RB7 =0
PAUSE 10 ' espera 10ms
INTCON.1 = 0 'limpa flag de interrupcao
RESUME
ENABLE 'retorna para o programa principal
END
Interrupo utilizando a mudana dos pinos RB4-RB7
2) Simule o programa e explique seu funcionamento:
CHAVE7 VAR PORTB.7
LED1 VAR PORTB.1
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
56/77
56
TRISB = %11110001 'configura RB7-RB4 como entradas
ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupao
INTCON = %10001000 'habilita interrupao RB4-RB7
LOOP:
LED1 = 1 'faz pino RB1 = 1
GOTO LOOP ' para sempre'subrotina de atendimento de interrupao
DISABLE 'desabilita interrupcoes
INTERRUPCAO:
'caso ocorra uma interrupcao
LED1 = 0 'faz RB1 =0
PAUSE 10 ' espera 10ms
INTCON.0 = 0 'limpa flag de interrupcao
RESUME
ENABLE 'retorna para o programa principal
END
Interrupo como o overflow do TIMER 0 (pino RA4/T0CK)
3) Simule o programa abaixo e explique seu funcionamento:
CHAVE0 VAR PORTB.0
LED1 VAR PORTB.1
TRISB = %00000000 'configura PORTB como saida
ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupao
TMR0 = 250OPTION_REG.5 = 1 'na subida do sinal
INTCON = %10100000 'habilita interrupao TOIE
LOOP:
LED1 = 1 'faz pino RB1 = 1
GOTO LOOP ' para sempre
'subrotina de atendimento de interrupao
DISABLE 'desabilita interrupcoes
INTERRUPCAO:
'caso ocorra uma interrupcao
LED1 = 0 'faz RB1 =0
PAUSE 2 ' espera 10ms
INTCON.2 = 0 'limpa flag de interrupcao
TMR0 = 250
RESUME
ENABLE 'retorna para o programa principal
END
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
57/77
57
4) Modifique o programa 1 para que a interrupo ocorra na descida do sinal no pino RB0/INT, anote oprograma e simule.
5) Modifique o programa 1 para que quando ocorra a interrupo, faa os pinos RA1=1 e RA2=1 durante1ms
6) Modifique o programa 2 para que quando ocorra a interrupo, faa o pino RA3=1 durante 2ms.
7) Modifique o programa 3 para que ocorra a interrupo quando forem aplicados 10 pulsos no pino
RA4/T0CKI
8) Modifique o programa 1 para que a cada interrupo, ocorra uma contagem das interrupes em umdisplay de 7 segmentos
9) Modifique o programa 2 para que a cada interrupo, ocorra uma contagem das interrupes em umdisplay LCD
10) Modifique o program 3 para que ocorra uma interrupo quando forem aplicados 8 pulsos no pinoRA4/T0CKI, e a cada interrupo, mostrar a mensagem em um display de LCD, "contagem terminada"
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
58/77
58
16. Conectando um teclado no PIC1) Simule o programa abaixo:
; layout do teclado conectado na PORTB
;B4----[ 1 ]---[ 2 ]---[ 3 ]; | | |;B5----[ 4 ]---[ 5 ]---[ 6 ]; | | |;B6----[ 7 ]---[ 8 ]---[ 9 ]; | | |;B7----[ * ]---[ 0 ]---[ # ]; | | |; | | |; B3 B2 B1
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
59/77
59
TECLA VAR BYTENUMERO1 VAR BYTEX VAR BYTE
TRISB=%11110000TRISC=%00000000
PORTC=%00000000
LOOP:
GOSUB LE_TECLADO
X = TECLA
GOSUB CONVERTE
PORTC = NUMERO1
PAUSE 1
GOTO LOOP
END
CONVERTE:
IF X = 255 THEN
X = 10
ENDIF
LOOKUP X,[$C0,$F9,$A4,$B0,$99,$92,$82,$F8,$80,$98,$FF],NUMERO1
RETURN
LE_TECLADO:
PORTB=%00001000
IF PORTB.4 = 1 THEN TECLA_1
IF PORTB.5 = 1 THEN TECLA_4
IF PORTB.6 = 1 THEN TECLA_7
IF PORTB.7 = 1 THEN TECLA_ASTERISCO
PORTB=%00000100
IF PORTB.4 = 1 THEN TECLA_2
IF PORTB.5 = 1 THEN TECLA_5
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
60/77
60
IF PORTB.6 = 1 THEN TECLA_8
IF PORTB.7 = 1 THEN TECLA_0
PORTB=%00000010
IF PORTB.4 = 1 THEN TECLA_3
IF PORTB.5 = 1 THEN TECLA_6
IF PORTB.6 = 1 THEN TECLA_9
IF PORTB.7 = 1 THEN TECLA_SUSTENIDO
TECLA = 255
LE_TECLADO_FINAL:
RETURN
TECLA_1:
TECLA = 1GOTO LE_TECLADO_FINAL
TECLA_2:
TECLA = 2GOTO LE_TECLADO_FINAL
TECLA_3:
TECLA = 3GOTO LE_TECLADO_FINAL
TECLA_4:
TECLA = 4GOTO LE_TECLADO_FINAL
TECLA_5:
TECLA = 5GOTO LE_TECLADO_FINAL
TECLA_6:
TECLA = 6GOTO LE_TECLADO_FINAL
TECLA_7:
TECLA = 7GOTO LE_TECLADO_FINAL
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
61/77
61
TECLA_8:
TECLA = 8GOTO LE_TECLADO_FINAL
TECLA_9:
TECLA = 9
GOTO LE_TECLADO_FINAL
TECLA_ASTERISCO:
TECLA = 16GOTO LE_TECLADO_FINAL
TECLA_0:
TECLA = 0GOTO LE_TECLADO_FINAL
TECLA_SUSTENIDO:TECLA = 17GOTO LE_TECLADO_FINAL
2) Modifique o programa 1, para o seguinte layout de teclado:
; layout do teclado conectado na PORTB
;B4----[ 7 ]---[ 8 ]---[ 9 ]; | | |;B5----[ 4 ]---[ 5 ]---[ 6 ]; | | |
;B6----[ 1 ]---[ 2 ]---[ 3 ]; | | |;B7----[ 0 ]---[ d ]---[ e ]; | | |; | | |; B3 B2 B1
3) Modifique o programa 1, para o seguinte layout de teclado:
;B4----[ 1 ]---[ 2 ]---[ 3 ]---[ a ]; | | |;B5----[ 4 ]---[ 5 ]---[ 6 ]---[ b ]
; | | |;B6----[ 7 ]---[ 8 ]---[ 9 ]---[ c ]; | | |;B7----[ * ]---[ 0 ]---[ # ]---[ d ]; | | | |; | | | |; B3 B2 B1 B0
4) Modifique o programa 1, para mostrar em display LCD, as teclas pressionadas.
5) Modifique o programa 1, para enviar , serialmente, as teclas pressionadas.
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
62/77
62
17. Mdulo Comparador Analgico
1) Simule e explique o funcionamento do programa:
; modulo comparador - modo 5ENTRADA1 var PORTA.1 ;entrada VIN-ENTRADA2 VAR PORTA.2 ;entrada VIN+SAIDA_COMP2 var CMCON.7 ;C2OUT
LED0 VAR PORTB.0
TRISA = %11111111TRISB = %00000000
CMCON = 5 ;comparador trabalhando no modo 5
CLEAR
INICIO:
IF SAIDA_COMP2 = 1 THEN
LED0 = 1
ELSE
LED0 = 0
ENDIF
GOTO INICIO
END
2) Modifique o programa 1, para que o pino RB5 indique o estado da sada do comparador
3) Modifique o programa 1, para que escreva no PORTB os seguintes valores:
a) se a tenso na entrada AN2 for maior que a tenso na entrada AN1, escrever %11111111 no PORTBb) se a tenso na entrada AN2 for menor que a tenso na entrada AN1, escrever %01010101 no PORTB
4) Simule e explique o funcionamento do programa:
ENTRADA1 var PORTA.1 ;entrada VIN-
ENTRADA2 VAR PORTA.2 ;entrada VIN+LED7 var PORTA.7SAIDA_COMP2 var CMCON.7 ;C2OUT
FLAG VAR BITCONTADOR VAR BYTE
TRISA = %01111111TRISB = %00000000
CMCON = 5 ;comparador trabalhando no modo 5
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
63/77
63
CLEAR
INICIO:
LED7 = SAIDA_COMP2
IF SAIDA_COMP2 = 1 THEN
FLAG = 1
ENDIF
IF SAIDA_COMP2 = 0 AND FLAG = 1 THEN
CONTADOR = CONTADOR + 1PORTB = CONTADORFLAG = 0
ENDIF
GOTO INICIO
END
5) Modifique o programa "4", para que quando a contagem chegar em 10, ligue o pino RA6, e reinicie acontagem dezero.
6) Simule e explique o programa. Quais entradas dos comparadores esto sendo utilizadas?
SAIDA_CP1 VAR CMCON.6SAIDA_CP2 VAR CMCON.7
LED0 VAR PORTB.0LED1 VAR PORTB.1
TRISA = %11111111TRISB = %00000000
CMCON = 2 ;comparador trabalhando no modo 2
VRCON = %10100110 ;configura referencia de tenso VREF = 1,25V
CLEAR
INICIO:
IF SAIDA_CP1 = 1 THEN
LED0 = 1
ELSE
LED0 = 0
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
64/77
64
ENDIF
IF SAIDA_CP2 = 1 THEN
LED1 = 1
ELSELED1 = 0
ENDIF
GOTO INICIOEND
7) Modifique o programa 6, utilizando CMCON = %00001010, simule e explique. Quais entradas doscomparadores esto sendo utilizadas agora?
8) Modifique o programa 6, para trabalhar com uma tenso de referncia de 3,59V
9) Modifique o programa 6, para trabalhar com uma tenso de referncia de 1,04V
10) Elabore um programa que mea um sinal DC. Quando este sinal for maior que 2.50V, o pino RB7deve ser ativado.
11) Simule e explique o programa. Quais entradas dos comparadores esto sendo utilizadas?
SAIDA_CP1 VAR CMCON.6SAIDA_CP2 VAR CMCON.7LED5 VAR PORTB.5LED7 VAR PORTB.7
TRISA = %11111111
TRISB = %00000000
CMCON = 3 ;comparador trabalhando no modo 3
CLEARINICIO:
IF SAIDA_CP1 = 1 THEN
LED5 = 1
ELSE
LED5 = 0
ENDIF
IF SAIDA_CP2 = 1 THEN
LED7 = 1
ELSELED7 = 0
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
65/77
65
ENDIF
GOTO INICIO
END
12) Modifique o programa 11 para que:
a) se a tenso na entrada AN0 for menor que a tenso de referencia, acionar o pino RB0 durante 2ms
b) se a tenso na entrada AN1 for maior que a tenso de referncia, acionar o pino RB1 durante 3ms
13) Modifique o programa 11 para trabalhar com os comparadores no modo 4 e explique seufuncionamento
14) Modifique o programa 11 para trabalhar com os comparadores no modo 6, e explique seufuncionamento
15) Elabore um programa que trabalhe no modo 6, que :a) quando a tenso na entrada AN0 for maior que a referencia, ativar a saida RB0b) quando a tenso na entrada AN0 for menor que a referencia, ativar a saida RB3c) quando a tenso na entrada AN1 for maior que a referencia, ativar a saida RB5
d) quando a tenso na entrada AN1 for menor que a referncia, ativar a sada RB6
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
66/77
66
18. Microcontrolador PIC 12F675
6 pinos de I/O 1 comparador analgico 1 conversor A/D com 4 canais
O comando PWM tem a seguitnte sintaxe: PWMPin. Duty, Cycle
1) Simule o programa abaixo, utilizando o microcontrolador 12F675:
@ device mclr_off ;configura pino GP3/MCLR como I/O
LED0 VAR GPIO.0LED1 VAR GPIO.1LED2 VAR GPIO.2
LED4 VAR GPIO.4LED5 VAR GPIO.5
ANSEL = 0 ;configura todos os pinos como I/OCMCON = 7 ;comparadores analgicos desligados
TRISIO=%00000000
LED0 = 1LED1 = 1LED2 = 1
LED4 = 1LED5 = 1
END
2) Modifique o programa 1, para ligar somente o pico GP2;3) Simule o programa abaixo:
LED VAR GPIO.0 ;LED como GPIO.0
ANSEL = 0 ; todos os pinos como I/O digitalCMCON = 7 ; comparador desligado
TRISIO=%00000000
LOOP:
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
67/77
67
LOW LED ;liga LED em GPIO.0PAUSE 5 ;atraso de 5 milisegundos
HIGH LED ;desliga LED em GPIO.0PAUSE 5 ;atraso de 5 milisegundos
GOTO LOOP ;volta para loop
END
4) Modifique o programa 3, para ligar e desligar os pinos GP1 e GP4;
5) Simule o programa:
Include "modedefs.bas" ;definicoes para Serout
DEFINE CHAR_PACING 500
;Define parametros para ADCIN
Define ADC_BITS 8 ; numero de bits no resultadoDefine ADC_CLOCK 3 ; fonte de clock (3=rc)Define ADC_SAMPLEUS 50 ; tempo de amostragem em us
TX Var GPIO.1 ; pino de transmissao em GP0
adval var byte ; cria adval para armazenar o resultado
ADCON0.7 = 0 ; justifica resultado para a esquerdaANSEL = %00111000 ; AN3 analogico, restante digitalCMCON = 7 ; comparador analogico desligado
Pause 1 ; espera 1 ms
loop: ADCIN 3, adval ; Le canal 3 para adval
Serout TX, T2400, [" Valor: ", #adval,13,10] ;Mostra valor em decimal
Pause 1 ; espera 1 ms
Goto loop ; faz para sempre
End
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
68/77
68
6)Modifique o programa 5 para mostrar em volts;
7)Modifique o programa 5 para trabalhar com conversor A/D de 10 bits;
8)Modifique o programa 6 para trabalhar com conversor A/D de 10 bits;
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
69/77
69
9) Simule o programa:
@ device mclr_off
LED var GPIO.0 ; GPIO.0 -> ledPB Var GPIO.3 ; GPIO.3 -> push button
ANSEL = 0 ; todos os pinos i/o digital
CMCON = 7 ; comparadores desligados
loop:If PB = 0 Then
Low LEDElse
High LEDEndif
Goto loop
End
10) Modifique o program 9 para o led conectado no pino GP4;
11) Elabore um programa:
Se o pino GP3= 0
GP2 GP1 GP01 1 00 1 11 0 1
Se o pino GP3= 1
GP2 GP1 GP01 1 10 0 01 0 1
Se o pino GP4 = 0
GP2 GP1 GP00 0 1
0 1 01 1 1
Se o pino GP4 = 1
GP2 GP1 GP01 1 10 1 01 1 1
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
70/77
70
19. Resumo do Compilador PicBasic Pro (PBP)
O PBP um compilador BASIC, para os microcontroladores da Microchip. Cria por padro arquivos querodam em um PIC 16F84-04/P de clock de 4MHz.
Seu primeiro programa
1. Digite o arquivo fonte do seu programa, usando um editor de textos (ex. edit do DOS), e salve com
extenso .BAS .
Exemplo: programa BLINK.BAS
Programa exemplo para piscar um LED ligado ao pino PORTB
loop: High PORTB.0 liga o ledPause 500 atraso de 0.5 seg
Low PORTB.0 desliga o ledPause 500 atraso de 0.5 seg
Goto loop volta ao loop
End
2. Compilar o programa com o comando:
PBP blink.bas
Se for o rodar o programa acima, em um PIC 16F877, deve-se usar o comando:
PBP p16f877 blink.bas
Ser gerado o arquivo BLINK.HEX, pronto, para ser gravado no PIC.
O BASIC do PicBasic Pro
Rtulos de linha ou label
Usados para marcar declaraes , para referencia com os comandos GOTO ou GOSUB.
aqui: Serout 0,N2400, [Olah, Pessoal!, 13,10}Goto aqui
Variveis
Variveis so onde dados temporrios so guardados num programa do PicBasicPro.So criadas com a palavra-chave VARVariveis podem ser bits, bytes ou palavras.
Rtuto VAR Tamanho{.Modificadores}
Cao var byte cao uma var de 8 bitsGato var bit gato uma var de 1 bit
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
71/77
71
w0 var word w0 uma var de 2 bytes
Aliases
VAR pode tambm ser usada para criar um alias (um outro nome) para uma varivel.
Toto var cao toto outro nome de cao
Pulga var cao.0 pulga e o bit0 de cao
b0 var w0.byte0 b1 eo primeiro byte de w0
b1 var w0.byte1 b0 eo segundo byte de w0
Constantes
Rotulo COM Expressao constante
Ratos con 3 'Ratos = 3Ratoeiras con ratos * 1000
Constantes Numricas
Constante Decimal: 100 Valor decimal 100
Constante Binria: %10100101
Constante hexadecimal: $F2
Constante de caracteres: d
Pinos
Os pinos podem ser acessados usando o nome PORTe o nmero do bit:
PORTB.1 = 1 Fixa PORTB, bit 1 em 1
Pode-se atribuir um nome para um pino, usando o comando VAR:
Led var PORTA.3 renomeia PORTA.3como led
High led fixa led em nivel alto
Para configuar um pino ou porta como sada ou entrada, utiliza-se o registrador TRIS
Fixando um bit TRIS em 0, torna o pino uma sada.Fixando um bit TRIS em 1, torna o pino uma entrada.
TRISA = %00000000 todos os pinos do PORTA como sadas
TRISB = %11111111 todos os pinos do PORTB como entradas
Define
Lzaro
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
72/77
72
Pode ser usado mudar o valor predefinido do oscilador, e outras caracteristicas
DEFINE OSC 4 Define frequencia do oscilador'3 4 8 10 12 16 20
DEFINE HSER_BAUD 2400
Operaes Matemticas
Op.Matemtico
Descrio
+ Adio- Subtrao* Multiplicao** 16 bits superiores da multiplicao*/ 16 bits do meio da multiplicao/ Diviso// Resto (Modulo)> n Deslocamento p/ Direita n posiesABS Valor AbsolutoCOS CossenoSIN SenoSQR Raiz QuadradaMAX MximoMIN MinimoDCD Decodifica 2nNCD CodificaDIG DigitoREV Inverte Bits& AND Lgico| OR Lgico^ OR exclusivo Lgico (XOR)~ NOT Lgico (inversora)&/ NOT AND Lgico|/ NOT OR Lgico^/ NOT OR Exclusivo Lgico
Operadores de Bit
Agem em cada bit, de um valor de maneira booleana. Eles podem ser usados p/ isolar bits ou adicionar bits aum valor. Exemplo:
B0 = B0 & %00000001 Isola o bit 0 de B0
B0 = B0 | %00000001 Liga o bit 0 de B0
B0 = B0 ^ %00000001 Inverte o estado dobit 0 de B0
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
73/77
73
Operadores de Comparao
So usados em declaraes IF...THEN para comparar uma expresso com outra.Operador deComparao
Descrio
= ou == Igual ou != No Igual< Menor que> Maior que
= Maior ou Igual aExemplo:
If I > 10 Then loop
Operadores Lgicos
Os operadores lgicos diferem dos operadores a bit. Eles produzem um resultado verdadeiro/falso de suaoperao. Valores de 0 so tratados como falso. Qualquer valor tratado como verdadeiro. Eles so maisusados em conjunto com os operadores IF...THEN.
Operador Lgico DescrioAND ou && AND LgicoOR ou || OR LgicoXOR ou ^^ OR Exclusivo LgicoNOT AND NAND LgicoNOT OR NOR LgicoNOT XOR NXOR Lgico
If (A == maior) AND (B > medio) Then run
Algumas declaraes do PicBasicPro
FOR...NEXT
FOR conta = inicioTO fim{STEP {-} Inc}{Corpo}
NEXT {Conta}
O loop FOR.. NEXT permite que os programas executem um nmero de declaraes (o Corpo) por algumasvezes usando uma varivel como contador.Exemplos:
FOR i = 1 TO 10 Conta de 1 a 10Serout 0, N2400,[#i, ] Envia cada numero para
Pin0 serialmenteNEXT i Retorna e faz a proxima contagem
Serout 0,N2400,[10] Envia um avano de linha
FOR B2 =20 TO 10 STEP -2 Conta de 20 a 10 de 2 em 2
Serout 0, N2400, [#B2, ]
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
74/77
74
NEXT B2 retorna e faz a proxima contagem
Serout 0,N2400,[10] Envia um avano de linha
GOSUB Rotulo
Salta para a subrotina em Rotulo.
GOSUB beep Executa subrotina chamada beep..............
beep: High 0 Ligue o Led ligado em Pin0Sound 1,[80,10] Bipe no Alto-falanteLow 0 'Desliga o LedReturn Volta p/ rotina principal
IF...THEN...ELSE...ENDIF
IF Comp {AND/OR Comp...} THEN RotuloIF Comp{AND/OR Comp} THEN
DeclaraoELSE
DeclaraoENDIF
If...Then avalia os termos da comparao p/ verdadeiro ou falso. Se for verdadeiro, a operao aps o Then executada. Se ele resultar em falso, a operao aps o Then no executada. Comparaes que resultemem 0, so consideradas falsas. Qualquer outro valor considerado verdadeiro. Exemplos:
If PortA.0 = 0 Then pushd ' Se a pino RA0 for igual' a zero, salte para o
' rtulo pushd
If B0 10 Then ' Se B0 for diferente de 10, faaB0 = B0 + 1 ' incrementa B0B1 = B1 - 1 ' incrementa B1
Endif
WHILE...WEND
WHILECondio Declarao......WEND
Executa repetidamente "Declarao" enquanto (While) a Condio for verdadeira. Exemplo:
i = 1WHILE i
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
75/77
75
HIGH pino
Faz o pino especificado ir para nvel alto (5V).
HIGH PORTA.0 ' pino RA0 = 1 (5V)
led var PORTB.4 ' define RB4 como ledHIGH led ' led = 1
Outro modo de levar um pino, para nivel alto, se ele ja foi configurado como sada, :
PORTB.4 = 1 ' Fixa o pino RB4 em nivel alto (5V)
LOW pino
Faz o pino especificado ir para nvel baixo (0V).
LOW PORTA.0 ' pino RA0 = 0 (0V)
lampada var PORTB.5 'define RB5 como lampada
LOW lampada ' lampada = 0
Outro modo de levar um pino, para nivel baixo, se ele ja foi configurado como sada, :
PORTB.4 = 0 ' Fixa o pino RB4 em nivel baixo (0V)
PAUSE perodo
Faz uma pausa no programa, durante "periodo" milisegundos. Periodo pode ser de 0ms at65535 milisegundos.
PAUSE 1000 'Atraso de 1 segundo
PAUSEUS periodo
Faz uma pausa no programa durante "periodo" microsegundos. Perodo pode ser de 24us ate 65535us.
PAUSEUS 1000 'Atraso de 1 milisegundo
SOUND pino,[Nota,Durao{,Nota,Durao...}]
Gera tons no pino especificado.
se "Nota" 0 silencioNotas de 1 a 127 so tonsNotas de 128 a 255 so ruidos brancos
Nota 1 de 78,74HzNota 127 de 10KHz
Duraao de 0 a 255, e determina por quanto tempo a Nota tocada em incrementos de cerca de 12milisegundos.
Um alto-falante pode ser adicionado atraves de um capacitor no pino especificado
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
76/77
76
SOUND PORTB.7, [100,10,50,10] ' envia 2 sons' consecutivos no pino 'RB7.
WHITEEndereo, Valor
Escreve "Valor" na EEPROM do microcontrolador no "Endereo" especificado. Cada Write auto-temporizado, e leva cerca de 10 milisegundos para ser executado. Ex:
WRITE5,B0 ' Envia valor de B0 para o endereo 5
'da EEPROM do PICREADEndereo, Var
L o contedo do endereo especificado da EEPROM, e guarda o resultado na variavel "Var". Ex:
READ 5,B2 ' L o contedo do endereo 5 da' EEPROM, e armazena na varivel' B2
SERINpino, modo, {timeout, rotulo,} { [ Qualificador...],} {Item....}
Recebe um ou mais itens no Pino no formato assincrono padro, usando 8 bits, sem paridade e um stop bit(8N1)
SERIN PORTA.1, N2400,["A"], B0 'Aguarda at que o 'caracter A seja recebido 'serialmente, no pino 'RA0, ecoloca o proximo caracter em B0
SEROUT pino, modo, [item{,Item...}]
Envia um ou mais itens ao pino em formato assncrono padro usando 8 bits de dados, sem paridade, e umstop bit.
SEROUT 0,N2400,[#B0,10] 'Envia o valor ASCII de B0 'seguido por um avano de 'lingua, no pino PORTA.3,'serialmente
Algumas outras declaraes disponiveis no PicBasicPro:DEBUG : Sada serial assncrona p/ um pinoDTMFOUT : Gera tons de discagem em um pinoLCDOUT : Mostra caracteres em um LCDPULSIN : Mede a largura de um pulso em um pinoPULSOUT : Gera pulso em um pino
+
10uF
PINO
ALTO-FALANTE
+
10uF
PINO
ALTO-FALANTE
-
7/31/2019 Apostila Micro Control Adores Picbasic PRO Lazaro
77/77
SHIFTFIN : Entrada serial sincronaSHIFTOUT : Sada serial sincronaI2CREAD : Le os bytes de um dispositivo I2CI2CWRITE : Escreve bytes em um dispositivo I2CON INTERRUPT :Executa subrotina BASIC em uma :interrupoPOT :Le valor de um potenciometro em um pinoRANDOM :Gera um nmero pseudo-aleatrio
Endereos na Internet sobre o PICBASIC (maio/2004):
www.microchip.comwww.epanorama.net
www.melabs.com/index.htm
www.mikroelektronika.co.yu
www.rentron.com/PicBasic1.htm
www.asm51.eng.br/