Você está na página 1de 179

Eletrônica Aplicada e Microcontroladores Apostila de Laboratório

Versão 2.4 – 1º semestre 2010 Prof. Marcelo do C.C. Gaiotto.

Revisada em 23/02/2010

Aluno:

Turno:

Turma:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto EXPERIÊNCIA 1 – Circuitos de

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

EXPERIÊNCIA 1 – Circuitos de Proteção de entradas e Saídas Digitais

Objetivos:

Utilizar os conceitos de Eletricidade Básica, Eletrônica Analógica e Eletrônica Digital na construção e teste de circuito; Calcular circuitos com resistores, diodos, transistores e acopladores óptico;

REGRA de APRESENTAÇÃO/DEFESA:

os

cálculos e funcionamento para que seja validada a defesa. Cópias de quaisquer itens implicarão em nota 0 para a experiência;

Os

alunos

devem

desenvolver

esquemas

elétricos

caso

solicitados,

Tempo de Execução: 8 Aulas

Início:

/

/

- Término:

/

/

Desenvolvimento

Equipamentos e materiais necessários:

1 – Protoboard;

1 – Multímetro;

1 – Conjunto de chaves digitais;

1 – Fonte de alimentação;

1 – Chave tipo botão micro táctil;

1 – Relé 12V/10A

2 – Led;

2 – Diodo retificador 1N4007;

2 – Diodo de sinal 1N4148;

2 – Diodo Zener 4V7/500mW

2 – Transistor BC548 ou BC337

1 – Acoplador Óptico 4N25

1 – LED Emissor IR

1 – LED Receptor IR

Resistores de valores variados;

Fios para montagens;

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 1 – Entradas não

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 1 – Entradas não isoladas com Circuito Divisor Resistivo

Aplique os conceitos da teoria e dimensione o circuito para que na saída Vout apresente uma tensão de 5V, para uma entrada de 18V. Pede-se:

Medir as correntes e tensões dos resistores;

Variar a tensão de entrada Vin: 14V à 30V (em passos de 0,5V) e verificar o comportamento da tensão de saída;

Anote o comportamento do circuito

Cálculos do Projeto 1

o comportamento da tensão de saída; • Anote o comportamento do circuito Cálculos do Projeto 1

Divisor Resistivo.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 2 – Entradas não

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 2 – Entradas não isoladas – Proteção com diodo de sinal

Aplique os conceitos da teoria e dimensione o circuito para uma Tensão Vadp de 5V, a partir dos dados:

Utilize um diodo de sinal 1N4148;

Com uma tensão Vin de 24V, verificar a tensão Vout;

Com a fonte de tensão conectada a entrada Vin, variar o ajuste de tensão de 1 à 30V (passos de 0,5V), verificando a tensão de saída Vout;

Desconecte a fonte de alimentação da entrada Vin. Conecte agora a entrada Vin em curto- circuito com o gnd, para verificar a tensão Vout;

Anote o comportamento do circuito

Cálculos do Projeto 2

verificar a tensão Vout; • Anote o comportamento do circuito Cálculos do Projeto 2 Circuito com

Circuito com diodo de sinal.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 3 – Entradas não

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 3 – Entradas não isoladas – Proteção com diodo zener

Aplique os conceitos da teoria e dimensione o circuito a partir dos dados a seguir:

Utilizando um Zener de 4V7/500mW ou de 5V1/500mW;

Aplicar uma tensão Vin de 30V, verificar a tensão Vout;

Com a fonte de tensão conectada a entrada Vin, variar o ajuste de tensão de 1 à 30V (passos de 0,5V), verificando a tensão de saída Vout;

Desconecte a fonte de alimentação da entrada Vin. Conecte agora a entrada Vin em curto- circuito com o gnd, para verificar a tensão Vout;

Anote o comportamento do circuito

a tensão Vout; • Anote o comportamento do circuito Circuito com entrada protegida por diodo zener.

Circuito com entrada protegida por diodo zener.

Cálculos do Projeto 3

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 4 – Acopladores ópticos

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 4 – Acopladores ópticos - Desenvolvimento

Aplique os conceitos da teoria sobre acopladores ópticos e dimensione o circuito a partir dos dados a seguir:

Utilizar um Led emissor de infravermelho e um Foto-transistor e construa um acoplador óptico;

Calcular os resistores R1 e R2;

Anote o comportamento do circuito.

acoplador óptico; • Calcular os resistores R1 e R2; • Anote o comportamento do circuito. Cálculos

Cálculos do Projeto 4

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 5 – Entradas isoladas

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 5 – Entradas isoladas – Sensor NPN e acoplamento ótico com saída e resistor de pull-up

Aplique os conceitos da teoria e dimensione os circuitos a partir dos dados a seguir:

e dimensione os circuitos a partir dos dados a seguir: Pinos do acoplador óptico 4N25 •
e dimensione os circuitos a partir dos dados a seguir: Pinos do acoplador óptico 4N25 •

Pinos do acoplador óptico 4N25

Simular um sensor NPN utilizando uma chave ou botão;

Calcular os resistores;

Anote o comportamento do circuito

os resistores; • Anote o comportamento do circuito Sensor NPN e acoplamento óptico com saída e

Sensor NPN e acoplamento óptico com saída e resistor de pull up.

Cálculos do Projeto 5

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 6 – Entradas isoladas

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 6 – Entradas isoladas – Sensor PNP e acoplamento óptico com saída e resistor de pull-up

Simular um sensor PNP utilizando uma chave ou botão;

Calcular os resistores;

Anote o comportamento do circuito

os resistores; • Anote o comportamento do circuito Sensor PNP e acoplamento óptico com saída e

Sensor PNP e acoplamento óptico com saída e resistor de pull up.

Cálculos do Projeto 6

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 7 – Entradas isoladas

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 7 – Entradas isoladas – Sensor PNP e acoplamento óptico com saída e resistor de pull-down

Simular um sensor PNP utilizando uma chave ou botão;

Calcular os resistores;

Anote o comportamento do circuito

os resistores; • Anote o comportamento do circuito Sensor PNP e acoplador óptico com saída e

Sensor PNP e acoplador óptico com saída e resistor de pull down.

Cálculos do Projeto 7

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 8 – Entradas isoladas

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 8 – Entradas isoladas – Sensor NPN e acoplamento óptico com saída e resistor de pull-down

Simular um sensor NPN utilizando uma chave ou botão;

Calcular os resistores;

Anote o comportamento do circuito

os resistores; • Anote o comportamento do circuito Sensor NPN e acoplador óptico com saída e

Sensor NPN e acoplador óptico com saída e resistor de pull down.

Cálculos do Projeto 8

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 9 – Saída Digital

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 9 – Saída Digital não isolada – Sem Proteção

Aplique os conceitos da teoria e dimensione o circuito a partir dos dados a seguir:

Calcular os resistores de polarização;

Utilize uma tensão Vcc=12V; Vbe=0,7V; um relé de 12V;

A simulação do circuito lógico será através de uma porta lógica inversora do tipo TTL 74LS04;

Como sinal de acionamento da porta lógica inversora, utilizar um botão em configuração pull- up; **** lembre que a família TTL opera com tensão de 5V *******

Anote o comportamento do circuito.

de 5V ******* • Anote o comportamento do circuito. Cálculos do Projeto 9 Saída não isolada

Cálculos do Projeto 9

Saída não isolada e sem proteção.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 10 – Saída Digital

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 10 – Saída Digital não isolada – Proteção com Diodo de Sinal

Aplique os conceitos da teoria e dimensione o circuito a partir dos dados a seguir:

Utilizar o diodo de sinal 1N4148;

Calcular os resistores de polarização;

Utilize uma tensão Vcc=12V, Vbe=0,7V, um relé de 12V;

A simulação do circuito lógico será através de uma porta lógica inversora do tipo TTL 74LS04;

Como sinal de acionamento da porta lógica inversora, utilizar um botão em configuração pull- up; **** lembre que a família TTL opera com tensão de 5V *******

Anote o comportamento do circuito.

de 5V ******* • Anote o comportamento do circuito. Saída não isolada protegida por diodo de

Saída não isolada protegida por diodo de sinal.

Cálculos do Projeto 10

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 11 – Saídas isoladas

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 11 – Saídas isoladas – Com acopladores ópticos

11 – Saídas isoladas – Com acopladores ópticos Pinos do acoplador óptico 4N25 Aplique os conceitos
11 – Saídas isoladas – Com acopladores ópticos Pinos do acoplador óptico 4N25 Aplique os conceitos

Pinos do acoplador óptico 4N25

Aplique os conceitos da teoria e dimensione o circuito a partir dos dados a seguir:

Utilizar um diodo 1N4148;

Calcular os resistores de polarização;

Utilize uma tensão Vcc=12V, Vbe=0,7V, um relé de 12V no lugar de L1;

A simulação do circuito lógico será através de uma porta lógica inversora do tipo TTL 74LS04;

Como sinal de acionamento da porta lógica inversora, utilizar um botão em configuração pull- up; **** lembre que a família TTL opera com tensão de 5V *******

Medir as tensões indicadas, Vbe, VR2, VCEsat, VCE.

Anote o comportamento do circuito.

VR2, VCEsat, VCE. • Anote o comportamento do circuito. Circuito com opto acoplador com acionamento da

Circuito com opto acoplador com acionamento da carga com nível lógico “0”.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Cálculos do Projeto 11 14

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Cálculos do Projeto 11

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 12 – Saídas isoladas

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 12 – Saídas isoladas – Com acopladores ópticos

Aplique os conceitos da teoria e dimensione o circuito a partir dos dados a seguir:

Utilizar um diodo 1N4148;

Calcular os resistores de polarização;

Utilize uma tensão Vcc=12V, Vbe=0,7V, um relé de 12V no lugar de L1;

A simulação do circuito lógico será através de uma porta lógica inversora do tipo TTL 74LS04;

**** lembre que a família TTL opera com tensão de 5V *******

Medir as tensões indicadas, Vbe, VR2, VCEsat, VCE.

Anote o comportamento do circuito.

VR2, VCEsat, VCE. • Anote o comportamento do circuito. Circuito com opto acoplador com acionamento da

Circuito com opto acoplador com acionamento da carga com nível lógico “1”.

Cálculos do Projeto 12

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto 13 – Saídas isoladas

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto 13 – Saídas isoladas – Com acopladores ópticos

Aplique os conceitos da teoria e dimensione o circuito a partir dos dados a seguir:

Calcular o resistor de polarização;

A simulação do circuito lógico será através de uma porta lógica inversora do tipo TTL 74LS04;

**** lembre que a família TTL opera com tensão de 5V *******

Medir as tensões indicadas, VCEopto.

Anote o comportamento do circuito.

indicadas, VCEopto. • Anote o comportamento do circuito. Circuito com opto acoplador com acionamento direto da

Circuito com opto acoplador com acionamento direto da carga

Cálculos do Projeto 13

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto EXPERIÊNCIA 2 – Display LCD

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

EXPERIÊNCIA 2 – Display LCD 2 linhas x 16 colunas e Display LCD 4 linhas x 20 colunas

Objetivos:

Conhecer o procedimento de configuração e utilização do módulo LCD; Realizar a inicialização manual do LCD através de conjunto de chaves;

Tempo de Execução: 2 Aulas

Início:

/

/

- Término:

Desenvolvimento

Informações necessárias:

/

/

O display de cristal líquido alfanumérico possui um controlador interno que permite realizar

várias funções, como por exemplo, ajustar a linha que se pretende escrever, determinar em qual coluna será escrito o caractere, ou até mesmo a construção de caracteres especiais em sua memória interna (CGRAM). Para habilitar/configurar este módulo devem ser realizados diversos procedimentos de inicialização, que para melhor entendimento deve ser feito em um primeiro estudo de forma manual, onde as seqüências de comandos e de dados são fornecidas através de um conjunto de chaves e botões. Este display é um dos modelos mais utilizados, e de simples acesso, seja em termos financeiros quanto em termos técnicos. A faixa de tensão de operação para este modelo é de 4,75V à 5,25V. Para ajustar o contraste utiliza-se um potenciômetro de 5Ka 10Kpara variar a tensão do pino Vo do display. Normalmente opera com um barramento de dados de 8 bits paralelo (D0 à D7), mas pode operar, quando configurado, com apenas 4 bits de dados (D4 à D7) o que diminui a quantidade de conexões a serem utilizadas do microcontrolador. Quando em funcionamento podem ser escritas informações sejam comandos ou dados, mas também permite que algumas destas informações ou flag’s internos de funcionamento sejam lidos. Para controlar o modo de operação do registrador interno é utilizado o sinal R/W, ou seja, READY ou WRITE (leitura ou escrita). Se o sinal R/W estiver em nível lógico “0”o registrador do display estará apenas em modo de escrita, ou seja, somente são enviados dados para o display. Caso o R/W estiver em nível lógico “1”, o display estará habilitado a enviar para seus pinos de dados informações

dos seus registradores internos, ou seja, o display passa a “colocar para fora” informações através do barramento de dados. Em nossas experiências, somente serão realizadas escritas no display e sendo assim o pino referente ao sinal R/W será conectado diretamente o GND.

O sinal RS (REGISTER SELECT) define o modo de operação do display. Se o RS estiver em

nível lógico “0”, a informação colocada nos pinos de dados serão vistas pelo controlador do display

como COMANDOS. Colocando o pino RS em nível lógico “1”, as informações que forem dispostas nos pinos de entrada de dados serão interpretadas como DADOS (caracteres em ASCII). Já o sinal E (ENABLE) possui a função de habilitar os registradores internos do controlador do display a capturar a informação presente nos pinos de dados. A captura sempre ocorrerá quando um pulso de “0” para “1”, com duração de 15µs à 20µs pelo menos, e voltando novamente para “0” for realizado neste pino. Então, o procedimento de inicialização e para escrita de dados deve sempre seguir esta ordem:

1. Coloca-se a informação no barramento de dados;

2. Define se esta informação é COMANDO (RS = “0”) ou DADO (RS = “1”)

3. Aguarda alguns mili segundos (20 à 40ms pelo menos);

4. Aciona o sinal E com um pulso, como descrito anteriormente.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto A tabela 2.1 apresenta diversas

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

A tabela 2.1 apresenta diversas informações referentes aos comandos, instruções e tempos para configuração/utilização do display.

Tabela 2.1. Informações referentes aos comandos, instruções e tempos para configuração/utilização do display.

e tempos para configuração/utiliz ação do display. Ao ser utilizando um microcontrolador, o pr ocedimento

Ao ser utilizando um microcontrolador, o procedimento torna-se basicamente o mesmo, diferindo apenas que a seqüência binária a ser fornecida ao display assim como os sinais de controle serão agora providos pelo microcontrolador.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 2.1. Texto de exempl

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 2.1. Texto de exempl o no

Figura 2.1. Texto de exemplo no display de LCD 16x2.

Figura 2.1. Texto de exempl o no display de LCD 16x2. Figura 2.2. Endereço dos caracteres

Figura 2.2. Endereço dos caracteres e das linhas no display de LCD 16x2.

dos caracteres e das linhas no display de LCD 16x2. Figura 2.3. Endereço dos caracteres e

Figura 2.3. Endereço dos caracteres e das linhas no display de LCD 20x4.

A seguir são apresentadas as seqüências dos os comandos e dos sinais de controle, assim como os tempos de atuação de cada um para realização da inicialização.

1. Ao ligar a alimentação do circuito com o display, aguardar de 15 à 20 ms;

2. Enviar o comando 0x30 para o display duas a três vezes, com intervalo mínimo de 10ms;

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto 3. Definir o numero de

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

3. Definir o numero de vias de comunicação, numero de linhas e a matriz (8 vias, duas linhas e matriz 7x5) com o comando 0x38;

4. Limpar o display, e posicionar o cursor para a primeira posição, primeira linha e primeira coluna, com o comando 0x01;

5. Definir o modo de funcionamento, deslocamento do cursor para a direita com o comando

0x0C;

Com este procedimento o display deverá estar inicializado, e sendo assim, poderá receber os caracteres das mensagens. Após realizada a inicialização, o aluno deve escrever na primeira e na segunda linha do display o texto como apresentado na figura 2.1.

linha do display o texto como apresentado na figura 2.1. Figura 2.3. Circuito elétrico para o

Figura 2.3. Circuito elétrico para o exercício com Display de cristal líquido com controle por chaves.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Tabela 2.2. Tabela ASCII. Livro

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Tabela 2.2. Tabela ASCII. Livro Microcontroladores PIC – Programação em C – Fábio Pereira pág. 329

Gaiotto Tabela 2.2. Tabela ASCII. Livro Microcontr oladores PIC – Prog ramação em C – Fábio
Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto EXPERIÊNCIA 3 – Programação em

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

EXPERIÊNCIA 3 – Programação em C – Funções Lógicas

Objetivos:

Conhecer os softwares utilizados para efetuar as práticas; Aplicar os conhecimentos de fluxogramas;

REGRA de APRESENTAÇÃO/DEFESA:

Os alunos devem desenvolver os diagramas em bloco, esquemas elétricos (projetos de hardware), o fluxograma, a programação, a simulação do programa no ambiente MPLAB IDE e o funcionamento para que seja validada a defesa. Cópias de quaisquer itens implicarão em nota 0 para a experiência.

Tempo de Execução: 8 Aulas

Início:

/

/

- Término:

/

/

Desenvolvimento

Equipamentos e materiais necessários:

1 – protoboard;

1 – conjunto de chaves digitais;

1 – fonte de alimentação de 5V;

1 – microcontrolador PIC 16F877A;

4 – Led’s;

4 – Resistores de 330;

1 – Resistores de 10K;

1 – Cristal de 4MHz

Fios para montagens;

1 – gravador para microcontrolador PIC – (ICD2BR do laboratório).

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Resumo básico de funções do

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Resumo básico de funções do Compilador C da CCS para PIC

* - Ler um pino do microcontrolador

Sintaxe:

input(pino)

Exemplo:

boolean Sensor; // declaração prévia da variável que neste caso é de 1 bit

Sensor = input(pin_b0);

// leitura do pino rb0 do microcontrolador

obs: as mesmas dicas de se criar apelidos (#define) para os pinos são válidas aqui

Exemplo:

#define SensorA pin_b0 // definição prévia do pino rb0 como sendo SensorA

boolean FimCurso_A; // declaração prévia da variável que neste caso é de 1 bit

FimCurso_A = input(SensorA);

// leitura do pino rb0 do microcontrolador

* - Ler um PORT inteiro do microcontrolador

input_X()

Sintaxe:

alguns dos microcontroladores não possuem os PORTS D, E, por isso verifique no datasheet.

– X é a identificação do PORT

A, B, C, lembrando que

Exemplo:

int Chaves; // declaração prévia da variável que neste caso é de 8 bits

Chaves = input_D();

// leitura do PORTD inteiro do microcontrolador

* - Colocar um PINO do microcontrolador em nível Alto - “1” – HIGH

Sintaxe:

output_high(pino)

obs: as mesmas dicas de se criar apelidos (#define) para os pinos são válidas aqui

Exemplo:

output_high(pin_b7);

// coloca o pino especificado em alto “1”

Exemplo utilizando um “apelido” comando #define:

#define Buzzer pin_b7

output_high(Buzzer);

// coloca o pino especificado em alto “1”

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto * - Colocar um PINO

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

* - Colocar um PINO do microcontrolador em nível baixo - “0” – LOW

Sintaxe:

output_low(pino)

obs: as mesmas dicas de se criar apelidos (#define) para os pinos são válidas aqui

Exemplo:

output_low(pin_b7);

// coloca o pino especificado em alto “0”

Exemplo utilizando um “apelido” comando #define:

#define Buzzer pin_b7

output_low(Buzzer);

// coloca o pino especificado em baixo “0”

* - Escreve um PORT inteiro do microcontrolador

output_X()

Sintaxe:

alguns dos microcontroladores não possuem os PORTS D, E, por isso verifique no datasheet.

– X é a identificação do PORT

A, B, C, lembrando que

Exemplo:

int Atuadores; // declaração prévia da variável que neste caso é de 8 bits

output_D(Atuadores); // Escreve o conteúdo da variável no PORTD // do microcontrolador

Constantes – Binárias, Octais e Hexadecimais

99 – decimal 099 – octal 0x99 – hexadecimal 0b10011001 - binária

Operadores Aritméticos

+ Adição – Subtração * Multiplicação / Divisão % Resto da Divisão ++ Incremento -- Decremento

Operadores Lógicos Relacionais

= Atribuição

> Maior

< Menor

== Igual

!= Diferente

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Operadores Lógicos e Booleanos &&

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Operadores Lógicos e Booleanos

&& - AND – operação AND entre variáveis || - OR – operação OR entre variáveis ! – NOT – negação ou inversão

Operadores Lógicos Bit a Bit

& - AND

| - OR ^ - XOR ~ - NOT

Operadores de deslocamento

>> - Deslocamento a direita << - Deslocamento a esquerda

Operadores de Memória – Ponteiros

& - endereço do operando

* - Conteúdo do endereço apontado pelo operando

Tipos de dados, Tamanhos em bits e intervalo de valores do compilador CCS

Tamanhos em bits e intervalo de valores do compilador CCS 1) Utilizando os conceitos de eletrônica

1) Utilizando os conceitos de eletrônica digital desenvolver um programa em linguagem C para microcontrolador PIC que implemente as funções lógicas:

AND

OR

NOT

XOR

O microcontrolador que deverá ser utilizado é o PIC16F877A, e o hardware deve ser desenvolvido

pelo aluno seguindo as seguintes especificações:

Alimentação de 5V;

Cristal de 4MHz;

Botão de reset em configuração pull-up – pino MCLR/;

Chaves do conjunto de chaves ligadas ao PORT B do microcontrolador, seguindo a seguinte distribuição:

AND – RB0 e RB1

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto OR – RB2 e RB3

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

OR – RB2 e RB3 NOT – RB4 XOR – RB6 e RB7

Para apresentar as respostas devem utilizar Leds e resistores sendo apresentadas no PORT D, seguindo a seguinte distribuição:

AND – RD0 OR – RD2 NOT – RD4 XOR – RD6 Desenvolver o diagrama em Blocos, o fluxograma do programa e a simulação do programa no ambiente MPLAB IDE.

2) Utilizando os conceitos de eletrônica digital desenvolver um programa em linguagem C para microcontrolador PIC que implemente a expressão lógica resultante do circuito a seguir:

a express ão lógica resultante do circuito a seguir: O microcontrolador que deverá ser utilizado é

O microcontrolador que deverá ser utilizado é o PIC16F877A, e o hardware deve ser desenvolvido pelo aluno seguindo as seguintes especificações:

Alimentação de 5V;

Cristal de 4MHz;

Botão de reset em configuração pull-up;

Chaves do conjunto de chaves ligadas aos PORT’s do microcontrolador, seguindo a seguinte distribuição para os sinais lógicos:

A – RA0

B – RB0

C – RC0

Os probes de entrada deverão ser conectados aos pinos:

A – RB5

B – RB6

C – RB7

Lembre que sempre que uma entrada recebe nível lógico “1” ela dela deve acender o probe correspondente

A resposta Y deve ser apresentada ao pino indicado através de um probe:

Y – RD7

Desenvolver o diagrama em Blocos, o fluxograma do programa e a simulação do programa no ambiente MPLAB IDE.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Diagrama em Blocos do item

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Diagrama em Blocos do item 1:

Projeto de Hardware (diagrama elétrico) do item 1:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Fluxograma do item 1: 28

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Fluxograma do item 1:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Diagrama em Blocos do item

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Diagrama em Blocos do item 2:

Projeto de Hardware (diagrama elétrico) do item 2:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Fluxograma do item 2: 30

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Fluxograma do item 2:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto EXPERIÊNCIA 4 – Programação em

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

EXPERIÊNCIA 4 – Programação em C – Conceitos básicos

de operação, monitoração e controle.

Objetivos:

Conhecer os softwares utilizados para efetuar as práticas; Aplicar os conhecimentos de fluxogramas;

REGRA de APRESENTAÇÃO/DEFESA:

Os alunos devem desenvolver os diagramas em bloco, esquemas elétricos (projetos de hardware), o fluxograma, a programação, a simulação do programa no ambiente MPLAB IDE e o funcionamento para que seja validada a defesa. Cópias de quaisquer itens implicarão em nota 0 para a experiência.

Tempo de Execução: 16 Aulas

Início:

/

/

- Término:

/

/

Desenvolvimento

Equipamentos e materiais necessários:

1 – protoboard;

1 – Placa de montagens de ponte de terminais ou placas de circuito impresso

1 – conjunto de chaves digitais;

1 – fonte de alimentação;

1 – microcontrolador PIC 16F877A;

1 – microcontrolador PIC 12F675;

8 – Led’s;

8 – Resistores de 330;

3 – Resistores de 10K;

3 – relés de 12V/10A;

3 – Led’s emissores de Infravermelho;

3 – fototransistores;

3 – transistores BC548 ou BC337;

3 – Diodos 1N4007;

Resistores de valores variados;

Fios para montagens;

1 – gravador para microcontrolador PIC – (ICD2BR do laboratório).

Dicas de Projeto: Capacitores de filtragem de ruídos de comutação de circuitos integrados

Uma prática muito boa a ser utilizada em projetos de circuitos eletrônicos em geral, e

principalmente em sistemas digitais, é a adição de um capacitor cerâmico entre os pinos de

alimentação de cada circuito integrado que será utilizado no projeto. O valor utilizado não interfere

muito, mas costuma-se a utilizar valores desde 33pF a até 100nF (C1 = 100nF cerâmico e C2 =

100uF/25V eletrolítico).

A presença deste capacitor reduz a propagação de ruídos de comutação (chaveamento) dos

transistores internos do circuito integrado, para a linha de alimentação, e por sua vez melhora a

filtragem do Ripple da fonte de alimentação. Este capacitor deve ser colocado no momento da

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto montagem do protoboard ou do

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

montagem do protoboard ou do lay-out da placa de circuito impresso, o mais próximo possível do

circuito integrado e de suas linhas de alimentação.

Exercício 1 FioDigital.c – Manipulação de um PORT inteiro do microcontrolador (2

aulas)

Informações necessárias:

Neste exercício com o microcontrolador, serão realizadas apenas instruções (funções) de leitura e escrita, ou seja, as informações presentes em um dos PORT (PORTB) serão transferidas para outro (PORTD). Esta transferência se dará maneira paralela, sendo assim, todos os bits serão transferidos ao mesmo tempo de um PORT para outro, de maneira transparente, sou seja, bit0 (RB0) de um do PORTB para o bit0 do PORTD (RD0), e assim por diante. A Figura 1 apresenta um esquema elétrico para este exercício.

1 apresenta um esquema elétrico para este exercício. Figura 1. Circuito elétrico pa ra o projeto

Figura 1. Circuito elétrico para o projeto do FIO DIGITAL.

// ****** Código fonte para o exercício do FioDigital.C ********

#include <16f877A.h>

#use delay(clock = 4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOPROTECT, NOLVP

void main()

{

int dados;

dados = 0;

output_D(0);

while(true)

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto {   dados = input_B();

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

{

 

dados = input_B();

output_D(dados);

}

}

Exercício 2 OnOff.c Controle de operações com o PIC12F675 (2 aulas)

Informações necessárias:

Neste exercício será abordado o controle de operações, onde o programa fica travado aguardando que um botão seja acionado para que um evento ou acionamento seja realizado, ficando novamente travado esperando agora que outro botão seja acionado, disparando uma nova tarefa.

Lembre que o sinal gerado por S1 esta em “0” e quando pressionado vai a “1”, e o

sinal gerado por S2 esta em “1” e quando pressionado vai a “0”.

A Figura 2 apresenta um esquema elétrico para este exercício.

2 apresenta um esquema elétrico para este exercício. Figura 2. Circuito elétrico para o projeto do

Figura 2. Circuito elétrico para o projeto do ON OFF.

// ****** Código fonte para o exercício do OnOff.C ********

#include <12F675.h>

#use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOPROTECT

void main()

{

boolean S1;

boolean S2;

S1 = 0;

S2 = 0;

while(true)

{

output_low(pin_a0);

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto S1 = input(pin_a1); while(S1==0) {

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

S1 = input(pin_a1);

while(S1==0)

{

S1 = input(pin_a1);

}

output_high(pin_a0);

S2 = input(pin_a2);

while(S2==1)

{

S2 = input(pin_a2);

}

}// while

}//main

Código do OnOff_2.c alterado

// ****** Código fonte para o exercício do OnOff_2.C ******** #include <12F675.h> #use delay(clock=4000000) #fuses HS,NOWDT,PUT,NOBROWNOUT,NOPROTECT void main()

{

 

while(true)

{

output_low(pin_a0);

while(!input(pin_a1));

output_high(pin_a0);

while(input(pin_a2));

}// while

}//main

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Exercício 3A – Decodificador.c Decodificador

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Exercício 3A – Decodificador.c Decodificador de 4 para 16 (2 aulas)

Informações necessárias:

Neste exercício será abordada a decodificação de entradas para acionamento de saídas levando em consideração operações com mascara para leitura de um número de bits determinado. Após os testes com a estrutura de programação apresentada no código de exemplo, implementar o mesmo decodificador utilizando apenas estruturas de comando do tipo IF/ELSE.

A Figura 3.a apresenta o esquema elétrico deste exercício, que deverá ser completado para contemplar as 4 entradas e 16 saídas solicitadas.

// ****** Código fonte para o exercício do Decodificador.c ********

#include <16F877A.h> #use delay(clock=4000000) #fuses HS,NOWDT,PUT,NOBROWNOUT,NOPROTECT, NOLVP

void main()

{

int select;

PORT_B_PULLUPS(true);

output_D(0);

 

while(true)

{

 

select = input_B()

***MASCARA***** ;//

switch(select)

{

case 0:

 

//commandos de saida

 

break;

case 1:

 

//commandos de saida

 

break;

case 2:

 

//commandos de saida

 

break;

case 3:

 

//commandos de saida

 

break;

case 4:

 

//commandos de saida

 

break;

.

.

.

.

}

}// while

}// void main

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 3.a. Circuito elétrico para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 3.a. Circuito elétrico para o projeto

Figura 3.a. Circuito elétrico para o projeto do Decodificador 4 para 16. Completar o projeto!!!

Como é a sintaxe (escrita) de Constantes (valores) – Decimais, Binárias, Octais e Hexadecimais

99 – decimal 099 – octal 0x99 – hexadecimal 0b10011001 – binária

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Exercício 3B – BinHexa.c segmentos

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Exercício 3B – BinHexa.c

segmentos (2 aulas)

Informações necessárias:

Decodificador Binário Hexadecimal para Display de 7

Neste exercício deverá ser desenvolvido um decodificador de binário para display de 7 segmentos que represente os símbolos HEXADECIMAIS. A Figura 3.b apresenta um esquema elétrico para este exercício.

3.b apresenta um esquema elétrico para este exercício. Figura 3.b. Circuito elétrico para o projeto do

Figura 3.b. Circuito elétrico para o projeto do Decodificador Binário Hexadecimal para 7 segmentos.

do De codificador Binário Hexadecimal para 7 segmentos. Figura 3.c. Pinos do display de 7 segmentos

Figura 3.c. Pinos do display de 7 segmentos catodo comum.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Exercício 4 PiscaPisca.c Função para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Exercício 4 PiscaPisca.c Função para realizar um “gasto de tempo” e pisca-pisca com

PIC12F675 (2 aulas)

Informações necessárias:

Neste exercício serão abordadas a criação e utilização de funções que tornam o programa mais eficiente, modular e o código pode ser reaproveitado em diversas outras aplicações.

A primeira função – void MeuDelay( long tempo) – é responsável em prover um gasto de

tempo, e pode ser ajustada simplesmente pela passagem de um parâmetro (tempo), que possui uma faixa de 0 até 65536ms aproximadamente.

Já a segunda função neste primeiro teste – void PiscaPisca(int piscadas); – é responsável

pelo numero de piscadas do led de saída, e a quantidade pode ser ajustada através da passagem de um parâmetro (piscadas), uma faixa de 0 até 255 aproximadamente.

A Figura 3 apresenta o esquema elétrico deste exercício.

Lembre que S1 está em pull down e S2 pull up

A Figura 4 apresenta um esquema elétrico para este exercício.

4 apresenta um esquema elétrico para este exercício. Figura 4. Circuito elétrico para o projeto do

Figura 4. Circuito elétrico para o projeto do PISCA-PISCA.

// ****** Código fonte para o exercício do PiscaPisca1.C ********

#include <12F675.h>

#use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOPROTECT

//********************* Definições de apelidos para as saídas ***************

#define Led1 pin_a0

//********************* Definições de apelidos para as entradas ***************

#define PB0 pin_a2

#define PB1 pin_a1

//********************* Definições de protótipos de funções *******************

void MeuDelay(long tempo);

void PiscaPisca(int piscadas);

//****************************** Função Main***********************************

void main()

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto {   output_low(Led1); while(true) {

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

{

 

output_low(Led1);

while(true)

{

if(input(PB0) & input(PB1)) PiscaPisca(15);// piscar 15 vezes

if(input(PB0) & input(PB1)) PiscaPisca(10);// piscar 10 vezes

if(input(PB0) & input(PB1)) PiscaPisca(5);// piscar 5 vezes

}// while

}

//****************************** Função MeuDelay ******************************

void MeuDelay(long tempo)

{

 

while(tempo >0)

{

delay_ms(1);

tempo--;

}

}

//****************************** Função PiscaPisca ****************************

void PiscaPisca(int piscadas)

{

 

while(piscadas >0)

{

output_high(Led1);

MeuDelay(200);

output_low(Led1);

MeuDelay(200);

Piscadas--;

}

}

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto // ****** Código fonte para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

// ****** Código fonte para o exercício do PiscaPisca2.C ***************** #include <12F675.h> #use delay(clock=4000000) #fuses HS,NOWDT,PUT,NOBROWNOUT,NOPROTECT //********************* Definições de apelidos para as saídas *************** #define Led1 pin_a0 //********************* Definições de apelidos para as entradas ************ #define PB0 pin_a2 #define PB1 pin_a1 //********************* Definições de protótipos de funções ***************** void MeuDelay(long tempo);

void PiscaPisca(int piscadas, long Delay); //****************************** Função Main************************************** void main()

{

 

output_low(Led1);

while(true)

{

if(input(PB0) & input(PB1)) PiscaPisca(15,300);// piscar 15 vezes em intervalos de 300ms

if(input(PB0) & input(PB1)) PiscaPisca(10,600); // piscar 10 vezes em intervalos de 600ms

if(input(PB0) & input(PB1)) PiscaPisca(5,900); // piscar 5 vezes em intervalos de 900ms

}// while

}

//****************************** Função MeuDelay ****************************** void MeuDelay(long tempo)

{

 

while(tempo >0)

{

delay_ms(1);

tempo--;

}

}

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto //****************************** Função PiscaPisca

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

//****************************** Função PiscaPisca **************************** void PiscaPisca(int piscadas, long Delay)

{

 

while(piscadas >0)

{

output_high(Led1);

MeuDelay(Delay);

output_low(Led1);

MeuDelay(Delay);

Piscadas--;

}

}

Observações:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto Sequencial.c Seqüencial de várias

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto Sequencial.c Seqüencial de várias funções com o PIC 16F877A (2 aulas)

Informações necessárias:

Projetar um seqüenciador de LEDS que possa ser ajustado através de botões de seleção apresentando várias seqüências. Definições de hardware e funcionamento:

Ao ser ligado os LEDS de saída devem ser apagados;

Os botões de seleção para os modos devem ser conectadas ao PORT C (4 botões) e os LEDS de saída PORT D (8 bits – 8 leds);

Criar 8 funções:

1. Função 1: seqüencial de Deslocamento: Ao apertar o botão PB0, limpar as saídas e

acender seqüencialmente de maneira crescente os leds mantendo os anteriores

acesos, com um tempo de delay de 200ms entre os acionamentos, terminando com

todos acesos;

2. Função 2: seqüencial em Anel: Ao apertar o botão PB1, limpar as saídas e fazer um

led aceso se deslocar de uma saída para outra fazendo dois ciclos completos

mantendo o ultimo led aceso quando terminar o segundo ciclo;

3. Função 3: seqüencial Cruzador: Ao apertar o botão PB2, limpar as saídas e acionar

o led menos significativo e o mais significativo, contar um tempo, desligar e acionar o

próximo led, fazendo com que o led menos significativo caminhe em sentido

crescente e o led mais significativo em sentido decrescente, após realizar o

cruzamento manter os últimos leds acesos quando terminar;

4. Função 4: seqüencial Bola Quicando: Ao apertar o botão PB3, limpar as saídas e

acionar o led mais significativo contar um tempo e deslocar apagando o anterior com

intervalos de tempos em sentido ao led menos significativo. Ao chegar no led menos

significativo, seguir em sentido crescente até um led abaixo do mais significativo

apagando o anterior com intervalos de tempo. Quando chegar ao led especificado,

deve se deslocar novamente em sentido ao led menos significativo apagando o

anterior. E assim por diante, seguindo este raciocínio, como se o led fosse uma bola

de que é solta de uma certa altura e fica quicando até perder a energia armazenada e

para no chão, que neste caso será o bit menos significativo.

Lembre que os sinais PB0 e PB1 do conjunto de chaves estão em PULL UP;

Se apertar novamente o botão de mesmo modo, executar novamente este modo.

Observações:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Diagrama em Blocos do Seqüenciador:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Diagrama em Blocos do Seqüenciador:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto de Hardware (diagrama elétrico)

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto de Hardware (diagrama elétrico) Seqüenciador:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Fluxograma do Seqüenciador: 45

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Fluxograma do Seqüenciador:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Exercício 6 BoEv.c Modelagem da

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Exercício 6 BoEv.c Modelagem da Bomba e Eletroválvula com controle de erro, utilizando

o PIC12F675 (2 aulas)

com controle de erro, utilizando o PIC12F675 (2 aulas) A B C EV BO    

A

B

C

EV

BO

     

00010

 
     

00110

 
     

01011

 
     

01110

 

1

0

 

0XX

 
     

101X0

 
     

11001

 
     

11100

 

Figura 5. Esboço do sistema de Bombeamento.

Sensores :

com água = 1 Sem água = 0 Atuadores :

Ligado = 1 desligado = 0

C

C BOAB 00 01 11 10 0 0 11X 10 0 0 0 BO=BC/

BOAB

00 01 11 10 0 0 11X 10 0 0 0
00
01
11
10
0
0
11X
10
0
0
0

BO=BC/

C BOAB 00 01 11 10 0 0 11X 10 0 0 0 BO=BC/

C

C EVAB 00 01 11 10 0 1 1 0 X 1 1 1 0 X

EVAB

00 01 11 10 0 1 1 0 X 1 1 1 0 X
00
01
11
10
0 1
1
0
X
1 1
1
0
X

EV=A/

C EVAB 00 01 11 10 0 1 1 0 X 1 1 1 0 X
EVAB 00 01 11 10 0 1 1 0 X 1 1 1 0 X EV=A/

Figura 6. Esquema do sensor de barreira óptica.

Pede-se:

Para cada combinação dos Sensores deve-se ter exatamente o comportamento do controle de bombeamento apresentado na tabela verdade;

Confirmar a leitura dos sensores A, B e C para proteger os atuadores das operações de liga/desliga causado pela oscilação da água nos sensores (ler o sensor, contar um tempo e realizar novamente a mesma leitura, só então acionar);

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto – Implementar uma saída para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Implementar uma saída para Sinalização de Problemas que deverá ficar piscando nos casos irrelevantes. Na tabela verdade, não estão apresentados a coluna com a saída para este caso, nem tão pouco o mapa de Karnaugh;

Pede-se:

1.Diagrama em Blocos, fluxograma e esquema elétrico; 2.A montagem deve ser exemplar, ou seja, com qualidade e perfeição (fios curtos e bem distribuídos); 3.Implementar os sensores e as etapas de relés em placa de circuito impresso ou em ponte de terminais; 4.Acionar três relés, um para a Bomba, um para a Eletroválvula e outro para a Lâmpada de Sinalização de Problemas; 5.Cada Relé deve acionar uma carga (lâmpadas e motor) em rede alternada

127V/60Hz;

6.O acionamento dos relés deve ser de maneira protegida com diodo de sinal. 7.Realizar os teste finais para obter o visto no hardware montado.

Observações:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Diagrama em Blocos do sistema

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Diagrama em Blocos do sistema de Controle de Bombeamento:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto de Hardware (diagrama elét

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto de Hardware (diagrama elétrico) do sistema de Controle de Bombeamento:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Fluxograma do sistema de Controle

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Fluxograma do sistema de Controle de Bombeamento:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto EXPERIÊNCIA 5 – INTERRUPÇÃO EXTERNA

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

EXPERIÊNCIA 5 – INTERRUPÇÃO EXTERNA

Objetivos:

Conhecer o procedimento de configuração e utilização da interrupção externa em dois modelos de microcontroladores – PIC16F877A e PIC12F675

REGRA de APRESENTAÇÃO/DEFESA:

Os alunos devem desenvolver os diagramas em bloco, esquemas elétricos (projetos de hardware), o fluxograma, a programação, a simulação do programa no ambiente MPLAB IDE e o funcionamento para que seja validada a defesa. Cópias de quaisquer itens implicarão em nota 0 para a experiência.

Tempo de Execução: 2 aulas

Início:

/

/

- Término:

Desenvolvimento

Informações necessárias:

/

/

Interrupção é um procedimento que permite a mudança do fluxo normal de execução do programa principal que está rodando no microcontrolador, direcionado a execução para outra área de memória, onde um código de tratamento será então executado. Assim que este código de tratamento for terminado o microcontrolador retorna a execução ao código principal que estava rodando do ponto onde foi interrompido, seguindo sua execução normalmente. O microcontrolador PIC16F877A, possui uma interrupção externa e esta direcionada ao pino RB0, no caso do PIC12F675 esta interrupção está direcionada ao pino GP2. Para habilitar esta interrupção utilizando linguagem C do compilador da CCS tem-se algumas funções que devem ser utilizadas:

enable_interrupts(int_ext);

ext_int_edge(H_TO_L);

enable_interrupts(global);

// habilita as interrupção externa // RB0 para o PIC16F877 // A2 para o 12F675 // configura a borda de sensibilidade // da interrupção: neste caso de alto para // baixo // habilita as chave geral de interrupções

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura - Flags e chaves

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura - Flags e chaves de interrupção

Figura - Flags e chaves de interrupção – Livro Conectando o PIC 16F877A Recursos Avançados

Após realizar os testes com o microcontrolador PIC16F877A, alterar a programação para utilizar agora o PIC 12F675.

O exercício que será realizado deverá:

1. Ao acionar um botão PB1 deve ligar o led conectado ao RD1;

2. Ao acionar um botão PB2 deve desligar o led conectado ao RD1;

3. Ao acionar o botão PB0 entra na interrupção fazendo piscar um led conectado ao

RD0.

//**********************************************************************************************************

//

//**********************************************************************************************************

Programa exemplo para INTERRUPÇÃO EXTERNA

#include <16F877A.h>// configurar para o controlador a ser usado e o seu caminho #use delay(clock=4000000) // informa qual e a freq do cristal que esta sendo utilizado #fuses HS, NOWDT,PUT,NOBROWNOUT,NOLVP

//********************************************************************************************************** // Área de definições de pinos de Saída //********************************************************************************************************** #define LED0 pin_d0 #define LED1 pin_d1

//********************************************************************************************************** // Área de definições de pinos de Entrada //********************************************************************************************************** #define PB1 pin_b1 #define PB2 pin_b2

//********************************************************************************************************** // // Interrupção externa por borda de descida em rb0

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto //

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

//

//**********************************************************************************************************

#int_ext // indica interrupcao por borda de descida de rb0 void Trata_RB0(void)

{

output_high(LED0);

delay_ms(1000);

output_low(LED0);

delay_ms(1000);

output_high(LED0);

delay_ms(1000);

output_low(LED0);

delay_ms(1000);

//liga o led em RD0

//liga o led em RD0

//liga o led em RD0

//liga o led em RD0

}// fim do tratamento da interrupção

//********************************************************************************************************** // // Programa principal //

//********************************************************************************************************** void main()

{

port_b_pullups(true); // hativa os resistores internos de pullup // no port B

enable_interrupts(int_ext); // habilita as interrupção externa // RB0

ext_int_edge(H_TO_L);

// configura a borda de sensibilidade // da interrupção: neste caso de alto // para baixo

enable_interrupts(global); // habilita as chave geral de interrupções

while (true)

{

if(input(PB1))

output_high(LED1);

if(input(PB2))

}// while }// void main

output_low(LED1);

A Figura 7 apresenta um esquema elétrico para este exercício.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 7.a. Circuito elétrico do

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 7.a. Circuito elétrico do exercíci o

Figura 7.a. Circuito elétrico do exercício de interrupção Externa com o PIC16F877A.

do exercíci o de interrupção Externa com o PIC16F877A. Figura 7.b. Circuito elétrico do exercíci o

Figura 7.b. Circuito elétrico do exercício de interrupção Externa com o PIC12F675.

Observações:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto EXPERIÊNCIA 6 – Comunicação Serial

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

EXPERIÊNCIA 6 – Comunicação Serial Assíncrona

Objetivos:

Conhecer o procedimento de configuração e utilização do módulo de comunicação Assíncrona; Estudar o Padrão Elétrico RS232; Aplicar o conhecimento de interrupção externa.

REGRA de APRESENTAÇÃO/DEFESA:

Os alunos devem desenvolver os diagramas em bloco, esquemas elétricos (projetos de hardware), o fluxograma, a programação, a simulação do programa no ambiente MPLAB IDE e o funcionamento para que seja validada a defesa. Cópias de quaisquer itens implicarão em nota 0 para a experiência.

Tempo de Execução: 2 aulas

Início:

/

/

- Término:

Desenvolvimento

Informações necessárias:

/

/

A troca de informações entre dispositivos, equipamentos e sistemas permite que um volume

de dados seja transferido para tratamento, armazenagem ou ainda monitoramento remoto. Alguns

exemplos de aplicações são a USB, Ethernet, PS2 (comunicação de teclados e mouses de um microcomputador), entre outros.

A comunicação entre dispositivos pode ser realizada de duas formas, Serial e Paralela. Na

comunicação Serial, cada bit é transmitido separadamente um após o outro, podendo ter ainda dois tipos de transmissão: síncrona e assíncrona

Síncrona: Possui uma via de dados que pode ser bidirecional ou não e outra de sincronismo, clock (tipos: SPI e I2C);

Assíncrona (sem sincronismo): possui basicamente duas vias para dados, uma transmite e outra recebe, e o sinal de sincronismo vem embutido nos sinais de dados (RS232, RS422 e RS485).

O microcontrolador PIC16F877A, possui dois módulos internos para comunicação serial, um

para comunicação síncrona e outro para comunicação assíncrona. Nesta atividade será abordado o

módulo de comunicação assíncrono. Para ativar o módulo de comunicação, deve-se utilizar algumas diretivas e funções do compilador.

A comunicação serial pode ser implementada de duas formas:

Por software: onde um código desenvolvido permite a serialização e controle dos tempos de envio e recebimento dos bits;

Por hardware: quando uma estrutura de hardware interna do microcontrolador é responsável pela serialização de 8 bits paralelos para transmissão e recebimento de dados serializados agrupando-os em grupos de 8 bits e disponibilizando-os de maneira paralela. Esta diretiva permite que sejam utilizadas as funções de comunicação seja para uma interface serial criada no software ou por hardware. Para habilitar o módulo de USART – UNIVERSAL SYNCHRONOUS ASSYNCHRONOUS RECEIVER TRANSMITTER:

#use rs232(opções) As opções a serem utilizadas são os apresentados na tabela 2:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Tabela 2. Opções da diretiva

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Tabela 2. Opções da diretiva #use rs232(opções).

Gaiotto Tabela 2. Opções da diretiva #use rs232(opções). Obs1: tabela do livro Microcontroladores PIC –

Obs1: tabela do livro Microcontroladores PIC – Programação em C – Fábio Pereira pág. 173. Editora Érica

Os pinos que implementam a interface serial por hardware são:

Bit 7 do port C: RC7 – RX, pino de entrada de dados da serial;

Bit 6 do port C: RC6 – TX, pino de saída de dados da serial;

O exemplo a seguir apresenta uma configuração para comunicação serial:

// configuração para serial RS232 #use rs232(baud=19200, xmit=pin_c6, rcv=pin_c7, bits=8)

Nesta configuração de exemplo, tem-se a seguinte parametrização:

BAUD – Velocidade de comunicação: 19200 bps, bits por segundo;

XMIT – Pino de transmissão utilizado;

RCV – Pino de recepção utilizado;

Para configurar um software de comunicação serial, por exemplo o Hyper Terminal, do Windows apresentado na figura 4, deve-se utilizar as informações como sendo:

Bits por segundo – 19200;

Bits de dados: 8;

Paridade: Nenhum

Bits de parada: 1;

Controle de fluxo: Nenhum

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 4. Tela de configuração

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 4. Tela de configuração das por

Figura 4. Tela de configuração das portas de comunicação do Hyper Terminal.

Existem várias funções que podem ser utilizadas em um projeto com comunicação serial, portanto serão abordadas algumas delas. Para transmitir apenas um byte ou um caractere: putc(dado);

Exemplo: considere uma variável declarada anteriormente do tipo: char valor; e inicializada com: valor = ‘A’;

// será transmitido um byte, ou seja, o conteúdo da variável valor, que é o caractere A putc(valor);

Para transmitir uma seqüência de bytes (string) podemos utilizar: printf(opções); Esta função possui uma variedade de opções de parametrização. Para a simples transmissão de uma frase (string), fica:

// transmite a frase pela interface serial definida anteriormente printf(“Estou vivo e falante!!”);

Para utilizar um dado recebido pela interface serial, pode-se utilizar a seguinte função: getc();

Exemplo: considere uma variável declarada anteriormente do tipo: char valor; (8 bits)

// quando for recebido um byte, ele será transferido para a variável valor valor = getc();

Verifique as páginas 230 à 239 do livro Microcontroladores PIC – Programação em C – Fábio

Pereira da Editora Érica, existem diversas outras funções e parametrizações para cada uma delas.

O exemplo que será utilizado para se trabalhar com a interface serial será uma evolução do

projeto anterior de interrupção. Quando ocorrer a interrupção realizará o esmo procedimento anterior

porém com algumas alterações:

1. Será enviada uma mensagem para o computador avisando do evento de interrupção;

2. O acionamento do LED1 que era realizado pelo botão, será realizados agora pelo

computador, através das teclas 1, para ligar o led 1 e 0 para desligar o led1;

O cabo de conexão entre a aplicação e o computador deve ser montado pino a pino, ou seja,

pino 2 com pino 2, pino 3 com pino 3, pino 5 com pino 5. O circuito a ser utilizado para esta experiência é apresentado na figura 5.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 5. Circuito elétrico para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 5. Circuito elétrico para o exercíci

Figura 5. Circuito elétrico para o exercício de comunicação serial utilizando o CI MAX232.

//********************************************************************************************************** // Programa exemplo para Comunicação Serial e INTERRUPÇÃO EXTERNA Serial.c //**********************************************************************************************************

#include <16F877A.h>// configurar para o controlador a ser usado e o seu caminho

#use delay(clock=4000000) // informa qual e a freq do cristal que esta sendo utilizado

#use rs232(baud=19200, xmit=PIN_C6,rcv=PIN_C7)// diretivas de config da serial

#fuses HS, NOWDT,PUT,NOBROWNOUT,NOLVP

//********************************************************************************************************** // Área de definições de pinos de Saída //********************************************************************************************************** #define LED0 pin_d0 #define LED1 pin_d1

//********************************************************************************************************** // Área de definições de pinos de Entrada //********************************************************************************************************** #define PB1 pin_b1 #define PB2 pin_b2

//********************************************************************************************************** // // Interrupção externa por borda de descida em rb0 // //**********************************************************************************************************

#int_ext // indica interrupcao por borda de descida de rb0

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto void Trata_RB0(void) { printf(“\n\r Evento

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

void Trata_RB0(void)

{

printf(“\n\r Evento de Interrupcao ocorreu!!!\n\r”);

output_high(LED0);

printf(“\n\r Led 0 Acionado!!!\n\r”);

delay_ms(1000);

//liga o led em RD0

output_low(LED0);

printf(“\n\r Led 0 Desacionado!!!\n\r”);

delay_ms(1000);

//liga o led em RD0

output_high(LED0);

printf(“\n\r Led 0 Acionado!!!\n\r”);

delay_ms(1000);

//liga o led em RD0

output_low(LED0);

printf(“\n\r Led 0 Desacionado!!!\n\r”);

delay_ms(1000);

//liga o led em RD0

printf(“\n\r Saindo do tratamento da Interrupcao!!!\n\r”);

delay_ms(200);

}// fim do tratamento da interrupção

//********************************************************************************************************** // // Programa principal //

//********************************************************************************************************** void main()

{

char Tecla;

port_b_pullups(true); // hativa os resistores internos de pullup // no port B

enable_interrupts(int_ext); // habilita as interrupção externa // RB0

ext_int_edge(H_TO_L);

// configura a borda de sensibilidade // da interrupção: neste caso de alto // para baixo

enable_interrupts(global); // habilita as chave geral de interrupções

printf(“\n\r Tecnico em Mecatronica 2 período!!!\n\r”);

delay_ms(1000);

printf(“\n\r Microcontrolador conectado e rodando!!!\n\r”);

delay_ms(1000);

while (true)

{

if(kbhit()// testa se chegou um carcater válido no buffer da serial

{

Tecla = getc();

if(Tecla == ”1”)

{

output_high(LED1);

printf(“\n\r Saída %c Acionada!!!\n\r”, Tecla);

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto delay_ms(200); } if(Tecla == ”0”)

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

delay_ms(200);

}

if(Tecla == ”0”)

{

output_low(LED1);

printf(“\n\r Saída %c Desacionada!!!\n\r”, Tecla);

delay_ms(200);

}

}

}// while }// void main

Observações:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto EXPERIÊNCIA 7 – Encoder Rotativo

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

EXPERIÊNCIA 7 – Encoder Rotativo

Objetivos:

Conhecer o procedimento de configuração e utilização do módulo LCD; Utilizar de biblioteca de funções para controlar o LCD a 4 bits com o microcontrolador; Utilizar a interrupção externa para realizar a leitura de um Encoder Rotativo Digital; Conhecer e utilizar Encoder Rotativo Digital.

Tempo de Execução: 2 aulas

Início:

/

/

- Término:

Desenvolvimento

Informações necessárias:

/

/

O encoder é um dispositivo que permite realizar a transformação de movimentos mecânicos

em equivalentes posicionais, ou seja, por exemplo, a rotação em uma seqüência de pulsos, ou ainda

em posição absoluta, podendo ser também em níveis de tensão proporcionais, podendo ser encontrado e criado para as mais variadas aplicações. Seu emprego mais conhecido é nos mouses de computadores.

O encoder que será utilizado nesta experiência será o rotativo incremental, ou como também

é conhecido encoder de quadratura. O princípio básico de funcionamento deste dispositivo consiste

em um disco impresso como o do exemplo da figura x. As marcas em preto estão defasadas em 90°,

o que permite que sejam geradas as saídas apresentadas na figura xa no caso de ser girado em sentido horário, e a figura xb para a rotação em sentido anti-horário.

e a figura xb para a rotação em sentido anti-horário. Figura 5. Formas de onda das

Figura 5. Formas de onda das saídas do encoder: (a) Sentido horário (b) sentido anti-horário.

do encoder: (a) Sentido horário (b) sentido anti-horário. (a) (b) Figura 6. Formas de onda das

(a)

(a) Sentido horário (b) sentido anti-horário. (a) (b) Figura 6. Formas de onda das saídas do

(b)

Figura 6. Formas de onda das saídas do encoder: (a) Sentido horário (b) sentido anti-horário.

Para testar o encoder e a programação, deve-se montar o hardware proposto na figura x. O projeto apresenta uma conexão simples com isolação óptica do encoder ao microcontrolador, juntamente com o adaptador para comunicação com o computador.

A contagem dos pulsos será apresentada no computador, e a indicação do sentido será

através do sinal + para o sentido horário de contagem e – para o sentido anti-horário.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 6. Circuito elétrico para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Figura 6. Circuito elétrico para o exer

Figura 6. Circuito elétrico para o exercício com encoder e comunicação serial.

//****************************************************************************** // Programa exemplo para leitura de encoder de quadratura // e Comunicação Serial Encoder.c //******************************************************************************

#include <16F877A.h>// microcontrolador usado

#use delay(clock=4000000) // freq do cristal que esta sendo utilizado

#use rs232(baud=19200, xmit=PIN_C6,rcv=PIN_C7)// diretivas de config da serial

#fuses HS, NOWDT,PUT,NOBROWNOUT,NOLVP

//****************************************************************************** // Área de definições de pinos de entradas //******************************************************************************

#define EncB pin_b1

//****************************************************************************** // Definição da variável global POSICAO //******************************************************************************

signed long Posicao;

//****************************************************************************** // // Interrupção externa por borda de descida em rb0 // //******************************************************************************

#int_ext // Tratamento da interrupcao externa void Trata_RB0(void)

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto { if(input(EncB)) { Posicao++; }

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

{

if(input(EncB))

{

Posicao++;

}

else

{

Posicao--;

}

}// fim do tratamento da interrupção

//******************************************************************************

//

// Programa principal // //****************************************************************************** void main()

{

port_b_pullups(true);

// hativa os resistores internos de pullup

// no port B

enable_interrupts(int_ext); // habilita as interrupção externa // RB0

ext_int_edge(H_TO_L);

// configura a borda de sensibilidade

// da interrupção: neste caso de alto

// para baixo

clear_interrupts(int_ext); // limpa o flag de interrupção externa

printf("\n\r Tecnico em Mecatronica 2 período!!!\n\r");

delay_ms(1000);

printf("\n\r Microcontrolador conectado e rodando!!!\n\r");

delay_ms(1000);

printf("\n\r Experiencia de Leitura de Encoder de Quadratura!!!\n\r");

delay_ms(1000);

enable_interrupts(global); // habilita as chave geral de interrupções

while (true)

{

printf("Posicao: %lu }// while }// void main

\r", Posicao);

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto EXPERIÊNCIA 8 – Conversor AD

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

EXPERIÊNCIA 8 – Conversor AD – 8 Bits

Objetivos:

Conhecer o procedimento de configuração e utilização do conversor AD em configuração de 8 bits Conhecer amplificador operacional em configuração não inversora Aplicar o conhecimento do conversor AD em um termômetro digital configurável

Tempo de Execução: 4 aulas Desenvolvimento

Informações necessárias:

Informações Analógicas são de grande importância em sistemas de automação, pois o mundo é analógico, as grandezas físicas são analógicas e sendo assim, para poder realizar o controle de determinados processos industriais é necessário que valores analógicos sejam lidos pelos sistemas de controle. Um exemplo bastante simples seria o de um termostato eletrônico que controla a temperatura de um ambiente ou de um líquido. Para controlar a temperatura de aquecimento o sistema deve ter um sensor que realizara a conversão da grandeza física temperatura em outra grandeza, a elétrica, que por sua vez será convertida em uma seqüência binária. Existem diversos modelos de circuitos conversores AD, o microcontrolador PIC16F877A, possui um conversor AD interno de aproximações sucessivas de 8 ou 10 bits configurável, e 8 canais de entrada analógicos multiplexados. Como o PIC16F877A possui apenas um conversor AD, isto significa que apenas um canal analógico pode ser convertido (lido) por vez, então a multiplexação dos canais de entrada permite que esta tarefa de seleção seja realizada. Por uma definição do fabricante MICROCHIP, o microcontrolador PIC não pode configurar a gosto do usuário uma seqüência personalizada de canais que serão definidos como entradas analógicas, deve-se utilizar uma das definições que o fabricante expõe no datasheet do componente. A tabela 1 apresenta as combinações possíveis de utilização das entradas:

Para habilitar/configurar este módulo utilizando linguagem C do compilador da CCS tem-se algumas informações que devem ser observadas e algumas funções que devem ser utilizadas:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Tabela 1:Combinação das entradas para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Tabela 1:Combinação das entradas para utilização do módulo AD.

1:Combinação das entradas para utilização do módulo AD. Obs1: tabela do livro Microcontroladores PIC –

Obs1: tabela do livro Microcontroladores PIC – Programação em C – Fábio Pereira pág. 209. Editora Érica

Obs2: A – analógico

D – Digital

A função de configuração para os canais é: setup_adc_ports(opções);

Exemplo: setup_adc_ports (RA0_ANALOG);// somente o canal 0 é analógico

Outro ponto importante na configuração do módulo analógico é a freqüência do clock que será entregue para o conversor AD. As opções disponíveis para esta configuração são:

ADC_OFF

ADC_CLOCK_DIV_2

ADC_CLOCK_DIV_4

ADC_CLOCK_DIV_8

ADC_CLOCK_DIV_16

ADC_CLOCK_DIV_32

ADC_CLOCK_DIV_64

ADC_CLOCK_DIV_INTERNAL

A função de configuração para a freqüência é: setup_adc(opções);

Exemplo: setup_adc(ADC_CLOCK_DIV_INTERNAL);

A seleção do canal que será lido é realizada através da função: set_adc_channel(canal);

Exemplo: set_adc_channel(0); // selecionado o canal 0 para leitura

observação importante: quando houver a seleção de um canal para entrada

analógica, deve-se aguardar em torno de 15 a 20us antes de se realizar a leitura efetiva do canal. Isso é necessário para que o capacitor interno seja carregado com a tensão que será amostrada (lida).

Exemplo:

set_adc_channel(0); // selecionado o canal 0 para leitura delay_us(20); // tempo para carregamento do capacitor interno de amostragem

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto A conversão efetiva do valor

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

A conversão efetiva do valor de tensão analógica presente na entrada selecionada será

realizada através da função: read_adc( );

Esta função retornará o valor convertido que pode ser apresentado em dois tamanhos(tipos):

1. 8 bits – valores de 0 a 255

2. 10 bits – valores de 0 a 1023

Sendo assim, a variável que receberá o valor convertido deve ser compatível com o tamanho de bits que será devolvido pela função de leitura:

Exemplo: para uma variável de 8 bits – int valor;

valor = read_adc( ); // variável recebe o valor convertido em 8 bits

Exemplo: para uma variável de 10 bits – long valor;

valor = read_adc( ); // variável recebe o valor convertido em 10 bits

O exercício que será realizado deverá:

1. Ao acionar o botão PB0 deve entrar na interrupção e realizar a leitura do canal 0 analógico que estará recebendo o valor de tensão do potenciômetro – medir com o multímetro e realizar o calculo para confirmar o valor de conversão que será apresentado no port D;

//**********************************************************************************************************

//

//**********************************************************************************************************

Programa exemplo para CONVERSOR AD

#include <16F877A.h>// configurar para o controlador a ser usado e o seu caminho #device ADC=8 // numero de bits do conversor AD - 8 bits ou 10 bits #use delay(clock=4000000) // informa qual e a freq do cristal que esta sendo utilizado #fuses HS, NOWDT,PUT,NOBROWNOUT,NOLVP

//********************************************************************************************************** // Interrupção externa por borda de descida em rb0 //**********************************************************************************************************

#int_ext // indica interrupcao por borda de descida de rb0 void Trata_RB0(void)

{

 

int valor;

set_adc_channel(0);

// indica qual canal ad sera lido

delay_us(20); // aguarda o circuito interno do pic se preparar para // realizar a conversao valor = read_adc(); // realiza a conversao do sinal analogico // presente no canal selecionado output_D(valor); // apresenta o valor convertido no port D

delay_ms(10);

}

//********************************************************************************************************** // Programa principal //**********************************************************************************************************

void main()

{

setup_adc_ports(RA0_ANALOG); // PORT A0 Analogica

setup_adc(ADC_CLOCK_INTERNAL);

// seleciona o clock interno para o // conversor AD

port_b_pullups(true); // ativa os resistores internos de pullup // no port B

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto enable_interrupts(int_ext); // habilita as

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

enable_interrupts(int_ext); // habilita as interrupção externa // RB0

ext_int_edge(H_TO_L);

enable_interrupts(global);

while (true)

{

}//while

}//void main

// configura a borda de sensibilidade // da interrupção: neste caso de alto para // baixo

// habilita as chave geral de // interrupções

A Figura 8 apresenta um esquema elétrico para este exercício.

8 apresenta um esquema elétrico para este exercício. Figura 8. Circuito elétrico para o exercício com

Figura 8. Circuito elétrico para o exercício com o AD.

O projeto a seguir será o de um termostato que deverá apresentar três indicadores de

temperatura: ALTA, BAIXA e NORMAL, utilizando um sensor de temperatura LM35, que devolve um tensão de 10mV/°. Informações:

1. A faixa de temperatura deverá ser de 0 a 50°C;

2. Os Ajustes de mínimo e máximo deverão ter ação quando o botão PB0 for pressionado, ou seja, os ajustes serão realizados dentro do tratamento da interrupção externa;

3. Quando entrar na interrupção externa, deve apagar os 3 leds de limites;

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto 4. Dentro da interrupção, para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

4. Dentro da interrupção, para ajustar o valor mínimo deve-se proceder da seguinte maneira: pressionar PB2 uma vez e aguardar o LED de indicação de Temperatura Baixa acender, ajustar o valor mínimo através do potenciômetro de mínimo, podendo visualizar o ajuste nos leds do port D. Com a temperatura ajustada, acionar o botão PB2 novamente e aguardar o Led de indicação de Temperatura Baixa Apagar; Em seguida deve-se ajustar o valor de Temperatura Máximo, realizando o mesmo procedimento porém utilizando agora o botão PB1 e o potenciômetro de ajuste de Máximo. Pressionando uma vez o botão PB1 o LED de Temperatura Máxima acender depois de um pequeno tempo, e só então é possível realizar o ajuste do valor para o Máximo, que também pode ser visualizado nos Leds do portD. Com a temperatura ajustada, acionar o botão PB1 novamente e aguardar o Led de indicação de Temperatura Alta Apagar;

5. Quando sair da interrupção externa, os leds de Temperatura Baixa e de Temperatura devem se apagar, piscando duas vezes o led Indicador de temperatura Normal;

6. Se a temperatura medida for maior que a temperatura ajustada para o valor máximo, deve acender unicamente o indicador de Temperatura Alta e ficar assim enquanto a temperatura for acima do ajustado.

7. Se a temperatura medida for menor que a temperatura ajustada para o valor mínimo, deve acender unicamente o indicador de Temperatura Baixa e ficar assim enquanto a temperatura for abaixo do ajustado.

8. Se a temperatura medida estiver entre o valor máximo e o valor mínimo, deve acender unicamente o indicador de Temperatura Normal e ficar assim enquanto a temperatura estiver entre os valores mínimo e máximo.

9. A temperatura medida pelo sensor LM35 será apresentada nos leds do port D durante a operação normal do sistema.

10. Calcular os resistores do amplificador operacional.

10. Calcular os resistores do amplificador operacional. Figura 9. Circuito elétrico para o exercí cio do

Figura 9. Circuito elétrico para o exercício do termostato com o LM35 e o PIC16F877A.

68

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

//*******************************************************************************************************************

//

Programa exemplo para o Termômetro com termostato

//

usando o CONVERSOR AD em 8 bits

//*******************************************************************************************************************

#include <16F877A.h>// configurar para o controlador a ser usado e o seu caminho #device ADC=8 // numero de bits do conversor AD - max de 10 bits e min de 8 bits #use delay(clock=4000000) // informa qual e a freqüência do cristal que esta sendo utilizado #fuses HS, NOWDT,PUT,NOBROWNOUT,NOLVP

//******************************************************************************************************************* // Área de definições de pinos de Saída //*******************************************************************************************************************

#define LED_Alta pin_B7 #define LED_Normal pin_B6 #define LED_Baixa pin_B5

//******************************************************************************************************************* // Área de definições de parâmetros // canais de entrada usados: 0, 1 e 3 //*******************************************************************************************************************

#define Sensor_Temperatura 0 #define Ajuste_Alta 1 #define Ajuste_Baixa 3

//******************************************************************************************************************* // Área de definições de pinos de Entrada Digitais //*******************************************************************************************************************

#define Bt_Ajuste_Alta pin_b1 #define Bt_Ajuste_Baixa pin_b2

//******************************************************************************************************************* // Área de variáveis globais //*******************************************************************************************************************

int Temperatura; int LimiteTempAlta; int LimiteTempBaixa;

//*******************************************************************************************************************

//

Área com a função de tratamento da interrupção externa

//

Interrupção externa por borda de descida em rb0

//*******************************************************************************************************************

#int_ext

// esta diretiva indica ao compilador que a próxima função // será chamada quando houver uma interrupção externa em RB0

void Trata_RB0(void)

{

output_low(LED_Alta); output_low(LED_Normal); output_low(LED_Baixa);

output_D(0);

while(input(Bt_Ajuste_Baixa));

delay_ms(1000);

output_high(LED_Baixa);

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto set_adc_channel(Ajuste_Baixa); // Seleciona o

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

set_adc_channel(Ajuste_Baixa); // Seleciona o potenciômetro de ajuste Míninmo delay_us(20);// aguarda o circuito interno do PIC se preparar para realizar a conversão while(input(Bt_Ajuste_Baixa))

{

 

LimiteTempBaixa = read_adc();

// realiza a leitura

output_D(LimiteTempBaixa );// apresenta o valor Lido no port D

delay_ms(10);

}

output_low(LED_Baixa);

delay_ms(500);

output_D(0);

while(input(Bt_Ajuste_Alta));

delay_ms(1000);

output_high(LED_Alta);

set_adc_channel(Ajuste_Alta); // Seleciona o Potenciômetro de ajuste de Máximo delay_us(20);// aguarda o circuito interno do PIC se preparar para realizar a conversão while(input(Bt_Ajuste_Alta))

{

 

LimiteTempAlta = read_adc();//Le o valor do Potenciômetro de Máximo output_D(LimiteTempAlta );// apresenta o valor Lido no port D

delay_ms(10);

}

output_low(LED_Alta);

output_D(0);

delay_ms(500);

output_high(LED_Normal);

delay_ms(500);

output_low(LED_Normal);

delay_ms(500);

output_high(LED_Normal);

delay_ms(500);

output_low(LED_Normal);

delay_ms(500);

}

//******************************************************************************************************************* // Programa principal //*******************************************************************************************************************

void main()

{

Temperatura = 0; LimiteTempAlta = 0; LimiteTempBaixa = 0;

setup_adc_ports(RA0_RA1_RA3_ANALOG); // PORT A0, A1e A3 Analógicas

setup_adc(ADC_CLOCK_INTERNAL); // seleciona o clock interno para o conversor AD

port_b_pullups(true); // ativa os resistores internos de pullup // no port B

enable_interrupts(int_ext);

ext_int_edge(H_TO_L);

// habilita as interrupção externa // RB0

// configura a borda de sensibilidade // da interrupção: neste caso de alto para

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto enable_interrupts(global); while (true) { //

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

enable_interrupts(global);

while (true)

{

// baixo

// habilita as chave geral de // interrupções

// seleciona a entrada analógica para o circuito do sensor de temperatura set_adc_channel(Sensor_Temperatura);

// aguarda o circuito interno do PIC se preparar para realizar a conversão

delay_us(20);

Temperatura = read_adc();

delay_ms(20);

output_D(Temperatura);

delay_ms(20);

// realiza a leitura

if(Temperatura<LimiteTempBaixa)

{

 

output_high(LED_Baixa); output_low(LED_Alta); output_low(LED_Normal);

delay_ms(20);

}

else

if((Temperatura>=LimiteTempBaixa)&(Temperatura<=LimiteTempAlta))

{

 

output_high(LED_Normal); output_low(LED_Alta); output_low(LED_Baixa);

delay_ms(20);

}

else

if(Temperatura>LimiteTempAlta)

{

 

output_high(LED_Alta); output_low(LED_Baixa); output_low(LED_Normal);

delay_ms(20);

}

}//while(true)

}

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Projeto SOLUCATA S ustentabilidade O

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Projeto SOLUCATA

Sustentabilidade Oriunda do Lixo Utilizando Criatividade, Arte e Tecnologia Avançada

Objetivos:

Aperfeiçoar a interpretação e o desenvolvimento de projetos; Desenvolver técnicas para solução de problemas de maneira simples e criativa;

Implementação de dispositivos de hardware para leitura de sensores e acionamento de

cargas: Motores, Cilindros, Válvulas, etc

Data final para apresentação da Proposta: 22/03/2010

Data final para Apresentação/Defesa:

Desenvolvimento

Informações necessárias:

/ /

A ONG PENSE VERDE - REAPROVEITAR É VIVER, solicitou a sua equipe o projeto de uma solução com microcontroladores e sucata visando demonstrar que é possível desenvolver soluções empregando o re-uso de recursos, materiais e equipamentos, o que caracteriza uma iniciativa de sustentabilidade, tendo em vista que o lixo tecnológico vem crescendo assustadoramente. Durante a conversa com o cliente foram determinadas as informações para o projeto:

1. As Equipes deverão encontrar um problema e, por conseguinte sua solução, realizando-a por intermédio de um dispositivo projetado (eletrônica, elétrica, mecânica, etc );

2. Os materiais para montagem das maquetes deverá ser através de sucatas;

3. A aquisição será de responsabilidade de cada equipe, que poderá ser composta por até 4 alunos;

4. Requisitos mínimos para cada projeto:

4 – entradas em tensões diferentes de 5V;

2 – saídas para acionamento de cargas em diferentes tensões;

A saída pode ser o acionamento de um motor DC, em uma configuração de ponte H;

Comunicação

microcomputador remoto;

serial

Informar

os

eventos

ou

permitir

o

controle

em

um

5. As equipes deverão apresentar suas propostas por escrito até a data: 22/03/2010;

6. A proposta deverá conter uma breve descrição do problema e a solução proposta por sua equipe, juntamente com o diagrama em bloco do sistema de controle;

7. Este projeto pode ser montado utilizando placa de circuito impresso, neste caso poderão receber 20% como bônus.

Fazer relatório, um por equipe, em arquivo .pdf postado até a data limite estabelecida, com as seguintes características:

1 – capa

2 – Breve descrição do Problema.

3 – Breve descrição da Solução.

4 – Diagrama em blocos.

5 – Esquemático – no EAGLE.

6 – fluxograma.

7 – Desenhos mecânicos

8 - Conclusão

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto 9 – código fonte comentado

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

9 – código fonte comentado linha a linha. 10 – Projeto completo gerado no MPLAB com as simulações, postado no Eureka até data limite estabelecida.

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto AQUI SERÃO INSERIDOS OS NOVOS

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

AQUI SERÃO INSERIDOS OS NOVOS CAPÍTULOS DESTE SEMESTRE 1° SEMESTRE DE 2010

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto MATERIAIS DE APOIO 75

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

MATERIAIS DE APOIO

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Linguagem C para microcontroladores PIC

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Linguagem C para microcontroladores PIC

Comandos de Controles de Fluxo Grupo de comandos Seleção Iteração Desvio Expressões Blocos Comandos

SELEÇÃO:

If e switch (comando condicional)

ITERAÇÃO:

while,for, do while, (comandos de laço)

SALTO ou DESVIO:

Break, continue, goto, return

RÓTULO:

Case, default, label

BLOCO:

Simplesmente um bloco de código geralmente compreendido por “{“ e “}”

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Comandos de Seleção: if –

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Comandos de Seleção:

if – else: Forma geral da sentença

Exemplo:

if(expressão) ; teste a ser realizado

{

// executa estes comandos se o teste resultar verdadeiro

comando 1;

comando 2;

comando 3;

}

else

{

// executa estes comandos se o teste resultar falso

comando A;

comando B;

comando C;

}

Código de exemplo de uso para do comando if-else

Comando K;

if(A>B)

{

Comando 1;

Comando 2;

Comando 3;

}

else

{

Comando J;

Comando T;

Comando R;

}

1; Comando 2; Comando 3; } else { Comando J; Comando T; Comando R; } Fluxograma

Fluxograma do código de exemplo de uso do if-else

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Comandos if else aninhados: Exemplo:

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto

Comandos if else aninhados:

Exemplo:

if(i)

{

 

if(j)

{

comando 1;

}

if(k)

{

comando 2;

}

else

{

comando A;

}

}

else

{

 

comando L;

}

Código de exemplo de uso para do comando if-else-if-else

Comando K;

if(A>B)

{

Comando 1;

Comando 2;

Comando 3;

}

else

{

if(B>C)

{

Comando J;

Comando R;

}

else

Comando T;

}

Curso de Microcontroladores PIC – Prof. Marcelo do C.C. Gaiotto Comando K não A >