Download - Programação básica de microcontroladores
![Page 1: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/1.jpg)
Danilo Morais PaganoMestrando em Mecânica Computacional - UNICAMP
![Page 2: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/6.jpg)
É 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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/8.jpg)
À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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/12.jpg)
“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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/13.jpg)
Introdução à arquitetura interna e suas configurações
![Page 14: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/16.jpg)
![Page 17: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/17.jpg)
![Page 18: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/18.jpg)
![Page 19: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/19.jpg)
![Page 20: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/20.jpg)
![Page 21: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/21.jpg)
![Page 22: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/22.jpg)
0 0 1 1 1 1 0 0
0 0 0 0 1 1 1 1
![Page 23: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/28.jpg)
É 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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/33.jpg)
![Page 34: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/34.jpg)
![Page 35: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/36.jpg)
O início de tudo...
![Page 37: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/37.jpg)
Fique atento!
![Page 38: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/38.jpg)
![Page 39: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/39.jpg)
LIST p=16f628a #INCLUDE "P16F628.INC"
![Page 40: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/41.jpg)
#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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/42.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/43.jpg)
INICIO CLRF PORTA CLRF PORTB BANK1 MOVLW B‘00000000' MOVWF TRISA MOVLW B'00110000' MOVWF TRISB
![Page 44: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/44.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/45.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/46.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/47.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/48.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/49.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/50.jpg)
#include "16f628a.h“ #fuses INTRC_IO, NOMCLR,
NOWDT
![Page 51: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/51.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/52.jpg)
#include "16f628a.h" #use delay(clock=4000000) #fuses INTRC_IO, NOMCLR,
NOWDT
![Page 53: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/53.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/54.jpg)
#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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/55.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/56.jpg)
Aumentando o nível ainda mais...
Temos tempo ainda?
SIM NÃO
![Page 57: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/57.jpg)
Abra o programa Ldmicro Escolha no menu
configurações o modelo do microcontrolador
![Page 58: Programação básica de microcontroladores](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/58.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/59.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081413/5484ce1cb4af9faa0d8b4c6c/html5/thumbnails/60.jpg)
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