You are on page 1of 37

GUIA DE EXPERIMENTOS

MICROCONTROLADORES

SUMRIO

INTRODUO............................................................................................................ 3
1. GRAVAO NO KIT PICGENIOS............................................................................... 4

2. EXPERINCIAS COM LED ................................................................... 6


3. EXPERINCIAS COM DISPLAY 7 SEGUIMENTOS ......................... 10
4. CONVERSOR ANALGICO DIGITAL ............................................... 13
5. PWM ........................................................................................................ 16
6. DISPLAY LCD ....................................................................................... 19
7. TECLADO MATRICIAL ....................................................................... 23
8. ACIONAMENTO DE REL .................................................................. 27
9. CONTADOR DE VELOCIDADE .......................................................... 30
10. SENSOR DE TEMPERATURA ............................................................. 32
11. MOTOR DE PASSO ............................................................................... 35

INTRODUO

O presente material foi desenvolvido com a finalidade de ser uma importante


ferramenta de apoio prtico para profissionais que trabalham com microcontroladores,
sejam eles estudantes, tcnicos e demais profissionais que em algum momento
necessitam de conhecimento em microcontroladores.
O material visa dar uma viso global acerca das diversas caractersticas de uma
microcontrolador, fornecendo informaes sobre projeto, montagem e principais
caractersticas. Neste material o leitor encontrar informaes para realizar as
experincias de forma satisfatria e com grande capacidade de desenvolver suas
habilidades lgicas.
Cada captulo fornece uma informao nova para o leitor, de forma que o
aprendizado seja sequencial e de fcil entendimento. O autor preocupou-se em utilizar
todas as informaes essenciais dos diversos perifricos existentes nos
microcontroladores, em especial os microcontroladores PIC.
O autor espera que o material consiga propiciar ao leitor conhecimento slido e
fornea informaes que lhe torne um profissional capacitado, capaz de entender e
realizar todo tipo projetos e aplicaes com sistemas microcontrolados.
O autor deseja a todos uma excelente leitura e espera que este material contribua
para formar grandes profissionais. Sugestes sero bem aceitas, a fim de fazer este
material uma grande ferramenta de consulta na rea de instalaes eltricas prediais
para os profissionais que atuam ou pretendem atuar na profisso.

1. GRAVAO NO KIT PICGENIOS


1 Passo: Ligar o cabo de gravao
Conecte o gravador USB no gravado que
acompanha o kit; em seguida conecte o gravado
no kit Acepic. Ligue a outra sada USB no
computador.
Obs: o cabo de gravao permite que voc
grave seu programa no kit Acepic como tambm
um cabo de comunicao USB para aplicaes
em projetos com o kit.
Figura 1: Cabo serial

2 Passo: Ligar A fonte de alimentao


Ligue a fonte de alimentao que acompanha o kit
na placa Acepic e na tomada de alimentao.
Note que a fonte de alimentao vem configurada em
220V.
Figura 2: Fonte de alimentao

Passo:

Abrir

programa de Gravao:
Instale
o
programa
Gravador PICkit2 que acompanha
o CD.
D um duplo clique com o
mouse no cone que ir aparecer
na rea do seu computador.

Figura 3: programa WinPIC800

1. GRAVAO NO KIT PICGENIOS

4 Passo: Importar arquivo hexa


Para carregar um arquivo hexa clique em File->Import Hex e carregue o cdigo
hexadecimal do seu programa.

Figura 4: Abrindo arquivo hexa.

9 Gravao
Clique no boto Write para gravar no microcontrolador.

2. EXPERINCIAS COM LED


2.1.

Resumo terico

Um led constitudo por uma juno PN de material semicondutor e por dois


terminais, o nodo (A) e o Ctodo (K). Quando sujeito a energia emite luz de espectro
reduzido. A luz emitida pode ser visvel, ou no visvel (Infravermelhos ultravioletas).

Figura 5: Smbolo e imagem do LED

Eram usados, at bem pouco tempo, apenas como indicadores de


funcionamento de outros aparelhos (ligado, desligado por exemplo), sinalizadores
luminosos(relgios ou mostradores) passou a ser usado em iluminao direta
substituindo a iluminao convencional e as telas de tv e monitores medida que a
relao luminosidade/consumo for aumentando.

Cor do Led

Figura 6: Cores de LEDs

Os leds esto disponveis nas cores, Vermelho, Laranja, Amarelo, Verde, Azul e
Branco. As cores branca e azul so mais caras que as restantes cores. A cor da luz
emitida pelo LED determinada pelo material semicondutor no pela cor da cpsula
plstica que o rodeia. LEDs coloridos esto disponveis com cpsulas brancas, difusas
ou transparentes.

2. EXPERINCIAS COM LED

Em funo do material semicondutor utilizado o LED produz uma ou outra cor:

LED Vermelho: Fosforeto de Glio (GaP);Fosforeto de Glio e arsnico (GaAsP);

LED Amarelo e Verde:Fosforeto de Glio(GaP);Fosforeto de Indio, Glio e alumnio(InGaAlP);

LED infra vermelho:Arseneto de Glio(GaAs); Arseneto de Fosforeto de Alumnio e Glio


(GaAlAs).

Figura 7: Relao dos LEDs

Tipos de LEDs

Figura 8: Tipos de LEDs


LEDs so produzidos com diferentes formas e tamanhos. O LED de 5mm cilndrico
(o ltimo da imagem) o mais comum, estima-se em 80% a produo mundial. A cor
da cpsula de plstico muitas vezes igual cor real da luz emitida, mas nem sempre.
Podem ainda ser encontrados:

Bicolores: So compostos por dois leds em anti-paralelo;

Tricolores: So compostos por dois leds ligados com ctodo comum


Intermitentes: Usam um circuito integrado interno que provoca a intermitncia

2. EXPERINCIAS COM LED


2.2.

EXPERINCIA 1

Objetivo
Realizar o acionamento de um conjunto de LEDs utilizando as portas de
comunicao do microcontrolador.

Programa
/*
********************** NETCOM ***************************
******************* TREINAMENTOS E SOLUES **********************
----------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE FAZ UM CONJUNTO DE LEDS FICAREM PISCANDO A CADA 1 SEGUNDO **
***************************************************************************
*/
#include <PISCA-PISCA.h>
void main() {
set_tris_d(0x00); // DEFINE O PORTD COMO SADA

while(1)
{
output_d(0xff); // COLOCA OS LEDS LIGADOS
Delay_ms(500); // FUNO QUE CRIA UM TEMPO DE 1 SEGUNDO
output_d(0x00); // COLOCA OS LEDS DESLIGADOS
Delay_ms(500); // FUNO QUE CRIA UM TEMPO DE 1 SEGUNDO
}
}

2. EXPERINCIAS COM LED


2.3.

EXPERINCIA 2

Objetivo
Realizar o rotacionamento de um conjunto de LEDs utilizando as portas de
comunicao do microcontrolador.

Programa
/*
******************** NETCOM *************************
***************** TREINAMENTOS E SOLUES **********************
------------------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE FAZ UM CONJUNTO DE LEDS FICAREM ROTACIONANDO A CADA 50ms**
***************************************************************************
*/
#include <ROTAO DE LEDS.h>
void main() {
char cont; // DECLARAO DA VARIAVEL QUE SERIA UTILIZADA PARA A ROTAO
set_tris_d(0); // Define todos os pinos do PORTD como sada.
cont = 128; // Definimos que o bit7 de CONT ser 1 (1000 0000).
while(1){ // DEFINIO DE REPETIO INIFINITA DO BLOCO
// **** ROTAO DA ESQUERDA PARA DIREITA *****
while(cont > 1){
output_d(cont); // PASSANDO O VALOR DE CONT PARA A SAIDA DOS PINOS DO PORTD
cont>>=1; // DESLOCANDO 1 BIT PARA DIREITA
Delay_ms(50); // ROTINA DE TEMPO DE 50ms
}
// **** ROTAO DA DIREITA PARA ESQUERDA ****
while(cont < 128){
output_d(cont); // PASSANDO O VALOR DE CONT PARA A SAIDA DOS PINOS DO PORTD
cont<<=1; // DESLOCANDO 1 BIT PARA ESQUERDA
Delay_ms(50); // ROTINA DE TEMPO DE 50ms
}
}
}
9

3. EXPERINCIAS COM DISPLAY 7 SEGUIMENTOS

3.1.

Resumo terico

O display de sete segmentos um tipo de display formado por um conjunto de


LEDs. So comumente usados em eletrnica como forma de exibir uma informao
alfanumrica

(binrio, octadecimal, decimal ou hexadecimal)

que

possa

ser

prontamente compreendida pelo usurio sobre as operaes internas de um dispositivo.


Possui elementos, os quais podem ser ligados ou desligados individualmente, que
combinados produzem representaes simplificadas de algarismos . Os sete segmentos
so dispostos num retngulo com dois segmentos verticais em cada lado e um
segmento horizontal em cima e em baixo.
Os segmentos de um display de sete segmentos so definidos pelas letras de A a
G, conforme indicado direita, onde o ponto decimal opcional DP (um "oitavo
segmento") usado para a exibio de nmeros no inteiros.
Podem ser encontrados de dois modos de configurao: anodo comum e catodo
comum. Na Figura 9 vemos os dois tipos.

Figura 9: Display de 7 seguimentos

10

3. EXPERINCIAS COM DISPLAY 7 SEGUIMENTOS

3.2.

EXPERINCIA

Objetivo
Realizar a contagem de 0 a 99 com Display de 7 seguimentos utilizando as portas de
comunicao do microcontrolador.
Programa
/*
********************** NETCOM ***************************
******************* TREINAMENTOS E SOLUES **********************
--------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE FAZ A CONTAGEM DE 0 99 NO DISPLA DE 7 SEGUIMENTO **
***************************************************************************
*/
#include "C:\Users\HP-CETEC\Desktop\PIC\Nova pasta\Contador.h"
void main()
{
// "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
unsigned char numero[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int cont1, cont2,tempo; // Variaveis utilizadas
cont1 = 0; // variavel utilizada para contagem das unidades ( valores no Display 5)
cont2 = 0; // variavel utilizada para contagem das dezenas ( valores no Display 4)
tempo = 0; // variavel utilizada para contagem de durao do valor no display
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

11

3. EXPERINCIAS COM DISPLAY 7 SEGUIMENTOS

// TODO: USER CODE!!


set_tris_d(0); // Define os pinos do PORTD como sada ( leds do display)
set_tris_e(0);
set_tris_a(0);
output_d(numero[cont1]);
while(1) // lao de repetio infinito
{
while(tempo<50)
{
output_bit(pin_A5, 1); // habilita Display 4
output_bit(pin_E2, 0); // desabilita Display 3
output_d(numero[cont1]); // apresenta valor no Display 4
Delay_ms(1); // aguarda 10ms para poder alternar para o outro Display
output_bit(pin_A5, 0); // desabilita Display 4
output_bit(pin_E2, 1); // habilita Display 3
output_d(numero[cont2]); // apresenta valor no Display 3
Delay_ms(1); // aguarda 10ms para poder alternar para o outro Display
tempo++; // variavel tempo incrementada. Serve para manter num determinado tempo
// os mesmos valores no Display
}
/* *------ Lgica de apresentao dos novos valores nos displays *****/
tempo = 0;
cont1++;
if(cont1== 10) // testa se cont1 ja percorreu todos os valores do vetor 'numero'
{
cont1=0; // reinicia a varredura no vetor 'numero'
cont2++; // se cont1 ja terminou, incrmenta cont2
}
if(cont2== 10) // testa se cont2 ja percorreu todos os valores do vetor 'numero'
{
cont2=0; // reinicia a varredura no vetor 'numero'
}
}
}
12

4. CONVERSOR ANALGICO DIGITAL

4.1.

Resumo terico

O conversor analgico-digital, muito conhecimento como A/D ou ADC, um


dispositivo capaz de reproduzir em digital um valor analgico que normalmente em
nvel de tenso ou intensidade de corrente eltrica.
So bem utilizados na interface entre os dispositivos digitais (como exemplo:
microcontroladores, DSPs, microprocessadores, etc.) e dispositivos analgicos onde so
utilizados em leitura de sensores, digitalizao de udio e vdeo. Suponha que temos um
conversor analgico-digital (ou A/D) de 10 bits, preparado para um sinal de entrada
analgica de tenso varivel de 0V a 5V pode assumir os valores binrios de 0
(0000000000) a 1023 (1111111111), ou seja, capaz de capturar 1024 nveis discretos
de um determinado sinal. Se o sinal de entrada do suposto conversor A/D estiver em
2,5V, por exemplo, o valor binrio gerado ser 512.

Figura 10: Esquema do conversor AD

13

4. CONVERSOR ANALGICO DIGITAL

4.2.

EXPERINCIA

Objetivo
Realizar a converso de analgico para digital utilizando um potencimetro e
apresentando o valor no Display de 7 seguimentos.

Programa
/*
********************** NETCOM ***************************
******************* TREINAMENTOS E SOLUES **********************
-------------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE FAZ A CONVERSO AD E MOSTRA NO DISPLAY DE 7 SEGUIMENTO**
***************************************************************************
*/
#include "C:\Users\HP-CETEC\Desktop\PIC\Nova pasta\Conversor_AD.h"
void main()
{
// "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
INT numero[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned int temp_res;
SETUP_ADC_PORTS(AN0); //Configurada a entrada analgica, somente a entrada RA0
SETUP_ADC(ADC_CLOCK_INTERNAL); //Configurado o conversor AD interno
SET_ADC_CHANNEL(0);
//Configurado o canal de leitura 0
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
SET_TRIS_A(0x01);

14

4. CONVERSOR ANALGICO DIGITAL

delay_us(10);
set_tris_d(0); // Define os pinos do PORTD como sada ( leds do display)
// Define RA0 como entrada (pino ligado ao conversor)
// Define o pino RA2 do PORTA como saida(Seleo Display 1).
while(1) {
temp_res = read_adc(); // ler o conversor AN0
//Mostra o valor da unidade
output_d(numero[temp_res %10]); // Pega Modulo (Resto) Da Diviso Por 10 E Coloca O
Valor No PORTD.
output_bit (PIN_A5, 1); // Liga O Transistor Associado Ao Display 4.
delay_us(100);
// Delay Para Escrita No Display.
output_bit (PIN_A5, 0); // Desliga O Transistor Associado Ao Display 4.
temp_res /=10;
// Divide Variavel Por 10.
// Mostra Valor Da Dezena
output_d(numero[temp_res %10]); // Pega Modulo (Resto) Da Diviso Por 10 E Coloca O
Valor No PORTD.
output_bit (PIN_E2, 1); // Liga O Transistor Associado Ao Display 3.
delay_us(100);
// Delay Para Escrita No Display.
output_bit (PIN_E2, 0);
// Desliga O Transistor Associado Ao Display 3.
temp_res /=10;
// Divide Variavel Por 10.
// Mostra Valor Da Centena
output_d(numero[temp_res %10]); // Pega Modulo (Resto) Da Diviso Por 10 E Coloca O Valor
No PORTD.
output_bit (PIN_E1, 1);
// Liga O Transistor Associado Ao Display 2.
delay_us(100);
// Delay Para Escrita No Display.
output_bit (PIN_E1, 0);
// Desliga O Transistor Associado Ao Display 2.
temp_res /=10;
// Divide Variavel Por 10.
// Mostra Valor Do Milhar
output_d (numero[temp_res %10]); // Pega Modulo (Resto) Da Diviso Por 10 E Coloca O
Valor No PORTD.
output_bit (PIN_E0, 1);
// Liga O Transistor Associado Ao Display 1.
delay_us(100);
// Delay Para Escrita No Display.
output_bit (PIN_E0, 1);
// Desliga O Transistor Associado Ao Display 1.
}
}

15

5. PWM
5.1.

Resumo terico

Os controles de potncia, inversores de freqncia, conversores para servomotor,


fonte chaveadas e muitos outros circuitos utilizam a tecnologia do PWM (Pulse Width
Modulation) ou Modulao de Largura de Pulso como base de seu funcionamento.

Figura 11: Aplicaes com PWM


PWM a abreviao de Pulse Width Modulation ou Modulao de Largura de
Pulso. Para que se entenda como funciona esta tecnologia no controle de potncia,
partimos de um circuito imaginrio formado por um interruptor de ao muito rpida e
uma carga que deve ser controlada, conforme a Figura 16 abaixo:

Figura 12: Princpio de funcionamento do PWM


Quando o interruptor est aberto no h corrente na lmpada e a potncia aplicada
nula. No instante em que o interruptor fechado, a carga recebe a tenso total da fonte
e a potncia aplicada mxima.

16

5. PWM
Como fazer para obter uma potncia intermediria, digamos 50%, aplicada
carga? Uma idia fazermos com que a chave seja aberta e fechada rapidamente de
modo a ficar 50% do tempo aberta e 50% fechada. Isso significa que, em mdia,
teremos metade do tempo com corrente e metade do tempo sem corrente.
A potncia mdia e, portanto, a prpria tenso mdia aplicada carga neste caso
50% da tenso de entrada.

Figura 13: Sinal de um PWM


Veja que o interruptor fechado pode definir uma largura de pulso pelo tempo em
que ele fica nesta condio, e um intervalo entre pulsos pelo tempo em que ele fica
aberto. Os dois tempos juntos definem o perodo e, portanto, uma freqncia de
controle. A relao entre o tempo em que temos o pulso e a durao de um ciclo
completo de operao do interruptor nos define ainda o ciclo ativo.
Variando-se a largura do pulso e tambm o intervalo de modo a termos ciclos
ativos
diferentes, podemos controlar a potncia mdia aplicada a uma carga. Assim,
quando a largura do pulso varia de zero at o mximo, a potncia tambm varia na
mesma proporo (duty cycle), conforme est indicado na figura abaixo:

Figura 14: Ciclo do PWM


Este princpio usado justamente no controle PWM: modulamos (variamos) a
largura do pulso de modo a controlar o ciclo ativo do sinal aplicado a uma carga e, com
isso, a potncia aplicada a ela.

17

5. PWM
5.2.

EXPERINCIA

Objetivo
Realizar o controle da velocidade de um ventilador via PWM.
Programa
/*
********************** NETCOM ***************************
******************* TREINAMENTOS E SOLUES **********************
--------------------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE CONTROLA A VELOCIDADE DO VENTILADOR **
***************************************************************************
*/
#include <velocidade.h>
void main()
{
unsigned int temp_res;
setup_timer_2(T2_DIV_BY_16,124,1); //1,0 ms overflow, 1,0 ms interrupt
setup_ccp1(CCP_PWM|CCP_SHUTDOWN_AC_L|CCP_SHUTDOWN_BD_L);
set_pwm1_duty((int16)248);

SETUP_ADC_PORTS(AN0); //Configurada a entrada analgica, somente a entrada RA0


SETUP_ADC(ADC_CLOCK_INTERNAL); //Configurado o conversor AD interno
SET_ADC_CHANNEL(0);
//Configurado o canal de leitura 0
delay_us(10);
while(TRUE)
{
temp_res = read_adc(); // ler o conversor AN0
set_pwm1_duty(temp_res); //altera a velocidade da ventoinha
}
}

18

6. DISPLAY LCD
6.1.

Resumo terico

Os Display de LCD servem para escrever mensagem, sendo muito utilizado em


diversas aplicaes de microcontroladores.

Figura 15: Display LCD


Na Figura 16 temos a vista da parte de trs do LCD. Vemos as memrias e os pinos
de ligao do LCD com o microcontrolador.

Figura 16: Partes do LCD


CGROM

Memria no voltil onde esto gravados os cdigos em ASC II para escrita dos
caracteres.
DDRAM

Memria voltil onde escrevemos o que queremos que aparea no display.


CGRAM

Memria usada para desenhar caracteres diferentes, por exemplo .

19

6. DISPLAY LCD
6.2.

EXPERINCIA

Objetivo
Realizar a escrita no Display de LCD utilizando as portas de comunicao do
microcontrolador PIC.
Programa
Funo LCD
#define EN PIN_E1
//Definimos o pino 1 da porta E como EN
#define RS PIN_E0
//Definimos o pino 0 da porta E como RS
#define DATA OUTPUT_D //Definimos a sada para a porta D como DATA
void lcd_cmd(byte cmd) //Funo para envio de comandos para o LCD
{
DATA(cmd);
//Coloca o contedo da varivel cmd na porta D
OUTPUT_HIGH(EN);
//Pulso alto (1) no pino EN (Pino 1 da porta E)
OUTPUT_LOW(EN);
//Retorna a nvel baixo (0) em EN
}
void lcd_envia_byte(boolean nivel,byte dado) //Funo para envio de dados ou escrita para o
//LCD
{
OUTPUT_LOW(RS);
//Coloca em nvel baixo o pino RS (Pino 0 da porta E)
OUTPUT_BIT(RS,nivel); //Coloca o pino RS no nvel da varivel nivel
delay_us(100);
//Atraso de 100 us
OUTPUT_LOW(EN);
//Coloca em nvel baixo o pino EN
lcd_cmd(dado);
//Chama a funo lcd_cmd j com os dados a serem enviados
//para a porta D
}
void lcd_pos_xy(byte x, byte y) //Funo de posicionamento do cursor
{
byte endereco;
//Varivel de informao para o endereo do cursor
if (y!=1)
//Se o valor de y for 2
endereco = 0xC0;
//ento endereco vai ser igual a 0xC0 (endereo da segunda linha)
else
//Seno
endereco = 0x80;
//endereo vai ser igual a 0x80 (endereo da primeira linha)
endereco += x-1;
//Aqui decrementa o valor da varivel x e o resultado somado com
//a varivel endereo...
lcd_envia_byte(0,endereco); //Chama a funo lcd_envia_byte, com o valor 0, informando
para //o LCD que ser enviado um dado e o dado est contido na varivel endereo...
}

20

6. DISPLAY LCD

void lcd_escreve(char c) //Funo para envio dos caracteres e/ou dados para o LCD
{
switch(c)
//comando switch com a varivel c
{
case '\f' : lcd_envia_byte(0,1); //Caso c seja \f, o dado 1 ser enviado ao LCD para
//limpar todo o seu contedo.
delay_ms(2); //Atraso de 2 ms
break;
//Comando break, terminou o processo acima, j no testa
//nenhum outro caso...
case '\n' :
//Caso c seja \n
case '\r' : lcd_pos_xy(1,2); //ou \r, muda o cursor para a segunda linha do LCD
break;
//Comando break
case '\b' : lcd_envia_byte(0,0x10); //Caso c seja \b ento desloca o cursor para a esquerda
break;
//Comando break
default : lcd_envia_byte(1,c); //caso seja um caractere qualquer, ento este ser escrito no
//LCD pela funo lcd_envia_byte
break;
//Comando break
}
}
void lcd_ini()
//Funo de inicializao do LCD
{
byte conta;
//Varivel de contagem
DATA(0x00);
//Coloca na porta D o valor 0x00
OUTPUT_LOW(RS);
//Coloca em nvel baixo o pino RS
OUTPUT_LOW(EN);
//Coloca em nvel baixo o pino EN
delay_ms(15);
//Atraso de 15ms
for (conta=1;conta<=3;conta++) //Para conta = 1 at conta = 3, ou seja executar 3 vezes os
//comandos abaixo
{
lcd_cmd(0x30);
//Envia o comando 0x30 para o LCD
delay_ms(5);
//Atraso de 5ms
}
lcd_cmd(0x38);
//Escreve comando para interface de 8 vias de dados
lcd_cmd(0x01);
//Escreve comando para limpar todo o display
delay_ms(1);
//Atraso de 1ms
lcd_cmd(0x0C);
//Escreve comando para ligar o display sem cursor
lcd_cmd(0x06);
//Escreve comando para incrementar automaticamente direita
}

21

6. DISPLAY LCD
Programado LCD
/*
********************** NETCOM ***************************
******************* TREINAMENTOS E SOLUES **********************
-----------------------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE APRESENTA TEXTO NO DISPLAY DE LCD **
***************************************************************************
*/
#include <LCD.h>
#include "LCD8B.c"
void main()
{
lcd_ini();
// lcd_cmd(0x38);
//Escreve comando para interface de 8 vias de dados
lcd_cmd(0x01);
//Escreve comando para limpar todo o display
while(1)
{
printf(lcd_escreve,"\f NETCOM ");
printf(lcd_escreve,"\nSEJA BEM VINDO");
delay_ms(1000);
lcd_cmd(0x01);
//Escreve comando para limpar todo o display
}
}

22

7. TECLADO MATRICIAL
7.1.

Resumo terico

O teclado matricial um perifrico de entrada de dados com os botes organizados


em linhas e colunas, conforme voc aperta uma tecla, voc cria um curto entre o pino
referente a sua linha e sua coluna, internamente so push-buttons organizados de forma
matricial conforme na imagem abaixo:

Figura 17: Rel


Na Figura 18 temos a imagem do teclado no Kit Acepic.

Figura 18: Tecla matricial no Kit

23

7. TECLADO MATRICIAL

7.2.

EXPERINCIA

Objetivo
Realizar o acionamento de um rel utilizando as portas de comunicao do
microcontrolador PIC.
Funo Keys
//Definies da matriz do teclado
#define COL1 pin_b4
#define COL2 pin_b5
#define COL3 pin_b6
#define COL4 pin_b7
#define LIN1 pin_b0
#define LIN2 pin_b1
#define LIN3 pin_b2
#define LIN4 pin_b3
char tecla;
boolean tecla_pres;
char varre_teclas(void)
{
char key ;
output_high(COL4);
output_high(COL3);
output_high(COL2);
output_low(COL1); //Ativa a primeira coluna
if (!input(LIN1)) key = '1';
if (!input(LIN2)) key = '4';
if (!input(LIN3)) key = '7';
if (!input(LIN4)) key = '*';
output_high(COL1);
output_low(COL2); //Ativa a segunda coluna
if (!input(LIN1)) key = '2';
if (!input(LIN2)) key = '5';
if (!input(LIN3)) key = '8';
if (!input(LIN4)) key = '0';
output_high(COL2);

24

7. TECLADO MATRICIAL

output_low(COL3); //Ativa a terceira coluna


if (!input(LIN1)) key = '3';
if (!input(LIN2)) key = '6';
if (!input(LIN3)) key = '9';
if (!input(LIN4)) key = '#';
output_high(COL3);
output_low(COL4);
if (!input(LIN1)) key = 'A';
if (!input(LIN2)) key = 'B';
if (!input(LIN3)) key = 'C';
if (!input(LIN4)) key = 'D';
output_high(COL4);
return(key);
}

Programa
/*
********************** NETCOM ***************************
******************* TREINAMENTOS E SOLUES **********************
----------------------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE MOSTRA NO LCD O TECLADO MATRICIAL**
***************************************************************************
*/
#include <Teclado matricial.h>
#include "LCD8B.c" //chamada da funo LCD
#include "12Keys.c" // chamada da funo Keys
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
25

7. TECLADO MATRICIAL

setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
port_b_pullups(True);
lcd_ini(); //inicializa LCD
delay_ms(100);
lcd_escreve("\f");
printf(lcd_escreve,"Digite:\n");
tecla_pres=0;
while(TRUE)
{
tecla = varre_teclas(); //ler teclado
lcd_pos_xy(1,2); //posiciona cursor
printf(Lcd_escreve,"%c", tecla); //escreve no display o valor lido do teclado
}
}

26

8. ACIONAMENTO DE REL
8.1.

Resumo terico

O rel um dispositivo eletromecnico com inmeras aplicaes possveis em


comutao de contatos eltricos. Servindo para ligar ou desligar dispositivos.A
comutao realizada alimentando-se a bobina do mesmo.

Figura 19: Rel


Quando uma corrente originada no primeiro circuito passa pela bobina, um campo
eletromagntico gerado, acionando o rel e possibilitando o funcionamento do
segundo circuito. Sendo assim, uma das aplicabilidades do rel utilizar-se de baixas
correntes para o comando no primeiro circuito, protegendo o operador das possveis
altas correntes que iro circular no segundo circuito (contatos).

Figura 20: Funcionamento do rel

27

8. ACIONAMENTO DE REL
8.2.

EXPERINCIA

Objetivo
Realizar o acionamento de um rel utilizando as portas de comunicao do
microcontrolador PIC.
Programa
/*
********************** NETCOM ***************************
*******************
TREINAMENTOS E SOLUES **********************
----------------------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE ACIONA O RELE COM O BOTAO B1**
***************************************************************************
*/
#include "C:\Users\HP-CETEC\Desktop\PIC\7.Rele\Rele.h"
void main()
{
int aux=0;
char ligado=0;
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
PORT_B_PULLUPS(true);
set_tris_b(0x0f);
//Configura os 4 bits menos significativos como entrada
set_tris_a(0x00);
output_bit(PIN_A3,0);

28

8. ACIONAMENTO DE REL

while(1)
{
if(!input(PIN_B0)&& ligado == 0) //verifica se botao B1 foi pressionado
{
while(!input(PIN_B0)); //Aguarda o boto ser solto
output_bit(PIN_A3,1); //liga o rel
ligado=1;
}
if(!input(PIN_B0)&& ligado == 1) //verifica se boto B1 foi pressionado
{
while(!input(PIN_B0)); //Aguarda o boto ser solto
output_bit(PIN_A3,0); //desliga o rel
ligado=0;
}
}
}

29

9. CONTADOR DE VELOCIDADE
9.1.

Resumo terico

Os sensores infravermelho tm funcionamento semelhante ao de um diodo. Um


sensor infravermelho composto por um emissor e um receptor. O seguinte circuito
pode ser montado para a anlise desses sensores:

Figura 21: Circuito utilizado para fazer anlise dos sensores infravermelho

O emissor o responsvel por enviar os raios infravermelhos, que sero captados


pelo receptor, para que o circuito funcione como desejamos. O receptor um diodo
que entra em estado de conduo quando polarizado diretamente e recebe uma
quantidade de raios infravermelhos suficiente.
Pelo circuito podemos ver que, utilizando o modelo do diodo ideal, se as condies
de conduo do receptor forem satisfeitas, a tenso sobre os terminais do resistor ser
igual ao da fonte. Caso contrtio, no passar corrente no circuito e por conseqncia a
tenso sobre o resistor ser nula. Logo podemos concluir que esse circuito pode ser
usado para obtermos informaes.

Figura 22: Sensor infravermelho


Como exemplo de aplicao desse circuito, temos um sistema de segurana. Se
os raios infravermelhos forem bloqueados, no caminho entre o emissor e o receptor,
haver uma queda de tenso no resistor, e, portanto, essa queda pode ser usada para
acionar um circuito de alarme utilizado na segurana de lojas.

30

9. CONTROLE DE VELOCIDADE
9.2.

EXPERINCIA

Objetivo
Realizar o controle da velocidade de um ventilador utilizando o sensor infravermelho
e o timer do microcontrolador PIC.
Programa
/*
********************** NETCOM ***************************
******************* TREINAMENTOS E SOLUES **********************
-------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE APRESENTA NO LCD A VELOCIDADE DO VENTILADOR **
***************************************************************************
*/
#include "C:\Users\HP-CETEC\Desktop\PIC\Nova pasta\Controle_velocidade.h"
#include "LCD8B.c"
void main()
{
long int temp_res;
SETUP_ADC_PORTS(AN0); //Configura as entradas analgicas RA0,RA1,RA3
SETUP_ADC(ADC_CLOCK_INTERNAL);
//Configura o conversor AD interno
setup_timer_2(T2_DIV_BY_16,124,1);
setup_ccp1(CCP_PWM|CCP_SHUTDOWN_AC_L|CCP_SHUTDOWN_BD_L);
// TODO: USER CODE!!
lcd_ini();
//Chama a funo para inicializao do LCD
delay_us(100);
printf(lcd_escreve,"\f Ventilador\n");
SET_ADC_CHANNEL(0);
//Configura o canal de leitura 0
while(TRUE)
{
temp_res = read_adc(); // ler o conversor AN0
set_pwm1_duty((int16)temp_res);
printf(lcd_escreve,"Duty cycle: %d%% \n",(int)(temp_res*100/255));
}
}

31

10. SENSOR DE TEMPERATURA


10.1. Resumo terico
Alm do termistor, podemos monitorar a temperatura do ambiente atravs de
circuitos integrados dedicados a esse propsito. Dentre as vantagens desses
componentes est a facilidade na sua aplicao, pois ele concentra todos os
componentes necessrios para a verificao da temperatura numa nica pea.
O princpio de funcionamento desses circuitos muito semelhante ao do
termistor, pois ambos baseiam-se no fato de que a comportamento dos materiais
semicondutores depende da temperatura. Mas o fato de ser um nico circuito integrado,
geralmente no necessitando de nenhum componente extra, facilita muito a utilizao.
A principal classificao desses sensores feita de acordo com o sinal de sada
deles. Os modelos mais simples so os analgicos. Assim como qualquer sensor
analgico, eles possuem um sinal de sada cuja tenso corresponde temperatura do
ambiente onde se encontra o sensor. Esse sinal analgico pode ser utilizado por um
outro circuito analgico, como um AmpOp comparador, ou pode ser convertido num
sinal digital para ser monitorado por um circuito digital, como um microcontrolador.

Figura 23: Circuito sensor de temperatura LM35

32

10. SENSOR DE TEMPERATURA


10.2. EXPERINCIA
Objetivo
Realizar a leitura da temperatura de resistor de potncia usando o sensor LM35 .
Programa

/*
********************** NETCOM ***************************
******************* TREINAMENTOS E SOLUES **********************
-------------------------------------------------------------------------------------------------------------***************************************************************************
** PROGRAMA QUE CONTROLA A TEMPERATURA COM VENTILADOR**
***************************************************************************
*/
#include"C:\Users\HP-CETEC\Desktop\PIC\8.sensor de temperatura\Sensor de temperatura.h"
#include "LCD8B.c"
void main()
{
long int temperatura;
int ligado=1;
/*
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);*/
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!

33

10. SENSOR DE TEMPERATURA

SETUP_ADC_PORTS(AN0_TO_AN1); //Configura as entradas analgicas RA0,RA1,RA3


SETUP_ADC(ADC_CLOCK_INTERNAL);
//Configura o conversor AD interno
Output_High(PIN_C2);
//Liga ventoinha
lcd_ini();
//Chama a funo para inicializao do LCD
while(true)
//Loop principal
{
SET_ADC_CHANNEL(0);
//Configura o canal de leitura 0
delay_us(100);
//Tempo de ajuste do canal (necessrio)
temperatura = READ_ADC(); //ler a temperatura
printf(lcd_escreve,"\fTemp. = %lu\n",temperatura); //Mostra valor da converso do canal 0

if (temperatura>=80)
//Sendo ad3 >= 80...
{
Output_High(PIN_C2); //Liga ventoinha
Output_low(PIN_C1); //Desliga aquecimento
ligado=1;
}
if (temperatura<=55)
//Sendo <= 55...
{
Output_High(PIN_C1); //liga aquecimento
Output_low(PIN_C2); //Desliga ventoinha
ligado=0;
}
if(ligado)
printf(lcd_escreve,"Vent. ON");
else
printf(lcd_escreve,"Vent. OFF");
delay_ms(100);
}

//Atraso

34

11. MOTOR DE PASSO


11.1. Resumo terico
Os Motores de Passo so dispositivos eletromecnicos que convertem pulsos
eltricos em movimentos mecnicos que geram variaes angulares discretas. O rotor
ou eixo de um motor de passo rotacionado em pequenos incrementos angulares,
denominados passos, quando pulsos eltricos so aplicados em uma determinada
sequencia nos terminais deste.
A rotao de tais motores diretamente relacionada aos impulsos eltricos que
so recebidos, bem como a sequncia a qual tais pulsos so aplicados reete diretamente
na direo a qual o motor gira. A velocidade que o rotor gira dada pela frequncia de
pulsos recebidos e o tamanho do ngulo rotacionado diretamente relacionado com o
nmero de pulsos aplicados.O princpio de funcionamento desses circuitos muito
semelhante ao do termistor, pois ambos baseiam-se no fato de que a comportamento dos
materiais semicondutores depende da temperatura. Mas o fato de ser um nico circuito
integrado, geralmente no necessitando de nenhum componente extra, facilita muito a
utilizao.
Tipos de Motores de passo
Motores Unipolares
O motor de passo unipolar apresenta uma derivao central (center tape) entre o
enrolamento de duas bobinas.

Figura 24: Motor de passo unipolar

35

11. MOTOR DE PASSO


Motores Bipolares

Figura 25: Motor de passo Bipolar

O motor de passo bipolar no apresenta a derivao central entre o enrolamento de


duas bobinas. Entretanto, o circuito para controlar este tipo de motor mais complexo
do que o unipolar. A vantagem do bipolar apresentar um torque maior.
Relutncia varivel

Figura 26: Motor de passo de relutncia variavel

Apresenta um rotor com muitas polaridades construdo de ferro, tem estator


laminado. Por no possuir im, quando energizado apresenta torque esttico nulo.
Tendo assim baixa inrcia de rotor no pode ser utilizado como carga inercial grande.

Figura 27: Driver CNC

36

37

You might also like