Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Microcontrolador, Notas de estudo de Microcontroladores

Apostila de microcontroladores

Tipologia: Notas de estudo

2015

Compartilhado em 03/05/2015

Ilzinha
Ilzinha 🇧🇷

5

(2)

2 documentos

1 / 22

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Instituto Federal de Educação, Ciência e Tecnologia da Paraíba
MINICURSO
Microcontrolador PIC 16F877
Alison Lins de Lima
Fábio Montenegro Pontes
Jonathan B. da Silva
Rafael Tavares Coutinho
Thiago Pinto
João Pessoa, 23 de Maio de 2010
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16

Pré-visualização parcial do texto

Baixe Microcontrolador e outras Notas de estudo em PDF para Microcontroladores, somente na Docsity!

Instituto Federal de Educação, Ciência e Tecnologia da Paraíba

MINICURSO

Microcontrolador PIC 16F

Alison Lins de Lima

Fábio Montenegro Pontes

Jonathan B. da Silva

Rafael Tavares Coutinho

Thiago Pinto

João Pessoa, 23 de Maio de 2010

Plano de Curso

**1. Evolução da Tecnologia e Surgimento dos microcontroladores;

  1. Teoria sobre Microcontrolador**

2.1 - O que é um microcontrolador e onde se aplica;

2.2 - Diagrama de Blocos básico de um microcontrolador;

2.3 - Arquitetura e filosofia;

3. Memórias

3.1 - RAM

3.2 - ROM

**4. Tipos de PIC (quanto à memória de programa)

  1. PC e a Pilha
  2. Interrupções
  3. Polarização do Pic16F**

7.1 – Alimentação

7.2 – Circuitos Osciladores

8. Programação

8.1 – Assembler

8.2 - C

**9. Comandos Básicos

  1. Estrutura básica de um código em C
  2. Práticas**

11.1 – acionando um led

11.2 – pisca – pisca com led e variando a frequência;

11.3 – Contador com Display de sete segmentos;

  • Verificar a diferença do código para o ânodo comum e o cátodo comum;

11.4 – Escrevendo em um LCD de 16x2;

11.5 – Usando um botão, para acionar um led;

**1. Evolução da Tecnologia e Surgimento dos microcontroladores;

  1. Teoria sobre Microcontrolador**

2.1. O que é um microcontrolador e onde podemos encontrá-lo.

Def 1.: Podemos definir um microcontrolador com sendo um computador simplificado em um

único circuito integrado, utilizado no controle de processos lógicos. (Entende-se como

processo lógico o acionamento de leds, displays sete seguimentos, lcds, relés, sensores ...)

Def 2.: São circuitos integrados dotados internamente de um ULA (unidade lógica e

aritmética), uma unidade de controle e conjunto de periféricos (ex.: contadores,

temporizadores, portas I/O, memórias).

Aplicações:

Indústria Automobilística

i) Injeção Eletrônica; ii) Fechaduras Eletrônicas;

Empresas de Segurança

i) Alarmes; ii) Sensores de movimentação; iii) Cercas Elétricas;

Indústria de Telefonia

i) Celulares ii) Binas iii) Centrais Telefônicas

Robótica

i) Robôs para competição e de uso geral

Brinquedos

i) Bonecos ii) Aeromodelismo

Saúde

i) Equipamentos Médicos Hospitalares

2.2. Diagrama de Blocos básico de um microcontrolador

2.3. Arquitetura e filosofia

Def .: São as partes que constitui o microcontrolador e como as mesmas estão interligadas.

Von – Neuman (CISC) - Primeiras arquiteturas pensadas para computadores.

Harvard (RISC)

HARVARD VON - NEUMAN

As arquiteturas se diferenciam pela ligação da CPU com as memórias de dados e a de

programa, na arquitetura de Harvard, a CPU esta conectada as memórias por barramentos

separados o que permite o uso do conjunto de instruções (RISC), já na arquitetura de Von –

Neumann, a CPU esta conectada as memórias pelo mesmo barramento, isso demanda o uso

de conjunto de instruções complexas (CISC).

Obs.: Arquitetura do PIC 16F877,

encontra-se nos anexos.

3. Memórias (VER ANEXO II)

3.1 – RAM

As memórias RAM são memória de uso

temporário, voláteis os dados só

permanecem na memória enquanto está

ligada, quando a memória é desligada

todos os dados são perdidos.

3.2 - ROM

São memória de gravação permanente,

mesmo quando estão desligadas os

dados permanecem guardados.

Principais Características das memórias

de programa e dados do PIC 16F877:

Memória de Programa (Flash)

8k x 14 bits

Memória de dados (Ram)

368 bytes

Memória de dados (EEprom)

256 bytes

5. PC e a Pilha

PC é um registrador que aponta para o endereço da próxima instrução a ser executada.

O PC tem 13bits, com isso pode endereçar 8k de memória.

❹❸➀^ 㐄 ➅❸➆❹ ↇ↖ↆↇ∀ↇç↗∁

❹❸➀^ 㐄

OBS.: A partir do PIC 16f84 o PC já possuía 13 bits, mesmo tendo uma memória de dados de

1k x 14 bits.

A pilha é um registrador de oito níveis, no qual são guardados os endereços de retorno das

rotinas de interrupções.

endereço 3 endereço 2 endereço 1

“Quando acontece a primeira interrupção, o endereço armazenado em PC vai para o primeiro

nível da pilha, se por acaso acontece uma segunda interrupção então novamente o endereço

que esta dentro do PC ocupa o primeiro nível da pilha e o endereço que antes ocupava o

primeiro nível desce para o segundo, quando a interrupção 2 acaba, o endereço que esta no

primeiro nível, é posto novamente no PC, que retorna para a posição em que havia parado na

primeira interrupção, daí o endereço 1 volta para o primeiro nível da pilhar e daí por diante...”

6. Interrupções

É uma parada de emergência na execução de uma rotina, que ocorre por um fato interno ou

externo e resulta na chamada de uma sub-rotina que começa ser executada e quando esta

acaba o microcontrolador volta a executar a rotina principal.

7. Polarização do Pic16F

8. Programação

8.1 – Assembler

É uma linguagem de baixo nível ou linguagem de máquina.

Vantagem: Código com o menor tamanho que se pode escrever;

Desvantagem: Cada microcontrolador tem seu conjunto de instruções; ( Condição Péssima )

8.2 – C

É uma linguagem de alto nível mais fácil de aprender em relação ao assembler.

Vantagem: facilidade no aprendizado e portável para outros microcontroladores;

Desvantagem: código maior do que se o mesmo fosse programado em assembler.

9. Comandos Básicos de:

Entrada

Tratamento a BIT Tratamento a PORTA input (PIN_D0) input _D() input (PIN_D0) input _D()

Saída

Tratamento a BIT Tratamento a PORTA output_low(PIN_D0) output_D(valor) output_high(PIN_D0) output_D(valor)

Loop

for(i=0; i>0; i++) for( ; ; ) loop infinito while(condição) while(1) ou while(true) loop infinito do{ } while(codição) switch / case

Condicional

if (condição){ }else{}

Atraso

delay_ms(1000) atraso em milisegundos delay_us(1000) atraso em microsegundos

10. Estrutura Básica de um programa em C

#include <16f877.h> // inclusão da Biblioteca do microcontrolador #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOLVP // Palavras de configurações do microcontrolador #use delay(clock=20000000) // Valor do clock

void main (){ // Corpo principal do programa comando 1 // comando 2 // Comandos comando 3 // }

Contador com Display de sete segmentos versão 2

#include <16f877.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=16000000) byte const tabela[]={ 0b10111111, 0b10000110, 0b11011011, 0b11001111, 0b11100110, 0b11101101, 0b11111101, 0b10000111, 0b11111111, 0b }; Void main(){ int t=500,valor = 0; while(true){ valor ++; if(valor>9) valor = 0; output_b (tabela[valor]); // apresenta o valor delay_ms(t); } }

Escrevendo em um LCD de 16x2;

#include <16f877.h> #include <regs_16f87x.h> #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOPROTECT,NOLVP #use delay(clock=20000000) #include <bib_LCD_16x2_all.c> void main (){ ini_lcd_16x2(); while(true){ printf(exibe_lcd,"\f PET ENGENHARIA \n ELETRICA IFPB"); delay_ms(3000);

printf(exibe_lcd,"\f OFERECE \n O MELHOR CURSO"); delay_ms(3000);

printf(exibe_lcd,"\f DE \nMICROCONTROLADOR"); delay_ms(3000); } }

Usando um botão, para acionar um led;

#include <16f877.h> #fuses hs,nolvp,nobrownout,nowrt #use delay(clock=20000000) void main(){ while(true){ if(!input(pin_a0)) { // se a0 for pressionado acende o led output_high(pin_d0); } if(!input(pin_a1)){ // se a0 for pressionado desliga o led output_low(pin_d0); } } }

Usando um sensor para acionar um led;

O código é semelhante ao anterior, a mudança acontece apenas no hardware, ao invés de

usarmos um botão na entrada iremos utilizar um sensor.

Escrevendo uma variável no LCD. (variável inteira)

#include <16f877.h> #include <regs_16f87x.h> #fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOPROTECT,NOLVP #use delay(clock=20000000) #include <bib_LCD_16x2_all.c> int valor; void main (){ ini_lcd_16x2(); valor = 0; while(true){ printf(exibe_lcd,"\f teste %d",valor); delay_ms(100); valor++; }

}

ENTRADA E SAÍDA

Chave LED

TRM0 0

TRM1 1

CH0 2

INT 3

CH1 4

Obs.: os LEDs e as chaves são baixo ativos.

Modo Padrão (mais simples)

#include <16F871.H #fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP #use delay(clock=4000000)

void main (void){ for(;;){ //loop infinito if(!input(PIN_A4)) output_low(PIN_D0); else output_high(PIN_D0);

if(!input(PIN_C0)) output_low(PIN_D1); else output_high(PIN_D1);

if(!input(PIN_C1)) output_low(PIN_D2); else output_high(PIN_D2);

if(!input(PIN_B0)) output_low(PIN_D3); else output_high(PIN_D3);

if(!input(PIN_E2)) output_low(PIN_D4); else output_high(PIN_D4); } }

Modo Direto

#include <16F871.H> // arquivo de definições do microcontrolador usado #fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP // bits de configuração

#use delay(clock=4000000) // informa ao sistema o frequência de clock, para temporização

// Endereços dos portais #byte PORTA=0x #byte PORTB=0x #byte PORTC=0x #byte PORTD=0x #byte PORTE=0x

// Entradas #bit CH_TMR0 = PORTA. #bit CH_TMR1 = PORTC. #bit CH_0 = PORTC. #bit CH_INT = PORTB. #bit CH_1 = PORTE.

// Saídas #bit LED0 = PORTD. #bit LED1 = PORTD. #bit LED2 = PORTD. #bit LED3 = PORTD. #bit LED4 = PORTD.

void main (void) { set_tris_d(0xE0); // configuração direcional: os 5 LSbits do portal D são saídas

for(;;){ //loop infinito if(!CH_TMR0) LED0 = 0; else LED0 = 1;

if(!CH_TMR1) LED1 = false; else LED1 = true;

if(!CH_0) LED2 = false; else LED2 = true;

if(!CH_INT) LED3 = false; else LED3 = true;

if(!CH_1) LED4 = false; else LED4 = true; } }

Modo Fixo

#include <16F871.H> // arquivo de definições do microcontrolador usado #fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP // bits de configuração

#use fixed_io(d_outputs = PIN_D0,PIN_D1,PIN_D2,PIN_D3,PIN_D4) // saídas da porta D. Os demais são entradas

#use delay(clock=4000000) // informa ao sistema o frequência de clock, para temporização

// Entradas #DEFINE CH_TMR0 PIN_A #DEFINE CH_TMR1 PIN_C #DEFINE CH_0 PIN_C #DEFINE CH_INT PIN_B #DEFINE CH_1 PIN_E

(^2) RA0/AN (^3) RA1/AN (^4) RA2/AN2/VREF- (^6) RA4/T0CKI (^7) RA5/AN4/SS (^8) RE0/AN5/RD (^9) RE1/AN6/WR (^10) RE2/AN7/CS

(^13) OSC1/CLKIN (^14) OSC2/CLKOUT

RC1/T1OSI/CCP2 16 RC2/CCP1 17 RC3/SCK/SCL 18

RD0/PSP0 19 RD1/PSP1 20

RB7/PGD 40

RB6/PGC 39

RB5 38

RB4 37

RB3/PGM 36

RB2 35

RB1 34

RB0/INT 33

RD7/PSP7 30

RD6/PSP6 29

RD5/PSP5 28

RD4/PSP4 27

RD3/PSP3 22

RD2/PSP2 21

RC7/RX/DT 26

RC6/TX/CK 25

RC5/SDO 24

RC4/SDI/SDA 23

(^5) RA3/AN3/VREF+

RC0/T1OSO/T1CKI 15

(^1) MCLR/Vpp/THV

U

PIC16F

D

LED-RED

#DEFINE LED2 PIN_D

#DEFINE LED3 PIN_D

#DEFINE LED4 PIN_D

void main (void) { set_tris_d(0xE0); // configuração direcional: os 5 LSbits do portal D são saídas

for(;;){ if(!input(CH_TMR0)) output_low(LED0); else output_high(LED0);

if(!input(CH_TMR1)) output_low(LED1); else output_high(LED1);

if(!input(CH_0)) output_low(LED2); else output_high(LED2);

if(!input(CH_INT)) output_low(LED3); else output_high(LED3);

if(!input(CH_1)) output_low(LED4); else output_high(LED4); } } Controlando o brilho do LED com o Módulo PWM

#include<16F877a.h> #device adc= #fuses HS,NOWDT,NOLVP,NOBROWNOUT #use delay(clock=20000000)

void main (void){

long int ciclo = 0;

setup_timer_2 (T2_DIV_BY_1,0xff,1); // 4 khz setup_ccp1 (ccp_pwm); set_pwm1_duty (0); while(1){ //loop infinito for(ciclo = 0;ciclo<=500;ciclo+=10){ set_pwm1_duty(ciclo); delay_ms(70); } for(ciclo = 500;ciclo>=0;ciclo-=10){ set_pwm1_duty(ciclo); delay_ms(70); } } }

ANEXO I

Arquitetura do PIC16F

ANEXO II

PIC 16F