60
Danilo Morais Pagano Mestrando em Mecânica Computacional - UNICAMP

Programação básica de microcontroladores

Embed Size (px)

DESCRIPTION

Apresentação dos microntroladores, especialmente da linha pic16f, onde o alvo foi o PIC16f628a, que é bem simples de encontrar para comprar e de programar. Apesar de trabalhar com apenas 8 bits, é o robusto o suficiente para realizar automação que requeira PWM, comparação, USART; 16 I/O; e uma série de outras vantagens.

Citation preview

Page 1: Programação básica de microcontroladores

Danilo Morais PaganoMestrando em Mecânica Computacional - UNICAMP

Page 2: Programação básica de microcontroladores

Microprocessadores: 4 bits, 8 bits, 16... É um chip:

com alta integração de componentes RAM externa memória EEPROM externa HD para armazenamento de programas outros diversos periféricos.

Ou seja, você usa um microprocessador dentro de um microcomputador e ele, em conjunto com um monte de outros CIs, trabalham direitinho.

Page 3: Programação básica de microcontroladores

Microcontrolador é um componente completo por si só.

Basta um programa e ele executa uma função específica.

Dentro do microcontrolador temos memória RAM, FLASH, EEPROM ou E2PROM.

Page 4: Programação básica de microcontroladores

Vamos simplificar resumindo a lógica em dois números ou como falamos muito, em dois dígitos: O 0 (zero) e o 1 (um).

Quando falamos em 0 (zero), estamos nos referindo a zero Volt DC e quando falamos em 1 (um) estamos falando em + Vcc.

No caso dos microcontroladores PIC, geralmente, estaremos falando que:

0 = GND e 1 = 5Vcc

Page 5: Programação básica de microcontroladores

Memória ROM Memória RAM Memória EPROM Memória EEPROM ou

E2PROM Memória FLASH

Page 6: Programação básica de microcontroladores

É um endereço na memória Formados por 8 números, ou

melhor, 8 bits. Estes bits podem ser 0 (zero)

ou 1 (um). Muitas vezes chamamos

estes bits de Flags. Flag então é um bit dentro de

um registrador.

Page 7: Programação básica de microcontroladores

Imaginemos 8 posições: Cada posição pode ter um valor

de 0 (zero) ou 1 (um). Esta posição com um valor é um bit, ou melhor, bit é o valor que há dentro da posição.

Quando juntamos 8 bits, como no exemplo a seguir:

“00110011” Chamamos isto de ⇒

byte. Um byte então é um conjunto de 8 bits.

Page 8: Programação básica de microcontroladores

Às vezes os bits podem ser agrupados em números de 4, veja:

“0101” Damos a isto o nome de “nibble”. ⇒ Outras vezes os bits podem se agrupar com

números maiores que 8, veja: “001100110011” Chamamos isto de “Word”: ⇒

16 bits ou 2 bytes

Page 9: Programação básica de microcontroladores

Nos PICS existem registradores especiais

Podemos através dos bits ou flags destes registradores

“ajustar” o funcionamento do PIC ou saber como ele está operando, para isto basta escrever ou ler os flags destes registradores.

Page 10: Programação básica de microcontroladores

Os primeiros microcontroladores usavam uma estrutura interna que tinha apenas um caminho para trafegar os dados e endereços.

Lembre-se, dados são informações e endereços são os locais onde serão armazenados os dados.

O nome mais correto para este “caminho” é Bus. Com apenas um bus tínhamos que trafegar hora endereços, hora dados.

Esta arquitetura de construção recebe o nome de “Von Neumann”.

Page 11: Programação básica de microcontroladores

Hoje em dia, os PICs particularmente, trabalham com dois bus. Um para dados e outro para endereços.

Este tipo de arquitetura recebe o nome de “Harvard”.

Os PICs possuem ainda um outro recurso, chamado de “Pipeline”.

Page 12: Programação básica de microcontroladores

“CISC” : possuía mais de 100 instruções, o que dificultava a memorização do programador.

“RISC”: Este set tem entre 33 a 35 instruções dependendo do PIC. Isto ajuda na memorização, mas, exige mais do programador. É como falar fluentemente um outro idioma, conhecendo poucas palavras, all right?

ComplexInstruction SetComputer

Reduced Instruction Set Computer

Page 13: Programação básica de microcontroladores

Introdução à arquitetura interna e suas configurações

Page 14: Programação básica de microcontroladores

Fabricado pela Microchip (www.microchip.com)

Possui 18 pinos Possui 35 instruções Clock até 20MHz Memoria de programa tipo

Flash de 2k words 224 bytes de memoria RAM

de dados

Page 15: Programação básica de microcontroladores

128 bytes de memoria EEPROM para dados

Instruções de 14 bits com 200ns de execução

Dados de 8 bits 15 registradores especiais 16 pinos de entrada/saida (I/O) ICPS, timer interno, watchdog,

CPP, USART, etc...

Page 16: Programação básica de microcontroladores
Page 17: Programação básica de microcontroladores
Page 18: Programação básica de microcontroladores
Page 19: Programação básica de microcontroladores
Page 20: Programação básica de microcontroladores
Page 21: Programação básica de microcontroladores
Page 22: Programação básica de microcontroladores

0 0 1 1 1 1 0 0

0 0 0 0 1 1 1 1

Page 23: Programação básica de microcontroladores

Com 8 níveis (imagine que você quer guardar 8 caixas iguais uma sobre a outra, cada caixa contém algumas coisas. Pois bem, cada caixa é um nível). Há de se ter cuidado para não “derrubar” esta pilha ou como se diz em programação, estourar a pilha (vai que dentro de uma pilha você colocou dinamite.).

Page 24: Programação básica de microcontroladores

O Watch dog é um contador independente de tudo dentro do PIC, que reseta o mesmo, após um certo período.

Para que serve isto? Digamos que você fez um projeto com

um PIC para controlar um elevador, de repente um pico de tensão o PIC trava-o fazendo com que o elevador pare. Depois de um curto período o Watch dog reseta o PIC, o programa volta a funcionar e o elevador volta a funcionar também.

Há de saber como se travar bem este cão, mas isto é, literalmente, outro capítulo...

Page 25: Programação básica de microcontroladores

Uma USART serial, mas o que é isto?

É um recurso que permitirá que você converse com outros equipamentos, como uma porta serial de um microcomputador.

USART significa “Universal Synchronous Asynchrous Receiver transmiter” ou Transmissor Universal Síncrono ou Assíncrono.

Page 26: Programação básica de microcontroladores

Só para lembrar PWM quer dizer modulação por largura de pulso, com este recurso você conseguirá variar o brilho de uma lâmpada, a velocidade de um motor DC ou até fazer uma fonte chaveada.

Page 27: Programação básica de microcontroladores

2 comparadores analógicos com referência interna, programável, de tensão. Quem gosta de amplificadores operacionais prepare-se para se divertir, e quem não os conhece vamos ler um livro sobre AOPs.

Page 28: Programação básica de microcontroladores

É um sinal de onda quadrada que serve para fazer um circuito lógico funcionar ou para sincronizar diversos dispositivos ou circuitos.

O nível alto do clock =+Vcc O nível baixo = zero volt. O período alto (+Vcc) é chamado de “Ton” e o período baixo

de “Toff”. Ton = Toff. É melhor que sejam iguais T = Ton + ToFF ( a soma resulta no periodo) T = 1 F

Page 29: Programação básica de microcontroladores

Ao usarmos um cristal de 4MHz teremos uma freqüência de 4MHz e o período de:

T = 1 = 1 = 250ns ou 250 nano segundos F 4.000,000 Ou 0,000. 000.25 segundos.

Page 30: Programação básica de microcontroladores

Divide-se clock por quatro, formando as fases Q1, Q2, Q3 e Q4

PIPELINE: Busca a informação em um ciclo e a executa no próximo

Para um clock de 4MHz, cada instrução é executada 1s, desde que não afete o Program Counter

Page 31: Programação básica de microcontroladores

RC_CLKOUT = oscilador RC externo que deve estar ligado no pino 16. No pino 15 teremos este sinal dividido por 4.

RC_I/O = Oscilador externo mais que usa o pino 15 como I/O.

Page 32: Programação básica de microcontroladores

XT = cristal de 200kHz até 4MHz HS = cristal acima de 4MHz LS = cristal abaixo de 200kHz INTOSC_I/O = oscilador interno com o pino 15

operando como I/O. INTOSC_CLKOUT = o pino 15 teremos este sinal

dividido por 4

Page 33: Programação básica de microcontroladores
Page 34: Programação básica de microcontroladores
Page 35: Programação básica de microcontroladores

O nome registrador W vem de “Registrador Work”, que traduzindo, quer dizer trabalho.

É através dele que carregamos os outros registradores com valores diversos e corretos para um perfeito funcionamento de nosso projeto.

Caso desejamos colocar um determinado valor em um registrador de uso geral (GPR), primeiro temos que “carregar” o registrador W e depois passar para o outro registrador.

Page 36: Programação básica de microcontroladores

O início de tudo...

Page 37: Programação básica de microcontroladores

Fique atento!

Page 38: Programação básica de microcontroladores
Page 39: Programação básica de microcontroladores

LIST p=16f628a #INCLUDE "P16F628.INC"

Page 40: Programação básica de microcontroladores

Abrir arquivo do word.

Exemplo: __CONFIG _CP_OFF &

_WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _LVP_OFF & _MCLRE_OFF

Page 41: Programação básica de microcontroladores

#DEFINE BANK0 BCF STATUS, RP0

#DEFINE BANK1 BSF STATUS, RP0

#DEFINE BOTAO PORTB, 4

#DEFINE LED PORTB, 0

Page 42: Programação básica de microcontroladores

ORG 0X00 ; inicio do programa GOTO INICIO ; pula para o label INICIO

ORG 0X04 ; inicio da interrupção RETFIE ; retorna da interrupção

Page 43: Programação básica de microcontroladores

INICIO CLRF PORTA CLRF PORTB BANK1 MOVLW B‘00000000' MOVWF TRISA MOVLW B'00110000' MOVWF TRISB

Page 44: Programação básica de microcontroladores

MOVLW B'10000011' MOVWF OPTION_REG MOVLW B'00000000' MOVWF INTCON BANK0 MOVLW B'00000111' MOVWF CMCON CLRF PORTA CLRF PORTB

Page 45: Programação básica de microcontroladores

MAIN BTFSS BOTAO GOTO BOTAO_LIB GOTO BOTAO_PRES BOTAO_LIB BCF LED GOTO MAIN BOTAO_PRES BSF LED GOTO MAIN END

Page 46: Programação básica de microcontroladores

1º passo: Abra o proteus Isis 2º passo: Monte o circuito (fique atento!) 3º passo: Adicione um source. 4º passo: Edite o source.asm que você criou

com o código apresentado 5º passo: Compile o programa pelo comando

BUILD 6º passo: Carregue o programa para a memória

do microcontrolador 7º passo: Execute o programa.

Page 47: Programação básica de microcontroladores

Agora sim é pra valer... Cuidado ao errar, pois pode ser que você erre somente uma vez, pois o PIC é frágil...

Page 48: Programação básica de microcontroladores

1º passo: Abra o IC-PROG 2º passo: Mude o idioma para portugues. 3º passo: Ative o driver para windows XP 4º passo: Utilize a API do Windows 5º passo: Selecione o PIC 6º passo: Carregue o programa em HEX para a

memória do IC-PROG 7º passo: Configure os Fuses, caso necessário 8º passo: Apague a memoria do PIC e faça a

gravação do novo programa.

Page 49: Programação básica de microcontroladores

Agora chega de baixaria... Somos de alto nível...

Serão apresentados 3 programas:Serão apresentados 3 programas:

Liga simplesLiga simples

Pisca PiscaPisca Pisca

Sequencial de 4 LEDsSequencial de 4 LEDs

Temos tempo ainda? SIM NÃO

Page 50: Programação básica de microcontroladores

#include "16f628a.h“ #fuses INTRC_IO, NOMCLR,

NOWDT

Page 51: Programação básica de microcontroladores

Void main (){ SET_TRIS_A(255); SET_TRIS_B(0); while(true) { output_bit( PIN_B0, input(PIN_A0)); } }

Page 52: Programação básica de microcontroladores

#include "16f628a.h" #use delay(clock=4000000) #fuses INTRC_IO, NOMCLR,

NOWDT

Page 53: Programação básica de microcontroladores

void main() { byte i=1; SET_TRIS_A(255); SET_TRIS_B(0); while(true){ OUTPUT_LOW(PIN_B0); delay_ms(1000); OUTPUT_HIGH(PIN_B0); delay_ms(1000); } }

Page 54: Programação básica de microcontroladores

#include "16f628a.h" #fuses INTRC_IO, NOMCLR, NOWDT void main() { static boolean led=0; SET_TRIS_A(255); SET_TRIS_B(0); OUTPUT_B(0); while(true) { if(input(PIN_A0)) { output_bit(PIN_B0, led); //Quando pressiona A0, manda o bit da variável led para o B0 led=!led; //inverte o bit da variável led while(input(PIN_A0)) //Este laço deixa o microcontrolador sem fazer nada enquanto {// o botão A0 ainda estiver pressionado, só voltando a rodar o programa quando soltar }// o botão A0. Isto evita totalmente que o programa pense que o botão foi }// pressionado sem querer... } }

Page 55: Programação básica de microcontroladores

Com o código compilado, você pode carregá-lo para a memória do microcontrolodor tanto do Proteus quanto o real.

Page 56: Programação básica de microcontroladores

Aumentando o nível ainda mais...

Temos tempo ainda?

SIM NÃO

Page 57: Programação básica de microcontroladores

Abra o programa Ldmicro Escolha no menu

configurações o modelo do microcontrolador

Page 58: Programação básica de microcontroladores

Insira um contato em série com uma saída. Xbotao YLamp |----] [---------------------------( )----|

Dê um nome ao contato e um nome à saída. Determine um pino (bit de um port) para

corresponder àquela instrução Compile e carregue para a memória do uC

(Proteus ou real).

Page 59: Programação básica de microcontroladores

Onde pesquisar...

•Site da Microchip – www.microchip.comSite da Microchip – www.microchip.com•Livros:Livros:

• Desbravando o PIC – (Davi José)Desbravando o PIC – (Davi José)• Microcontroladores PIC: Técnicas Microcontroladores PIC: Técnicas avançadas ( Fábio Pereira)avançadas ( Fábio Pereira)• PIC: Programação em C (Fábio PIC: Programação em C (Fábio Pereira)Pereira)

• Buscar no google...Buscar no google...

Page 60: Programação básica de microcontroladores

Esta foi a ponta do Iceberg...Agora cabe a cada um buscar/aprofundar

mais no assunto...

Danilo PaganoDepartamento de Mecanica ComputacionalFaculdade de Engenharia Mecanica Universidade Estadual de Campinas - UNICAMP