Você está na página 1de 137

Microcontroladores PIC

Prof. Eng. Kleberson Carlos Costa Pereira

O que um microcontrolador?
Um microcontrolador(MCU) um computador em um s chip.

Controlador x Processador
funcionar, como memria RAM, Timers e etc.

O microprocessador precisa de outros perifricos para poder

J o microcontrolador consegue integrar todos estes recursos


em um nico chip.

O microcontrolador tambm chamado de


chip pelo fato abordado anteriormente.

Computador em um s

Controlador x Processador
O microcontrolador possui vrios perifricos na pastilha:

mesma

Controlador x Processador

Microcontrolador PIC16F877A At 20MHz R$ 30,00


HT48E50 At 8 MHz R$ 5,00

Microprocessador: Pentium IV Prescott 3,2GHz R$ 710,00

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

Projetos a serem desenvolvidos


Equipe 1:
Componentes:

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

EEPROM com 256 bytes.

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.

Dentre os tipos de memria de programa existentes, temos:


ROM; UVEPROM; FLASH;

Memria
ROM:

18

um tipo de memria que s pode ser gravada uma vez e no pode ser apagada.

Tipos de memria ROM:


PROMs(Programmable Read-Only Memory); EPROMs(Erasable Programmable Read-Only Memory); EEPROMs(Electrically Erasable Programmable Read-Only Memory); Flash - semelhantes s EEPROMs; CD-ROM; DVD-ROM.

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.

usada para armazenamento de dados, criados e usados durante a operao do microcontrolador.

Existem dois tipo, para Controladores:


GPR - Registradores de funo geral SFR Registrador de funo especial.

Memria
RAM:

22

um tipo de memria que do tipo voltil, ou seja, perde todos os dados quando desenvernizada.

usada para armazenamento de dados, criados e usados durante a operao do microcontrolador.

Existem dois tipo, para Controladores:


GPR - Registradores de funo geral SFR Registrador de funo especial.

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

determinados perifricos como PWM, Conversores A/D, USART, etc.

Bancos de Memria
PIC16F877A. Antes de utilizar algum registrador,

25

A memria de dados est particionada em quatro bancos, isso para o necessrio

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

interligada a memria de dados e a memria de programa


por barramento especfico.

x8

Set de Instrues
CISC (Complex Instruction Set Computer):
Possui um grande conjunto de instrues, que geralmente

29

implementam funes especficas e de alto nvel;

Apropriado para ser programado diretamente;

As

instrues

so

processadas

mais

lentamente

porm

hardware mais simples.

Set de Instrues
RISC (Reduced Instruction Set Computer):
Possui um pequeno conjunto de instrues bsicas e

30

fundamentais; Apropriado para ser programado atravs de compiladores;

As instrues so processadas mais rapidamente.

Von Neumann x Harvard


Von Neumann:
Arquitetura mais simples. Mais lento.

31

Geralmente CISC.

Harvard:
Arquitetura mais complexa.
Mais rpido. Geralmente RISC.

32

Microcontroladores PIC 16F877A

A famlia PIC
Os microcontroladores PIC so fabricados pela Microchip.

33

empresa

Existem trs familias de PICs diferenciadas pelo tamanho da

palavra de memria de programa: 12, 14, 16 e 24 bits.


Todos possuem internamente um barramento de 8 bits. O PIC possui uma arquitetura interna do tipo Havard.

Desempenho da famlia PIC


Capacidade de pepilene (enquanto executa uma instruo,

34

processador busca a prxima instruo na memria, de forma a acelerar a execuo do programa);

Execuo de uma instruo por ciclo de mquina, com exceo das instrues de desvios que consomem dois ciclos de

mquinas para serem executadas.

Um ciclo de mquina no PIC equivale a 4 ciclos de clock, ou

seja, o sinal de clock dividido por 4 antes de executar a


instruo (falaremos mais sobre esse tpico adiante).

Desempenho da famlia PIC


Cada Instruo ocupa uma posio de memria de (FLASH).

35

programa

Tempo

de

execuo

das

instrues

fixa,

com

exceo

das

instrues de desvios que consomem dois ciclos de mquina.

36

Etapas de Projeto

Etapas de desenvolvimento e gravao


1 Fase: A elaborao do Fluxograma.
Estude as tarefas Para e funes que o microcontrolador das funes

37

PIC dever a ser

executar.

melhor

entendimento

lgicas

executadas faa um fluxograma.

Etapas de desenvolvimento e gravao


2 Fase: Edio e compilao do programa em C
A partir das informaes em e funes C elaborada na IDE no

38

fluxograma, compile e

escreva

seu

programa

linguagem

mikroC,

simule

seu

programa

(estudaremos

detalhadamente

cada

funo

ferramenta do mikroC mais adiante).

Etapas de desenvolvimento e gravao


3 Fase: O programa compilado

39

Aps a compilao do seu programa em C, o compilador criar o arquivo de mquina .hex (nomedoprograma.hex). Este o arquivo que

dever ser gravado no microcontrolador PIC.

Etapas de desenvolvimento e gravao


4 Fase: Gravao do programa no PIC

40

Gravar o arquivo compilado .hex no microcontrolador atravs de um gravador de microcontroladores PIC, ou atravs de um

Kit de desenvolvimento.

41

Configuraes e Circuitos Bsicos

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

cristal dividida por 4, o que nos resulta que a frequncia

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

interna da chip. A freqncia de operao de oscilao um dos


agentes que determinam a velocidade de execuo das instrues do microcontrolador.

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

tenso de trabalho, temperatura e tolerncias.

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.

Onda de oscilao com preciso de 99%.


#use delay(clock=4000000): Instruo utilizada para definir a

frequncia de oscilao do cristal.

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

costumamos chamar de POWER ON RESET.

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

Reset do watchdog durante operao normal


Reset do detector de Brown-out (BOR) Instruo de Reset Reset por estouro de Pilha - Stack Overflow

#fuses Fusveis de configurao


NOWDT(No Watch Dog Timer)

50

Desliga o gerenciamento de erro do microcontrolador, evitando reset desnecessario.

HS, LS, RC, XT


Tipos de Oscilador

PUT(Power Up Timer)
Temporizador utilizado para garantir que o microcontrolador somente comece a operar depois que a fonte de alimentao esteja estabilizada.

NOPROTECT(Code not protected from reading)


Impede que qualquer pessoa tenha acesso ao programa gravado no PIC.

#fuses Fusveis de configurao


NODEBUG(No Debug mode for ICD)

51

NOBROWNOUT(No brownout reset)


Reseta o PIC sempre que a tenso de alimentao cair abaixo de 4V
por um perodo maior que 100 s.

NOLVP(No low voltage prgming)


Permite que a gravao do PIC seja feita como uma tenso abaixo da utilizada normalmente.(Tenso de Gravao 13V).

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

define a resoluo do conversor analgico/digital

Pinos de I/O
Os pinos de I/O, so os pinos usados para ligao Microcontrolador com o mundo externo.

53

do

Em mdia os PICs tem de 30 a 35 pinos de I/O.

Para

que

funcionamento

dos

pinos

I/O

coincida

com

organizao de 8 bits da RAM, os pinos so organizados em PORTs.

Na srie 16F877A existem 5 PORTs:


A(6 Pinos),B(8 Pinos),C(8 Pinos),D(8 Pinos),E(3 Pinos).

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.

Existem dois SFRs associados aos pinos de I/O; PORT e TRIS.


O SFR TRIS determina o funcionamento.

O SFR PORT determina o contedo.

Para memorizar:

0 = Output (sada);
1 = Input (entrada);

Pinos de I/O Pinagem


do Datasheet(Folha de dados) do microcontrolador PIC16F877A

55

Para uma maior descrio da Pinagem, necessrio a leitura

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.

Cite 3 pinos que s podem ser usados como entrada/sada.


Qual a funo do WDT? Por que necessrio muito cuidado caso ele seja utilizado? O que acontece se ele detectar erros? Com qual nvel de tenso (mnimo) o PIC deve ser alimentado caso o BROWNOUT esteja ativado? Por quanto tempo o nvel de tenso pode ficar abaixo desse valor? Qual a funo do Power up TIMER? Por que importante ativar o Code Protection? Caso o valor 210 seja armazenado no registrador TRISB, de que forma os pinos do PORTB so configurados?

A leitura do PORTC forneceu o valor AC (hexadecimal). Qual o estado de cado


pino do PORTC? A leitura do PORTE forneceu o valor 25. por que isso impossvel?

58

Programao(Codificao)

Programao(Codificao)
linguagens de programao: Assembly e Linguagem C;

59

Para o desenvolvimento do da codificao pode-se utilizar 2

A linguagem Assembly considerada de baixo nvel, pois os


comandos esto diretamente relacionados com o hardware.
Possui comandos com funes basicas, o que torna o algoritmo

extenso.(ADD, SUB, MOVLW ...);

linguagem

tm

funes

mais

complexas,

que

torna

algoritmo mais simples para o programador , porm mais lento


para o microcontrolador.

Programao(Codificao)
Assembly:

60

Assembly: conjunto de regras usadas para escrever um programa para um microcontrolador.

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

linguagens de nvel alto.

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

Representao binria: Para representarmos um nmero em binrio

Reviso Linguagem C
deve-se ter muito cuidado ao se digitar os

67

Case Sensitive: A linguagem C case sensitive, assim sendo, comandos

(diferencia letras maisculas de minsculas).

contador, Contador e COnTadOR

so interpretados como sendo palavra(variveis), diferentes.

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

funo que se deseja;


Para que os blocos do programa no fiquem grandes demais e, por

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().

int contador;//define a varivel global como inteiro


char a; //define a varivel global como char

void main(){

//funo principal do programa

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

variveis locais so descartadas;

void main() {
int contador;

//funo principal do programa

contador = contador + 10 }

Reviso Linguagem C
Operadores Aritmticos: OPERADOR
+ * / % ++ --

73

AO
adio subtrao ou menos unrio Multiplicao Diviso Resto da diviso inteira incremento Decremento

Operadores Relacionais; OPERADOR


> >= < <= == !=

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)

Operadores Bit a Bit; OPERADOR


& | ^ ~ >> <<

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

delay_cycles() Causa um atraso em nmero de ciclos (clock / 4)

Funes do compilador
Controle das portas de I/O:
output_low(); Desativa uma sada output_high(); Ativa uma sada

79

output_bit(); Envia o valor de um bit para um pino


input(); L o valor de um pino output_a(); Envia um byte para o PORTA input_a(); L um byte do PORTA

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

rotate_right() Rotaciona dados para direita.


rotate_left() Rotaciona dados para esquerda. bit_clear() Limpa um bit de uma varivel bit_set() Ativa um bit de uma varivel bit_test() Testa um bit de uma varivel

Reviso Linguagem C
PROCESSOR
sleep() Entra em modo SLEEP reset_cpu() Reinicia (reseta) o microcontrolador

82

restart_cause() Retorna a causa do ltimo reset


disable_interrupts() Desativa interrupes

Funes do compilador
TIMERS
setup_timer_x() Configura funcionamento dos TIMERS set_timer_x() Inicializa o TIMER

83

get_timer_x() Busca valor de um TIMER


setup_counters() Configura contador setup_wdt() Configura o Watch Dog Timer restart_wdt() Reinicia o Watch Dog Timer

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};

Display Anodo comum:

byte digito_ac[] = { 0b01000000, 0b01111001, 0b00100100, 0b00110000, 0b00011001, 0b00010010, 0b00000010, 0b01111000, 0b00011000};

Display de 7 Segmentos Descrio

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:

Para este projeto foram utilizados os seguintes componentes:


1 x Display de 7 segmentos CC;

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;

Display de 7 Segmentos - Layout

91

Display de 7 Segmentos - Cdigo


Configuraes Iniciais:

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

Display de 7 Segmentos Atividade


realize um contagem de 0 a 99, em ordem crescente.

93

Realize as devidas modificaes para que o projeto testado

Dica:
Para se identificar os nmeros de cada display utilize as seguinte formula;

unidade = Numero_Contagem % 10; dezena = Numero_Contagem / 10;

94

2 - Experimentos
Display LCD 16x2

Display LCD 16x2


Tipo: Display LCD Exibio: Caracteres Alfanumricos Quantidade de informaes: 16x2 Controlador: Padro HD55780 Hitchi

95

Pinagem:

Display LCD 16x2


Tipos de Memria:

96

Display LCD 16x2

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

comuns a todas as linguagem com por exemplo o caractere ""


do portugus.

Display LCD 16x2

98

Display LCD 16x2

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 |

Display LCD 16x2 - Descrio

100

Display LCD 16x2 - Layout

101

102

3 - Experimentos
Sensor de Temperatura LM35

Sensor de Temperatura LM35

103

Sensor de Temperatura LM35

104

105

4 - Experimentos
Teclado Matricial

106

5 - Experimentos
Rel

107

6 - Experimentos
Controle de Motor de Passo Bipolar

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;

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;

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;

O PIC 16F877A possui 3 Timers:


TIMER 0; TIMER 1; TIMER 2;

TIMER0
O TIMER0 um temporizador/contador de 8 ou 16 bits possuem duas funes bsicas:

112

que

Contagem de eventos externos (quando a entrada de clock feita

por meio do pino RA4/T0CKI;


Temporizao (contagem de tempo) quando os pulsos de contagem proveniente do clock interno do PIC (o clock do sistema dividido por 4).

O TIMER0 pode ser configurado para trabalhar com PRESCALER dedicado.

TIMER0: Prescaler
Atravs do prescaler conseguimos tempos maiores com

113

os

timers, para entendermos melhor sua utilizao acompanhe o exemplo abaixo:


Digamos que o ciclo de mquina no PIC seja de 1us e o TIMER0
esteja configurado no modo 8 bits (contagem de 0 a 255) e sem o presacaler. O TIMER0 ira "estourar" sua contagem em 256us. Agora digamos que para o mesmo anunciado anterior, configuramos e acionamos o prescaler para 1:2. Nosso intervalo de "estouro" do TIMER0 no mais ser 256us mas sim 512us. Se ao invs de prescaler de 1:2 utilizarmos prescaler 1:32, o

tempo agora ser de 256us x 32 = 8192us.

TIMER0: Prescaler
O PRESCALER nada que mais do para que um programvel utilizado reduzir a frequncia

114

contador/divisor do

sinal de clock aplicado ao TIMER0 por um fator conhecido.

PRESCALER timer,

passa

ser

uma

importantssima conseguimos gerar

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

255, o prximo pulso acarretaria o que chamamos de "estouro


de contagem", fazendo com que o valor de contagem de incio novamente a partir do 0 (zero).

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.

Como calcular o tempo de estouro do TIMER0?


utilizamos a seguinte frmula: Tempo: C. Maquina x prescaler x (modo 8 /16bits contagem).

116

Para calcular o tempo de "estouro" do TIMER com prescaler,

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

Temporizador Timer0, acompanhe:


Calculo do tempo de estouro do Timer0:
Tempo de estouro:

1 / (8 / 4) x 128 x (65536 49910 ) = 1.000.064us(microsegundos) ou aproximadamente 1 segundo.

Timer: Funes de configurao


SETUP_TIMER_0(MODO | FATOR_DIVISO);
MODO: RTCC_INTERNAL,RTCC_EXT_L_TO_H ou RTCC_EXT_H_TO_L FATOR DIVISO: RTCC_DIV_2, RTCC_DIV_4,

118

RTCC_DIV_8,RTCC_DIV_16,

RTCC_DIV_32, RTCC_DIV_64,RTCC_DIV_128, RTCC_DIV_256


Exemplo: setup_timer_0 (RTCC_DIV_2|RTCC_EXT_L_TO_H);

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

POSCALE: Determina quantas vezes o temporizador reinicia, antes de


entrar na interrupo. Varia entre 1 e 16. Exemplo:

setup_timer_2 ( T2_DIV_BY_4, 0xc0, 2);

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

Modulation) ou Modulao de Largura de Pulso como base de seu


funcionamento.

Fonte Chaveada

Inversores de Frequncia

ServoMotores

PWM
Largura de Pulso.

123

PWM a abreviao de Pulse Width Modulation ou Modulao de

Para que se entenda como funciona esta tecnologia no controle

de potncia, partimos de um circuito imaginrio formado por


um interruptor de ao muito rpida e uma carga que deve ser controlada, conforme a figura abaixo:

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

potncia aplicada mxima.

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

O prescaler do Timer2 pode ser 1, 4 ou 16. O perodo pode ser 0 a 255.

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:

VALOR = (Percentual * 255) /100

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

VALOR = (Percentual * 255) /100


setup_comparator(NC_NC_NC_NC);
Desabilita o comparador analgico;

setup_vref(FALSE);
Desabilita a referncia do comparador analgico;

PWM
mdulo CCP1 no PIC C da CCS.

129

Exemplo: Gerar um sinal quadrado de 1Khz utilizando o Timer 2 e o

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]

Usando a frmula, temos:


1mS=1/4000000*4*4*(X+1)*1], onde X=249

O Timer 2 fica assim:


setup_timer_2(T2_DIV_BY_4,249,1);

Servomotor

130

131

8 - Experimentos
Controle de Motor CC com L298

Controle de Motor CC com L298

132

Controle de Motor CC com L298

133

Controle de Motor CC com L298

134

Controle de Motor CC com L298

135

136

9 - Experimentos
Comunicao SPI

137

10 - Experimentos
Comunicao USART Wireless RF

Você também pode gostar