controle remoto de temperatura por meio de um …educatec.eng.br/engenharia/monografia de...

67
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL 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.

Upload: vohuong

Post on 02-Feb-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

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.

57

Figura 6.3 – Esquemático de Ligação do Compressor.

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