·

Automação Industrial ·

Automação Industrial

Send your question to AI and receive an answer instantly

Ask Question

Preview text

SISTEMAS EMBARCADOS Professor Vinicius Belmuds Vasconcelos Tatagiba Curso Técnico em Automação Industrial IFES Campus Linhares 1 Introdução 2 Características do PIC16F84A 3 Aplicações 4 Exercícios Sumário Introdução Os microcontroladores fabricados pela empresa Microchip Technology a família PIC são divididos em séries PIC 10 PIC 12 PIC 16 PIC 18 PIC 24 dsPIC30 dsPIC33 PIC 32 Séries compostas por microcontroladores de 16 bits Os microcontroladores das séries dspPIC30 e dspPIC33 tem integrado uma máquina DSP que permitem serem utilizados em processamento digital de sinais Série composta por microcontroladores de 32 bits Séries compostas por microcontroladores de 8 bits Cada série possui dezenas de modelos com características semelhantes Série PIC10F PIC10F200 PIC10F202 PIC10F204 PIC10F206 PIC10F220 PIC10F222 Série PIC12F PIC12F508 PIC12F509 PIC12F510 PIC12F519 PIC12F609 PIC12HV609 PIC12F615 PIC12FHV615PIC12F629 PIC12F635 PIC12F675 PIC12F683 Família PIC16F PIC16F505 PIC16F506 PIC16F526 PIC16F54 PIC16F57 PIC16F59 PIC16F610 PIC16FHV610 PIC16F616 PIC16FHV616PIC16F627 PIC16F628 PIC16F627A PIC16F628A PIC16F648A PIC16F630 PIC16F631 PIC16F636 PIC16F639 PIC16F676 PIC16F677 PIC16F684 PIC16F685 PIC16F687 PIC16F688 PIC16F689 PIC16F690 PIC16F72 PIC16F73 PIC16F74 PIC16F76 PIC16F77 PIC16F722 PIC16F723 PIC16F724 PIC16F726 PIC16F727 PIC16F716 PIC16F737 PIC16F747 PIC16F767 PIC16F777 PIC16F785 PIC16FHV785 PIC16F84A PIC16F87 PIC16F88 PIC16F818 PIC16F819 PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F874 PIC16F876 PIC16F877 PIC16F873A PIC16F874A PIC16F876A PIC16F877A PIC16F882 PIC16F883 PIC16F884 PIC16F886 PIC16F887 PIC16F913 PIC16F914 PIC16F916 PIC16F917 PIC16F946 PIC16F1933 PIC16F1934 PIC16F1936 PIC16F1937 PIC16F1938 PIC16F1939 PIC16LF1933 PIC16F1934 PIC16F1936 PIC16F1937 PIC16LF1938 PIC16LF1939 Série PIC18F PIC18F242 PIC18F252 PIC18F442 PIC18F452 PIC18F248 PIC18F258 PIC18F448 PIC18F458 PIC18F1220 PIC18F1320 PIC18F2220 PIC18F2320 PIC18F1230 PIC18F1330 PIC18F2221 PIC18F2321 PIC18F2331 PIC18F2410 PIC18F2420 PIC18F2431 PIC18F2423 PIC18F2450 PIC18F2455 PIC18F2458 PIC18F2480 PIC18F2510 PIC18F2515 PIC18F2520 PIC18F2523 PIC18F2525 PIC18F2550 PIC18F2553 PIC18F2580 PIC18F2585 PIC18F2610 PIC18F2620 PIC18F2680 PIC18F2682 PIC18F2685 PIC18F4220 PIC18F4221 PIC18F4320 PIC18F4321 PIC18F4331 PIC18F4410 PIC18F4420 PIC18F4423 PIC18F4431 PIC18F4450 PIC18F4455 PIC18F4458 PIC18F4480 PIC18F4510 PIC18F4515 PIC18F4520 PIC18F4523 PIC18F4525 PIC18F4550 PIC18F4553 PIC18F4580 PIC18F4585 PIC18F4610 PIC18F4620 PIC18F4680 PIC18F4682 PIC18F4685 PIC18F6310 PIC18F6390 PIC18F6393 PIC18F6410 PIC18F6490 PIC18F6493 PIC18F6520 PIC18F6525 PIC18F6527 PIC18F6585 PIC18F6620 PIC18F6621 PIC18F6622 PIC18F6627 PIC18F6628 PIC18F6680 PIC18F6720 PIC18F6722 PIC18F6723PIC18F8310PIC18F8390 PIC18F8393 PIC18F8410 PIC18F8490 PIC18F8493 PIC18F8520 PIC18F8525 PIC18F8527 PIC18F8585 PIC18F8621 PIC18F8620 PIC18F8622 PIC18F8627 PIC18F8628 PIC18F8680 PIC18F8720 PIC18F8722 PIC18F8723 PIC18F24J10 Introdução Série dsPIC30 dsPIC30F1010 DSPIC30F2010 2011 2012 dsPIC30F2020 2023 dsPIC30F 3010 3011 3012 dsPIC30F3013 3014 dsPIC30F4011 4012 4013 dsPIC30F5011 5013 5015 5016 dsPIC30F6010A 6011A 6012ª série dsPIC39 dsPIC39F6013A 6014A 6015 família dsPIC33 dsPIC33FJ12GP201 12GP202 dsPIC33FJ16GP304 dsPIC33FJ32GP202 32GP204 dsPIC33FJ32GP302 32GP304 dsPIC33FJ64GP202 64GP204 dsPIC33FJ64GP206 64GP306 64GP310 dsPIC33FJ64GP706 64GP708 64GP710 dsPIC33FJ64GP802 64GP804 dsPIC33FJ128GP202 128GP204 dsPIC33FJ128GP206 128GP306 128GP310 dsPIC33FJ128GP706 128GP708 128GP710 dsPIC33FJ128GP802 128GP804 dsPIC33FJ256GP506 256GP510 256GP710 dsPIC33FJ06GS101 06GS102 06GS202 dsPIC33FJ16GS402 16GS404 dsPIC33FJ16GS502 16GS504 dsPIC33FJ12MC201 12MC202 dsPIC33FJ16MC304 dsPIC33FJ32MC202 32MC204 dsPIC33FJ32MC302 32MC304 dsPIC33FJ64MC202 64MC204 dsPIC33FJ64MC506 64MC508 64MC510 dsPIC33FJ64MC706 64MC710 dsPIC33FJ64MC802 64MC804 dsPIC33FJ128MC202 128MC204 dsPIC33FJ128MC506 128MC510 dsPIC33FJ128MC706 128MC708 128MC710 dsPIC33FJ128MC802 128MC804 dsPIC33FJ256MC510 256MC710 série dsPIC32 PIC32MX320F032H 320F064H PIC32MX320F128H 320F128L PIC32MX340F128H 340F128L PIC32MX340F256H PIC32MX340F512H PIC32MX360F256L 360F512L PIC32MX420F032H PIC32MX440F128L 440F128H PIC32MX440F256H PIC32MX440F512H PIC32MX460F256L 460F512L Vamos utilizar como base o PIC16F84A e o PIC18F4520 em nossos estudos Introdução Características do PIC16F84A É essencial que o projetista escolha componentes que irão conseguir satisfazer de forma adequada os requisitos do seu projeto Para isto é fundamental que ele tenha em mãos no caso de projetos com microcontroladores o datasheet do componente Vamos começar os nossos estudos com um microcontrolador da família 16F do PIC e verificar algumas de suas características O PIC16F84A é um microcontrolador de 8 bits ou seja como visto na aula anterior o seu barramento de memória possui 8 bits de dados Características do PIC16F84A Pode trabalhar com uma frequência de clock de até 20MHz com oscilador externo Possui 68 bytes de memória RAM Possui 64 bytes de memória EEPROM Possui 4 fontes de interrupções Interrupção externa Timer0 por estouro de timer overflow Interrupção interna no PORTB De dados da EEPROM Características do PIC16F84A 13 pinos de entrada e saída com direção de controle Alta corrente de modo sink e source 25mA TIMER0 possui 8 bits conta até 28 256 Podese gravar 10000 a memória FLASH Podese gravar 10000000 a memória EEPROM A EEPROM possui uma retenção até 40 anos Pode ser gravado dentro do circuito Possui Watchdog Timer com oscilador próprio cão de guarda Reseta o microcontrolador quando o processador apresentar mau funcionamento Características do PIC16F84A Podese alimentálo com tensões de 2V a 55V Possui apenas 4 pinos como entradas unidirecional 𝑀𝐶𝐿𝑅 Pino 4 𝑉𝑆𝑆 Pino 5 𝑉𝐷𝐷 Pino 14 𝑂𝑆𝐶2𝐶𝐿𝐾𝑂𝑈𝑇 Pino 15 Todos os outros pinos são bidirecionais podem ser programados como entrada ou saída Possui 2 PORT de entrada e saída PORTA RA0RA4 e PORTB RB0 RB7 Alguns pinos são multiplexados possuem mais de uma função Pino 3 6 15 e 16 PIC16F84A Aplicação 1 Nesta primeira aplicação vamos fazer um LED piscar a uma determinada frequência Para isto vamos montar o circuito para ser simulado no Proteus O pino 𝑀𝐶𝐿𝑅 é ativado em nível lógico baixo Logo ele deve ser conectado a um resistor de 𝑝𝑢𝑙𝑙 𝑢𝑝 para manter o nível da porta em 5V e não resetar o microcontrolador O LED está conectado através de um resistor de 220Ω ao pino 𝑅𝐵1 PORTB através do modo current source Anodo do LED ligado ao pino Nível alto na saída liga o LED PIC16F84A Aplicação 1 Agora vamos programar o PIC16F84A para poder simular o seu funcionamento Para isto vamos utilizar A IDE Mikro C PRO for PIC Ao abrir o programa clique em 𝑃𝑟𝑜𝑗𝑒𝑐𝑡 𝑛𝑒𝑤 𝑝𝑟𝑜𝑗𝑒𝑐𝑡 PIC16F84A Aplicação 1 Agora vamos programar o PIC16F84A para poder simular o seu funcionamento Para isto vamos utilizar A IDE Mikro C PRO for PIC Clique em 𝑆𝑡𝑎𝑛𝑑𝑎𝑟𝑑 𝑝𝑟𝑜𝑗𝑒𝑐𝑡 𝑁𝑒𝑥𝑡 PIC16F84A Aplicação 1 Agora vamos programar o PIC16F84A para poder simular o seu funcionamento Para isto vamos utilizar A IDE Mikro C PRO for PIC Escolha o nome do projeto Project Name o local onde irá salvar o seu projeto Project folder o nome do dispositivo que irá programar PIC16F84A e o clock que irá utilizar 4 MHz neste exemplo Depois aperte Next PIC16F84A Aplicação 1 Agora vamos programar o PIC16F84A para poder simular o seu funcionamento Para isto vamos utilizar A IDE Mikro C PRO for PIC Por fim clique em Finish PIC16F84A Aplicação 1 Programe as seguintes linhas de código PIC16F84A Aplicação 1 Entendendo o código O PIC16F84A possui um registrador chamado TRISB que comanda se os bits do PORTB serão entradas configurado em 1 ou saídas configurados em zero No caso do nosso exemplo configuramos todos os bits como saída ao fazer TRISB0b000000000 O b significa que usamos a lógica binária para configurar os bits Logo o RB7 ao RB0 estão como saída pois configuramos em 0 PIC16F84A Aplicação 1 Entendendo o código O PIC16F84A possui um registrador chamado PORTB que comanda se os pinos do PORTB estarão em nível lógico baixo 0 ou alto 1 No caso do nosso exemplo configuramos todos os bits inicialmente em nível lógico baixo ao fazer PORTB0b000000000 Logo o RB7 ao RB0 estão inicialmente em nível baixo pois configuramos em 0 PIC16F84A Aplicação 1 Entendendo o código Criamos um looping infinito que ficará sempre rodando quando ligarmos o microcontrolador Dentro deste looping colocamos o pino RB1 em nível lógico alto através da instrução RB1bit 1 Depois esperamos 1000 milissegundos através da função delayms1000 Logo depois forçamos o pino RB1 para nível lógico baixo RB1bit 0 Por fim esperamos mais 1000 milissegundos até que o ciclo se repita novamente PIC16F84A Aplicação 1 Entendendo o código Agora devemos compilar o código criado Para isto clique em 𝐵𝑢𝑖𝑙𝑑𝐶𝑡𝑟𝑙 𝐹9 A aba Messages mostra que o código foi compilado com sucesso PIC16F84A Aplicação 1 Entendendo o código Por fim devemos carregar o arquivo compilado no microcontrolador do Proteus Dê duplo clique no 16F84A no Proteus clique em Program File e navega até a pasta onde o seu código foi compilado e selecione o arquivo de extensão hex Clique em Ok e agora é só simular o seu circuito Você deverá ver o seu LED piscando a cada 1 segundo Importante A frequência do clock do processador no Proteus deve ser a mesma frequência configurada no Mikro C 4 MHz PIC16F84A Aplicação 1 Se colocarmos um osciloscópio na saída veremos a forma de onda desejada Perceba que a onda fica 1 segundo em nível baixo e 1 segundo em nível alto como era de se esperar Se pressionarmos o botão o 𝑀𝐶𝐿𝑅 será colocado em nível lógico baixo e o microcontrolador será resetado No caso estamos utilizando o oscilador externo de 4MHZ porém o Proteus já simula este oscilador sem a necessidade de fazer as ligações dos pinos 15 e 16 na prática teríamos que colocar um cristal oscilador nestes pinos PIC16F84A Aplicação 1 No Mikro C cliclando em Edit Project podese ver as configurações dos fusíveis do PIC utilizado Perceba que a onda fica 1 segundo em nível baixo e 1 segundo em nível alto como era de se esperar Este PIC possui 4 fusíveis para sua configuração interna sendo que o primeiro é o oscilador selecionado Perceba que foi selecionado o oscilador HS que é um oscilador externo Mais para frente no nosso curso entraremos mais em detalhes sobre estes fusíveis PIC16F84A Aplicação 1 Apenas para complementar Poderíamos escrever o nosso código setando todos os BITS do PORTB de uma única vez PIC16F84A Aplicação 1 Apenas para complementar Também poderíamos escrever o nosso código utilizando a numeração hexadecimal PIC16F84A Aplicação 1 Apenas para complementar Também poderíamos escrever o nosso código utilizando a numeração hexadecimal Por que PORTB0x02 para setar RB1 Porque o RB1 é o segundo bit do PORTB 𝑅𝐵7 𝑅𝐵6 𝑅𝐵5 𝑅𝐵4 𝑅𝐵3 𝑅𝐵2 𝑅𝐵1 𝑅𝐵0 Se fôssemos escrever em binário faríamos PORTB0b00000010 Como estamos escrevendo em hexadecimal os 4 bits mais significativo PORTB0b00000010 são 0 em haxadecimal Os 4 bits menos significativos PORTB0b00000010 são 2 em haxadecimal Logo PORTB0b00000010 PORTB 0x02 PIC16F84A Exercício 1 Exercício 1 Utilizando o PIC16F84A conecte um LED no pino RA3 no modo current sink e programe o PIC para que o LED pisque a cada 500ms Obs O pino 𝑀𝐶𝐿𝑅 deverá está conectado a um resistor de pullup Obs Utilize um sinal de clock de 4Mhz Obs Meça com o osciloscópio o período do sinal produzido na saída PIC16F84A Exercício 1 Exercício 1 Utilizando o PIC16F84A conecte um LED no pino RA3 no modo current sink e programe o PIC para que o LED pisque a cada 500ms Circuito Programa PIC16F84A Exercício 1 Exercício 1 Utilizando o PIC16F84A conecte um LED no pino RA3 no modo current sink e programe o PIC para que o LED pisque a cada 500ms Circuito Forma de onda 𝑇 1𝑠 PIC16F84A Aplicação 2 Nesta segunda aplicação vamos utilizar os pinos do PORTB 8 pinos para fazer um contador de 8 bits ou seja contar 28 valores Assim iremos contar de 0 a 255 Utilize um clock de 8MHz HS Para isto monte o seguinte circuito no Proteus Este componente é o Logic Probe do Proteus Podemos utilizálo para verificar o estado lógico de uma saída 0 ou 1 ao invés de precisar ligar LEDS PIC16F84A Aplicação 2 Nesta segunda aplicação vamos utilizar os pinos do PORTB 8 pinos para fazer um contador de 8 bits ou seja contar 28 valores Assim iremos contar de 0 a 255 Utilize um clock de 8MHz HS Agora vamos programar o seguinte código Na linha 8 os pinos do PORTB são incrementados a cada unidade de 00b00000000 a 2550b11111111 Ao chegar no valor 255 a contagem é reiniciada em zero PIC16F84A Aplicação 2 Ao compilar e carregar o arquivo hex no PIC você deverá ver uma contagem em binário de 0 a 256 com intervalos de 300ms a cada incremento Contagem em 0b00000111 710 Contagem em 0b00001101 1310 Exemplos do programa rodando PIC16F84A Exercício 2 Exercício 2 Faça um programa utilizando o PIC16F84A com um clock de 8MHz que conte até o valor de 20 com incrementos unitários a cada 300ms Ao chegar neste valor um LED conectado à porta RA0 deverá permanecer ligado durante 5 segundos Após isto a contagem deverá ser reiniciada de zero o LED deverá ser apagado e o ciclo deverá ser repetido Obs O LED deverá estar ligado no modo current source PIC16F84A Exercício 2 Exercício 2 Faça um programa utilizando o PIC16F84A com um clock de 8MHz que conte até o valor de 20 com incrementos unitários a cada 300ms Ao chegar neste valor um LED conectado à porta RA0 deverá permanecer ligado durante 5 segundos Após isto a contagem deverá ser reiniciada de zero o LED deverá ser apagado e o ciclo deverá ser repetido Obs O LED deverá estar ligado no modo current source PIC16F84A Exercício 3 Exercício 3 Faça um programa utilizando o PIC16F84A com um clock de 8MHz que conte até o valor de 20 com incrementos unitários a cada 300ms Ao chegar neste valor um LED conectado à porta RA0 deverá permanecer ligado durante 5 segundos Após isto a contagem deverá ser reiniciada de zero o LED deverá ser apagado e o ciclo deverá ser repetido Obs O LED deverá estar ligado no modo sink source PIC16F84A Exercício 3 Exercício 3 Faça um programa utilizando o PIC16F84A com um clock de 8MHz que conte até o valor de 20 com incrementos unitários a cada 300ms Ao chegar neste valor um LED conectado à porta RA0 deverá permanecer ligado durante 5 segundos Após isto a contagem deverá ser reiniciada de zero o LED deverá ser apagado e o ciclo deverá ser repetido Obs O LED deverá estar ligado no modo current sink PIC16F84A Exercício 3 Exercício 3 Faça um programa utilizando o PIC16F84A com um clock de 8MHz que conte até o valor de 20 com incrementos unitários a cada 300ms Ao chegar neste valor um LED conectado à porta RA0 deverá permanecer ligado durante 5 segundos Após isto a contagem deverá ser reiniciada de zero o LED deverá ser apagado e o ciclo deverá ser repetido Obs O LED deverá estar ligado no modo current sink PIC16F84A Aplicação 3 Nesta terceira aplicação vamos fazer um deslocador de bits para a esquerda SHIFT LEFT Desta forma conectaremos os LEDS no modo current sink em cada pino da PORTB de forma que os LEDS serão ligados sequencialmente da esquerda bit menos significatico à direita bit mais significativo Será utilizado um sinal de clock de 8MHz HS PIC16F84A Aplicação 3 Nesta terceira aplicação vamos fazer um deslocador de bits para a esquerda SHIFT LEFT Desta forma conectaremos os LEDS no modo current sink em cada pino da PORTB de forma que os LEDS serão ligados sequencialmente da esquerda bit menos significatico à direita bit mais significativo Será utilizado um sinal de clock de 8MHz HS PIC16F84A Aplicação 3 O operador é o operador de deslocamento de bits à esquerda Caso quiséssemos deslocar à direita usaríamos o operador Como estamos usando o modo current sink o PORTB foi iniciado com nível lógico alto para todos os leds iniciarem desligados PIC16F84A Aplicação 4 Nesta quarta aplicação vamos conectar um botão ao pino RA0 do PIC e um LED ao pino RA1 Sempre que o botão for pressionado o LED deverá ficar aceso durante 5 segundos e depois deverá se apagar Use um clock HS de 8MHz Monte o circuito abaixo PIC16F84A Aplicação 4 Nesta quarta aplicação vamos conectar um botão ao pino RA0 do PIC e um LED ao pino RA1 Sempre que o botão for pressionado o LED deverá ficar acesso durante 5 segundos e depois se apagar Use um clock HS de 8MHz Programa o código mostrado abaixo Configurouse RA0 como entrada e os outros pinos como saída Quando o botão for pressionado o pino RA1 estará conectado diretamente ao terra 0 Ao carregar o código no PIC e simular você deverá ver o led ligado durante 5 segundo ao pressionar o botão PIC16F84A Aplicação 4 Nesta mesma aplicação poderíamos ter programado utilizando diretivas de programação Relacionamos o pino RA0bit com a variável S1 e o pino RA1bit com a variável LED através da diretivas define Agora podemos utilizar estas variáveis para se referir aos pinos PIC16F84A Exercício 5 Considere o esquemático do projeto abaixo PIC16F84A Exercício 5 Considere o esquemático do projeto abaixo Ao pressionar o botão S0 Os bits do PORTB deverão contar em sequência de 0 a 16 a cada 300ms Após chegar o valor final da contagem o PORTB deverá ser zerado Ao pressionar o botão S1 Os bits do PORT B deverão contar em sequência decrescente de 255 a 240 a cada 300ms Após chegar ao valor final da contagem o PORTB deverá ser zerado int i 0 void main TRISA 0x03 apenas RA0 e RA1 são entradas TRISB 0x00 todos os pinos são saidas PORTA 0x03 resistor de pullup em ra0 e ra1 PORTB 0x00 todos os pinos começam desligados no PORTB while1 ifRA0bit 0 fori 0 i 16 i PORTB delayms300 PORTB 0x00 ifRA1bit 0 PORTB 0xFF delayms300 fori 255 i 240 i PORTB delayms300 PORTB 0x00 Vamos finalizar por hoje viniciustatagibaifesedubr