Beruflich Dokumente
Kultur Dokumente
Projeto de Graduação
ALUNO:
Luis Mariano Nodari
ORIENTADOR:
Prof. Mikhail Polonskii
Lista de abreviaturas 4
Lista de ilustrações 5
Resumo 6
Capítulo 1 – Introdução 7
1.1 Preâmbulo 7
1.2 Objetivos 8
1.3 Justificativa 9
1.4 Cronograma de trabalho 10
1.5 Estrutura do relatório 11
Capítulo 2 – Resumo teórico 12
2.1 Funcionamento de uma fonte de alimentação linear 12
2.1.1 Vantagens e desvantagens 13
2.2 Conversor D/A 14
2.3 Conversor A/D 16
Capítulo 3 – Implementação do hardware 18
3.1 Fonte de Alimentação 19
3.2Conversor D/A 22
3.3Conversor A/D 24
3.4Display 27
3.4.1 Observações 28
3.5 Microcontrolador 29
3.4.1 Teclado 30
3.6.1 Síntese de funcionamento do teclado 31
3.5Circuitos Condicionadores de sinal 32
3.7.1 Circuito para adequação do sinal de tensão de saída
da fonte 32
3.7.2 Circuito para adequação do sinal de corrente de saída
da fonte 33
3.7.3 Circuito para adequação do sinal de referência para
controle da tensão de saída da fonte 35
2
Capítulo 4 – Implementação do software 39
4.1 Fluxograma 40
Capítulo 5 – Testes e resultados 43
Capítulo 6 – Discussão e conclusões 51
Bibliografia 52
Anexo 1 Software em Linguagem C 53
3
LISTA DE ABREVIATURAS
CLK Clock;
CI Circuito Integrado;
I/O Input/output;
4
LISTA DE ILUSTRAÇÕES
5
RESUMO
6
CAPÍTULO 1 – INTRODUÇÃO
1.1 Preâmbulo
7
1.2 Objetivos
8
1.3 Justificativa
9
1.4 Cronograma de trabalho
1ª Etapa:
Pesquisar Normas nacionais e internacionais para a realização do
projeto.
2ª Etapa:
Especificar o projeto; tensão, corrente, precisão e proteções.
Descrever o funcionamento de uma fonte linear e de uma fonte
chaveada, vantagens e desvantagens das mesmas.
3ª Etapa:
Especificar a interface com o usuário.
4ª Etapa:
Projetar a interface microcontrolada.
5ª Etapa:
Implementação do projeto e testes.
10
1.5- Estrutura do relatório
11
CAPÍTULO 2 – RESUMO TEÓRICO
12
AC
DC
V Ref. Controle
linear
13
2.2 Conversores Digital para Analógico - D/A
14
As principais desvantagens deste método são a sua sensibilidade aos
valores dos resistores de entrada que, com combinações diferentes, carregam o
circuito de forma diferente, devido aos valores dos resistores de entrada.
(Horenstein, Mark N. 1996)
15
2.3 Conversores Analógico para Digital - A/D
16
Conversor Dual-slope: Um dos métodos mais lentos de conversão
(com tempos que variam de 10ms a 100ms), porém é de baixo custo, porque
não necessita de componentes de precisão.
Sua operação básica está no tempo de carga ou descarga de um
capacitor; tem-se uma tensão analógica na entrada de um comparador e em
sua outra entrada a tensão de carga do capacitor. Na saída do comparador está
ligado o pino de enable de um contador; quando a tensão de carga do
capacitor ultrapassa a tensão analógica lida o comparador muda de estado na
saída e desliga o contador. O número de contagens, com o clock e a constante
de carga do capacitor, conhecidos, tem-se a conversão A/D.
Conversor Tensão-Frequência: Este conversor utiliza internamente
um oscilador controlado por tensão (VCO), e em sua saída a freqüência
correspondente ao nível de sinal analógico de entrada.
Conversor Sigma Delta: É um conversor de tensão e freqüência,
porém, não varia simplesmente a freqüência na saída, e sim, uma palavra de
forma serial variando sua densidade de uns e zeros. (Tocci, Ronald J., &
Windmer, Neal S., 1998)
17
CAPÍTULO 3- IMPLEMENTAÇÃO DO HARDWARE
VFS 20Vcc
VLSB VLSB 0,0784V
255 255
18
Para o funcionamento da interface microcontrolada, primeiramente foi
projetada e implementada a fonte de alimentação da própria interface, que
deverá fornecer as tensões de alimentação e referência para o hardware da
mesma. Para o projeto da fonte, foi tomando por base as tensões necessárias
para cada circuito e os seus respectivos consumos, de acordo com as
especificações dos fabricantes.
1 3
AC_IN VIN VOUT 5VCC
GND
RV1 C3 C4
VARISTOR
12
11
T1
110 + 110 To 12 + 12 U13
1 3
VIN VOUT 15VCC
GND
C1 C2
5
D3
1
F2
FUSE
2 - BRIDGE + 4
U14
C7
2 3
VIN VOUT -15VCC
1000uF
GND
C5 C6
F3
3
C8
1000uF
(Texas. 2000)
19
Por se tratar de uma fonte simétrica, será utilizado um retificador de
onda completa em ponte, que tem como sinal de saída um sinal DC pulsante:
É necessária a utilização de um capacitor como filtro, para reduzir o
ripple do sinal da fonte a um valor inferior a 6.5%, para uma melhor
regulação. Considerando um ripple máximo de 6.5%, temos uma tensão de
ripple igual a:
Vr (rms)
r 100% (1.0)
Vcc
Assim:
V (rms)
6,5% 100% Vr ( rms ) 1,1V
16.97
Icc Icc
Vcc Vm então: C
4 FC 4 F (Vm Vcc)
Onde
ICC é o valor da corrente a ser fornecida a carga em mA;
C é o valor mínimo do capacitor de filtro em uF;
Vr é o valor eficaz da tensão de ripple.
Vm é o valor de pico da tensão após o retificador.
F é a freqüência da rede
(Boylestad,R. & NashelskyL., 1992)
Assim,
0.250
C
4 60 1.1
C 946.9 F
20
Para se obter as tensões reguladas, serão utilizados os CI’s
reguladores de tensão 7809 para fornecer +9V, 7909 para fornecer –9V, e
7805, que fornecerá a tensão de +5V.
Para proteção do circuito, será utilizado um fusível ligado ao
enrolamento primário do transformador, especificado da seguinte maneira:
I 38,5mA
Como o valor mais próximo é de 100mA, serão utilizados também
fusíveis no enrolamento secundário do transformador, no valor de 200mA.
Para o teste de desempenho da fonte de alimentação projetada, foi
feita a montagem da mesma e realizados testes de regulação para variações na
carga e na rede elétrica.
Primeiramente, para cada saída regulada foram conectados resistores
simulando a carga do circuito, baseado no levantamento do consumo de
corrente dos circuitos a serem alimentados pela fonte.
Para a fonte de +9V, o valor de tensão de saída ficou em +8,98V com
ripple inferior a 10 mV, que corresponde a 0,11%. Para a fonte de –9V, o
valor de tensão de saída ficou em -9,07V para um mesmo nível de ripple. E a
fonte de +5V, teve um valor de tensão de saída de +4,97V, com um ripple
inferior a 0,1% que corresponde a 5mV.
Para o teste de regulação de carga, foi variado o valor nominal do
resistor acoplado à saída de cada fonte em mais de 50% e foi observado que os
níveis de tensão e ripple mantiveram-se inalterados se comparados com os
valores anteriores.
Para o teste de regulação para alterações na rede elétrica, foi utilizado
um transformador variador de tensão marca STP, tipo ATV-215-M, de entrada
220V e saída de 0 a 240V.
Com resistores simulando carga nominal, foi variada primeiramente a
tensão de alimentação da fonte de 220V até 240V, não havendo alteração
perceptível na tensão das saídas reguladas da fonte. Logo após foi variada a
tensão de entrada de 220V a 180V, também sem alteração perceptível. Os
níveis de tensão CA variados na entrada da fonte foram baseados na tensão da
rede elétrica. Deseja-se que não tenha variações superiores a 10% (de 198V a
242V).
21
3.2 Conversor Digital-Analógico
C4 100n C5 R6
DAC 0808 100n 5K
U4 74HC573 1 16
20 10 NC COMP
2 VCC GND 19 12 C6
3 D0 Q0 18 11 A8 LSB 100n
4 D1 Q1 17 10 A7 13
5 D2 Q2 16 9 A6 VCC 2
6 D3 Q3 15 8 A5 GND
7 D4 Q4 14 7 A4 4
8 D5 Q5 13 6 A3 I OUT
9 D6 Q6 12 5 A2
11 D7 Q7 A1 MSB R10
1 LE 3 15 5K
OE VEE VREF- 14
VREF+
22
Onde:
Vfs
VLSB (3.0)
255
5V
VLSB
255 VLSB 0,02V
(National. 1995)
Precisão do circuito:
23
3.3 Conversor Analógico-Digital
O conversor A/D deve ter no mínimo duas entradas, para que se possa
fazer leitura de tensão e corrente na saída da fonte, o conversor A/D escolhido
foi o ADC0808. Produzido pela National Semiconductors, é um conversor de
8 portas analógicas e 8 bits, possui alta impedância nas entradas analógicas e
TRI-STATE nas saídas digitais. Possui as seguintes características:
Fácil interfaceamento com microcontroladores.
Não necessita de ajuste de zero ou fim de escala.
Saídas digitais TTL.
Resolução: 8 bits
Baixo consumo: 15mW
Tempo de conversão: 100 us
No projeto são utilizadas somente duas das oito entradas analógicas
disponíveis neste componente, as demais entradas e os pinos de controle das
mesmas serão são ligadas ao terra. O circuito foi montado de acordo com a
recomendação do fabricante. Suas entradas analógicas estão conectadas aos
circuitos condicionadores de sinal de leitura de tensão e corrente. As saídas
digitais estão ligadas diretamente a uma porta do microcontrolador e seus
pinos de controle, de mesma forma, porem, ligados à outra porta. O esquema
de ligação do A/D pode ser visto na Figura 6, a seguir.
U1 ADC0808
17 26
D0 IN0 A/D_IN0
14 27
D1 IN1 A/D_IN1
15 28
8 D2 IN2 1
18 D3 IN3 2
19 D4 IN4 3
20 D5 IN5 4
21 D6 IN6 5
D7 IN7
10
CLK
25
A0 24
A1 23
A2 7
EOC 22
VCC ALE 9
OE 6
12 START
REF+ 16
REF-
11 13
VCC C7 GND
1n
24
Um conversor A/D para funcionar corretamente necessita de vários
sinais de controle, o ADC 0808, deve ter a sinalização conforme o gráfico da
figura 7, esta sinalização é feita via software pelo microcontrolador.
25
Precisão do circuito
Vfs
VLSB (3.0)
255
5V
VLSB
255 VLSB 0,02V
5V
VLSB
255 VLSB 0,02V
26
3.4 Display
27
3.4.1 Observações
28
3.5 Microcontrolador
29
3.6 Teclado
O teclado foi projetado para atender ao usuário com oito teclas para
executar várias funções que serão descritas a seguir. A figura 9 demonstra
como ficou o seu layout.
30
3.6.1 Síntese de funcionamento do teclado:
Observação:
Os possíveis ruídos gerados pelas teclas, são tratados, via software
através de um delay na rotina de leitura das teclas, desta forma, evitando que
uma tecla pressionada, não seja interpretada pelo microcontrolador, como se
fosse pressionada várias vezes.
31
3.7 Circuitos condicionadores de sinal
V SAIDA DA FONTE
A/D_IN0
C9 Trimpot
20K
1uF
20Vcc
R R 20 K
1mA
Assim foi utilizado um trimpot de 20 K.
32
3.7.2 Circuito para adequação do sinal de corrente de saída da fonte
A leitura da corrente de saída será feita através de um resistor shunt
na saída da fonte e um amplificador operacional trabalhando de modo
diferencial, conforme a Figura 11.
R6
12k
9 VCC
U5A
R7
4
TL082 R-Shunt
- 2 1k5
1
A/D
+ 3
R8
R-Shunt
1k5
8
R5
-9 VCC
C3 C2 12k
100n 100n
33
Vi max 700mV Vo max 5V
VI max
AV (2.1)
Vo max
5V
AV AV 7,14
700mV
R1 1,5 K
R2
Vo Vi max (2.2)
R!
R2
5V 700mV assim : R2 10,7 K
1,5 K
(Pertence, A. J.,1990)
34
3.7.3 Circuito para adequação do sinal de referência para controle da
tensão de saída da fonte
Este circuito foi implementado de forma que possa ser ajustado o seu
ganho, para que se adapte à tensão de referência necessária em cada circuito
que a interface microcontrolada possa ser utilizada.
Foi utilizado um amplificador operacional, funcionando como
amplificador inversor, de forma que o ganho possa ser ajustado, na Figura 12,
pode-se observar o diagrama elétrico do circuito.
R9
50K
R1 U6B
2k2 6
D/A
-
7
V. Referência
5 +
TL082
Z i R1 (2.3)
R2
AV (2.4)
R1
Estipulando o valor de R1= 2,2K e para um ganho de até 10 vezes
tem-se:
R2
10 R2 22 K
2 .2 K
35
3.7 Montagem do hardware da interface microcontrolada
36
Para um melhor entendimento, o hardware do projeto pode ser visto
conforme mostra o diagrama de blocos da figura 13.
Fonte de
Alimentação
Leitura
de
K Tensão
Display LCD
Conv.
A/D Leitura
de
K Corrente
.C.
89s8252
Conv. Tensão de
Teclado D/A
K Referência
37
O esquema elétrico do projeto é apresentado na figura 14, onde pode
ser observado todos os circuitos da interface interligados.
V SAIDA DA FONTE
SW5
UP J1 R17 20K
1k Trim pot
SW6 C11
SW7 Display-16x2 C
RIGHT
LEFT VCC D2
LED
10
12
13
14
15
16
11
1
2
3
4
5
6
7
8
9
SW8
C1
100n 1
SW1 SW2 DOWN SW3 SW4
C68
100uF R6
ON/ENTER 5V 13.8 V OFF POT 2
R1 U1 ADC0808
12k
17 26
14 D0 IN0 27 15 VCC
15 D1 IN1 28
8 D2 IN2 1
18 D3 IN3 2
D4 IN4 U5A
VCC 19 3 R7
20 D5 IN5 4 1k5
4
D6 IN6 TL082
21 5 2
PORTLEFT-L
-
D7 IN7 1
10 3
PORTLEFT-L
+
CLK
10K 25 R8
1 16 A0 24 1k5
8
2 15 VCC A1 23
3 14 A2 7
4 13 EOC 9
5 12 OE 22
6 11 ALE 6 R5
7 10 12 START C3 C2 12k
8 9 REF+ 16 1n 1n -15 VCC
REF-
11 13 -15 VCC
R-PACK VCC GND
C7 100n
15 VCC
VCC
C8 100n C67
DAC 0808 100n R17
U4 74HC573 1 16 5K R9
U11 AT89S8252 20 10 NC COM P 50K
21 39 2 VCC GND 19 12
22 P2.0/A8 P0.0/AD0 38 3 D0 Q0 18 11 A8 LSB C66
23 P2.1/A9 P0.1/AD1 37 4 D1 Q1 17 10 A7 13 100n
24 P2.2/A10 P0.2/AD2 36 5 D2 Q2 16 9 A6 VCC 2
25 P2.3/A11 P0.3/AD3 35 6 D3 Q3 15 8 A5 GND R1 U6B
26 P2.4/A12 P0.4/AD4 34 7 D4 Q4 14 7 A4 4 2k2 6 -
27 P2.5/A13 P0.5/AD5 33 8 D5 Q5 13 6 A3 I OUT 7
P2.6/A14 P0.6/AD6 D6 Q6 A2 V. Ref
28 32 9 12 5 R4 5 +
P2.7/A15 P0.7/AD7 11 D7 Q7 A1 MSB R16 2k2
10 1 1 LE 3 15 5K
11 P3.0/RXD P1.0/T2 2 OE VEE VREF- 14 TL082
12 P3.1/TXD P1.1/T2-EX 3 VREF+
13 P3.2/INT0 P1.2 4
14 P3.3/INT1 P1.3 5
15 P3.4/T0 P1.4/SS 6
16 P3.5/T1 P1.5/M OSI 7
17 P3.6/WR P1.6/M ISO 8
P3.7/RD P1.7/SCK
30 19 CRYSTAL VCC
29 ALE/PROG XTAL1 18 Y1 VCC
VCC PSEN XTAL2
31 C5
20 EA/VPP 9 33pF SW9
GND RST RESET
40 C6
VCC NA
R10 33pF R11
NF
1k 10k
C13 R3
10uF 22k D1
DIODE
C9
100n
R14 R15 R13 R12
10k 10k 10k 10k R2
10k Q1
Q2N6052
38
CAPÍTULO 4 – IMPLEMENTAÇÃO DO SOFTWARE
39
4.1 Fluxograma:
40
Fluxograma:
Início
Inicializa Microcontrolador
e display.
Mensagem de
inicialização
Lê teclado.
Tecla (ENTRA)
N
pressionada?
ão
Si
m
Mensagem no Display
Tecla (DESLIGA)
Si pressionada? N
m ão
Si
m
Continuação.
41
Escreve no display
e no D/A.
Lê A/D e escreve
no display
Lê teclado.
Tecla (ENTRA) N
pressionada? ão
Si
m
Tecla (DESLIGA)
Si pressionada? N
m ão
Si
m
Retorna ao inicio.
42
CAPÍTULO 5 – TESTES E RESULTADOS
Testes de software
Para os testes de software, primeiramente foram testadas todas as
funções associadas a cada uma das teclas, bem como, as leituras de tensões e
correntes através de amostras conhecidas.
O software funcionou corretamente, em todas as funções associadas
às teclas, as leituras de tensão e corrente também foram plenamente
satisfatórias.
43
TENSÃO AJUSTADA EM VOLTS TENSÃO OBTIDA EM VOLTS
0 0,001
0,5 0,119
1 0,239
1,5 0,377
2 0,496
2,5 0,614
3 0,750
3,5 0,870
4 1,008
4,5 1,127
5 1,245
5,5 1,374
6 1,494
6,5 1,612
7 1,751
7,5 1,869
8 2,005
8,5 2,125
9 2,243
9,5 2,382
10 2,500
10,5 2,608
11 2,740
11,5 2,866
12 3,005
12,5 3,123
13 3,239
13,5 3,378
14 3,497
14,5 3,616
15 3,754
15,5 3,863
16 4,002
16,5 4,121
17 4,240
17,5 4,377
18 4,493
18,5 4,612
19 4,751
19,5 4,870
19,9 4,968
44
TENSÃO AJUSTADA X TENSÃO
FORNECIDA
6,000
TENSÃO FORNECIDA EM (V)
5,000
4,000
3,000
2,000
1,000
-
0 5 10 15 20 25
TENSÃO AJUSTADA EM (V)
45
Para as leituras de tensão, foram utilizados, uma fonte ajustável da
Tektronix, CPS250 e um multímetro FLUKE, 867B. Foram ajustadas as
tensões na fonte e lidas com o multímetro e com a interface, os resultados
obtidos foram plenamente satisfatórios e podem ser observados na tabela da
figura 18 e no gráfico da figura 19.
46
16,52 16,5
17,026 17
17,513 17,5
18,009 18
18,501 18,5
19,016 19
19,514 19,5
20,002 20
Figura 18: Tabela, Tensão lida pelo multímetro X Tensão lida pela interface.
25
20
Tensão Lida (V)
15
10
0
0 5 10 15 20 25
Tensão aplicada (V)
Figura 19: Gráfico: Tensão lida pelo multímetro X Tensão lida pela interface.
47
Para as leituras de corrente, foi utilizado, uma fonte ajustável da
Tektronix, CPS250, um multímetro FLUKE, 867B e um divisor resistivo, para
simular o resistor shunt da saída da fonte. Foram ajustadas as tensões na fonte
e lidas com o multímetro e com a interface a queda de tensão sobre o resistor,
conforme a figura 20. Os resultados obtidos foram plenamente satisfatórios e
podem ser observados na tabela da figura 21 e no gráfico da figura 22.
VCC_ARROW
R1
10K
Leitura de tensão
R2
1K
Leitura de tensão
R3
1K
48
TENSÃO SOBRE O LEITURA DE
RESISTOR SHUNT CORRENTE
0,019 1
0,039 2
0,061 3
0,08 4
0,102 5
0,121 6
0,142 7
0,161 8
0,182 9
0,203 10
0,224 11
0,244 12
0,264 13
0,284 14
0,305 15
0,324 16
0,345 17
0,366 18
0,386 19
0,406 20
0,427 21
0,446 22
0,469 23
0,488 24
0,509 25
0,53 26
0,55 27
0,57 28
0,59 29
0,609 30
Figura 21: Tabela, Tensão lida pelo multímetro X Corrente mostrada pela
Interface.
49
GRAFICO TENSÃO DIFERENCIAL X CORRENTE
0,7
0,6
TENSÃO DIFERENCIAL
0,5
0,4
0,3
0,2
0,1
0
0 5 10 15 20 25 30 35
CORRENTE EM AMPERES
50
CAPÍTULO 6 - DISCUSSÃO E CONCLUSÕES
51
BIBLIOGRAFIA
[1] SILVA, Vidal P. Aplicações Práticas do Microcontrolador 8051. São Paulo, SP.
Edgar Blücher. 1994.
[3] SCHILDT, Herbert. Linguagem “C”, Guia do Usuário. São Paulo, SP.
MC.Graw Hill. 1986
[6] TOCCI, Ronald J., & WINDMER, Neal S. Digital Sistems Principles and
Aplications. 7ª ed. Columbus, Ohio, USA. Prentice-Hall. 1998.
[11] MELLO, Luiz F.P. Análise e Projeto de Fontes Chaveadas. São Paulo SP.
Érica. 1996.
52
Anexo 1
/***************************************
DECLARAÇÃO DAS FUNÇÕES UTILIZADAS
***************************************/
void delay (unsigned char);
void delay_s (void);
void disp (char *, unsigned char);
void inicio (void);
unsigned char teclado (void);
void preset_5 (void);
void preset_12 (void);
void AD (void);
unsigned char tecla=0;
char a=0, b=0, c=0, espera, posicao;
53
/***************************************
DECLARAÇÃO DAS VARIAVEIS GLOBAIS
***************************************/
code char linha1[]=" PARA LIGAR ";
code char linha2[]="PRESSIONE ENTRA";
code char linha3[]="AJUSTE A TENSAO ";
code char linha4[]=" DESEJADA ";
code char linha5[]=" 00,0 VOLTS ";
code char linha6[]="ENTRA P/ CONFIRM";
code char linha7[]="TENSAO V";
code char linha8[]="CORRENTE A";
code char linha9[]="PRESET 5,0 VOLT";
code char linha10[]="PRESET 13,8 VOLT";
54
while(1) //LAÇO INFINITO
{
a=b=c=0; espera=0; ajuste=0; valor=0;
while (ajuste!=7)
{
disp(linha5,0x80); //MENSAGENS NO DISPLAY
disp(linha6,0xC0);
tecla=0;
posicao=0x83;
RS=0;
// POSICIONAMENTO DO DISPLAY
DADO = 0x0F; E=1; delay(5); E=0;
DADO=posicao; E=1; delay(5); E=0;
while (espera!=10)
{
tecla = 0;
teclado();// LEITURA DO TECLADO
algar=posicao;
switch (tecla)
{
case 'U': valor ++ ; break;
case 'D': valor -- ; break;
case 'R': posicao ++ ; break;
case 'L': posicao -- ; break;
case '1': espera =7 ; break;
case '2': preset_5() ; break;
case '3': preset_12() ; break;
case '4': return ;
}
switch (posicao)
{
case 0x83:
{ // POSICIONAMENTO DO DISPLAY
RS=0;
DADO=posicao; E=1; delay(5); E=0;
if (valor>=2)
{valor=0;}
if (valor<=(-1))
{valor=1;}
a=valor*100;
RS=1; DADO=(valor+48); E=1; delay(5); E=0;
RS=0; DADO=0x83; E=1; delay(5); E=0;
} break;
55
case 0x84:
{ // POSICIONAMENTO DO DISPLAY
RS=0;
DADO=posicao; E=1; delay(5); E=0;
if (valor<=(-1))
{valor=9;}
if (valor>=10)
{valor=0;}
b=valor*10;
// ESCRITA DO VALOR LIDO NO TECLADO
RS=1;
DADO=(valor+48); E=1; delay(5); E=0;
RS=0; DADO=0x84; E=1; delay(5); E=0;
} break;
case 0x86:
{ // POSICIONAMENTO DO DISPLAY
RS=0;
DADO=posicao; E=1; delay(5); E=0;
if (valor<=(-1))
{valor=9;}
if (valor>=10)
{valor=0;}
c=valor;
// ESCRITA DO VALOR LIDO NO TECLADO
RS=1;
DADO=(valor+48); E=1; delay(5); E=0;
RS=0; DADO=0x86; E=1; delay(5); E=0;
} break;
case 0x82:
{ // POSICIONAMENTO DO DISPLAY
posicao=0x86;
RS=0;
DADO=posicao; E=1; delay(5); E=0;
} break;
case 0x85:
{ POSICIONAMENTO DO DISPLAY
if (tecla == 'R') posicao=0x86;
if (tecla == 'L') posicao=0x84;
RS=0; DADO=posicao; E=1; delay(5); E=0;
} break;
case 0x87:
{ //POSICIONAMENTO DO DISPLAY
posicao=0x83;
RS=0;DADO=posicao; E=1; delay(5); E=0;
} break; }
56
if (algar!=posicao){valor=0;}
if (espera==7)
{
DA=255*(a+b+c); //CÁLCULO DA TENSÃO CORRESPONDENTE
DA = DA/200;
tensao=DA; //ESCRITA NO D/A
LE=1; delay(5); LE=0;
espera=0;
tensao=0;
tecla=0;
disp(linha7,0x80); //MENSAGENS NO DISPLAY
disp(linha8,0xC0);
while (tecla!='1')
{
teclado(); //AGUARDA TECLA "ENTRA"
AD(); //LEITURA NO D/A
}
espera=10;
ajuste=7;
}
}
}
}
}
/***************************************
INICIALIZAÇÃO DO DISPLAY
***************************************/
void inicio (void)
{
RS = 0;
DADO = 0x38; E=1; delay(5); E=0;
DADO = 0x38; E=1; delay(5); E=0;
DADO = 0x06; E=1; delay(5); E=0;
DADO = 0x0C; E=1; delay(5); E=0;
DADO = 0x01; E=1; delay(5); E=0;
}
57
/***************************************
ESCRITA DE STRINGS NO DISPLAY
***************************************/
void disp (char *txt, unsigned char pos)
{
unsigned char j;
RS = 0;
DADO = pos; E=1; delay(5); E=0;
RS = 1;
for (j=0; txt[j]; j++)
{
DADO = txt[j]; E=1; delay(5); E=0;
}
}
/***************************************
TEMPORIZADOR PROGRAMÁVEL (0-255ms)
***************************************/
void delay (unsigned char tempo)
{
unsigned char i;
for (i=0;i<tempo;i++)
{
TH0 = 0xFC;
TL0 = 0x66;
TR0=1;
while(!TF0);
TR0=0;
TF0=0;
}
}
58
/**************************************
Delay s
**************************************/
/***************************************
LEITURA DO TECLADO
***************************************/
unsigned char teclado (void)
{ unsigned char aux=0;
coluna_b=1;
coluna_a=0;
delay(1);
aux=P3;
delay(90);
switch(aux)
{ case 0xFA: tecla='1'; delay(10); break;
case 0x7A: tecla='1'; delay(10); break;
case 0xBA: tecla='1'; delay(10); break;
case 0x3A: tecla='1'; delay(10); break;
case 0xF6: tecla='2'; delay(10); break;
case 0x76: tecla='2'; delay(10); break;
case 0xB6: tecla='2'; delay(10); break;
case 0x36: tecla='2'; delay(10); break;
case 0xEE: tecla='3'; delay(10); break;
case 0x6E: tecla='3'; delay(10); break;
case 0xAE: tecla='3'; delay(10); break;
case 0x2E: tecla='3'; delay(10); break;
case 0xDE: tecla='4'; delay(10); break;
case 0x4E: tecla='4'; delay(10); break;
case 0x9F: tecla='4'; delay(10); break;
case 0x1E: tecla='4'; delay(10); break;
}
59
coluna_a=1;
coluna_b=0;
aux=P3;
delay(90);
switch(aux)
{ case 0xF9: tecla='L'; delay(10); break;
case 0x79: tecla='L'; delay(10); break;
case 0xB9: tecla='L'; delay(10); break;
case 0x39: tecla='L'; delay(10); break;
case 0xF5: tecla='D'; delay(10); break;
case 0x75: tecla='D'; delay(10); break;
case 0xB5: tecla='D'; delay(10); break;
case 0x35: tecla='D'; delay(10); break;
case 0xED: tecla='U'; delay(10); break;
case 0x6D: tecla='U'; delay(10); break;
case 0xAD: tecla='U'; delay(10); break;
case 0x2D: tecla='U'; delay(10); break;
case 0xDD: tecla='R'; delay(10); break;
case 0x4D: tecla='R'; delay(10); break;
case 0x9D: tecla='R'; delay(10); break;
case 0x1D: tecla='R'; delay(10); break; }
coluna_b=1;
}
/*****************************************
Preset de 5 volts
*****************************************/
void preset_5 (void)
{
a=0; b=50; c=0;
posicao=0x8b;
RS=0;
DADO = 0x0C; E=1; delay(5); E=0; // DESLIGAR O CURSOR
DADO=posicao; E=1; delay(5); E=0;// POSICIONAMENTO DO DISPLAY
disp(linha9,0x80);
while (tecla!='1')
{
teclado();
}
espera=7;
}
60
/*****************************************
Preset de 12 volts
*****************************************/
void preset_12 (void)
{ a=100; b=30; c=8;
posicao=0x8b;
RS=0;
DADO = 0x0C; E=1; delay(5); E=0; // DESLIGAR O CURSOR
DADO=posicao; E=1; delay(5); E=0;// POSICIONAMENTO DO DISPLAY
disp(linha10,0x80);
while (tecla!='1')
{
teclado();
}
espera=7;}
/*******************************************
Rotina de leitura AD
*******************************************/
void AD (void)
{ unsigned char leitura=0, alg=0;
unsigned int val=0;
/* TENSÃO */
In_x=1;
Start =1; Start =0;
while(EOC); while(!EOC);
OE=1; leitura=tensao; OE=0;
// CÁLCULO E ESCRITA NO DISPLAY
val=((leitura*200)/255);
alg=(val/100)+48;
posicao=0x89;
RS=0; DADO = 0x0C; E=1; delay(5); E=0; // DESLIGAR O CURSOR
DADO=posicao; E=1; delay(5); E=0; // POSICIONAMENTO DO DISPLAY
RS=1; DADO=alg; E=1; delay(5); E=0; // ESCRITA DO VALOR NO DISPLAY
alg=((val%100)/10)+48;
posicao=0x8A;
RS=0; DADO=posicao; E=1; delay(5); E=0; // POSICIONAMENTO DO DISPLAY
RS=1; DADO=alg; E=1; delay(5); E=0; // ESCRITA DO VALOR NO DISPLAY
posicao=0x8B;
alg=',';
RS=0; DADO=posicao; E=1; delay(5); E=0; // POSICIONAMENTO DO DISPLAY
RS=1; DADO=alg; E=1; delay(5); E=0; // ESCRITA DO VALOR NO DISPLAY
alg=((val%100)%10)+48;
posicao=0x8C;
RS=0; DADO=posicao; E=1; delay(5); E=0; // POSICIONAMENTO DO DISPLAY
RS=1; DADO=alg; E=1; delay(5); E=0; // ESCRITA DO VALOR NO DISPLAY
61
/* CORRENTE */
tensao=0xff;
In_x=0;
Start = 1; Start = 0;
while(EOC); while(!EOC);
OE=1; leitura=tensao; OE=0;
62