Escolar Documentos
Profissional Documentos
Cultura Documentos
O que um microcontrolador?
Um microcontrolador(MCU) um computador em um s chip.
Controlador x Processador
funcionar, como memria RAM, Timers e etc.
Computador em um s
Controlador x Processador
O microcontrolador possui vrios perifricos na pastilha:
mesma
Controlador x Processador
Aplicaes - Setores
16% 18%
15%
16%
35%
Automao Telecomunicaes
Consumo
Automotivo Industrial
Aplicaes - rea
rea Automobilstica; Automao; Segurana; Controle de Trfego; Mdica; Entretenimento; Robtica;
Fabricantes de Controlador
Microchip www.microchip.com Motorola www.motorola.com/semiconductors Zilog www.zilog.com Holtek www.holtek.com Atmel www.atmel.com
Equipe 2:
Componentes:
Equipe 3
Componentes:
Controlador PIC16F877A
Pode funcionar com alimentao de 2V a 5,5V; Pinagem DIP de 40 pinos; Frequncia de operao (clock): at 20MHz(5 MIPS); Memrias:
Flash(8192 palavras de 14 bits); RAM com 368 bytes;
10
Controlador PIC16F877A
Arquitetura RISC(35 instrues). Arquitetura Harvard; Pipeline;
11
Controlador PIC16F877A
Como perifricos ele possui:
5 conjuntos de portas de entrada e sada (total de 33 portas);
12
Conversor analgico-digital de 10 bits de resoluo e 8 canais de entrada; Perifrico de comunicao paralela e serial (USART e MSSP); 2 Mdulos CCP (Comparao, Captura e PWM); 3 Timers (1 de 16 bits e 2 de 8 bits); Watchdog timer(WDT).
Controlador PIC16F877A
13
Controlador PIC16F877A
14
Memria
A memria a parte do microcontrolador utilizada armazenamento de dados.
15
para
Cada
endereo
da
memria
corresponde
uma
posio
de
memria. O contedo dessa posio, conhecido atravs do seu endereamento. A memria tanto pode ser lida quanto escrita.
Memria
16
Leitura/Escrita
Memria
Memria de programa:
17
Nesta ficam as instrues que um microcontrolador deve executar, ou seja, as linhas de programao que foram digitadas em um PC.
Memria
ROM:
18
um tipo de memria que s pode ser gravada uma vez e no pode ser apagada.
Memria
Memria de dados :
19
Nesta ficam todos os dados(variveis), utilizadas no programa, ou seja, a memoria que armazena os dados de durante a execuo do
programa.
Esta
memoria
perde
os
dados
quando
microcontrolador
desligado(restart/reset).
tipo
de
memoria
utilizada
para
armazenamento
de
dados
nos
microcontroladores a: RAM.
Memria
20
EEPROM
PROM
EPROM
FLASH
Memria
RAM:
21
um tipo de memria que do tipo voltil, ou seja, perde todos os dados quando desenvernizada.
Memria
RAM:
22
um tipo de memria que do tipo voltil, ou seja, perde todos os dados quando desenvernizada.
Memria
GPR:
23
So os registradores de usos gerais que nada mais so do que variveis criadas pelo programador dados volteis.
Memria
SFR:
24
So os Registradores de uso especfico que na verdade contm o SETUP do Microcontrolador configura como iro trabalhar
Bancos de Memria
PIC16F877A. Antes de utilizar algum registrador,
25
selecionar o banco que contm esse registrador. Isso facilita e diminui o tempo de busca da CPU, tornando a execuo mais rpida.
Bancos de Memria
26
Arquitetura
Von Neuman : A Unidade Central de Processamento interligada memria por um nico barramento (bus). O sistema composto por uma nica memria onde so armazenados dados e instrues;
27
x8
x12(14,16)
Arquitetura
Harvard: A Unidade Central de Processamento(CPU)
28
x8
Set de Instrues
CISC (Complex Instruction Set Computer):
Possui um grande conjunto de instrues, que geralmente
29
As
instrues
so
processadas
mais
lentamente
porm
Set de Instrues
RISC (Reduced Instruction Set Computer):
Possui um pequeno conjunto de instrues bsicas e
30
31
Geralmente CISC.
Harvard:
Arquitetura mais complexa.
Mais rpido. Geralmente RISC.
32
A famlia PIC
Os microcontroladores PIC so fabricados pela Microchip.
33
empresa
34
Execuo de uma instruo por ciclo de mquina, com exceo das instrues de desvios que consomem dois ciclos de
35
programa
Tempo
de
execuo
das
instrues
fixa,
com
exceo
das
36
Etapas de Projeto
37
executar.
melhor
entendimento
lgicas
38
fluxograma, compile e
escreva
seu
programa
linguagem
mikroC,
simule
seu
programa
(estudaremos
detalhadamente
cada
funo
39
Aps a compilao do seu programa em C, o compilador criar o arquivo de mquina .hex (nomedoprograma.hex). Este o arquivo que
40
Gravar o arquivo compilado .hex no microcontrolador atravs de um gravador de microcontroladores PIC, ou atravs de um
Kit de desenvolvimento.
41
Ciclos de mquina
42
A contagem de tempo no medida diretamente pela frequncia de oscilao do cristal e sim atravs do que chamamos de CICLO DE MQUINA.
Internamente
no
microcontroladores
PIC
frequncia
do
real de trabalho :
ftrabalho = fOSC/4
Conclui-se ento que: a cada 1 cliclo de mquina corresponde a 4 pulsos do oscilador.
Ciclos de mquina
43
Osciladores
O Clock
44
Todo microcontrolador requer um circuito de oscilao pois quem d o sinal de "partida" e "sincronismo" para qualquer atividade
LP XT HS RC
low-power cristal Cristal ou ressonador High-Speed cristal (cristal de alta velocidade) ou ressonador Resistor / Capacitor externo
Osciladores
45
Modo LP: Baixa potncia. Utilizado para cristais de 32.768 KHz. O consumo de corrente mnimo. Modo XT: usado para corrente mediano. Modo HS: usado para corrente elevado. cristais de at 8 MHz. Consumo de
cristais
acima
de 8
MHz.
Consumo
de
Osciladores
46
Osciladores
Circuito de Oscilao RC:
47
Este o tipo de oscilador mais simples que existe e tambm o mais barato, mas, por outro lado, o menos preciso, variando muito a
Osciladores
Cristal de Quartzo:
48
O oscilador de cristal est contido num invlucro de metal com dois pinos onde foi escrita a frequncia a que o cristal oscila.
Reset
Sempre que ligamos ou energizamos nosso
49
circuito
microcontrolador interessante que o PIC seja resetado, para isso necessria a insero de um circuito eletrnico bem
simples,
mas
capaz
de
realizar
esse
procedimento
que
Os PICs possuem diversos tipos de reset: POR - Power On Reset Reset do MCLR durante a operao normal Reset do MCLR durante o modo SLEEP
50
PUT(Power Up Timer)
Temporizador utilizado para garantir que o microcontrolador somente comece a operar depois que a fonte de alimentao esteja estabilizada.
51
NOCPD(No EE protection)
Impede que qualquer pessoa tenha acesso ao memoria EEPROM do PIC.
#uses
So utilizados para especifica uma diretiva interna compilador, ou seja, um comando interno do microcontrolador.
52
do
Mais utilizadas:
#use RS232 Define a comunicao serial #use delay Define a frequncia de operao do PIC
#use ADC
Pinos de I/O
Os pinos de I/O, so os pinos usados para ligao Microcontrolador com o mundo externo.
53
do
Para
que
funcionamento
dos
pinos
I/O
coincida
com
Pinos de I/O
54
Os pinos do PIC tem mais de uma funo, logo se estiverem configurados para qualquer outra funo no podem ser usados como I/O.
Para memorizar:
0 = Output (sada);
1 = Input (entrada);
55
Circuito de Alimentao
Nveis de Alimentao:
O 5V (Famlia TTL);
56
Exerccios de Reviso
Quantos pinos de I/O podem ser utilizados no PIC16F877A?
57
Atravez de que registrador possvel configurar um pino como entrada ou sada? Alguns pinos do PIC tem mais de uma funo. Cite 5 pinos que tem mais de uma funo.
58
Programao(Codificao)
Programao(Codificao)
linguagens de programao: Assembly e Linguagem C;
59
linguagem
tm
funes
mais
complexas,
que
torna
Programao(Codificao)
Assembly:
60
A linguagem de nvel baixo, pois o programador deve conhecer o hardware que esta) programando.
O Compilador traduz a linguagem assembly para uma linguagem de (0) zeros e (1) uns, conhecido como linguagem de mquina.
Programao(Codificao)
Linguagem C:
61
A linguagem C considerada de nvel mdia, pois possui tanto comandos caractersticos das linguagens de nvel baixo, quanto das
A linguagem C compilada, ou seja, o editor de texto produz o arquivo fonte .c que passa pelo compilador, que gera um arquivo executvel .exe. possvel executar o programa no windows sem a presena do cdigo fonte que o originou.
Compilador CCS C
62
Compilador CCS C
63
Compilador CCS C
Estrutura bsica de um programa para microcontrolador
MODELO -----------------------------#include <Referencia do PIC.h> #fuses EXEMPLO ----------------------------------------#include <16F877A.h> #fuses HS, NOWDT, NOPUT, NOPROTECT, NOLVP
64
#use delay(clock=)
#define
#use delay(clock=8000000)
#define LED PIN_B7
void main(){
void main(){
while(true){
} } }
//chamadas de funes
Reviso Linguagem C
Formas e representao numricas e de caracteres
65
Representao decimal: Para representarmos um nmero em decimal basta colocar seu valor sem nenhuma abreviatura, conforme o linha
abaixo:
Output_b(187); //187 uma representao decimal
Representao
Hexadecimal:
Para
representar
um
nmero
em
hexadecimal devemos colocar o prefixo 0x (ou 0X) antes do nmero hexadecimal. (0 a F):
Output_b(0xbb); ou output_b(0xBB); // 0xBB = 187 em decimal
Reviso Linguagem C
devemos colocar o prefixo 0b (ou 0B) antes do nmero em binrio.
Output_b(0b10111011); ou output_b(0B10111011); // 0B10111011 = 187
66
Reviso Linguagem C
deve-se ter muito cuidado ao se digitar os
67
Reviso Linguagem C
Funes ou subrotinas:
68
Para permitir o reaproveitamento de cdigo j construdo(por voc ou por outros programadores); Para evitar que um trecho de cdigo que seja repetido vrias vezes dentro de um mesmo programa; Para permitir a alterao de um trecho de cdigo de uma forma mais rpida. Com o uso de uma funo preciso alterar apenas dentro da
consequncia, mais difceis de entender; Para facilitar a leitura do programa-fonte de uma forma mais fcil; Para separar o programa em partes(blocos) que possam ser logicamente compreendidos de forma isolada.
Reviso Linguagem C
Prottipos de Funes: Confome podemos ver no
69
programa
abaixo, a funo minha_rotina() ficou em depois da funo main(), nesse caso, necessariamente, devemos colocar o
prottipo de funo.
void minha_rotina ();//prottipo de funo, esta linha de programa
deve ser colocada no topo do programa , junto com as declaraes; //.... void main(){ // aqui esta meu programa principal }
//***************** funo de subrotina ******************** void minha_rotina(){ //aqui esta os comandos da sua subrotina }
Reviso Linguagem C
Tipos de dados TIPO
char int float Void Byte Bit
70
TAMANHO EM BITS
8 8 32 0 8 1
INTERVALO
0 a 255 0 a 255 3.4E-38 a 3.4E+38 nenhum valor 0 a 255 0 ou 1
Declarao de variveis:
<tipo> nome_da_variavel;
Reviso Linguagem C
Variveis globais: So variveis globais que podem
71
se
acessadas por qualquer funo do programa. Essas variveis esto fora de qualquer funo do programa, inclusive a funo
main().
void main(){
contador = contador + 10 }
Reviso Linguagem C
Variveis locais: Ao contrrio das variveis globais,
72
uma
varivel local somente existe dentro da funo em que foi declarada. No momento que ocorre o retorno da funo, as
void main() {
int contador;
contador = contador + 10 }
Reviso Linguagem C
Operadores Aritmticos: OPERADOR
+ * / % ++ --
73
AO
adio subtrao ou menos unrio Multiplicao Diviso Resto da diviso inteira incremento Decremento
AO
maior que maior ou igual a menor que menor ou igual a igual a diferente
Reviso Linguagem C
Operadores Lgicos: OPERADOR
! && ||
74
AO
NOT AND (E) OR (OU)
AO
AND (E) OR (OU) XOR (OU exclusiva) NOT (complemento de um) deslocamento direita deslocamento esquerda
Reviso Linguagem C
Estruturas de Controle:
O comando if: if (condio) comando; ou if (condio) { blocos de comandos}
75
O comando switch: switch (varivel){ case constante1: declarao1A; break; case constante2: declarao2A; break; default; declarao_default; }
Reviso Linguagem C
O comando for:
for (inicializao ; condio ; incremento ) comando; ou for (inicializao ; condio ; incremento ){ ... comandoA1 ... }
76
O comando while:
while (1){ // declarao declarao declarao } Condio sempre ser verdadeira (1); 1; 2; n;
Reviso Linguagem C
O comando do while:
do{ comando 1; comando 2; } while (condio de teste);
77
Funes do compilador
DELAYS
delay_us() Causa um atraso (tempo) em milhonsimos de segundos delay_ms() Causa um atraso (tempo) em milsimos de segundos
78
Funes do compilador
Controle das portas de I/O:
output_low(); Desativa uma sada output_high(); Ativa uma sada
79
Reviso Linguagem C
ANALOG
setup_comparator() Configura o comparador setup_adc_ports() Configura portas usadas pelo conversor AD
80
setup_adc() Configura o AD
set_adc_channel() Determina o canal a ser utilizado read_adc() L valor do canal AD ativado
Funes do compilador
BIT/BYTE
shift_right() Rola dados para direita. shift_left() Rola dados para esquerda.
81
Reviso Linguagem C
PROCESSOR
sleep() Entra em modo SLEEP reset_cpu() Reinicia (reseta) o microcontrolador
82
Funes do compilador
TIMERS
setup_timer_x() Configura funcionamento dos TIMERS set_timer_x() Inicializa o TIMER
83
Funes do compilador
PWM
setup_ccpX(); Define o modo de operao dos pinos de PWM set_pwmX_duty(); Determina o valor do PWM, de 0 a 1023
84
85
Experimentos
86
1 - Experimentos
Display de 7 segmentos
Display de 7 Segmentos
87
Um display de sete segmentos, um tipo de display barato usado como alternativa a displays de matriz de pontos mais complexos e dispendiosos.
Display de 7 Segmentos
Representao dos segmentos:
88
Display de 7 Segmentos
Representao binaria dos nmeros de 0 9:
Display Catodo comum:
89
byte digito_cc[] = { 0b10111111, 0b10000110, 0b11011011, 0b11001111, 0b11100110, 0b11101101, 0b11111101, 0b10000111, 0b11100111};
byte digito_ac[] = { 0b01000000, 0b01111001, 0b00100100, 0b00110000, 0b00011001, 0b00010010, 0b00000010, 0b01111000, 0b00011000};
90
O projeto abaixo mostrar a contagem de 0 a 9 em 1 display de 7 segmentos Catodo Comum, mudado os valores com um intervalo de 1s:
1 x Microcontrolador PIC16F877A;
1 x Cristal Oscilador de 4MHz; 1 x Transistor NPN BC548; 7 x Resistores de 330, para limitar a corrente fornecia ao
display;
91
92
#include <16F877A.h> #fuses HS, NOWDT, NOPROTECT, NOLVP #use delay(clock=4000000) #define DISPLAY PIN_C0 //PINO que aciona o display; #define TEMPO_DELAY 1000 //1s
93
Dica:
Para se identificar os nmeros de cada display utilize as seguinte formula;
94
2 - Experimentos
Display LCD 16x2
95
Pinagem:
96
97
CGROM: Memria no voltil onde esto gravados os cdigos para escrita dos caracteres, isso muito til, pois apenas enviamos o cdigo ASCII do caractere e esse j escrito no display. DDRAM: Memria onde escrito o que queremos que aparea no display, cada endereo dessa memoria equivale a um endereo de caractere do display. CGRAM: Pequena quando rea de memria 8 criar onde podemos Ela que desenhar muito so no
caracteres utilizada
diferentes(At precisamos
caracteres). caracteres
98
99
/*Descio dos endereos do LCD NUMERO 1 NUMERO 2 Linha 1 | 80 81 82 | 83 84 85 | 86 Linha 2 | C0 C1 C2 | C3 C4 C5 | C6 */ LED NUMERO 3 NUMERO 4 87 88 89 | 8A 8B 8C | 8D 8E 8F | C7 C8 C9 | CA CB CC | CD CE CF |
100
101
102
3 - Experimentos
Sensor de Temperatura LM35
103
104
105
4 - Experimentos
Teclado Matricial
106
5 - Experimentos
Rel
107
6 - Experimentos
Controle de Motor de Passo Bipolar
108
109
7 - Experimentos
Controle de Servo Motor
Timer - Temporizador
Perifrico responsvel pela contagem de tempo; Pode ser utilizado para contagem de pulsos de um
110
sinal
externo;
TIMER
Perifrico responsvel pela contagem de tempo;
111
So uteis quando precisa-se de um intervalo preciso de tempo; Permite que o programa trabalhe em outras atividades enquanto o tempo esta sendo contado;
TIMER0
O TIMER0 um temporizador/contador de 8 ou 16 bits possuem duas funes bsicas:
112
que
TIMER0: Prescaler
Atravs do prescaler conseguimos tempos maiores com
113
os
TIMER0: Prescaler
O PRESCALER nada que mais do para que um programvel utilizado reduzir a frequncia
114
contador/divisor do
PRESCALER timer,
passa
ser
uma
ferramentas tempos
do
pois
atravs
dele
muito
maiores.
TIMER0
115
Quando o TIMER0 configurado para operar no modo de 8 bits, podemos efetuar contagens de 0 a 255 (limite da capacidade para 8 bits). Quando a contagem chega at seu valor mximo de
No modo 16 bits do TIMER0, seu funcionamento igual ao modo de 8 bits, porm neste caso a faixa de contagem de 0 a 65535.
116
TIMER0
117
Exemplo: Precisamos ligar e desligar um rel a cada segundo ( um segundo ligado e um segundo desligado), estamos utilizamdo um cristal de 8Mhz, utilizaremos para isso os recursos do
118
RTCC_DIV_8,RTCC_DIV_16,
SETUP_TIMER_1(MODO | FATOR_DIVISO);
MODO: T1_DISABLED, T1_INTERNAL, T1_EXTERNAL,T1_EXTERNAL_SYNC
FATOR DIVISO: T1_CLK_OUTT1_DIV_BY_1, T1_DIV_BY_2,
T1_DIV_BY_4,T1_DIV_BY_8 Exemplo: setup_timer_1 ( T1_DISABLED ); setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 ); setup_timer_1 ( T1_INTERVAL | T1_DIV_BY_8 );
Timer
SETUP_TIMER_2(MODO, PERODO, POSCALE);
MODO: T2_DISABLED, T2_DIV_BY_1, T2_DIV_BY_4,T2_DIV_BY_16 PERODO: Varia de 0 a 255
119
Interrupes
120
As interrupes so um evento externo ou interno que obriga o Microcontrolador a suspender suas atividades temporariamente, para atender a esse evento que a interrompeu. Em resumo uma
ocorrncia
que
faz
microprocessador
parar
sua
rotina
desviar para outro ponto do software, em que se localiza o servio de interrupo que foi gerado pela ocorrncia.
Interrupes
Interrupo externa atravs do pino RB0/INT Overflow do TIMER (TMR0) Mudana de estado nos pinos PB4 a PB7 Escrita completada na EEPROM Recepo de dado pelo canal serial (RS232) Final de envio de dados pelo canal serial (RS232) Final de converso analgica E muitas outras
121
PWM
Os controles de potncia, inversores de
122
freqncia,
conversores para servomotor, fonte chaveadas e muitos outros circuitos utilizam a tecnologia do PWM (Pulse Width
Fonte Chaveada
Inversores de Frequncia
ServoMotores
PWM
Largura de Pulso.
123
PWM
124
Quando o interruptor est aberto no h corrente na lmpada e a potncia aplicada nula. No instante em que o interruptor fechado, a carga recebe a tenso total da fonte e a
PWM
125
Variando-se a largura do pulso e tambm o intervalo de modo a termos ciclos ativos diferentes, podemos controlar a potncia mdia aplicada a uma carga.
Este princpio usado justamente no controle PWM: modulamos (variamos) a largura do pulso de modo a controlar o ciclo ativo do sinal aplicado a uma carga e, com isso, a potncia aplicada a ela.
Configurando PWM
Calculando a frequncia: Frequncia do Cristal = -----------------------------------------------(periodo + 1) * (Timer2 Prescaler) * 4
126
PWM Freq
PWM
setup_ccp1(CCP_PWM)
Habilita a modulao por largura de pulso, para o canal 1;
127
setup_ccp2(CCP_PWM);
Habilita a modulao por largura de pulso, para o canal 2;
set_pwm1_duty(VALOR);
Determina o ciclo ativo da onda para o canal 1; Para calcular o duty cycle utilizamos a seguinte frmula:
PWM
set_pwm2_duty(VALOR);
Determina o ciclo ativo da onda para o canal 1; Para calcular o duty cycle utilizamos a seguinte frmula:
128
setup_vref(FALSE);
Desabilita a referncia do comparador analgico;
PWM
mdulo CCP1 no PIC C da CCS.
129
Soluo: Para gerar um sinal de 1Khz, necessrio um perodo T=(1/1000)=1mS, um perodo de 1mS (mili-segundos). Onde T=perodo. Temos uma equao para clculo do overflow (estouro) do Timer 2:
T=1/clock*4*Prescaler*(periodo+1)*Postcaler]
Servomotor
130
131
8 - Experimentos
Controle de Motor CC com L298
132
133
134
135
136
9 - Experimentos
Comunicao SPI
137
10 - Experimentos
Comunicao USART Wireless RF