Você está na página 1de 10

Universidade Nove de Julho

Departamento de Exatas
Disciplina
Professor:

Experincia N
Curso:

Identificao dos alunos


1

Campus:

Turma:

Data: ____/_____/_____

Prof Laboratrio:

Visto Prof:

Nota 1: O aluno dever fazer as adaptaes necessrias em funo do microcomtrolador ou


dos recursos didticos disponveis

Captulo 5 - Experincia 3 Pisca - Pisca

Objetivo
O objetivo desta experincia ensinar ao aluno com criar rotinas de delays alm de
apresentar uma tcnica simples utilizada para inverter o estado de um bit.

Descrio
O software desta experincia utiliza um dos displays de 7 segmentos para implementar um
pisca-pisca sendo que a freqncia das piscadas controlada atravs do uso de uma rotina
de delay.
A rotina de delay genrica pode ser utilizada para gerar delays entre 1ms e 256ms. Na
realidade, a rotina recebe um argumento passado pelo WORK para determinar o atraso que
deve ser gerado, sempre em mltiplos de 1ms. Como o argumento de 8 bits existem 256
possveis delays, indo de 1ms at 256ms. Basta portanto, carregar o WORK com o delay
desejado e chamar a rotina.
O pisca-pisca visualizado no display de 7 segmentos na posio da unidade. Sempre que
o delay finalizado o PORTD deve ser invertido e para inverter o estado destes bits utilizou-se
a operao lgica boleana XOR. Conforme a tabela verdade apresentada a seguir
A
0
0
1
1

B
0
1
0
1

XOR
0
1
1
0

pode-se verificar que sempre que a operao realizada quando os bits da coluna A esto
em 1 o resultado fica invertido em relao coluna B e sempre que os bits da coluna A esto
em 0 o resultado se mantm em relao coluna B. Assim, sempre que ser desejar inverter
um bit, basta fazer uma operao XOR entre um bit em 1 e o bit que se deseja inverter.
Esta uma tcnica simples de inverter o estado de um bit sem testar o estado original.
No software, pode-se utilizar as teclas da linha 4 colunas 1 e 2 para alterar o tempo do
delay e conseqentemente a freqncia das piscadas do display. A tecla da coluna 1
incrementa o valor do delay enquanto a tecla da coluna 2 decrementa.

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

35

Esquema Eltrico

36

Fluxograma
INCIO

VETOR DE RESET
PULA P/ INCIO DO
PROGRAMA

CONFIGURAES INICIAIS
PORTAS, TIMERS,
INTERRUPES, OPTION, ADs.

HABILITA DISPLAY DA
UNIDADE E LINHA 4 DO
TECLADO MATRICIAL

CARREGA CONTADOR
COM VALOR MNIMO

ATUALIZA DISPLAY
3
CARREGA MULTIPLICADOR
PARA O DELAY

DELAY PROPORCIONAL
AO VALOR DO
CONTADOR

Sim

BOTO 1
PRESS.?
No

Sim

BOTO 2
PRESS.?
No

FIM DO
MULTIPLICADOR?

No

Sim
INVERTE LEDS DO DISPLAY

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

37

CONTADOR = CONTADOR - STEP

CONTADOR = CONTADOR + STEP

CONTADOR<MN?

No

CONTADOR>MX?

Sim

Sim

CONTADOR = MNIMO

No

CONTADOR = MXIMO

BOTO 1
SOLTO?

No

Sim

BOTO 2
SOLTO?
Sim

DELAY

CARREGA ARGUMENTO
PASSADO PELO WORK EM
TEMPO2

INICIALIZA TEMPO1
COM 250d

NOP [1us]

No
[3us]

FIM DO
TEMPO1 ?

Sim
No

FIM DO
TEMPO2 ?

Sim
RETURN

38

1ms

No

Cdigo
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Exemplo de Cdigo para utilizao com a McMaster
*
*
Exemplo 3
*
*
*
*
LABTOOLS - MOSAICO DIDACTIC DIVISION
*
*
*
* TEL: (0XX11) 4992-8775
SITE: www.labtools.com.br
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
VERSO : 1.0
*
*
DATA : 18/01/2010
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Descrio geral
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//PISCA-PISCA VARIVEL PARA DEMONSTRAR A IMPLEMENTAO DE DELAYS E A INVERSO
//DE PORTAS. APENAS OS BOTES DA LINHA 4 ESTO ATIVADOS SENDO QUE O DA
//COLUNA 1 UTILIZADO PARA INCREMENTAR O TEMPO ENTRE AS PISCADAS.
//O BOTO DA COLUNA 2 UTILIZADO PARA DIMINUIR O TEMPO ENTRE AS PISCADAS.
/*
CONFIGURAO DOS JUMPERS DA PLACA:
CAP USB(RC3)
DATA I2C
CLOCK I2C
COLUNA 2(RB1)
COLUNA 1(RB0)
LINHA 1 / DISPLAY MILHAR(RB4)
LEDS ESPECIAS (RC0,RC1,RC2)

->
->
->
->
->
->
->

ON
OFF
OFF
ON
ON
ON
ON

*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
DEFINIO PIC
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <p18F4550.h>

// Register definitions

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
INCLUDES DAS FUNES DE PERIFRICOS DO PIC
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include
#include
#include
#include
#include
#include
#include

<pwm.h>
<adc.h>
<timers.h>
<delays.h>
<i2c.h>
<stdlib.h>
<usart.h>

//PWM library functions


//ADC library functions
//Timer library functions
//Delay library functions
//I2C library functions
//Library functions
//USART library functions

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Configuraes para gravao
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma

config
config
config
config
config
config
config
config
config
config
config
config

FOSC = HS
CPUDIV = OSC1_PLL2
WDT = OFF
WDTPS = 128
LVP = OFF
PWRT = ON
BOR = OFF
BORV = 0
PBADEN = OFF
DEBUG = OFF
PLLDIV = 1
USBDIV = 1

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

39

#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma
#pragma

config
config
config
config
config
config
config
config

FCMEN = OFF
IESO = OFF
VREGEN = OFF
MCLRE = ON
LPT1OSC = OFF
CCP2MX = ON
STVREN = OFF
ICPRT = OFF

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Definio e inicializao das variveis Globais
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//Neste bloco esto definidas as variveis globais do programa.
unsigned char
CONTADOR;
//BASE DE TEMPO PARA A PISCADA
unsigned char
TEMPO1;
//REGISTRADORES AUXILIARES DE TEMPO
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Constantes internas
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de constantes facilita a programao e a manuteno.
#define MIN
10
#define MAX
240
#define STEP
5
#define MULTIPLO
5
//A CONSTANTE DISPLAY REPRESENTA O SMBOLO QUE APARECER PISCANDO NO
//DISPLAY. 1=LED LIGADO E 0=LED DESLIGADO. A RELAO ENTRE BITS E
//SEGMENTOS A SEGUINTE: '.GFEDCBA'
//
a
//
**********
//
*
*
//
f *
* b
//
*
g
*
//
**********
//
*
*
//
e *
* c
//
*
d
*
//
********** *.
#define

DISPLAY

0b01110110

//(LETRA H)

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Declarao dos flags de software
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//A definio de flags ajuda na programao e economiza memria RAM.
//Este programa no utiliza nenhum flag de usurio
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Definio e inicializao dos port's
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
PROTOTIPAGEM DE FUNES
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
ENTRADAS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//As entradas devem ser associadas a nomes para facilitar a programao e
//futuras alteraes do hardware.
#define

BT1

PORTBbits.RB0

//PORTA DO BOTO
//1 -> PRESSIONADO
//0 -> LIBERADO

#define

BT2

PORTBbits.RB1

//PORTA DO BOTO
//1 -> PRESSIONADO
//0 -> LIBERADO

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
SADAS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

40

//As sadas devem ser associadas a nomes para facilitar a programao e


//futuras alteraes do hardware.
#define

DSP_UNIDADE

PORTBbits.RB7

//PORTA DO LED
//0 -> APAGADO
//1 -> ACESO

#define

LINHA_4

PORTBbits.RB7

//PINO PARA ATIVAR LINHA 4 DO TECLADO


//MATRICIAL
//1 -> LINHA ATIVADA
//0 -> LINHA DESATIVADA

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Funo Principal
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void main
{
PORTA
PORTB
PORTC
PORTD
PORTE
LATA
LATB
LATC
LATD
LATE

()
=
=
=
=
=

=
=
=
=
=

TRISA
TRISB
TRISC
TRISD
TRISE

0x00;
0x00;
0x00;
0x00;
0x00;

0x00;
0x00;
0x00;
0x00;
0x00;

=
=
=
=
=

0b00101111;
0b00001111;
0b10011111;
0b00000000;
0b00000111;

ADCON1 = 0b00001111;

//Limpa
//Limpa
//Limpa
//Limpa
//Limpa

PORTA
PORTB
PORTC
PORTD
PORTE

//Limpa
//Limpa
//Limpa
//Limpa
//Limpa

PORTA
PORTB
PORTC
PORTD
PORTE

//CONFIG
//CONFIG
//CONFIG
//CONFIG
//CONFIG

DIREO
DIREO
DIREO
DIREO
DIREO

DOS
DOS
DOS
DOS
DOS

PINOS
PINOS
PINOS
PINOS
PINOS

PORTA
PORTB
PORTC
PORTD
PORTE

//DESLIGA CONVERSORES A/D

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Inicializao do Sistema
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
DSP_UNIDADE = 1;
PORTD = DISPLAY;
//ACENDE O VALOR CERTO NO DISPLAY
CONTADOR = MIN;
//INICIA CONTADOR COM VALOR MIN.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
Rotina Principal
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
while(1)
{
ClrWdt();
TEMPO1 = MULTIPLO;
do
{
Delay1KTCYx(CONTADOR);
if (BT1)
{
CONTADOR = CONTADOR - STEP; //INCREMENTA O CONTADOR EM
if (CONTADOR < MIN)
{
CONTADOR = MIN;
while(BT1) ClrWdt();
}
continue;
}

*
*
*/

STEP

if (BT2)
{
CONTADOR = CONTADOR + STEP; //INCREMENTA O CONTADOR EM STEP
if (CONTADOR >= MAX)
{
CONTADOR = MAX;

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

41

while(BT2) ClrWdt();
}
continue;
}
}while(--TEMPO1);
PORTD = PORTD ^ DISPLAY;
}
}

42

// FIM DO PROGRAMA

//VOLTA PARA O INICIO ENQUANTO


//TEMPO1 DIFERENTE DE ZERO
//INVERTE O PORTD

Dicas e Comentrios
A rotina de delay recebe o argumento passado pelo WORK para determinar o delay que
deve ser gerado, no entanto, o valor mximo assumido pelo WORK 255 e conforme
comentado o delay mximo gerado de 256ms. Como isto possvel?
Acontece que a rotina foi escrita de forma que ela executada pelo menos uma vez.
Assim, a rotina executa um delay de 1ms, decrementa o argumento e quando este igual a
zero retorna. Porm, quando o argumento passado pelo WORK zero, ao primeiro
decremento, o argumento estoura e pula para 255. Como a condio testada aps o
decremento e como aps o decremento o valor do argumento 255, o delay continua a ser
gerado, por mais 255 vezes e desta forma obtm-se um delay de 256ms.
A proposta da rotina de delay foi gerar um delay fundamental em 1ms, porm, a mesma
idia pode ser utilizada para criar rotinas com delays fundamentais diferentes.

Exerccios Propostos
1. Alterar a rotina de delay para gerar um delay fundamental de 100us.
2. Alterar a rotina de delay para gerar um delay fundamental de 10ms.
3. Incluir o tratamento de debounce nas teclas

Manual do Usurio Sistema de Treinamento em Microcontroladores PIC McMaster rev5 2010

43

Você também pode gostar