Post on 02-Feb-2019
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO S UL
FACULDADE DE ENGENHARIA
CURSO DE ENGENHARIA ELÉTRICA
DISCIPLINA DE TRABALHO DE INTEGRAÇÃO
CONTROLE REMOTO DE TEMPERATURA POR MEIO DE UM WEBSERVER
ALUNO: MARLON LEANDRO MORAES
ORIENTADOR: JÚLIO CÉSAR MARQUES DE LIMA
Porto Alegre, novembro de 2005.
2
Dedicatória
Este trabalho é dedicado às pessoas que tornaram este sonho possível e real, é dedicado a aqueles que não mediram esforços para que hoje eu estivesse aqui, é dedicado aos únicos
incentivadores incondicionais que sempre tive. Este trabalho é dedicado a vocês, meus amados pais LEONI & SANDRA e a você minha
querida irmã THAIANA . Vocês sem sombra de dúvida fizeram toda a diferença nessa jornada, e tenham certeza de uma coisa:
ESTA CONQUISTA É TÃO MINHA, QUANTO DE VOCÊS!
3
Agradecimentos
Agradeço imensamente aos amigos de todas as horas e por que não dizer quase irmãos
NIÉGE OLIVEIRA , RAFAEL MARTINS, RAFAEL BOSSLE, MARCELO PARMENTIER,
MICHELE MORAES e LETÍCIA MARTINS , pelos conselhos, pela força e por vocês estarem
do meu lado neste e em qualquer outro projeto da minha vida.
Aos amigos do peito Everton Crestani, Gabriela Cordeiro, Felipe Borba, Graziella Ferst,
Cristiano Santarém, Letícia de Cássia, Laura Castilho, Daniella Meneghotto, Adriano Eli,
Carolina Bossle, Sabrina Chies, Luciana Alcover, Fernanda Dallarosa e Sabrina Flores pela
atenção e carinho.
Aos colegas de luta Leonardo Marquezini, Evandro Brambila, Filipe Sehn, Rafael
Mosmann, Diolinei Alves, Gabriel Melchiors, Piero Ferri, Arthur Bortolin Beskow (Jesus), Luiz
Arthur Carlin, Marlo Vendramin, Edar Augusto Melo, Edison Pinheiro, Daniel Trés, Ever Jara,
Igor Kopf, Rogério Fracaro, Simon Pitta e Eduardo Vinãs pelo coleguismo e amizade.
Aos profissionais e amigos Eng. Janaina Nunes Souza, Eng. Rogério da Fré Souza, Eng.
Valerio Waszcenko por acreditarem e apostarem sempre no meu potencial.
Aos mestres Prof. Dr. Eng. Júlio César Marques de Lima e Prof. Dr. Eng. Anderson
Royes Terroso, pelo empenho, dedicação e acima de tudo paciência.
Ao mestre, amigo e avô Sebastião Martins, pelos ensinamentos de vida;
Aos quase pais Ana Dellamora, Angela Parmentier, Regina Martins e Ivan Bossle pela
adoção.
Ao Prof. Dr. Eng. Paulo Renato Perez dos Santos, e aos técnicos Airton Soares Nobre e
Jaqueval Senna de Ávila, pela valiosa ajuda na execução da montagem deste projeto.
A todos vocês o meu muito obrigado!!!
4
Resumo
Este projeto de Controle de Temperatura por Meio de um Webserver foi desenvolvido
por mim sob orientação do Prof. Eng. Júlio César Marques de Lima como pré-requisito para a
disciplina de Trabalho de Integração do curso de Engenharia Elétrica da Pontifícia Universidade
Católica do Rio Grande do Sul, realizado no segundo semestre do ano de 2005. Ele visa o
controle de temperatura através de um sistema remoto denominado webserver. Todo o controle é
realizado através de um website. Esta inferface com o usuário permite que diversos parâmetros
importantes para o controle sejam visualizados e alterados dependendo da necessidade imposta
pelo sistema ou por escolha do usuário.
5
Sumário
1. Introdução..............................................................................................................................10 2. Conceitos Básicos .................................................................................................................11
2.1.1. Temperatura do Ambiente.....................................................................................11 2.1.2. Temperaturas de Referência..................................................................................11 2.1.3. Ambiente de Controle ...........................................................................................12 2.1.4. Sensor ....................................................................................................................12 2.1.5. Controle.................................................................................................................12 2.1.6. Atuador..................................................................................................................12 2.1.7. Interface de Ethernet .............................................................................................13 2.1.8. Interface do Usuário ..............................................................................................13
3. Placa de Aquisição e Controle ..............................................................................................14 3.1. Introdução......................................................................................................................14 3.2. Microcontrolador MSC1211Y ......................................................................................15
3.2.1. Portas de I/O (P0, P1, P2, P3) ...............................................................................16 3.2.2. Oscilador Interno...................................................................................................16 3.2.3. Pino de Reset (RST)..............................................................................................17 3.2.4. Memória ................................................................................................................17 3.2.5. Timer/Contador .....................................................................................................17 3.2.6. Comunicação Serial...............................................................................................18 3.2.7. Interrupção ............................................................................................................18
3.3. Protocolo I2C (Inter-IC Bus).........................................................................................18 3.3.1. Serial Data (SDA) .................................................................................................19 3.3.2. Linha de Clock (SCL) ...........................................................................................19 3.3.3. Sinal de Start .........................................................................................................19 3.3.4. Sinal de Stop..........................................................................................................19 3.3.5. Protocolo Master-Slave .........................................................................................20 3.3.6. Endereçamento (Slave Address) ...........................................................................20 3.3.7. Acknowledge (ACK).............................................................................................20
3.4. Sensor de Temperatura TMP101...................................................................................21 3.5. Porta I2C de I/O PCF8574 ............................................................................................22 3.6. Display LCD .................................................................................................................23
4. Rotinas de Aquisição e Controle...........................................................................................25 4.1. Variáveis e Posições de Memória .................................................................................25 4.2. Rotina de Inicialização: START ...................................................................................25
4.2.1. Sub-Rotina de Inicialização do Display: INITLCD..............................................26 4.2.2. Sub-Rotina de Inicialização do Protocolo I2C: INITI2C......................................27 4.2.3. Sub-Rotina de Inicialização da Porta Serial: INITSERIAL..................................28 4.2.4. Sub-Rotina de Inicialização do TMP101: INIT_TMP101....................................29
4.3. Rotina de Leitura da Temperatura: LE_TEMP.............................................................30 4.3.1. Sub-Rotina: LE_DADO ........................................................................................30 4.3.2. Sub-Rotina: TESTE_NEG ....................................................................................32
6
4.3.3. Sub-Rotina: CONVERTE .....................................................................................32 4.3.4. Sub-Rotina: MOSTRA..........................................................................................34 4.3.5. Sub-Rotina: NUM_NEG.......................................................................................35 4.3.6. Sub-Rotina: CONVERTE_NEG...........................................................................35 4.3.7. Sub-Rotina: MOSTRA_NEG................................................................................37 4.3.8. Sub-Rotina: DECIMAL ........................................................................................38 4.3.9. Sub-Rotina: TESTE_TEMP..................................................................................39 4.3.10. Sub-Rotina: MENSAGEM....................................................................................41
4.4. Rotinas de Acionamento ...............................................................................................43 4.4.1. Sub-Rotina de Acionamento do Relé: LIGARELE ..............................................43 4.4.2. Sub-Rotina de Desligamento do Relé: DESLIGARELE ......................................44
4.5. Protocolo de Controle....................................................................................................44 4.6. Programa Principal: LOOP_MAIN...............................................................................45
4.6.1. Sub-Rotina: LIG....................................................................................................47 4.6.2. Sub-Rotina: DESLIG ............................................................................................47 4.6.3. Sub-Rotina: COMPR.............................................................................................48 4.6.4. Sub-Rotina: SUP ...................................................................................................48 4.6.5. Sub-Rotina: INF ....................................................................................................49 4.6.6. Sub-Rotina: TEMP................................................................................................49
5. Interface de Ethernet .............................................................................................................50 5.1. Zilog eZ80 Webserver...................................................................................................50
5.1.1. Mapeamento de Memória......................................................................................53 6. Sistema Mecânico de Refrigeração .......................................................................................54
6.1. Condensador..................................................................................................................54 6.2. Filtro Secador ................................................................................................................54 6.3. Elemento de Controle (Tubo Capilar) ...........................................................................54 6.4. Evaporador ....................................................................................................................55 6.5. Compressor....................................................................................................................55 6.6. Características do Compressor ......................................................................................56 6.7. Ligação do Compressor.................................................................................................56
7. Conclusões ............................................................................................................................58 8. Referências Bibliográficas ....................................................................................................59
7
Lista de Figuras
Figura 2.1 – Diagrama de Blocos da Malha Fechada do Sistema.................................................13 Figura 3.1 – Vista Superior da Placa de Aquisição e Controle. ....................................................14 Figura 3.2 – Pinagem do MSC1211. .............................................................................................16 Figura 3.3 – Diagrama de Tempo dos Sinais de Start e Stop........................................................20 Figura 3.4– Seqüência de Envio e Recebimento de Dados...........................................................21 Figura 3.5 – Comunicação Completa I2C.....................................................................................21 Figura 3.6 – Pinagem do TMP101. ...............................................................................................22 Figura 3.7 – Sonda de Temperatura. .............................................................................................22 Figura 4.1 – Fluxograma da Inicialização do Sistema. .................................................................26 Figura 4.2 – Fluxograma da Sub-Rotina de Inicialização do Display. .........................................27 Figura 4.3 – Fluxograma da Sub-Rotina de Inicialização do Protocolo I2C. ...............................28 Figura 4.4 – Fluxograma da Sub-Rotina de Inicialização da Porta Serial. ...................................28 Figura 4.5 – Fluxograma da Inicialização do Sensor TMP101.....................................................29 Figura 4.6 – Fluxograma da Rotina de Leitura da Temperatura. ..................................................30 Figura 4.7 – Fluxograma da Sub-Rotina de “Le_Dado”...............................................................31 Figura 4.8 – Fluxograma da Sub-Rotina “Teste_Neg”. ................................................................32 Figura 4.9 – Fluxograma da Sub-Rotina “Converte”. ...................................................................33 Figura 4.10 – Fluxograma da Sub-Rotina “Mostra”. ....................................................................34 Figura 4.11 – Fluxograma da Sub-Rotina “Num_Neg”. ...............................................................35 Figura 4.12 – Fluxograma da Sub-Rotina “Converte_Neg”. ........................................................36 Figura 4.13 – Fluxograma da Sub-Rotina “Mostra_Neg”.............................................................37 Figura 4.14 – Fluxograma da Sub-Rotina “Decimal”. ..................................................................39 Figura 4.15 – Fluxograma da Sub-Rotina “Teste_Temp”.............................................................40 Figura 4.16 – Mensagens Básicas do Display...............................................................................41 Figura 4.17 – Fluxograma da Sub-Rotina “Mensagem”. ..............................................................42 Figura 4.18 – Fluxograma da Sub-Rotina “Ligarele”. ..................................................................43 Figura 4.19 – Fluxograma da Sub-Rotina “Desligarele”. .............................................................44 Figura 4.20 – Fluxograma do Programa Principal “Loop_Main”.................................................46 Figura 4.21 – Fluxograma da Sub-Rotina “Lig”. ..........................................................................47 Figura 4.22 – Fluxograma da Sub-Rotina “Deslig”. .....................................................................47 Figura 4.23 – Fluxograma da Sub-Rotina “Compr”. ....................................................................48 Figura 4.24 – Fluxograma da Sub-Rotina “Sup”. .........................................................................48 Figura 4.25 – Fluxograma da Sub-Rotina “Inf”. ...........................................................................49 Figura 4.26 – Fluxograma da Sub-Rotina “Temp”. ......................................................................49 Figura 5.1 – Vista Superior da Placa eZ80 Webserver. ................................................................51 Figura 5.2 – Diagrama de Blocos do eZ80 Webserver. ................................................................52 Figura 5.3 – Mapeamento de Memória do processador eZ80.......................................................53 Figura 6.1 – Sistema Báscio de Refrigeração. ..............................................................................55 Figura 6.2 – Compressor EM45HNR............................................................................................56 Figura 6.3 – Esquemático de Ligação do Compressor..................................................................57
8
Lista de Tabelas
Tabela 3.1 – Configuração do Slave Adress do PCF8574. ...........................................................23 Tabela 3.2 – Endereços dos Caracteres no Display de LCD.........................................................23 Tabela 3.3 – Pinagem do Display de LCD....................................................................................23 Tabela 3.4 – Configuração do Display..........................................................................................24 Tabela 3.5 – Opções de Configuração do Display. .......................................................................24 Tabela 4.1 – Posições de Memória................................................................................................25 Tabela 4.2 – Tabela de combinações da parte decimal da temperatura. .......................................38 Tabela 4.3 – Comandos de Pedidos e Respostas...........................................................................45 Tabela 5.1 – Placa eZ80 Webserver..............................................................................................51 Tabela 6.1 – Características Gerais do EM45HNR.......................................................................56
9
Anexos
Anexo 1 – Esquemático da Placa de Aquisição e Controle. .........................................................60 Anexo 2 – Software da Placa de Aquisição e Controle (TCC. ASM). .........................................61
10
1. Introdução
Existem inúmeros produtos que possuem na sua temperatura de armazenamento e
estocagem um dos fatores preponderantes para o seu consumo. Outros, quando sujeitos a
variações bruscas de temperatura podem até se tornarem impróprios para o consumo, gerando
transtornos e prejuízos irremediáveis.
Sendo assim, o controle da temperatura torna-se absolutamente importante e necessário
em diversos segmentos da indústria e do ambiente doméstico.
Tendo em visda essa necessidade de controle de temperatura e que o controle manual
desta variável física além de ser bastante impreciso e sujeito a erros, pode gerar custos
excessivos e desnecessários como a dedicação exclusiva de um operador em detrimento de
outras funções mais produtivas, desenvolvemos este projeto de controle de temperatura através
de um sistema remoto, preciso e autônomo.
Neste sistema o usuário através de um website monitora a temperatura do ambiente
(protótipo implementeado em um freezer para acondicionamento de bebidas) em qualquer lugar
do mundo e pode assim que julgar necessário, configurar e/ou re-configurar as temperaturas de
referências adequadas para os produtos, além de ter ainda a possibilidade de acionar e desligar o
controle da temperatura (compressor) para a refrigeração do ambiente quando for necessário.
11
2. Conceitos Básicos
Para o bom entendimento deste projeto de controle remoto de temperatura é necessária a
compreensão de alguns termos que são bastante relevantes. Este capítulo é destinado à citação e
explicação destes termos.
2.1.1. Temperatura do Ambiente
A Temperatura do Ambiente ou simplesmente Temperatura é a principal variável deste
processo, todos os demais parâmetros são relativos a ela e é através destes parâmetro que o
sistema será controlado.
2.1.2. Temperaturas de Referência
Existem duas tempertaturas de refência neste processo, estas são chamadas de
Temperatura de Refência Baixa (TL) e Temperatura de Refência Alta (TH).
Estes dois registros tem como finalidade básica servir de dado comparativo para a
Temperatura do Ambiente, isto é, são estes dois parâmetros que servirão de referência para o
sistema determinar se o controle deve ou não ser acionado.
O projeto de CONTROLE REMOTO DE TEMPERATURA ATRAVÉS DE UM
WEBSERVER basicamente possui seis módulos principais. Cada módulo é responsável por uma
determinada função isolada do processo. Entretanto quando estes módulos são conectados,
formam uma malha fechada, e só assim é possível a realização do controle da temperatura.
A seguir temos uma descrição sucinta de cada um destes módulos tão importantes para o
sistema de controle:
12
2.1.3. Ambiente de Controle
Este sistema controla a temperatura de um ambiente de armazenamento de produtos, as
dimensões deste ambiente dependem basicamente das necessidades impostas pelo produto a ser
armazenado, no caso deste protótipo, usamos um “Freezer” de armazenamento de bebidas onde a
temperatura média é de 10ºC.
2.1.4. Sensor
O sensor é um componente fundamental em qualquer malha de controle, neste processo
não é diferente. É ele que coleta o sinal (temperatura) do ambiente de controle e o converte para
sinais elétricos digitais que são interpretados pela placa aquisição e controle.
2.1.5. Controle
Baseado nos sinais de entrada providos pelo sensor de temperatura, o controle é o
responsável pelas decisões lógicas do sistema. É este módulo que aciona e ajusta a saída do
sistema quando necessário.
No caso deste processo, o controle é realizado através de um microcontrolador que
executa algumas rotinas de testes, verificando se a temperatura do ambiente (freezer) encontra-se
acima ou abaixo das temperaturas de referência (TL e TH).
Se a temperatura estiver abaixo das temperaturas de referências o microcontrolador
desliga o compressor. Se a temperatura estiver acima da temperatura de referência o controle
aciona o compressor e se a temperatura ambiente estiver entre os limites estabelecidos (TH e TL)
o microcontrolador não muda o estado do compressor. Ou seja, foi implementado um controle do
tipo ON-OFF com histerese.
2.1.6. Atuador
Os atuadores são os componentes responsáveis pela conversão de sinais elétricos em
ações físicas, no caso deste sistema de controle de temperatura o atuador é um compressor que
quando acionado refrigera o ambiente de controle (freezer).
13
2.1.7. Interface de Ethernet
A interface de Ethernet deste conjunto faz a relação entre a placa de aquisição e controle
com o usuário, é ela que contém todos os protocolos de comunicação do sistema. Usamos para
desempenhar esta função o Zilog eZ80 Webserver.
2.1.8. Interface do Usuário
Neste projeto o usuário possui uma interface bastante simples e amigável. Através de um
website ele poderá verificar qual é o estado atual do ambiente, e quando julgar necessário
controlar seus parâmetros, isto é, ajustar as temperaturas de referências (TL e TH), bem como
ligar ou desligar o compressor para a refrigeração do ambiente de controle. Esta interface além
de ser um ambiente bastante familiar a qualquer usuário, por estar disponível na internet ele
possibilita que este controle possa ser realizado em qualquer parte do mundo, bastando o usuário
ter acesso a rede mundial de computatores.
A Figura 2.1 demonstra através de um diagrama de blocos a disposição destes módulos
na malha de controle do sistema.
Figura 2.1 – Diagrama de Blocos da Malha Fechada do Sistema.
INTERFACE DO USUÁRIO (Website)
SENSOR CONTROLE ATUADOR (Compressor)
AMBIENTE DE CONTROLE (Freezer)
Placa de Aquisição e Controle
INTERFACE DE ETHERNET (Webserver)
14
3. Placa de Aquisição e Controle
3.1. Introdução
Tendo em vista a necessidade do controle da temperatura do ambiente (freezer), surgiu
intrinsecamente a necessidade do desenvolvimento de uma placa de aquisição de dados e de
controle. Esta placa tem como principal função a coleta para análise dos dados da temperatura
ambiente, e se estes dados encontrarem-se fora da faixa de temperatura especificada pelo usuário
(TH e TL), o microcontrolador irá atuar de modo a corrigir esta situação. Este capítulo é
destinado a descrição das características gerais desta placa. A Figura 3.1 mostra a vista superior
da placa de aquisição e controle.
Figura 3.1 – Vista Superior da Placa de Aquisição e Controle.
15
3.2. Microcontrolador MSC1211Y
A placa de aquisição e controle do sistema possui o microcontrolador MSC1211Y que é
o responsável pelo processamento lógico de toda a informação. Segundo o manual técnico [1] a
família de microcontroladores MSC121X da Texas Instruments é projetada para aplicações de
alta resolução e desempenho. Esta família de dispositivos não só inclui características analógicas
de alta precisão e capacidade de processamento digital, mas também integra periféricos de
grande desempenho, o que torna o sistema bastante confiável e seguro. As principais
características de um de MSC1211Y incluem:
• Microcontrolador compatível com a família 8051;
• Memória flash integrada de 4K a 32K;
• Funções analógicas com alto desempenho;
• Periféricos com alto desempenho.
A sua funcionalidade analógica é de alta precisão. O conversor analógico/digital (ADC)
possui um nível de ruído extremamente baixo, o que permite satisfazer até mesmo as exigências
mais restritivas. O PGA (Programmable Gain Amplificier) melhora o desempenho do conversor
significativamente, possibilitando assim uma resolução efetiva da ordem de nano-volts. A tensão
de referência é integrada, permitindo soluções de alta precisão com baixo custo de
implementação, já que a necessidade de uma referência de tensão externa é descartada,
contribuindo também para a compactação do sistema.
Estas características são agregadas a outras funções analógicas, como um filtro
programável, um multiplexador e um conversor digital/analógico (DAC).
Os periféricos integrados não reduzem apenas o custo, o tempo de execução e o espaço
físico na placa de circuito impresso, mas também fazem com que exista uma interação nas
funções analógicas e digitais do sistema o tornando muito mais eficientes e confiáveis.
Outro ponto relevante está na total compatibilidade entre os dispositivos da família
MSC1211X, como a diferença entre estes microcontroladores está nas suas configurações de
memória, a migração é bastante simples e segura entre todos estes dispositivos. Um software
escrito para a versão de 4kbytes de memória do MSC1211 pode ser executado diretamente nas
versões de 8k, 16k, ou 32kbytes sem problemas de erros ou conflitos. A Figura 3.2 mostra a
pinagem do MSC1211.
16
Figura 3.2 – Pinagem do MSC1211.
O microcontrolador possui diversos periféricos internos, o que permite uma “economia”
de execução de alguns processos e funções, fazendo com que o sistema adquira uma maior
eficiência global. A seguir, alguns destes componentes serão comentados e descritos:
3.2.1. Portas de I/O (P0, P1, P2, P3)
Dos 64 pinos do MSC1211Y, 32 deles são dedicados a linhas de I/O (entrada/saída).
Estes pinos possuem relação direta com os SFR’s - Special Funtion Registers (Registradores de
Funções Especiais) P0, P1, P2, e P3. O usuário pode configurar estas linhas escrevendo 1’s ou
0’s aos bits correspondentes no SFR’s conforme a necessidade do projeto. Igualmente, o estado
atual destas linhas pode ser obtido lendo os bits correspondentes do SFR’s.
3.2.2. Oscilador Interno
Os MSC1211Y é controlado por um cristal conectado aos pinos 1 (XOUT) e 2 (XIN). A
freqüência do cristal utilizada no projeto é de 11.0592MHz, embora os MSC1211Y sejam
capazes de trabalhar com freqüências de até 33MHz. Este dispositivo têm também a
possibilidade do uso de uma fonte de clock externa para sincronização de diversos dispositivos.
17
3.2.3. Pino de Reset (RST)
Quando o pino 13 do microcontrolador é colocado em nível lógico ‘1’ durante dois ciclos
de máquina, o circuito é re-setado. Alguns dos registradores do SFR’s são zerados, as portas de
I/O são colocadas em FFh, e PC (Program Counter) é reajustado na posição 0000H. Este pino
foi conectado a um botão/switch que pode ser pressionado pelo usuário a qualquer instante
fazendo com que o sistema seja reiniciado.
3.2.4. Memória
Os MCS1211 possuem três tipos gerais de memória. Programa-los exige uma
compreensão básica destes tipos de memória:
• SFR (Registradores de Funções Especiais): Refere-se aos 128 bytes que controlam
as operações básicas do MSC1211. Estão localizados na memória RAM interna do
microcontrolador.
• Memória de Programa: É a memória que armazena o programa em execução. Esta
memória é composta por uma memória flash interna, podendo ser adicionada também
uma memória externa.
• Memória de Dados: É uma memória do tipo SRAM (Static Random Access
Memory) que pode ser interna ou externa ou ainda possuir ambos formatos. Os MSC1211
têm quatro tipos de memória de dados:
• SRAM integrada;
• SRAM externa;
• Memória de Dados Flash integrada;
• RAM interna;
3.2.5. Timer/Contador
Os MSC1211 vêm equipados com três Timers/Contadores padrões, que podem ser
controlados e configurados individualmente. O Timers/Contadores possuem três funções básicas:
1) Base de tempo entre eventos;
2) Contador de eventos;
3) Geradoras de taxas baud para a porta serial.
18
3.2.6. Comunicação Serial
A família MSC1211 dispõe de três interfaces de portas seriais. Duas delas com
características de UART e uma com características de SPI.
As portas UART podem ser configuradas para operações síncronas half-duplex ou
assíncronas full-duplex. Já a interface SPI é usada para comunicações seriais independentes, que
permitem ao microcontrolador comunicar-se sincronamente com periféricos e com outros
microprocessadores.
3.2.7. Interrupção
O MSC1211 possui entradas de interrupção externa, além de interrupções para o
atendimento aos diversos periféricos integrados, como os conversores ADC e DAC, portas
seriais, timers entre outros. Como o próprio nome implica, uma interrupção é um evento que
interrompe o programa em execução. A execução dos programas é sempre seqüencial e quando
esta seqüência é interrompida por uma interrupção, o microcontrolador se comporta como se
estivesse executando uma sub-rotina pré-definida pelo projetista e retorna ao ponto de desvio
automaticamente quando esta sub-rotina é concluída.
Tendo em vista todas estas especificações do microcontrolador, além de ser um
dispositivo extremamente compacto e ter sido desenvolvido com baixo custo, a placa de
aquisição e controle do sistema possui alta confiabilidade e velocidade de processamento
suficiente para tratar o sinal de controle o que a torna muito eficiente e precisa para esta
aplicação.
3.3. Protocolo I2C (Inter-IC Bus)
No inicio dos anos 80, a Philips (fabricante de componentes eletrônicos) com o objetivo
de simplificar a comunicação digital entre dois dispositivos, desenvolveu um sistema bastante
simples e eficaz denominado I2C (Inter-IC Bus). Conforme descrito no manual técnico [4] este
sistema se consolidou basicamente pelo fato de utilizar apenas dois canais para a comunicação e
por também dispensar o uso de hardwares externos (como decodificadores) já que a
comunicação é realizada e controlada apenas por software. Tendo em vista que o sistema de
19
aquisição e controle de dados foi todo baseado nesta tecnologia de comunicação, é importante
abordar alguns itens deste protocolo.
3.3.1. Serial Data (SDA)
É o canal de envio e recebimento de dados do sistema o qual é bidirecional (full-duplex),
é através dele que toda a comunicação é desenvolvida e verificada. Neste canal existe um padrão
de transmissão em que o bit mais significativo é sempre o primeiro a ser transmitido seguido dos
subseqüentes.
3.3.2. Linha de Clock (SCL)
Este é o canal unidirecional que fornece a cadência para a transmissão serial (clock). A
combinação dos sinais SDA e SCL é que identifica quando um bit (dado) pode ser considerado
válido. Esta condição sempre é definida quando a linha de clock está em nível lógico alto, isto é,
sempre que a linha de clock (SCL) estiver alta, sabemos que o canal SDA possui um dado válido
(nível lógico 1 ou 0).
3.3.3. Sinal de Start
Para dar início a uma transmissão o seguinte protocolo deverá ser reconhecido: Enquanto
a linha SCL se mantém em nível lógico alto, a linha SDA deve passar de nível alto para baixo
(transição). Esta é a condição inicial para a transmissão que recebe o nome de “Start”.
3.3.4. Sinal de Stop
Para dar fim a uma transmissão o seguinte protocolo também deverá ser reconhecido:
Enquanto a linha SCL se mantém em nível lógico alto, a linha SDA deve passar de nível baixo
para alto (transição). Esta é a condição de parada da transmissão e recebe o nome de “Stop”.
A Figura 3.3 mostra através de um diagrama de tempo o comportamento do sinal para as
condições de Start e Stop do protocolo I2C.
20
Figura 3.3 – Diagrama de Tempo dos Sinais de Start e Stop.
3.3.5. Protocolo Master-Slave
Um dos protocolos mais simples de se implementar é o protocolo Master-Slave, cuja
transferência de dados sempre podemos distinguir dois elementos básicos:
a) Um elemento chamado de “Master”, é responsável pelo gerenciamento do sistema
(normalmente o microcontrolador). É ele quem inicia uma transferência, é o responsável por
gerar o sinal de clock, sinaliza e termina uma transmissão.
b) O(s) elemento(s) secundário(s) chamados de “Slaves” (escravos) são aqueles
periféricos que são gerenciados pelo master.
3.3.6. Endereçamento (Slave Address)
A comunicação I2C permite a conexão do circuito Master (principal) com diversos
circuitos Slaves (secundários). Esta conexão é identificada por um endereço de 8 bits específico
que recebe o nome de “slave address”. Cada circuito e/ou componente I2C possui seu próprio
“slave address” e quando endereçado, somente a este periférico é que será dirigida a
transferência de dados.
3.3.7. Acknowledge (ACK)
O Acknowledge (ACK) é o sinal de reconhecimento do dado enviado e/ou recebido. É
ele que permite assegurar que os dispositivos estão ativos e recebendo corretamente os dados
transmitidos. Por exemplo, após a condição de “Start” e de envio do “slave address” estarem
concluídos, os componentes escravos selecionados deverão responder ao circuito master com um
sinal de reconhecimento (ACK) para confirmar o recebimento dos dados transmitidos. As
Figuras 3.4 e 3.5 mostra a seqüência de envio e recebimento dos dados.
21
Figura 3.4– Seqüência de Envio e Recebimento de Dados.
Figura 3.5 – Comunicação Completa I2C
3.4. Sensor de Temperatura TMP101
O sensor de temperatura TMP101 é um circuito integrado que possui comunicação serial
com protocolo I2C, não requerendo nenhum componente externo para o seu funcionamento.
Conforme referido no manual técnico [5], este dispositivo é capaz de ler temperaturas com
diversas resoluções dependendo da sua configuração inicial. Para esta aplicação, foi utilizada a
configuração de 12 bits, que proporciona a resolução máxima de 0,0625ºC.
Sendo a interface de comunicação a dois fios, o hardware torna-se extremamente
simples. A faixa de trabalho do sensor de temperatura é de -55° a 125°C com uma alimentação
de 2.7V a 5.0V. A Figura 3.6 representa a pinagem deste dispositivo.
22
Figura 3.6 – Pinagem do TMP101.
Tendo em vista a necessidade de inserirmos o sensor de temperatura no ambiente em que
se quer fazer o controle da temperatura, para uma aquisição de dados mais precisa, e
considerando que a colocação da placa de aquisição e controle dentro deste mesmo ambiente
seria bastante desaconselhável (devido a umidade excessiva do ambiente e os possíveis danos ao
display LCD), foi desenvolvida uma sonda que conectada a placa, supri essa necessidade
perfeitamente. A Figura 3.7 mostra a sonda de temperatura implementada, onde pode-se observar
suas dimenssões físicas.
Figura 3.7 – Sonda de Temperatura.
3.5. Porta I2C de I/O PCF8574
O acionamento do compressor é feito com a utilização de relés permitindo assim o
controle da temperatura ambiente (freezer). Estes relés são acionados através do circuito
integrado PCF8574 da Texas Instruments, que tem como função, fazer a expansão das linhas de
I/O através de uma comunicação I2C. Segundo o manual técnico [6] este componente permite o
conexão de até 8 dispositivos iguais no mesmo barramento, através do endereçamento (slave
23
address) onde são configurados os bits de decodificação de endereços A2, A1 e A0, os quais
devem ser conectados de forma adequada. O endereçamento está descrito na Tabela 3.1. A placa
que aquisição e controle faz o acionamento do relé 1, ao enviar o byte de dados ‘xxxxxxx0b’.
Bit Byte
7 6 5 4 3 2 1 0 I2C Slave Address 0 1 0 0 A2 A1 A0 R/W
Tabela 3.1 – Configuração do Slave Adress do PCF8574.
3.6. Display LCD
Este dispositivo é bastante simples, mas muito importante e funcional. É nele que os
dados do sistema são apresentados. Obviamente que essa interface não é tão completa e
gráficamente rica quanto o Website, mas nela podemos obter informações importantes sobre o
estado das variáveis do sistema como: temperatura do ambiente de controle, estado do
compressor, temperatura de referência baixa (TL) e temperatura de referência alta (TH).
O display de LCD possui 4 linhas com 16 caracteres cada. Estes caracteres são
compostos por uma matriz de 5x7 pontos, estando os endereços de cada caracter representados
na Tabela 3.2.
Linha 1 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F Linha 2 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F Linha 3 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF Linha 4 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
Tabela 3.2 – Endereços dos Caracteres no Display de LCD.
Os displays LCD alfanuméricos apresentam uma interface padrão de 14 pinos, sendo 8
deles destinados ao barramento de dados e o restante para alimentação e controle. A Tabela 3.3
apresenta a descrição e a função de cada um destes pinos. No exemplo é apresentado um display
com backlite, o qual possui dois pinos extras.
Pino Referência Função 1 VSS Ground (0V) 2 VDD Alimentação (+5V) 3 V0 Ajuste de Contraste 4 RS Seleção de Dados / Instrução 5 R/W Seleção de Leitura / Escrita 6 E Habilitação de Dados
7-14 DB0-DB7 Barramento de Dados 15 LED A Iluminação de Fundo (backlight) 16 LED K Iluminação de Fundo (backlight)
Tabela 3.3 – Pinagem do Display de LCD.
24
Existem algumas configurações que são essenciais para o bom funcionamento deste
periférico. As Tabelas 3.4 e 3.6 descrevem algumas destas funções bem como as suas opções de
configuração.
Códido de Instrução Instrução
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Limpa Display 0 0 0 0 0 0 0 0 0 1
Entrada de Dados 0 0 0 0 0 0 0 1 LD SH Controle On/Off 0 0 0 0 0 0 1 D C B Cursor ou Shift 0 0 0 0 0 1 S/C R/L - -
Configuração de Função
0 0 0 0 1 DL N F - -
Tabela 3.4 – Configuração do Display.
Opção Descrição Opção Descrição LD = 0 Cursor para esquerda SH = 0 Display sem Shift LD = 1 Cursor para direita SH = 1 Display com Shift D = 0 Display OFF C = 0 Cursor OFF D = 1 Display ON C = 1 Cursor ON B = 0 Cursor Fixo N = 0 Display 1 Linha B = 1 Cursor Piscante N = 1 Display 2/4 Linhas
DL = 0 Interface 4 bits F = 0 Matriz 5x8 (1 Caracter/Linha) DL = 1 Interface 8 bits F = 1 Matriz 5x11 (1 Caracter/2 Linhas)
Tabela 3.5 – Opções de Configuração do Display.
25
4. Rotinas de Aquisição e Controle
O sistema de aquisição de dados e controle do projeto foi todo desenvolvido através da
linguagem de programação Assembly. Este capítulo é dedicado à exemplificação das principais
rotinas do software de aquisição e controle do sistema. Para relatar estas rotinas de uma forma
mais amigável usaremos fluxogramas para esta representação.
4.1. Variáveis e Posições de Memória
A rotina de aquisição de dados possui algumas posições de memória pré-definidas para
melhorar a organização e a funcionalidade do programa. Estas posições são citadas e descritas na
Tabela 4.1.
Tabela 4.1 – Posições de Memória
4.2. Rotina de Inicialização: START
O software de aquisição e controle possui uma rotina de inicialização de variáveis e
configuração de dispositivos que são fundamentais para a leitura e controle da temperatura do
sistema. A Figura 4.1 demonstra através do fluxograma, a inicialização do sistema.
Nome Posição Descrição da Variável. CENT 77H Armazena o digito da centena na rotina de conversão. DEZ 78H Armazena o digito da dezena na rotina de co nversão. UNI 79H Armazena o digito da unidade na rotina de c onversão. INT 7AH Armazena a parte inteira da temperatura lid a.
FLOAT 7BH Armazena a parte decimal da temperatura. TH 7CH Armazerna a temperatura de referência alta. TL 7DH Armazena a temperatura de referência baixa.
COMPRESSOR 7EH Armazena o estado do compressor.
26
Figura 4.1 – Fluxograma da Inicialização do Sistema.
4.2.1. Sub-Rotina de Inicialização do Display: INITLCD
O display de LCD precisa ser inicializado para o seu funcionamento correto. Esta
inicialização é feita através de alguns comandos que configuram os diversos parâmetros deste
dispositivo. A rotina de inicialização do display está demonstrada através do fluxograma
representado na Figura 4.2.
START
COMPRESSOR ← ‘D’
TH ← #10
TL ← #8
INITLCD
INITI2C
INITSERIAL
INIT_TMP101
LE_TEMP
LOOP_MAIN
Carrega a variável “TH” com a temperatura de referência alta.
Carrega a Variável “Compressor” com o estado “D”.
Carrega a variável “TL” com a temperatura de referência baixa.
Sub-rotina de inicalização do display de LCD.
Sub-rotina de inicalização do I2C.
Sub-rotina de inicalização da Serial.
Sub-rotina de inicalização do sensor TMP101.
Sub-rotina de leitura da temperatura.
Rotina do programa principal.
27
Figura 4.2 – Fluxograma da Sub-Rotina de Inicialização do Display.
4.2.2. Sub-Rotina de Inicialização do Protocolo I2C: INITI2C
O protocolo de comunicação serial I2C precisa ser setado para as condições iniciais de
uso, esta setagem está demonstrada na Figura 4.3 através de fluxograma.
INITLCD
A ← #38h
WRCOM
A ← #38h
WRCOM
A ← #38h
WRCOM
A ← #0Eh
WRCOM
A ← #06h
WRCOM
A ← #01h
WRCOM
RET
Configura o display para usar 8 bits, 4 linhas e matriz 5x8 pontos.
Sub-rotina de escrita no display.
Configura o display para mensagem aparente, cursor ativo e não
piscante.
Configura o cursor do display para correr para direita.
Limpa o Display.
28
Figura 4.3 – Fluxograma da Sub-Rotina de Inicialização do Protocolo I2C.
4.2.3. Sub-Rotina de Inicialização da Porta Serial: INITSERIAL
A porta serial deve ser configurada para a taxa de transferência de 9.600bps, esta
configuração é feita pela rotina INITSERIAL e é mostrada na Figura 4.4 através de seu
fluxograma.
Figura 4.4 – Fluxograma da Sub-Rotina de Inicialização da Porta Serial.
INITSERIAL
SCON ← #50h
RET
TMOD ← #22h
ORL PCON,80h
TR1 ← ‘1’
TH1 ← #253
TL1 ← #253
Configura para 8-N-1.
Programa modo dos Timers 1 e 0.
Ativa Baudrate x2.
Configura Timer 1 para 9600bps.
Configura Timer 1 para 9600bps.
Liga a porta serial.
INITI2C
SDA ← ‘1’
SCL ← ‘1’
RET
Coloca em nível lógico alto o canal SDA.
Coloca em nível lógico alto o canal SCL.
29
4.2.4. Sub-Rotina de Inicialização do TMP101: INIT_TMP101
O Sensor TMP101 para realizar a leitura da temperatura precisa ser inicializado com
diversos parâmetros importantes. Estes parâmentros, por exemplo, definirão a resolução da
leitura. A inicialização do sensor TMP101 é descrita pela Figura 4.5 através de um fluxograma.
Figura 4.5 – Fluxograma da Inicialização do Sensor TMP101.
INIT_TMP101
STARTI2C
RET
A ← #94h
WRITEI2C
DELAY5us
RECVACK
A ← #01h
WRITEI2C
DELAY5us
RECVACK
A ← #78h
WRITEI2C
DELAY5us
RECVACK
STOPI2C
Sub-rotina que sinaliza o início da comunicação I2C.
Escreve o conteúdo do acumulador no I2C.
Sub-rotina de delay de 5 micro segundos, necessário para que o µC processe o dado.
Sub-rotina de recebimento do Acknowledge.
Move para o acumulador o valor de configuração do “Pointer Register” que permite leitura e escrita.
Sub-rotina que sinaliza o fim da comunicação I2C.
Move para o acumulador o valor de configuração do “Configuration Register”, que configura a leitura do
sensor para 12 bits.
Move para o acumulador o slave address do TMP101 ligado na sonda em modo de escrita.
30
4.3. Rotina de Leitura da Temperatura: LE_TEMP
A rotina de leitura da temperatura é a mais importante desse processo, é nela em que a
temperatura lida pelo sensor é comparada com as temperaturas de referências (TL e TH) e
dependendo do estado desta, o controle é acionado ou não. A Figura 4.6 apresenta o fluxograma
da rotina de leitura da temperatura.
Figura 4.6 – Fluxograma da Rotina de Leitura da Temperatura.
4.3.1. Sub-Rotina: LE_DADO
Esta sub-rotina do laço “LE_TEMP” faz a leitura da temperatura no sensor TMP101
usando o protocolo I2C. A Figura 4.7 apresenta o fluxograma de toda essa comunicação para a
obtenção deste dado.
NÃO
LE_TEMP
LE_DADO
TESTE_NEG
T_TEMP
TEMP OK?
DESLIGARELE
COMPRESSOR ← ‘D’
RET
LIGARELE
COMPRESSOR ← ‘L’
RET
SIM
Sub-rotina de leitura I2C da temperatura
Sub-rotina que verifica se a temperatura lida pelo sensor é negativa.
Sub-rotina que verifica se a temperatura está abaixo das temperaturas de
referência (TL e TH).
31
Figura 4.7 – Fluxograma da Sub-Rotina de “Le_Dado”.
STARTI2C
RET
A ← #94h
WRITEI2C
DELAY5us
RECVACK
A ← #00h
WRITEI2C
DELAY5us
RECVACK
STARTI2C
A ← #95h
WRITEI2C
DELAY5us
RECVACK
READI2C
LE_DADO
R0 ← A
INT ← R0
DELAY5us
SENDACK
READI2C
R1 ← A
FLOAT ← R1
DELAY5us
SENDACK
STOPI2C
Move para o acumulador o slave address do TMP101 ligado na sonda em modo de escrita.
Move para o acumulador o valor de configuração do “Pointer Register” em modo de leitura.
Move para o acumulador o slave address do TMP101 ligado na sonda em modo de leitura.
Sub-rotina de leitura do I2C. Lê o I2C e salva estes dados no acumulador.
Salva a parte inteira da temperatura no registrador R0.
Salva a parte inteira da temperatura na variável INT.
Salva a parte decimal da temperatura no registrador R1.
Salva a parte decimal da temperatura na variável FLOAT.
32
4.3.2. Sub-Rotina: TESTE_NEG
A sub-rotina “TESTE_NEG” também faz parte do laço “LE_TEMP”. Esta sub-rotina é
dedicada à confirmação se a temperatura lida pelo sensor é positiva ou negativa. Se a
temperatura for positiva, ela converte do dado binário em decimal e o imprime no display,
entretanto se este dado lido pelo sensor for negativo, ele sofre um tratamento bit à bit e só depois
é convertido e impresso no display. A Figura 4.8 mostra através do fluxograma a sub-rotina
“TESTE_NEG”.
Figura 4.8 – Fluxograma da Sub-Rotina “Teste_Neg”.
4.3.3. Sub-Rotina: CONVERTE
A sub-rotina “CONVERTE” é responsável pela conversão do dado lido pelo sensor de
temperatura que possui uma forma de inteiro com 8 bits (0 à 255) para um número do tipo
“float”. Essa conversão permite que o dado possa ser escrito no display no padrão de escrita
ASCII. A Figura 4.9 apresenta o fluxograma da sub-rotina “CONVERTE”.
NÃO
SIM
TESTE_NEG
A<0?
NUM_NEG
CONVERTE_NEG
MOSTRA_NEG
RET
CONVERTE
MOSTRA
A ← R0
RET
Carrega o acumudador com o valor da parte inteira da tempertatura.
Se o R0 for negativo (bit ACC.7 igual a ‘1’) os software salta para a subrotina NUM_NEG.
33
Figura 4.9 – Fluxograma da Sub-Rotina “Converte”.
CONVERTE
A ← R0
B ← #100
A / B
A ← A + #‘0’
CENT ← A
A ← B
B ← #10
A / B
A ← A + #‘0’
DEZ ← A
A ← B
A ← A + #‘0’
UNI ← A
Converte o conteúdo do Acumulador em ASCII.
Move a variável R0 para o Acumulador.
Carrega o B com a constante 100.
Divide A por B, coloca o resultado da divisão no Acumulador e o resto em B.
Move o conteúdo do Acumulador para a variável CENT.
Move o resto da divisão para o Acumulador.
Carrega o B com a constante 10.
Move o conteúdo do Acumulador para a variável DEZ.
Move o resto da divisão para o Acumulador.
Converte o conteúdo do Acumulador em ASCII.
Converte o conteúdo do Acumulador em ASCII.
Move o conteúdo do Acumulador para a variável UNI.
Divide A por B, coloca o resultado da divisão no Acumulador e o resto em B.
RET
34
4.3.4. Sub-Rotina: MOSTRA
A sub-rotina “MOSTRA” tem como única função a escrita do dado lido pelo sensor de
temperatura no display de LCD. Esta rotina está representada na Figura 4.10 através de seu
fluxograma.
Figura 4.10 – Fluxograma da Sub-Rotina “Mostra”.
MOSTRA
A ← DEZ
WRCHAR
A ← UNI
WRCHAR
DECIMAL
A ← # DFh
WRCHAR
A ← INT
SETB C
RET
Sub-rotina de escrita de caracteres no display.
Coloca no Acumulador a variável DEZ.
Coloca no Acumulador a variável UNI.
Sub-rotina de escrita da parte fracionária da Temp.
Coloca no Acumulador o caracter ‘ ° ‘.
A ← # ‘C’
WRCHAR
Coloca no Acumulador o caracter ‘ C ‘.
Coloca no Acumulador a variável INT.
Coloca em nível lógico alto o carry, isto evita o acionamento da rotina de controle.
WRCHAR
A ← # ‘ ’
Coloca no Acumulador o caracter ‘ ‘ (espaço).
35
4.3.5. Sub-Rotina: NUM_NEG
A sub-rotina “NUM_NEG” é usada quando a temperatura lida é negativa. Ela tem como
finalidade converter o dado negativo para uma forma que possa ser impresso no display. A
Figura 4.11 mostra o fluxograma desta sub-rotina.
Figura 4.11 – Fluxograma da Sub-Rotina “Num_Neg”.
4.3.6. Sub-Rotina: CONVERTE_NEG
Tendo em vista que o dado coletado pelo sensor é um número de inteiro de 8 bits (0 até
255) existe a necessidade de converter este número para o padrão de escrita ASCII. A rotina
“CONVERTE_NEG” que está apresentada na Figura 4.12 através de seu fluxograma faz essa
conversão.
NUM_NEG
INT ← A
CPL A
A ← R1
CPL A
A ← A + #1
FLOAT ← A
A ← INT
A ← A + #0 +C
INT ← A
CONVERTE_NEG
Complementa de ‘1’ o acumulador (inverte os bits).
Move para variável INT o conteúdo do acumulador.
Move para o acumulador a parte decimal da temperatura.
Incrementa o acumulador para que a conversão seja completa, já que o número era negativo.
Move a variável FLOAT o conteúdo do acumulador.
36
Figura 4.12 – Fluxograma da Sub-Rotina “Converte_Neg”.
CONVERTE_NEG
A ← INT
B ← #100
A / B
A ← A + #‘0’
CENT ← A
A ← B
B ← #10
A / B
A ← A + #‘0’
DEZ ← A
A ← B
A ← A + #‘0’
UNI ← A
MOSTRA_NEG
Converte o conteúdo do Acumulador em ASCII.
Move a variável INT para o Acumulador.
Carrega o B com a constante 100.
Divide A por B, coloca o resultado da divisão no Acumulador e o resto em B.
Move o conteúdo do Acumulador para a variável CENT.
Move o resto da divisão para o Acumulador.
Carrega o B com a constante 10.
Move o conteúdo do Acumulador para a variável DEZ.
Move o resto da divisão para o Acumulador.
Converte o conteúdo do Acumulador em ASCII.
Converte o conteúdo do Acumulador em ASCII.
Move o conteúdo do Acumulador para a variável UNI.
Divide A por B, coloca o resultado da divisão no Acumulador e o resto em B.
37
4.3.7. Sub-Rotina: MOSTRA_NEG
A sub-rotina “MOSTRA_NEG” é a rotina destinada a escrita da temperatura negativa no
display de LCD da placa de aquisição e controle. A Figura 4.13 representa o fluxograma desta
sub-rotina.
Figura 4.13 – Fluxograma da Sub-Rotina “Mostra_Neg”.
MOSTRA_NEG
A ← # ‘-’
WRCHAR
A ← DEZ
WRCHAR
A ← UNI
WRCHAR
DECIMAL
A ← # DFh
WRCHAR
A ← INT
SETB C
RET
Coloca no Acumulador o caracter ‘-‘.
Sub-rotina de escrita de caracteres no display.
Coloca no Acumulador a variável DEZ.
Coloca no Acumulador a variável UNI.
Sub-rotina de escrita da parte fracionária da Temp.
Coloca no Acumulador o caracter ‘ ° ‘.
A ← # ‘C’
WRCHAR
Coloca no Acumulador o caracter ‘ C ‘.
Coloca no Acumulador a variável INT.
Coloca em nível lógico alto o carry, isto evita o acionamento da rotina de controle.
38
4.3.8. Sub-Rotina: DECIMAL
Tendo em vista que a parte decimal da temperatura possui apenas 4 bits, ao contrário da
parte inteira que possui 8 bits, a conversão deste número não foi feita seguindo a mesma lógica
matemática. Por esse motivo, o dado lido foi manipulado de forma que represente a resolução
máxima a qual o sensor de temperatura foi configurado, que para esta aplicação que é da ordem
de 0,0625ºC. Foi utilizado então uma tabela para a conversão da parte fracionária da
temperatura. Foi montada uma conversão de um numero inteiro entre 0 e 15 para uma string que
converte este valor, a qual representa o resultado do valor lido dividido por 16.
A Tabela 4.2 mostra as combinações possíveis da parcela decimal da temperatura lida
pelo sensor. Estes dados se encontram armazenados no software através da tabela de dados
“FRACAO”, e quando apontadas pelo registrador de 16 bits DPTR, são enviadas para o display.
i i/16 0 ,0000 1 ,0625 2 ,1250 3 ,1875 4 ,2500 5 ,3125 6 ,3750 7 ,4375 8 ,5000 9 ,5625 10 ,6250 11 ,6875 12 ,7500 13 ,8125 14 ,8750 15 ,9375
Tabela 4.2 – Tabela de combinações da parte decimal da temperatura.
A Figura 4.14 demonstra através de fluxograma a sub-rotina “DECIMAL”.
39
Figura 4.14 – Fluxograma da Sub-Rotina “Decimal”.
4.3.9. Sub-Rotina: TESTE_TEMP
A sub-rotina “TESTE_TEMP” é fundamental para o controle do sistema. É nela que o
programa faz os testes que verificam se a temperatura do ambiente (freezer) está acima ou abaixo
das temperaturas de referência (TL e TH). Existem três situações possíveis para a temperatura do
ambiente. Foi implementado o algoritmo de controle ON-OFF com histerese. As três situações
da leitura do sistema estão descritas a seguir, bem como a resposta do controle a cada uma delas.
DECIMAL
A ← FLOAT
SWAP A
DPTR ← #FRACAO
B ← # 6
A x B
A ← A + DPL
DPL ← A
A ← DPH
A ← A + #0 + C
DPH ← A
WRSTR
RET
Move para o Acumulador a variável FLOAT.
XXXX.0000 ←→ 0000.XXXX
Aponta DPTR para a tabela #FRACAO.
Move para B a constante 6.
Multiplica A com B.
Soma o Acumulador com o DPL.
Move para o DPL o valor do Acumulador.
Move para o Acumulador o conteúdo de DPH.
Soma o Acumulador com a constante #0 mais o carry.
Move para o DPH o valor do Acumulador.
Sub-rotina de escrita de uma string no display.
40
Situação 1: A temperatura do ambiente encontra-se abaixo das duas temperaturas de
referência (T<TL<TH). Esta condição indica que a temperatura dentro do freezer está adequada
para os produtos lá estocados e nesta situação o atuador (compressor) permanece desligado.
Situação 2: A temperatura do ambiente numa condição intermediária, isto é, está entre as
duas temperaturas de referência (TL<T<TH). Nesta situação o estado do compressor depende do
comportamento da temperatura. Se ela estava alta e anteriormente o compressor estava ligado, o
mesmo continua ligado. Se a temperatura estava baixa e o compressor estava desligado, o
mesmo continua desligado.
Situação 3: A temperatura do ambiente se encontra acima das duas temperaturas de
referência (TL<TH<T), isto é, os produtos estocados dentro do freezer estão próximos de uma
temperatura inadequada. Neste momento o atuador (compressor) é acionado pelo sistema,
fazendo com que o ambiente seja refrigerado e a temperatura diminua.
A Figura 4.15 demonstra através de fluxograma a sub-rotina “TESTE_TEMP”.
Figura 4.15 – Fluxograma da Sub-Rotina “Teste_Temp”.
SIM
NÃO
SIM
NÃO
Histerese
C ?
A ← INT
DESLIGARELE
RET
A ← A – TL – C
TESTE_TEMP
A ← A – TH – C
A ← INT
LIGARELE
C ?
RET
RET
Coloca no Acumulador a variável INT.
Coloca no Acumulador a seguinte subtração: Temp. Atual – Temp. Ref. Baixa – Carry.
Se a T<TL; C=1 Se a T>TL; C=0
Coloca no Acumulador a variável INT.
Coloca no Acumulador a seguinte subtração:
Temp. Atual – Temp. Ref. Baixa – Carry.
Se a T<TL; C=1 Se a T>TL; C=0
41
4.3.10. Sub-Rotina: MENSAGEM
Esta sub-rotina tem como função escrever no display as quatro mensagens básicas que
informam a temperatura do ambiente, o estado atual do compressor ligado (L) ou desligado (D) e
as duas temperaturas de referência (TL e TH). A Figura 4.16 mostra a disposição destas
mensagens no display.
Figura 4.16 – Mensagens Básicas do Display.
A rotina que executa a escrita no display das quatro mensagens básicas está representada
na Figura 4.17 através de seu fluxograma.
42
Figura 4.17 – Fluxograma da Sub-Rotina “Mensagem”.
A ← #0
MENSAGEM
MOVCUR1
DPTR ← #MSG1
WRSTR
LE_DADO
A ← #0
MOVCUR2
DPTR ← #MSG2
WRSTR
A ← COMPRESSOR
A ← #0
MOVCUR3
DPTR ← #MSG3
WRSTR
A ← TH
A ← #0
MOVCUR4
DPTR ← #MSG4
WRSTR
A ← TL
INTOASCII
INTOASCII
RET
WRCHAR
Coloca no Acumulador a constante 0 isso ajusta o caracter na primeira posição da linha.
Sub-rotina que coloca o cursor na primeira linha.
Aponta DPTR para a string MSG1.
Sub-rotina de escrita e string no display.
Sub-rotina de leitura da Temperatura.
Sub-rotina que coloca o cursor na segunda linha.
Aponta DPTR para a string MSG2.
Coloca no Acumulador o estado do Compressor.
Sub-rotina que coloca o cursor na terceira linha.
Aponta DPTR para a string MSG3.
Coloca no Acumulador o valor da Temp. de Ref. Alta.
Sub-rotina que converte o inteiro para ASCII.
Sub-rotina que coloca o cursor na quarta linha.
Aponta DPTR para a string MSG4.
Coloca no Acumulador o valor da Temp de Ref.
43
4.4. Rotinas de Acionamento
O acionamento do atuador do sistema de controle (compressor) é realizado através de um
relé. Este relé possui duas rotinas fundamentais, a primeira “LIGARELE” faz com que o relé
onde o compressor está conectado seja acionado e a segunda “DESLIGARELE” faz a operação
inversa, ou seja, desliga o compressor.
4.4.1. Sub-Rotina de Acionamento do Relé: LIGARELE
A Figura 4.18 apresenta o fluxograma a sub-rotina “LIGARELE” responsável pelo
acionamento do Relé1 (compressor) do controle do sistema.
Figura 4.18 – Fluxograma da Sub-Rotina “Ligarele”.
STARTI2C
RET
LIGARELE
A ← # 64h
WRITEI2C
RECVACK
A ← # 66h
WRITEI2C
RECVACK
STOPI2C
COMPRESSOR ← # ‘L’
Sub-rotina que inicia a comunicação I2C.
Move para o Acumulador o Slave Address do PCF8574 em modo escrita.
Sub-rotina de escrita I2C.
Sub-rotina de recebimento do Acknowledge.
Move para o Acumulador o Slave Address do PCF8574 onde está conectado o Relé.
Sub-rotina que termina a comunicação I2C.
Altera o estado do compressor para “LIGADO”.
Sub-rotina de escrita I2C (liga o relé).
44
4.4.2. Sub-Rotina de Desligamento do Relé: DESLIGARELE
A Figura 4.19 apresenta o fluxograma da sub-rotina “DESLIGARELE” responsável pelo
desligamento do Relé1 (compressor) do controle do sistema.
Figura 4.19 – Fluxograma da Sub-Rotina “Desligarele”.
4.5. Protocolo de Controle
Toda a relação entre a aquisição de dados e o controle do sistema é realizada por meio de
“strings” de pedidos de comando e “strings” de respostas de comandos. Estes comandos de
pedidos e respostas seguem um padrão básico que é composto por cinco bytes. Este padrão
básico chamamos de protocolo de controle.
Os três primeiros bytes deste pedido e/ou resposta correspondem aos caracteres “MAR”.
Estes caracteres funcionam como chaves padrões de inícialização dos pedidos e/ou respostas e
STARTI2C
RET
DESLIGARELE
A ← # 64h
WRITEI2C
RECVACK
A ← # 67h
WRITEI2C
RECVACK
STOPI2C
COMPRESSOR ← # ‘D’
Sub-rotina que inicia a comunicação I2C.
Move para o Acumulador o Slave Address do PCF8574 em modo escrita.
Sub-rotina de escrita I2C.
Sub-rotina de recebimento do Acknowledge.
Move para o Acumulador o Slave Address do PCF8574 onde está conectado o Relé.
Sub-rotina que termina a comunicação I2C.
Altera o estado do compressor para “DESLIGADO”.
Sub-rotina de escrita I2C (desliga o relé).
45
são sucedidos por um byte de identificação de função e outro de controle ou dado. A Tabela 4.3
representa todos os comandos de pedidos e respostas do sistema de controle.
FUNÇÃO PEDIDO RESPOSTA OBSERVAÇÃO LIGA MARL0 MARLK
DESLIGA MARD0 MARDK MARCL Ligado ESTADO DO
COMPRESSOR MARC0
MARCD Desligado TEMP. SUPERIOR MARS<número> MARSK TEMP. INFERIOR MARI<número> MARIK TEMPERATURA MART0 MART<número>
Tabela 4.3 – Comandos de Pedidos e Respostas.
4.6. Programa Principal: LOOP_MAIN
Após realizar todas as inicializações o programa de leitura e controle entra num laço
eterno. Este laço recebeu o nome de “LOOP_MAIN” e é o programa principal do software.
Nesta rotina que são realizadas todas as decodificações dos pedidos de comandos da interface
com o usuário. A Figura 4.20 representa esta seqüência de testes realizada pelo programa
principal através de seu fluxograma.
46
Figura 4.20 – Fluxograma do Programa Principal “Loop_Main”.
O programa principal “LOOP_MAIN” possui seis sub-rotinas. Estas sub-rotinas são
selecionadas pelo quarto byte do protoloco de controle, quando o mesmo é confirmado.
As Figuras 4.21 à 4.26 apresentam o fluxograma destas sub-rotinas.
SIM
NÃO ‘M’ ?
MENSAGE
LOOP_M
SIM
NÃO ‘A’ ?
SIM
‘R’ ?
‘L’ ?
RDSERIAL
RDSERIAL
RDSERIAL
RDSERIAL
LOOP_M
LIG
‘D’ ?
DESL
‘C’ ?
COMP SUP
‘S’ ? ‘I’ ?
INF TEMP
‘T’ ?
SIM
NÃO
SIM
NÃO
SIM
NÃO
SIM
NÃO
SIM
NÃO
SIM
NÃO
NÃO
47
4.6.1. Sub-Rotina: LIG
Figura 4.21 – Fluxograma da Sub-Rotina “Lig”.
4.6.2. Sub-Rotina: DESLIG
Figura 4.22 – Fluxograma da Sub-Rotina “Deslig”.
RDSERIAL
DESLIG
COMPRESSOR ← # ‘L’
DPTR ← #MARDK
WRSTRSERIAL
DESLIGARELE
LOOP_MAIN
Sub-rotina para leitura da Porta Serial.
Altera o estado do compressor para “DESLIGADO”.
Aponta DPTR para a string MARDK.
Sub-rotina para escrita de strings na Serial.
Sub-rotina de desligamento do Relé.
RDSERIAL
LIG
COMPRESSOR ← # ‘L’
DPTR ← #MARLK
WRSTRSERIAL
LIGARELE
LOOP_MAIN
Sub-rotina para leitura da Porta Serial.
Altera o estado do compressor para “LIGADO”.
Aponta DPTR para a string MARLK.
Sub-rotina para escrita de strings na Serial.
Sub-rotina de acionamento do Relé.
48
4.6.3. Sub-Rotina: COMPR
Figura 4.23 – Fluxograma da Sub-Rotina “Compr”.
4.6.4. Sub-Rotina: SUP
Figura 4.24 – Fluxograma da Sub-Rotina “Sup”.
RDSERIAL
SUP
LOOP_MAIN
TH ← A
DPTR ← #MARSK
WRSTRSERIAL
Sub-rotina para leitura da Porta Serial.
Move para a variável TH a Temp. de Ref. Alta lida na serial.
Aponta DPTR para a string MARSK.
Sub-rotina para escrita de strings na Serial.
RDSERIAL
COMPR
DPTR ← #MARC
WRSTRSERIAL
LOOP_MAIN
Sub-rotina para leitura da Porta Serial.
Aponta DPTR para a string MARC.
Sub-rotina para escrita de strings na Serial.
Move para o Acumulador o estado do Compressor.
A ← #COMPRESSOR
WRSERIAL
Sub-rotina de escrita na serial.
49
4.6.5. Sub-Rotina: INF
Figura 4.25 – Fluxograma da Sub-Rotina “Inf”.
4.6.6. Sub-Rotina: TEMP
Figura 4.26 – Fluxograma da Sub-Rotina “Temp”.
RDSERIAL
TEMP
LOOP_MAIN
DPTR ← #MART
WRSTRSERIAL
Sub-rotina para leitura da Porta Serial.
Aponta DPTR para a string MART.
Sub-rotina para escrita de strings na Serial.
LE_TEMP
A ← INT
WRSERIAL
Sub-rotina de leitura da Temperatura.
Move para o Acumulador a Temperatura do Ambiente lida.
Sub-rotina de escrita na serial.
RDSERIAL
INF
LOOP_MAIN
TL ← A
DPTR ← #MARIK
WRSTRSERIAL
Sub-rotina para leitura da Porta Serial.
Move para a variável TL a Temp. de Ref. Baixa lida na serial.
Aponta DPTR para a string MARIK.
Sub-rotina para escrita de strings na Serial.
50
5. Interface de Ethernet
5.1. Zilog eZ80 Webserver
Segundo o manual técnico [8] a placa eZ80 Webserver é uma plataforma que permite um
desenvolvimento de diversas aplicações, este sistema utiliza a família de controladores
integrados eZ80 da ZiLOG e possui uma interface Ethernet que utiliza o controlador de ethernet
full-duplex RTL8019AS da RealTek. Estas aplicações podem ser executadas em tempo-real
depurando espaços de memória dentro do SRAM e Flash.
A placa eZ80 Webserver pode operar em modo independente, isto é, sem a necessidade
de outros dispositivos ou via interface ZPAK conectada a um PC (host) executando o software
ZiLOG Developer Studio. Os eZ80 podem servir websites através do protocolo TCP/IP, este
sistema é bastante fácil, permitindo que a monitoração e o controle de processos sem a
necessidade de atualizações de códigos.
A Figura 5.1 é a vista superior do Webserver eZ80 da Zilog, esta mostra a divisão em
blocos de função do dispositivo e estes blocos são descritos na Tabela 5.1.
51
Figura 5.1 – Vista Superior da Placa eZ80 Webserver.
A Fonte de Alimentação E Memória e Processador B Interface Serial F Interface ZDI C Interface Serial G Conectores de Extensão D Interface de Ethernet
Tabela 5.1 – Placa eZ80 Webserver.
As características gerais da placa eZ80 Webserver são:
• Microprocessador eZ80 operando em 40MHz;
• 1Mb de SRAM;
• 1Mb de memória FLASH programável pelo usuário (expansível até 4Mb);
• Interface de Ethernet com taxa de transmissão à 10Mbits;
• Duas portas seriais (RS232);
• Dois conectores de expansão:
o Memória
o GPIO
• Clock com bateria de back-up;
• Suporta Zilog Developer Studio e o compilador eZ80 C;
52
O eZ80 Webserver é dividido em quatro módulos principais. Estes módulos são listados
abaixo e são apresentados no diagrama de blocos da Figura 5.2.
• CPU e memória;
• Interface de Ethernet;
• Potência e Interface de Comunicação;
• Decodificador de Endereços e Conectores de Expansão;
Figura 5.2 – Diagrama de Blocos do eZ80 Webserver.
Controlador, Memória e
Clock
Decodificador de Endereços e Conectores
Interface de Ethernet
Potência e Interface de
Comunicação UART2
UART1
GP
IO e
ZD
I
End
ereç
os e
Con
trol
e
Bar
ram
ento
de
Dad
os
53
5.1.1. Mapeamento de Memória
A Figura 5.3 mostra a o mapeamento de memória do processador eZ80.
Figura 5.3 – Mapeamento de Memória do processador eZ80.
54
6. Sistema Mecânico de Refrigeração
Para um melhor entendimento do mecânismo de refrigeração torna-se necessária a
compreensão dos componentes básicos que compõe este sistema. Abaixo são descritos
brevemente estes componentes bem como a sua função no sistema.
6.1. Condensador
Tem como principal papel propiciar a dissipação do calor absorvido pelo fluído
refrigerante ao longo do sistema de refrigeração. É no condesandor que o gás superaquecido ao
perder calor para o meio ambiente, passa do estado gasoso para líquido.
6.2. Filtro Secador
É um elemento filtrante com material dessecante, com a finalidade de reter impurezas
e/ou umidade que possa haver no sistema.
6.3. Elemento de Controle (Tubo Capilar)
A função do elemento de controle é criar resistência a circulação do fluído refrigerante,
causando um grande diferencial de pressão entre o condensador e o evaporador, o fluído
refrigerante ainda no estado líquido, passa pelo elemento de controle em direção ao evaporador,
onde encontra baixa pressão passando de estado líquido para gasoso.
55
6.4. Evaporador
É no evaporador, ao encontrar ambiente de baixa pressão, que o fluído refrigerante passa
do estado líquido para o estado gasoso, absorvendo no processo calor do ambiente interno do
refrigerador (ambiente de controle).
6.5. Compressor
Promove o bombeamento do fluído refrigerante, que ao retornar do evaporador no estado
gasoso é succionado e bombeado para o condensador, causando baixa pressão no evaporador e
alta pressão no condensador, além de elevar ainda mais a temperatura do gás.
A Figura 6.1 mostra a localização dos componentes básicos no sistema de refrigeração.
Figura 6.1 – Sistema Báscio de Refrigeração.
56
6.6. Características do Compressor
Usamos para esta aplicação o compressor modelo EM45HNR do fabricante EMBRACO
mostrado na Figura 6.2, as caracteísticas desse equipamento segundo o manual técnico do
fabricante [11] estão descritas na Tabela 6.1.
Figura 6.2 – Compressor EM45HNR.
Capacitor Tubo Capilar
Capacitância µF Diâmetro Interno Comprimento
Capaciodade Frigorífica Btu/h
Referência Comercial
HP 115V 220V pol mm pol mm
Circulação de N² a 10 atm l/min
Teperatura de Evaporação
425 1/8 150 à 180 40 à 50 0,031 0,80 140 3550 8,4 -20ºC a -10ºC Tabela 6.1 – Características Gerais do EM45HNR.
6.7. Ligação do Compressor
Tendo em vista que o controle da temperatura do sistema agora é realizado pelo
acionamento do compressor (atuador) através da placa de aquisição e controle, desligamos
termostato do freezer e ligamos o compressor no relé de contato da “Placa de Aquisição e
Controle”. A Figura 6.3 mostra através de esquematico a ligação do compressor à placa. Assim,
quando a temperatura no ambiente de controle superar as temperaturas de referência (TL e TH),
o compressor é acionado fazendo com que a temperatura seja reduzida até um valor adequado.
58
7. Conclusões
O objetivo principal deste projeto foi o controle de temperatura de um ambiente através
de um sistema microcontrolado. Este objetivo foi alcançado com sucesso na execução do projeto.
A temperatura do ambiente foi controlada satisfatoriamente para todas as faixas de temperaturas
que determinamos, respeitando obviamente os limites técnicos do freezer.
Através da placa de aquisição e controle foi possível o monitoramento da temperatura, e
este dado foi mostrados no display de LCD, juntamente com os estados das variáveis de
temperatura de referência alta (TH), temperatura de referência baixa (TL) e estado atual do
compressor.
O acionamento da refrigeração que também foi realizado pela da placa de aquisição e
controle através de um relé também funcionou adequadamente. Este módulo do sistema quando
exigido para o controle e ajuste da temperatura do ambiente de controle (protótipo
implementeado em um freezer para acondicionamento de bebidas), respondeu satisfatoriamente
para as temperaturas ajustadas controlando a temperatura sem apresentar problemas.
A implementação da interface de ethernet e a interface do usuário ainda necessita de
ajustes. Os resultados práticos desta interface serão abordados no dia da apresentação prática
deste projeto.
Uma vez que a placa com conexão para ethernet é apenas um tradutor que converte
mensagens IP para uma interface serial, tendo em vista que o restante do sistema, incluindo aí o
protocolo de comunicação por serial está funcionando corretamente, concluo que o projeto de
CONTROLE DE TEMPERATURA POR MEIO DE UM WEBSERVER alcançou o seu
objetivo inical.
59
8. Referências Bibliográficas
[1] TEXAS INSTRUMENTS. MSC1210 Analog-to-Digital Converter with 8051
microcontroller and flash memory: 2002.
[2] SILVA JÚNIOR., Vidal Pereira da. Aplicações Práticas do Microcontrolador 8051: São
Paulo: Érica, 2003.
[3] TEXAS INSTRUMENTS. Building a Complete Webserver on the MSC121x Using
FlexGate Technology: 2004.
[4] PHILIPS SEMICONDUCTORS. The I2C-Bus Specification - Versão 2.1, 2000.
[5] TEXAS INSTRUMENTS. TMP101 Digital Temperature Sensor with I2C Interface:
2002.
[6] TEXAS INSTRUMENTS. PCF8574 Remote 8-BIT I/O Expander for I2C Bus: 2001.
[7] FULL GAUGE CONTROLS. TIC-17RGT Controlador Digital de Temperatura: Versão
8.0.
[8] ZILOG. eZ80 Webserver Evaluation Board: User Manual. UM011305-1101
[9] TEXAS INSTRUMENTS. Precision Analog-to-Digital Converter (ADC) and Digital-to-
Analog Converters (DACs) with 8051 Microcontroller and Falsh Memory.: 2004
[10] APEX SCIENCE. Specifications for Liquid Crystal Display Module Module
RC164001YRHB.: 2002
[11] EMBRACO. Manul de Aplicações de Compressores - Código 00004.: Setembro 2002 –
Versão 01.
60
ANEXO 1 – ESQUEMÁTICO DA PLACA DE AQUISIÇÃO E CONTR OLE.
VC
C
R7
R8
VC
CV
CC
FO
NT
E D
E A
LIM
EN
TA
ÇÃ
O R
EG
ULA
DA
VC
CV
CC
1 2 3 4
P3
I2C
VC
C
VC
C
+C
1
RS
A
RS
T
VC
C
SD
AS
CL
PO
RT
A S
ER
IAL
RS
232
Circ
uito
de
Res
et
R9
R10
A0
1
A1
2
-3
WP
7
SC
L6
SD
A5
VC
C8
GN
D4
U6
24C
512
DTR
PS
E
SW
1
+
C3
PO
RT
A I2
C
+
C4
EX
PA
NS
AO
DE
I/O
SW
2
Circ
uito
de
Pro
gram
ação
SD
AS
CL
VC
C
D6
SW
3
+
C5
SW
4
INT
13
SC
L14
SD
A15
A0
1A
12
A2
3
VC
C16
P0
4
P1
5
P2
6
P3
7
P4
9
P5
10
P6
11
P7
12
GN
D8
SC
LR
L1R
L2P
C2
PC
3S
T1S
T2S
T3S
T4
SW
5
D8
VC
CV
CC
KB
0
KB
1
KB
2
SE
NS
OR
DE
TE
MP
ER
AT
UR
A
D1
SD
A
+
C6
D3
Tec
lado
D4
1 2 3 4
P12
KR
E
1 2 3 4
P13
KR
EC
ON
EC
TO
RE
S A
UX
ILIA
RE
S
DV
DD
1515
DV
DD
1414
DV
DD
1111
XIN
2
P3.
1/TX
D0
4
AIN
558
DG
ND
1212
P3.
5/T1
8
XOU
T1
P3.
2/IN
T0*
5
VD
AC
017
EA
*48
RS
T13
P3.
3/IN
T1*/
TON
E/P
WM
6
RD
AC
016
P3.
7/R
D*
10
AV
DD
28
NC
33
P3.
0/R
XD0
3
P3.
6/W
R*
9
P3.
4/T0
7
DG
ND
5757
ALE
45
P2.
0/A
0834
P2.
1/A
0935
P2.
2/A
1036
P2.
3/A
1137
P2.
4/A
1238
P2.
5/A
1339
P2.
6/A
1440
P2.
7/A
1543
IDA
C0/
AIN
018
IDA
C1/
AIN
119
VD
AC
2/A
IN2
20
VD
AC
3/A
IN3
21
AIN
422
DV
DD
2323
AIN
6/E
XTD
24
AIN
7/E
XTA
25
AIN
CO
M26
AG
ND
27
RE
F I
N-
29
RE
F O
UT/
RE
F I
N+
30
VD
AC
131
RD
AC
132
DV
DD
4242
DG
ND
4141
PS
EN
*/O
SC
CLK
/MO
DC
LK44
P0.
7/A
D7
46
P0.
6/A
D6
47
P0.
5/A
D5
49
P0.
4/A
D4
50
P0.
3/A
D3
51
P0.
2/A
D2
52
P0.
1/A
D1
53
P0.
0/A
D0
54
P1.
0/T2
55
P1.
1/T2
EX
56
P1.
2/R
XD1
59
P1.
3/TX
D1
60
P1.
4/IN
T2/S
S*
61
P1.
5/IN
T3*/
MO
SI
62
P1.
6/IN
T4/M
ISO
/SD
A63
P1.
7/IN
T5*/
SC
LK/S
CK
64
E1
8
E2
7
E3
6
E4
5
E5
4
E6
3
E7
2
E8
1
GN
D9
VC
C10
S1
11
S2
12
S3
13
S4
14
S5
15
S6
16
S7
17
S8
18
ULN
2803
C
35 4
1 2
RE
L1
D5
+
C7
R27
T4 BC
558
R28
ST1
ST2
ST3
ST4
Sai
das
de R
eles
CP
U M
SC
1211
Y5
X1
RL1
1 2 3 4 5 6
P6
KR
E
1 2 3
P7 K
RE
+
C8
Title
Siz
eD
ocum
ent
Num
ber
Rev
Dat
e:S
heet
of
MA
RLO
N L
EA
ND
RO
MO
RA
ES
A
PLA
CA
DE
AQ
UIS
IÇÃ
O E
CO
NTR
OLO
A3
11
Mon
day
, N
ovem
ber
07,
2005
R4
VC
C
R3
C10
VC
C
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
RS
4R
/W5
E6
VC
C2
VO
3
GN
D1
BL-
15B
L+16
U4
DIS
PLA
YLC
D
DB
7
DB
5D
B6
DB
3D
B4
DB
1D
B2
DB
0
E RS
DR
IVE
DE
PO
TE
NC
IA
35 4
1 2
RE
L2
D7
R29
T5 BC
558
R30
RL2
SP
1
SP
EA
KE
R
1 2 3
P8 K
RE
VC
C
R5
R6
D2
D1N
914
C15
T2B
C54
8A
T3
BC
558A
VC
C
VC
C
DIS
PLA
Y L
CD
16X
4
+C
9
T1B
C55
8A
R11
P33
SA
IDA
DE
AU
DIO
R12
R13
TR
AB
AL
HO
DE
INT
EG
RA
ÇÃ
O -
20
05/
2
R14
R15
VC
C
R1O
UT
12T2
IN10
C2-
5
C2+
4
GN
D15
VC
C16
R1I
N13
C1-
3
T2O
UT
7
C1+
1
R2I
N8
R2O
UT
9
T1O
UT
14
VS
-6
T1IN
11
VS
+2
1 2 3 4 5 6 7 8 9 10 11 12
P5 A
NA
LOG
R2
PT1
C11
+C
16
C12
VC
C
C14
C13
P10
RX1
TX1
P33
P32
P34
P35
DB
0D
B1
DB
2D
B3
DB
4D
B5
DB
6D
B7
PC
2P
C3
1 2 3
P1 P
OW
ER
1 2 3 4 5 6 7 8 9 10
P10
EXPANSAO
VC
C
P22
P20
P21
P23
P25
P24
P26
P27
CO
NE
CT
OR
I/O
VC
C
VC
C
VC
C
TX0
RX0
RS
A
5 9 4 8 3 7 2 6 1
P2
RS
232
TX0
RX0
P33
P32
P35
P34
RS
E
DA
C0
RS
T
AIN
1A
IN0
VIN
1V
OU
T3
GN
D2
AIN
3A
IN2
AIN
5A
IN4
AIN
7A
IN6
SC
L1
GN
D2
SD
A6
AD
D0
5
V+
4
ALE
RT
3
SC
L
DA
C1
KB
2S
DA
KB
1TX
1R
X1K
B0
P10
DB
0
DB
2D
B1
DB
4D
B3
DB
5D
B6
PS
E
DB
7
P27P26
P25
P24
P23
P22
P20
P21
VC
C
DA
C0
AIN
0R
18A
IN1
AIN
2R
19R
20A
IN3
R21
AIN
4R
22A
IN5
VC
C
C2
R23
AIN
6R
24A
IN7
R25
DA
C1
CO
NE
CT
OR
SIN
AIS
AN
ALO
GIC
OS
DTR
vcc
R1
SC
LS
DA
VC
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
P9
EXPANSAO
61
ANEXO 2 – SOFTWARE DA PLACA DE AQUISIÇÃO E CONTROLE (TCC. ASM). ; *** TCC.ASM ************************************* ************************* ; ** ** ; ** Este programa é destinado ao meu Projeto de C onclusão do Curso de ** ; ** Engenharia Elétrica - Ênfase de Eletrônica. ** ; ** O objetivo destas rotinas é obter a temperatu ra de um ambiente ** ; ** (freezer) e através de um Webserver, interfer ir nesta variável e ** ; ** assim controlar o sistema. ** ; ** Autor: Marlon Moraes sob orientação de Júlio Cezar Marques de Lima. ** ; ** Data: 03/10/2005. ** ; ** Versão: 4.0 ** ; ** Ultima Modificação em: 06/11/2005. ** ; ** ** ; ************************************************* ************************* $MOD51 PWMCON EQU 0A1H PWMLO EQU 0A2H PWMHI EQU 0A3H PDCON EQU 0F1H DACSEL EQU 0B7H DACH EQU 0B6H DACL EQU 0B5H ADMUX EQU 0D7H ADRESL EQU 0D9H ADRESM EQU 0DAH ADRESH EQU 0DBH ADCON0 EQU 0DCH ADCON1 EQU 0DDH ADCON2 EQU 0DEH ADCON3 EQU 0DFH ACLK EQU 0F6H AIE EQU 0A6H CENT EQU 77H ; Digito da Centena para a rotina de Conversão.
DEZ EQU 78H ; Digito da Dezena para a rotina de Conversão. UNI EQU 79H ; Digito da Unidade para a rotina de Conversão.
INT EQU 7AH ; Guarda a parte inteira da temperatura.
FLOAT EQU 7BH ; Guarda a parte decimal da temperatura. TH EQU 7CH ; Temperatura de Referência Alta. TL EQU 7DH ; Temperatura de Referência Baixa. COMPRESSOR EQU 7EH ; Estado do Compressor. ; *** Vetor de Reset ****************************** ************************* ; ** ** ; ************************************************* ***** Endereco: 0000H *** ORG 0000H LJMP START ; *** Vetor da INT0 ******************************* ************************* ; ** ** ; ************************************************* ***** Endereco: 0003H *** ORG 0003H RETI ; *** Vetor do Timer 0 **************************** ************************* ; ** ** ; ************************************************* ***** Endereco: 000BH ***
62
ORG 000BH RETI ; *** Vetor da INT1 ******************************* ************************* ; ** ** ; ************************************************* ***** Endereco: 0013H *** ORG 0013H RETI ; *** Vetor do Timer 1 **************************** ************************* ; ** ** ; ************************************************* ***** Endereco: 001BH *** ORG 001BH RETI ; *** Vetor da Porta Serial *********************** ************************* ; ** ** ; ************************************************* ***** Endereco: 0023H *** ORG 0023H RETI ; *** PROGRAMA PRINCIPAL ************************** ************************* ; ** ** ; ************************************************* ************************* ; START: MOV COMPRESSOR,#'D' ; Move para a variável o estado do compressor. MOV TH,#10 ; Define a Temperatura de Referência Alta. MOV TL,#8 ; Define a Temperatura de Referência Baixa. LCALL INITLCD ; Inicializa o Display o LCD. LCALL INITI2C ; Inicializa o I2C. LCALL INITSERIAL ; Inicializa a Serial. LCALL INIT_TMP101 ; Inicializa o TMP101. LCALL LE_TEMP ; **** PROGRAMA PRINCIPAL ******* ***************** ************************* LOOP_MAIN: LCALL MENSAGEM ; Escreve as 4 mensagens padrões no Display. LCALL RDSERIAL ; Lê a Serial. CJNE A,#'M',LOOP_MAIN ; Recebeu "M", senão salta para Loop_Serial. LCALL RDSERIAL ; Lê a Serial. CJNE A,#'A',LOOP_MAIN ; Recebeu "A", senão salta para Loop_Serial. LCALL RDSERIAL ; Lê a Serial. CJNE A,#'R',LOOP_MAIN ; Recebeu "R", senão salta para Loop_Serial.
LCALL RDSERIAL ; Lê a Serial para receber o ‘0’. TESTE_L: CJNE A,#'L',TESTE_D ; Recebeu "L", senão salta para TESTE_D.
LIG: LCALL RDSERIAL ; Lê se o '0' foi enviado.
MOV COMPRESSOR,#'L' ; Altera o estado do compressor para LIGADO. MOV DPTR,#MARLK ; Move para DPTR a String de Resp. 'MARLK'. LCALL WRSTRSERIAL ; Escreve na serial a string. LCALL LIGARELE ; Rotina que liga o Relé do Compressor. LJMP LOOP_MAIN TESTE_D: CJNE A,#'D',TESTE_C ; Recebeu "D", senão salta para TESTE_C. DESL: LCALL RDSERIAL ; Lê se o '0' foi enviado. MOV COMPRESSOR,#'D' ; Altera o estado do compr. para DESLIGADO. MOV DPTR,#MARDK ; Move para DPTR a String de Resp. 'MARDK'. LCALL WRSTRSERIAL ; Escreve na serial a string. LCALL DESLIGARELE ; Rotina que desliga o Relé do Compressor. LJMP LOOP_MAIN
63
TESTE_C: CJNE A,#'C',TESTE_S ; Recebeu "C", senão salta TESTE_S. COMPR: LCALL RDSERIAL ; Lê se o '0' foi enviado. MOV DPTR,#MARC ; Move para DPTR a String de Resp. 'MARC'. LCALL WRSTRSERIAL ; Escreve na serial a string. MOV A,#COMPRESSOR ; Coloca no Acc o estado do Compressor. LCALL WRSERIAL ; Escreve na serial o estado do Compressor.
LJMP LOOP_MAIN TESTE_S: CJNE A,#'S',TESTE_I ; Recebeu "S", senão salta para TESTE_I. SUP: LCALL RDSERIAL ; Lê a serial passando para o ACC. MOV TH,A ; Move o valor lido na serial para TH.
MOV DPTR,#MARSK ; Move para DPTR a String de Resp. 'MARSK'. LCALL WRSTRSERIAL ; Escreve na serial a string.
LJMP LOOP_MAIN TESTE_I: CJNE A,#'I',TESTE_T ; Recebeu "I", senão salta para TESTE_T. INF: LCALL RDSERIAL ; Lê a serial passando para o ACC. MOV TL,A ; Move o valor lido na serial para TL. MOV DPTR,#MARIK ; Move para DPTR a String de Resp. 'MARIK'. LCALL WRSTRSERIAL ; Escreve na serial a string. LJMP LOOP_MAIN TESTE_T: CJNE A,#'T',LOOP_MAIN ; Recebeu "T", senão salta para LOOP_MAIN. TEMP: LCALL RDSERIAL ; Lê a serial passando para o ACC. MOV DPTR,#MART ; Move para DPTR a String de Resp. 'MART'. LCALL WRSTRSERIAL ; Escreve na serial a string. LCALL LE_TEMP ; Lê a temperatura e faz os testes. MOV A,INT ; Move a parte Inteira da Temp. para o ACC. LCALL WRSERIAL ; Escreve na serial o valor da temperatura. LJMP LOOP_MAIN ; *** ESCREVE AS MENSAGENS BÁSICA NO DISPLAY ****** *********************** MENSAGEM: MOV A,#0 ; Coloca o cursor na primeira coluna . LCALL MOVCUR1 ; Move o cursor para a linha 1. MOV DPTR,#MSG1 ; Move para DPTR a MSG1. LCALL WRSTR ; Escreve no Display a MSG1. LCALL LE_DADO MOV A,#0 ; Coloca o cursor na primeira coluna. LCALL MOVCUR2 ; Move o cursor para a linha 2. MOV DPTR,#MSG2 ; Move para DPTR a MSG2. LCALL WRSTR ; Escreve no Display a MSG2. MOV A,COMPRESSOR ; Move para o ACC o estado do Compressor. LCALL WRCHAR ; Escreve no display o caractere. MOV A,#0 ; Coloca o cursor na primeira coluna.
LCALL MOVCUR3 ; Move o cursor para a linha 3. MOV DPTR,#MSG3 ; Move para DPTR a MSG3. LCALL WRSTR ; Escreve no Display a MSG3. MOV A,TH ; Move para o Acumulador o conteúdo de TH. LCALL INTTOASCII ; Converte o TH para ASCII. MOV A,#0 ; Coloca o cursor na primeira coluna. LCALL MOVCUR4 ; Move o cursor para a linha 4. MOV DPTR,#MSG4 ; Move para DPTR a MSG4. LCALL WRSTR ; Escreve no Display a MSG4. MOV A,TL ; Move para o Acumulador o conteúdo de TL.
LCALL INTTOASCII ; Converte o TL para ASCII. RET
64
; **** LE O SENSOR DE TEMPERATURA ***************** ************************* LE_TEMP: MOV A,#6 ; Esta constante ajusta a posição do cursor.
LCALL MOVCUR1 ; Move o cursor para a linha 4. LCALL LE_DADO ; Rotina de leitura da temperatura. LCALL TESTE_NEG ; Testa se a temperatura é negativa. LCALL TESTE_TEMP ; Testa se a temperatura está adequada.
RET ; **** TESTE DA TEMPERATURA *********************** *********************** TESTE_TEMP: MOV A,INT ; Move a parte inteira da TEMP. para o ACC. SUBB A,TL ; A = A – TL - C. JNC HISTERESE ; Se NÃO tiver Carry salta para rotina HISTERESE.
LCALL DESLIGARELE ; Rotina de desligamento do Relé. RET HISTERESE: MOV A,INT SUBB A,TH ; Testa se já passou pelas 2 Temp. de Ref. (TH e TL ) JNC LIGARELE ; Se NÃO tiver Carry salta para rotina LIGARELE. RET ; **** ACIONA O RELÉ ****************************** *********************** LIGARELE: LCALL StartI2C MOV A,#01000000b ; Slave Address do PCF8574 para WR.
LCALL WriteI2C LCALL RecvACK MOV A,#01000010b ; Aciona Relé 1. LCALL WriteI2C LCALL RecvACK LCALL StopI2C MOV COMPRESSOR,#'L' ; Altera o estado da variável Compressor.
RET DESLIGARELE: LCALL StartI2C MOV A,#01000000b ;Slave Address do PCF8574 para WR.
LCALL WriteI2C LCALL RecvACK MOV A,#01000011b ;Desliga o Relé 1. LCALL WriteI2C LCALL RecvACK LCALL StopI2C MOV COMPRESSOR,#'D' ; Altera o estado da variável Compressor. RET ; *** CONFIGURAÇÃO DO TMP101 ********************** ************************ INIT_TMP101: LCALL STARTI2C MOV A,#10010100B ; Slave Address do TMP101 na Sonda. LCALL WRITEI2C LCALL DELAY5us LCALL RECVACK ; Recebe o ACK. MOV A,#00000001B ; Configuração "Pointer Register".
LCALL WRITEI2C LCALL DELAY5us LCALL RECVACK ; Recebe o ACK. MOV A,#01111000B ; Configuração da resolução do sensor. LCALL WRITEI2C
65
LCALL DELAY5us LCALL RECVACK ; Recebe o ACK. LCALL STOPI2C ; Transmissão I2C Encerrada. RET ; *** LE O DADO DO SENSOR DE TEMPERATURA ********** ************************* LE_DADO: LCALL STARTI2C MOV A,#10010100B ; Slave Address p/ 'WR' do TMP101 na Sonda. LCALL WRITEI2C LCALL DELAY5us LCALL RECVACK ; Recebe o ACK. MOV A,#00000000B ; Configuração "Pointer Register". LCALL WRITEI2C LCALL DELAY5us LCALL RECVACK ; Recebe o ACK. LCALL STARTI2C MOV A,#10010101B ; Slave Address para 'RD' do TMP101. LCALL WRITEI2C LCALL DELAY5us LCALL RECVACK ; Recebe o ACK. LCALL READI2C ; Lê a parte inteira do dado (temperatura).
MOV R0,A ; Armazena a parte inteira no R0.
MOV INT,R0 ; Armazena a parte inteira na variável INT. LCALL DELAY5us LCALL SENDACK ; Envia o ACK LCALL READI2C ; Lê a parte fracionária do dado (temp.).
MOV R1,A ; Armazena a parte fracionária no R1.
MOV FLOAT,R1 ; Armazena a parte fracionária na FLOAT. LCALL DELAY5us LCALL SENDACK ; Envia o ACK LCALL STOPI2C ; Transmissão I2C Encerrada RET ; *** TESTE NEGATIVO E IMPRESSÃO DA TEMPERATURA NEG ATIVA ******************* TESTE_NEG: MOV A,INT ; Move a parte inteira para A. JB ACC.7,NUM_NEG ; Se o dado for negativo salta "NEGATIVO". LCALL CONVERTE ; Converte para decimal se positivo.
LCALL MOSTRA ; Mostra a temperatura no display.
RET NUM_NEG: CPL A ; Inverte o Valor de A.
MOV INT,A MOV A,R1 CPL A ; Inverte o Valor de A.
ADD A,#1 MOV FLOAT,A MOV A,INT ADDC A,#0 MOV INT,A
66
CONVERTE_NEG: MOV A,INT MOV B,#100 DIV AB ADD A,#'0' ; Transforma para o padrão ASCII. MOV CENT,A MOV A,B MOV B,#10 DIV AB ADD A,#'0' ; Transforma para o padrão ASCII. MOV DEZ,A MOV A,B ADD A,#'0' ; Transforma para o padrão ASCII. MOV UNI,A MOSTRA_NEG: MOV A,#'-' ; Símbolo de negativo "-". LCALL WRCHAR MOV A,DEZ LCALL WRCHAR MOV A,UNI LCALL WRCHAR LCALL DECIMAL ; Rotina de conversão e mostra do parte fracionária . MOV A,#11011111b ; Símbolo do Grau "°". LCALL WRCHAR MOV A,#'C' ; Caractere "C". LCALL WRCHAR MOV A,INT SETB C ; Inverte o C, para não acionar o CONTROLE. RET ; *** MOSTRA A TEMPERATURA ************************ ************************** MOSTRA: MOV A,DEZ LCALL WRCHAR MOV A,UNI LCALL WRCHAR LCALL DECIMAL ; Rotina de conversão e mostra do parte fracionária . MOV A,#11011111b ; Símbolo do Grau "°". LCALL WRCHAR MOV A,#' ' LCALL WRCHAR MOV A,#'C' ; Caractere "C". LCALL WRCHAR RET ; *** CONVERTE O DADO EM ASCII ******************** ************************ CONVERTE: MOV A,R0 MOV B,#100 DIV AB ADD A,#'0' ; Coloca no padrão ASCII. MOV CENT,A MOV A,B MOV B,#10
67
DIV AB ADD A,#'0' ; Coloca no padrão ASCII. MOV DEZ,A MOV A,B ADD A,#'0' ; Coloca no padrão ASCII. MOV UNI,A RET ; **** CONVERSÃO E EXIBIÇÃO DA PARTE FRACIONÁRIA DA TEMPERATURA ************ DECIMAL: MOV A,FLOAT ; Move a parte fracionária da TEMP. para o ACC. SWAP A ; Inverte a parte High pela Low do dado (XXXX.0000) . MOV DPTR,#FRACAO ; Aponta para a tabela com DPTR.
MOV B,#6 MUL AB ADD A,DPL MOV DPL,A MOV A,DPH ADDC A,#0 MOV DPH,A LCALL WRSTR RET ; *** ARQUIVOS DE INCLUSAO ************************ ************************* $INCLUDE(DELAY.INC) $INCLUDE(LCD.INC) $INCLUDE(I2C.INC) $INCLUDE(SERIAL.INC) ; *** TABELAS, CONSTANTES, STRINGS **************** ************************* MSG1: DB 'TEMP.:',0 MSG2: DB 'COMPRESSOR :',0 MSG3: DB 'T.ALTA :',0 MSG4: DB 'T.BAIXA:',0 MARLK: DB 'MARLK',0 MARDK: DB 'MARDK',0 MARC: DB 'MARC',0 MARSK: DB 'MARSK',0 MARIK: DB 'MARIK',0 MART: DB 'MART',0 FRACAO: DB ',0000',0 DB ',0625',0 DB ',1250',0 DB ',1875',0 DB ',2500',0 DB ',3125',0 DB ',3750',0 DB ',4375',0 DB ',5000',0 DB ',5625',0 DB ',6250',0 DB ',6875',0 DB ',7500',0 DB ',8125',0 DB ',8750',0 DB ',9375',0 END