81
1 PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL FACULDADE DE ENGENHARIA CURSO DE ENGENHARIA ELÉTRICA DISCIPLINA DE TRABALHO DE INTEGRAÇÃO AUTOMAÇÃO RESIDENCIAL: UMA ANÁLISE TEÓRICO-PRÁTICA BRUNO SCHWAB DE FIGUEIREDO JÚLIO CÉSAR DE MARQUES LIMA Porto Alegre, Novembro de 2005.

AUTOMAÇÃO RESIDENCIAL: UMA ANÁLISE TEÓRICO …educatec.eng.br/engenharia/Monografia de apoio/Automacao... · automação residencial/predial, antes um artigo de luxo acessível

Embed Size (px)

Citation preview

1

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL

FACULDADE DE ENGENHARIA

CURSO DE ENGENHARIA ELÉTRICA

DISCIPLINA DE TRABALHO DE INTEGRAÇÃO

AUTOMAÇÃO RESIDENCIAL: UMA ANÁLISE

TEÓRICO-PRÁTICA

BRUNO SCHWAB DE FIGUEIREDO

JÚLIO CÉSAR DE MARQUES LIMA

Porto Alegre, Novembro de 2005.

2

Dedicatória

Dedico este trabalho aos meus pais, por todo o apoio incondicional oferecido a mim

durante todo o curso de Engenharia Mecatrônica, bem como a todos os funcionários e

professores da Pontifícia Universidade Católica do Rio Grande do Sul, que muito

contribuíram para o meu crescimento intelectual bem como minha formação acadêmica.

3

Agradecimentos

Agradeço ao meu professor orientador, Júlio César Marques de Lima, por todo o

desempenho e dedicação oferecidos a mim durante a realização deste trabalho. Também

agradeço aos meus colegas de curso, sempre presentes nos momentos mais difíceis durante

esta jornada, oferecendo não só conhecimento, mas também companheirismo e

fraternidade.

Agradeço especialmente a Deus, por ter me dado todas as oportunidades e a

possibilidade de realizar escolhas, as quais me levaram a estar, neste presente momento,

apresentando este trabalho.

4

Resumo

Neste trabalho abordaremos, no contexto de Engenharia de Automação, o conceito

de um sistema de Automação Residencial, responsável por levar características como

modernidade, conforto e economia para uma determinada edificação. Para tanto,

realizaremos neste trabalho uma análise teórica sobre tais sistemas, analisaremos suas

vantagens, descreveremos conceitualmente cada um de seus componentes e por fim,

realizaremos um experimento prático visando demonstrar o comportamento de um Sistema

de Automação Residencial.

5

Sumário

1. Introdução..................................................................................................................... 6 2. Análise Inicial sobre Sistemas de Automação Residencial.......................................... 7 2.1. Sistemas de Automação: Uma análise através do tempo....................................... 7 2.2. A Necessidade da Integração entre Sistemas de Controle......................................... 9 2.3. Protocolo de Comunicação I2C: Uma Breve Análise............................................... 11 2.3.1 A Arquitetura I2C............................................................................................... 12 3. Modularização e Descrição do Hardware de Automação Residencial............................ 16 3.1. Introdução de Engenharia e Analise de Valor na fundamentação da aplicação do Produto 18 3.2.Integrando o Sensor de Temperatura ao Hardware.................................................... 22 3.3 Construção do Circuito e Medição da Luminosidade Ambiental.............................. 25 3.4 SMARTCARDS e suas aplicações............................................................................. 28 3.5 Um estudo sobre o Expansor I/O Integrado............................................................. 33 4. Integração dos módulos de Controle e Construção do Software final.......................... 35 5.Resultados ..................................................................................................................... 40 6. Conclusões ................................................................................................................... 41 7. Anexos ........................................................................................................................ 43 Anexo 1 ....................................................................................................................... 43 Anexo 2 ........................................................................................................................ 46 Anexo 3 ......................................................................................................................... 47 Anexo 4 ......................................................................................................................... 48 Anexo 5 ......................................................................................................................... 50 Anexo 6 ......................................................................................................................... 51 Anexo 7 ......................................................................................................................... 59 Anexo 8 ......................................................................................................................... 61 Anexo 9 ......................................................................................................................... 62 Anexo 10 ....................................................................................................................... 66 Anexo 11 ....................................................................................................................... 72 Anexo 12 ....................................................................................................................... 75 Anexo 13 ....................................................................................................................... 76 Anexo 14 ....................................................................................................................... 79 8.Referências Bibliográficas............................................................................................. 81

6

1. Introdução

A constante evolução da tecnologia que nos cerca torna mais acessível para a

humanidade componentes eletrônicos cada vez mais avançados, menores, mais baratos e de

fácil utilização. É dentro deste contexto que os profissionais das áreas mecânica e eletrônica

encontram com mais facilidade oportunidades de desenvolver sistemas mais eficientes e

acessíveis no mercado.

Logo, a automação residencial, antes um simples objeto de ficção e imaginação de

como seria a tecnologia em um futuro próximo, agora se torna gradualmente uma realidade

no mundo que nos cerca.

Neste trabalho abordarei tópicos referentes a um sistema de automação residencial.

Tal automação poderia estender-se a grandes edifícios, indústrias, aeroportos, hospitais,

centros comerciais, etc. Tal gama de possíveis locais supostamente e potencialmente

automatizáveis seria incontável, porém neste trabalho estudarei funções básicas para o

processo de automação de uma residência, embasando aspectos teóricos e práticos para o

desenvolvimento de um sistema de automação residencial.

7

2. Análise Inicial sobre Sistemas de

Automação Residencial

2.1. Sistemas de Automação: Uma Análise Através

do Tempo

Até poucos anos atrás, no que se refere ao conceito de automação

residencial/predial, tal sistema poderia ser considerado completamente abstrato e de difícil

concretização até mesmo para os especialistas mais otimistas. A tecnologia presente neste

tempo de nada incentivava a elaboração teórica de um sistema de automação para os fins

de tornar o comportamento de uma edificação completamente autônomo. Tal tecnologia,

desincentivada pela limitada gama de equipamentos, no que diz respeito a sensores,

controladores, sistemas de registro de dados, atuadores, etc. elevaria o custo de qualquer

sistema de automação a patamares muito elevados, tornando esta tecnologia praticamente

inacessível para a grande maioria dos consumidores em potencial.

Logo, tal tecnologia limitava-se basicamente, em sua grande maioria, à utilização de

tecnologias como câmeras de segurança (estas devendo ser monitoradas por um indivíduo),

portões eletrônicos, acionamento de equipamentos em intervalos de tempo previamente

definidos, entre outros. Estes sistemas eletrônicos, entretanto, eram quase que

8

completamente dependentes de um acompanhamento humano, tanto para sua monitoração

como para sua configuração. Tais feitos, apesar de cumprirem relativamente bem sua

designação até alguns anos atrás, pouco nos remete a conceitos muito citados hoje em dia

como sistemas de controle autônomos ou edifícios inteligentes.

É fato que esta reviravolta tecnológica que nos cerca contribui e muito para a

construção de sistemas de automação cada vez mais eficientes e de custo cada vez mais

reduzido. O avanço tecnológico crescente faz com que cada vez mais sejam criados

dispositivos mecânicos-eletrônicos de propósito geral que permitem uma integração cada

vez mais fácil e simplificada com outros dispositivos, e de funcionamento cada vez mais

visível para projetistas. Como resultado, a utilização de tais dispositivos torna-se cada vez

mais fácil, barata e simplificada.

São a partir destas considerações que os sistemas de automação hoje em dia tornam-

se cada vez mais uma realidade presente no nosso cotidiano. No que diz respeito à

automação residencial/predial, antes um artigo de luxo acessível a muito poucos, hoje se

torna um novo ramo de mercado de tecnologia inovadora muito atrativo, porém ainda

pouco explorado no Brasil. A automação residencial, hoje em dia, nos remete não só a

ganhos no que diz respeito a conforto, bem-estar, segurança, mas torna-se uma tendência

mundial na media que reduz o consumo recursos naturais como energia e água, por

exemplo. Tais sistemas, capazes de controlar com grande eficiência dispositivos como

lâmpadas, sistemas de climatização, sistemas de distribuição de água, sistemas de acesso,

segurança, etc, tornam-se uma alternativa rentável nos dias de hoje, onde problemas como

escassez de recursos naturais, desperdícios e criminalidade tornam-se cada vez mais

presentes em nosso dia-dia.

9

2.2. A Necessidade da Integração entre Sistemas de

Controle

No que diz respeito a conceitos como edifícios inteligentes e sistemas autônomos,

podemos verificar que de nada adianta a introdução de dispositivos automáticos como

sensores de temperatura, sistemas de acionamento e sistemas de registro de dados se estes

mesmos não permitirem uma perfeita comunicação e integração entre si. Torna-se inútil à

instalação de um sistema de climatização caro e potente, visando integrá-lo a um sistema de

controle, se este mesmo não dispor de ferramentas que permitam uma comunicação rápida,

fácil e eficiente com outros dispositivos. Era fato, até pouco tempo atrás quando os

primeiros sistemas automatizáveis começaram a surgir, de que estes mesmos, apesar de

prover uma disponibilidade de comunicação e integração entre dispositivos, infelizmente

limitavam-se a comunicação com outros dispositivos manufaturados pelo mesmo

fabricante. Isto era conseqüência de uma incompatibilidade entre protocolos de

comunicação, que se diferenciavam de fabricante para fabricante, ou pior, um mesmo

fabricante poderia utilizar mais de um tipo de protocolo para sua linha de produtos. Como

resultado, o profissional da área de automação se via obrigado a projetar sistemas

completamente dependentes de equipamentos de um mesmo fabricante. Quando tal

fabricante não dispunha de um componente necessário para o processo de automação,

dificilmente o projetista encontraria um dispositivo similar que pudesse vir a ser integrado

ao sistema.

Tal realidade começou a se alterar com a regulamentação de protocolos universais

de comunicação. Esta visão de integração se deu primeiramente por parte de uma empresa

chamada Echelon Corporation. Com uma visão futurista em que qualquer dispositivo

eletrônico poderia integrar-se com outro, a empresa criou um protocolo de comunicação

denominado LonWorks. Tal protocolo necessitava da introdução de um chip, denominado

Neuron Chip, responsável pela tradução e comunicação com qualquer outro dispositivo

integrado a uma rede LonWorks, de modo que o fabricante de dispositivos não mais tivesse

10

que se preocupar com protocolos de comunicação, mas com a introdução de tal chip ao seu

dispositivo. Este protocolo ainda é um dos mais difundidos e utilizados em sistemas de

automação predial.

Muitos são, hoje em dia, os protocolos disponíveis para a comunicação entre

dispositivos. E o melhor disso é que atualmente, a maioria destes pode ser facilmente

configurado de modo a integrar-se com diferentes tipos de protocolos.

Como exemplos de protocolos atualmente utilizados, podemos citar os padrões

Ethernet, CAN, DeviceNet, TCP/IP, I2C, USB, todos muito utilizados hoje em dia em

qualquer que seja o sistema de automação analisado. Entretanto, dispositivos que utilizam

estes protocolos citados acima atualmente necessitam estarem conectados fisicamente entre

si, o que pode acarretar alguns problemas como impossibilidade de comunicação a longas

distâncias, danificação das redes de comunicação, etc. Felizmente, os crescentes avanços

tecnológicos já nos proporcionam protocolos de comunicação baseados na tecnologia

wireless (sem-fio). Tal tecnologia já está presente entre nós e sua difusão está se tornando

uma nova tendência mundial, a da integração entre qualquer dispositivo sem a necessidade

de uma conexão física entre eles. Como exemplo disso, podemos citar dispositivos como

ar-condicionados, PDAs, computadores, entre centenas de outros, cujo projeto já visa à

possibilidade de comunicação sem-fio com outros dispositivos compatíveis. Logo, já

podemos considerar obsoletos sistemas fisicamente integrados, salvo ocasiões em que uma

comunicação sem-fio tornaria-se inviável. Como exemplos de protocolos wireless,

podemos citar os sistemas Bluetooth e Wi-Fi (wireless fidelity).

11

2.3. Protocolo de Comunicação I2C: Uma Breve

Análise

I2C, abreviação de Inter-IC bus, trata-se de um protocolo de comunicação

desenvolvido pela Philips, com o intuito de racionalizar a utilização de portas de

entrada/saída de um dispositivo de controle, como um micro-controlador, por exemplo.

Periféricos tradicionais, que não utilizam protocolos de comunicação como I2C, por

exemplo, geralmente necessitam conectar-se a um dispositivo por pelo menos 1 (uma) via

dedicada para este. O problema é devido a limitada quantidade de portas de entrada/saída

de dispositivos de controle. Quando muitos dispositivos necessitam a conexão direta com o

sistema, pode vir a ser fisicamente impossível realizar esta conexão, considerando uma

situação em que todas as portas deste mesmo já estarem em uso. Com a utilização do

protocolo I2C para a conexão e comunicação entre dois ou mais dispositivos, teoricamente

até 1024 dispositivos poderiam estarem interconectados em apenas 1 (uma) porta de

entrada/saída de um dispositivo de controle.

Como este trabalho visa simular um sistema genérico de automação residencial, se

faz necessária a utilização de um protocolo de comunicação, de modo a tornar o

experimento o mais fiel possível a um sistema real de controle e automação residencial.

Considerando que I2C será o protocolo de comunicação utilizado nos experimentos

práticos realizados à seguir, é importante uma boa compreensão de seu funcionamento,

para que possamos entender como é realizada a comunicação entre o circuito controlador e

os diversos dispositivos conectados à este.

12

2.3.1. A Arquitetura I2C

Basicamente, toda a comunicação feita entre dispositivos com interface I2C é

realizada através de apenas 2 (dois) cabos, chamados SCL e SDA. SCL nada mais é que o

barramento de clock, utilizado para realizar a sincronização de informações entre

dispositivos I2C conectados na mesma linha de dados. A outra linha, SDA, é o barramento

responsável pela transmissão dos dados, que são enviados ou podem ser recebidos pelos

componentes conectados na mesma linha. A figura 2.1 mostra um exemplo de construção

de uma linha de comunicação que utiliza o protocolo I2C. Vale observar que ambas linhas

de comunicação SCL e SDA estão fisicamente conectados a um dispositivo-mestre, como

um controlador, por exemplo, responsável pela construção do sinal de clock e pela leitura

das informações dos dispositivos, como será esclarecido a seguir.

Figura 2.1 – Exemplo de barramento I2C

Um fato interessante na construção do barramento de comunicação I2C é que se faz

necessária a inserção de pelo menos 2 (dois) resistores adicionais à rede. Isto se deve ao

fato de que os dispositivos I2C são capazes de definir seu estado de saída como “Baixo”

mas não podem definir este mesmo como “Alto”. Para tais dispositivos poderem definir seu

sinal de saída como “Alto”, resistores de pull-up devem ser necessariamente acrescidos ao

barramento como mostrados na figura 2.1, um para cada linha de comunicação (SCL e

SDA). A ausência destes resistores faria com que os sinais da linha sempre estivessem em

0V (ou próximo disso), e como conseqüência a rede de comunicações I2C não viria a

funcionar.

13

Outra definição importante na rede I2C é que os dispositivos conectados podem ser

denominados master (mestre) ou slaves (escravos). Mestre sempre será o dispositivo que

comanda a linha e gera o clock de sincronização na linha SCL. Por outro lado, os

dispositivos escravos são aqueles que respondem ao mestre. Dispositivos escravos não

podem iniciar uma seqüência de transmissão de dados através da linha de comunicação, tal

tarefa cabe apenas ao dispositivo mestre.

No que se refere à estrutura física do protocolo de transmissão de dados através da

rede, pelo menos dois eventos merecem uma atenção especial, as denominadas seqüências

de início de transmissão de um pacote de dados (start sequence) e as seqüências de fim

de transmissão de um pacote de dados (stop sequence). Tais eventos podem ser

claramente definidos como mostra a figura 2.2. A seqüência de início se faz necessária

(seqüência esta transmitida pela linha SDA) para avisar todos os dispositivos escravos

presentes na rede de que uma instrução de comando para algum dispositivo será dada pelo

dispositivo mestre. Para a seqüência de inicio de transmissão ser compreendida pelos

dispositivos na rede, é necessário que o sinal proveniente pelo mestre na linha SDA esteja

configurado para “Alto” e mude para “Baixo”, enquanto o sinal da linha SCL, também

proveniente pelo dispositivo mestre deve obrigatoriamente manter-se em nível lógico

“Alto”. Para a construção da seqüência de fim de transmissão de um pacote, o nível lógico

proveniente pelo dispositivo mestre no barramento SDA deve ficar em “Baixo” e mudar

para “Alto”, enquanto o nível lógico no barramento SCL deve obrigatoriamente manter-se

em “Alto”.

Figura 2.2 – Definição para seqüência de inicio e fim da transmissão de um pacote de dados

14

Todos os dispositivos I2C possuem um endereço interno único. Isto é muito útil,

pois depois de concluída a seqüência de inicio de transmissão, o dispositivo mestre envia

um pacote de dados contendo o endereço do dispositivo ao qual deseja conectar-se a fins de

executar uma instrução de comando. A grande maioria dos componentes utilizados

atualmente possuem um endereçamento interno de 7 bits, porém tais endereçamentos

podem conter até 10 bits. Quando o dispositivo mestre envia os 7 bits relacionados ao

endereço do dispositivo desejado (e considerando que o dispositivo opere com

endereçamentos de 7 bits) através do barramento SDA, deve ser acrescido ainda 1 (um) bit

extra no final da seqüência, responsável pela definição do tipo de instrução que será dada

ao dispositivo-alvo. Tal instrução pode ser read (leitura), definida pelo nível lógico “Alto”,

ou write (escrita), definida pelo nível lógico “Baixo”.

Ao final da seqüência de endereçamento, caso algum dispositivo que possua o

mesmo endereço introduzido na linha SDA identifique-se como sendo o dispositivo slave

cujo mestre está tentando conectar, este dispositivo enviará na rede um bit denominado

ACK (acknowledgement, confirmação). Este bit, disposto na linha em nível lógico “Alto”

nada mais é do que um sinal de confirmação dado pelo dispositivo escravo para o

dispositivo mestre, como forma de avisar que está pronto para receber o próximo pacote de

dados enviados na rede. A figura 2.3 esboça com clareza a etapa de endereçamento em

uma rede I2C.

Figura 2.3 – Seqüência de endereçamento e confirmação em uma arquitetura I2C

Vale lembrar que após a seqüência de endereçamento ter terminado, todos os

dispositivos que supostamente não se identificaram como sendo o dispositivo-alvo

informado pelo mestre, ignorarão todos as próximas seqüências de dados provenientes na

rede, até o momento em que outra seqüência de inicio de transmissão seja efetuada na rede.

15

Neste caso, os dispositivos passarão novamente a monitorar o próximo pacote de

endereçamento para constatar se ele é ou não o dispositivo-alvo em questão.

Em seqüência, após o termino da seqüência de endereçamento e a eventual

confirmação do dispositivo escravo, o dispositivo mestre está pronto para iniciar a

transferência de seu pacote de dados. Estes pacotes são transferidos em uma seqüência de 8

bits. Para cada pacote de 8 bits enviados, o dispositivo receptor envia 1 (um) bit extra na

linha, que nada mais é do que outro bit ACK (confirmação). Se o nível lógico deste bit for

configurado para “Baixo”, significa que o dispositivo recebeu o pacote e está pronto para

receber outro pacote. Por outro lado, se o nível lógico for configurado para “Alto”, significa

que o dispositivo receptor não pode aceitar mais nenhum pacote de dados e o dispositivo

mestre deve terminar a seqüência de transmissão enviando uma seqüência de fim de

transmissão. A figura 2.4 ilustra a seqüência de envio de um pacote de dados.

Figura 2.4 – Seqüência de transmissão de pacotes através de uma rede I2C

Basicamente, estas são as 4 fases do processo de comunicação entre dispositivos

conectados no mesmo barramento de uma rede I2C. Seqüência de inicio da transmissão,

seqüência de endereçamento, seqüência de transmissão de pacotes e seqüência de fim da

transmissão.

Sobre a velocidade do fluxo de dados que transita através de uma rede I2C, esta

mesma é definida pelos intervalos com que o clock é disposto pelo dispositivo mestre na

linha SCL, e esta velocidade pode ser definida de 3 (três) maneiras diferentes: A

velocidade Standard (100 kHz), fast (400kHz) e High Speed (3.4 MHz). Para efeitos de

teste, a velocidade de sincronização no projeto que será apresentado manterá um clock de

aproximadamente 100kHz, garantindo uma perfeita sincronização e compatibilidade entre

os dispositivos conectados na rede.

16

3. Modularização e Descrição do

Hardware de Automação

Residencial

Como vimos anteriormente, um sistema de automação residencial deve ser capaz de

atender a diversas funções. Para isto, deve-se obrigatoriamente ter um nível de flexibilidade

muito elevado, ou seja, ser capaz de receber novos periféricos, atualizações e melhorias em

geral de maneira rápida, barata, fácil e segura. Para tanto, o hardware principal, aquele que

desempenhará a função de núcleo do sistema deve dispor de um alto nível de

intercomunicação, isto é, ser completamente compatível com as novas tecnologias

assimiladas pelo mercado e dispor de recursos suficientes para gerenciar de forma ágil e

segura tais adventos.

O hardware aqui utilizado por nós para realizarmos todas validações dos

embasamentos teóricos que vimos e vamos ver logo a frente, atende perfeitamente tais

características listadas anteriormente, oferecendo uma alternativa de baixo custo e capaz de

realizar um controle de maneira ágil, confiável e flexível, requisitos indispensáveis quando

pensamos em projetar um sistema de controle residencial. Tal hardware, com um núcleo

baseado na arquitetura MSC1211 de 8 bits, operando a 11.0592MHz, é dotado de um nível

elevado de expansibilidade, podendo receber e/ou controlar praticamente qualquer

dispositivo de comunicação de interface digital em suas quatro portas digitais de 8 bits,

bem como ler sinais analógicos em um de seus oito canais analógicos que podem ser

configurados para trabalhar em uma resolução de 8, 16 ou 24 bits, bem como dispor sinais

analógicos através de seu conversor DA onboard. A figura 3.1 nos mostra nosso hardware

17

utilizado para realizar todos os experimentos, testes e validações que serão estudadas

futuramente neste trabalho.

Figura 3.1 – Hardware MSC1211

Neste capítulo, vamos analisar separadamente todos os dispositivos de expansão que

iremos utilizar futuramente em nosso experimento final. Tais dispositivos, conectados às

portas de expansão do controlador, serão capazes de desempenhar diversas funções como

aquisição de dados, sensoriamento externo, expansão entre diversas outras peculiaridades.

Também estudaremos, junto com a análise de cada dispositivo, um software exemplo,

escrito em ASSEMBLER e compatível com qualquer controlador da família 8051, que

mostrará o funcionamento do dispositivo que será futuramente integrado ao nosso projeto

final.

18

3.1. Introdução de Engenharia e Análise de Valor

na Fundamentação da Aplicação do Produto

No cenário tão competitivo que se configura o mercado no mundo atual, boas idéias,

aliadas à criatividade do projetista, são indispensáveis para o sucesso e firmamento de um

novo produto do mercado. Porém apenas grandes idéias e dedicação ao desenvolvimento

não consolidam um novo produto. Este projeto, antes, deve passar por uma pesquisa de

mercado para definirmos inicialmente os rumos que deveremos tomar ao início do

desenvolvimento, e, até mesmo, se este projeto deve ou não ser concretizado, pois nem

sempre uma grande idéia é bem aceita, a princípio, pelo público alvo. Não faz sentido

construir um grande e revolucionário produto que apesar de inovador, devido a uma série

de fatores diversos não se torna atrativo no mercado.

É neste contexto que podemos inserir, na fase de desenvolvimento conceitual do

produto, uma moderna ferramenta de qualidade denominada Análise de Valor. Tal

ferramenta consiste na elaboração de uma planilha onde são levantados aspectos decisivos

para a elaboração de um novo conceito. Esta planilha é construída, primeiramente, através

de uma pesquisa de mercado direcionada à consumidores em potencial, que podem

contribuir, em diversas maneiras, com informações importantes sobre as características

diversas do produto, indispensáveis para levar tal produto a ter uma aceitação maior no

mercado.

Para o desenvolvimento deste projeto teórico-prático apresentado ao decorrer deste

trabalho, referente ao desenvolvimento de um sistema automatizado de controle residencial,

é de suma importância que procuremos tornar tal desenvolvimento o mais real possível,

tentando realçar os aspectos mais significativos dos conceitos de desenvolvimento de

produto. Para tal, utilizaremos, de uma maneira mais simples, os conceitos de Análise de

Valor para que possamos ter uma idéia geral do que um consumidor em potencial espera

deste sistema. Claro, em condições reais de utilização, tal pesquisa seria efetuada por uma

equipe de marketing atuando conjuntamente com outros setores da empresa como pesquisa

e desenvolvimento, por exemplo, mas devido às nossas restrições, a pesquisa será

19

totalmente efetuada pelo autor deste trabalho, também responsável pelo projeto, pesquisa e

desenvolvimento do produto.

Para tal pesquisa, consideraremos inicialmente que nosso sistema de automação

residencial, desenvolvido para realizar um controle inteligente de um determinado local que

poderia ser uma sala, um domicilio, um edifício, entre muitas outras alternativas, visa

integrar modernos sistemas de controle para levar à estes ambientes praticidade, conforto,

segurança e economia de recursos naturais, como eletricidade, por exemplo. Para isto foram

sugeridos inicialmente uma série de módulos que podem ser integrados com algum trabalho

extra no sistema de controle central, como por exemplo, sistemas de segurança, sistemas de

controle de luminosidade, sistemas de interfaceamento, etc, que podem ser escolhidos

livremente de acordo com as necessidades de cada consumidor. Cada consumidor, então,

escolheria quais os módulos mais apropriados para seu projeto e também definiria uma

graduação para este módulo, que reflete o grau de aperfeiçoamento de cada módulo,

compreendendo variáveis como tecnologia utilizada, material utilizado, inovação e horas de

projeto conceitual. Com um grau que varia de 0 a 10, de acordo com a necessidade, foi

estipulada que cada aumento na unidade deste grau necessita de mais duas horas de projeto

extra, e de que foi estipulado, efetuando uma média entre opiniões de diversos engenheiros,

que um preço razoável a ser cobrado por cada hora de trabalho seria de R$50,00. Então, se

um módulo tivesse necessidade de grau 10, seria cobrado por ele R$500,00. Nesta pesquisa

não foi considerado o custo do sistema principal de controle, que será o responsável pelo

interfaceamento entre os módulos, consideramos apenas que o cliente está interessado no

resultado final do produto.

Após levantar dados suficientes que possam esboçar um valor que represente uma

tendência de consumo pelos clientes em potencial, podemos agora trabalhar com um

conceito denominado Engenharia de Valor. Tal conceito visa dar uma maior ênfase no

desenvolvimento dos módulos que despertam mais interesse nos consumidores, e que

realmente irão gerar um maior lucro com sua inclusão no sistema final, bem como reduzir

custos (refletidos em horas de pesquisa, em nosso caso) do projeto e aperfeiçoamento de

módulos de pouca aceitação pelos consumidores, ou até mesmo abandonar este módulo

caso os resultados não tenham se mostrado satisfatórios.

20

Baseando-se no estudo destes conceitos referentes à Engenharia de Produto,

poderemos então utilizar o método de Engenharia e Análise de Valor para realizar uma

pesquisa de ordem experimental de modo a verificar uma possível aceitação dos módulos

propostos à seguir pelo mercado.

Tal pesquisa consiste, inicialmente, na entrega de um formulário para alguns

possíveis clientes escolhidos pelo autor para realizar tal simulação, com níveis de poder

aquisitivo variando entre médio e alto. 10 (dez) clientes foram consultados, e lhes entregue

uma ficha com a descrição conceitual do projeto, bem como uma explicação sobre

características gerais da Engenharia e Análise de Valor e à seguir, uma lista de módulos

que descrevem características de um sistema de automação residencial para que os

pesquisados possam dar uma nota, variando de 0 (zero) a 10 (dez) sobre a importância de

cada item na elaboração final do projeto, considerando não somente a inclusão de tal item,

mas a conseqüência de tal inclusão, como aumento do preço final, tempo de

desenvolvimento, etc. Tais conseqüências foram propostas justamente para os entrevistados

refletirem se tais implementações seriam realmente necessárias, considerando que estas

mesmas agregariam valor ao produto final.

Após tal pesquisa, podemos finalmente, construir a tabela 3.1, definindo o grau de

importância de cada módulo com base na média dos dados apurados em nossa pesquisa de

mercado.

Tabela 3.1 – Resultados da Pesquisa de Mercado

CARACTERÍSTICA Média Valor Final

Segurança no fluxo de dados

Grau de importância referente à segurança do fluxo de dados referentes ao sistema de controle eletrônico. O conceito segurança está relacionado com a aplicação de algoritmos de criptografia na rede de dados do sistema como um todo de maneira a evitar que tais dados sejam capturados ou modificados por algum agente externo.

4,9 5

Facilidade de uso

Grau de importância referente a facilidade de utilizar o sistema, como configurá-lo, verificar suas configurações, acionar, desligar, etc.

9,0 9

21

Geração de registro de uso

Grau de importância referente à possibilidade deste sistema gerar automaticamente relatórios que podem ser visualizados em um computador referente às suas funções definidas. Ex: Horário que uma porta foi aberta. Horário que uma lâmpada foi acionada.

3,4 3

Acionamento eletrônico de fechaduras

Substitui a utilização de chaves ou similares em uma fechadura por um sistema eletrônico de acesso.

7,8 8

Sistema de conforto e climatização

Controle inteligente de temperatura interna, controlando o acionamento automático de ventiladores, estufas e ar condicionado quando a temperatura exceder ou baixar de uma faixa de temperatura previamente configurada.

7,0 7

Controle de iluminação

Realiza o controle automático da luminosidade em um determinado ambiente, verificando a luminosidade atual e acionando, caso seja necessário, lâmpadas ou efetuando a abertura de janelas.

6,8 7

Controle de irrigação

Realiza o controle de irrigação de um jardim, de modo a acionar automaticamente e periodicamente, mangueiras ou regadores de água.

2,8 3

Valor final do produto Grau de importância do valor final do equipamento adquirido. Impacto sobre qualidade dos componentes utilizados, por exemplo.

9,0 9

Analisando os dados levantados, podemos agora partir para uma análise individual e

detalhada dos módulos que de forma geral são de maior importância para os consumidores.

Utilizando os conceitos relacionados à Engenharia de Valor, podemos concluir que

características como controle de irrigação, segurança no fluxo de dados e geração de

registro de uso, embora tenham um conceito inovador, não despertam, pelo menos neste

presente momento, um grande interesse pelo mercado. Logo, são itens que possivelmente

seriam excluídos do projeto final.

Podemos finalmente, com maior segurança, investir um tempo maior na elaboração

final, pesquisa e aperfeiçoamento dos conceitos de maior valor, pois já temos uma idéia

inicial de que sua construção e inclusão no projeto final será responsável pelos maiores

lucros que viríamos a ter caso fossemos realmente comercializar um Sistema de Automação

Residencial

22

3.2. Integrando o Sensor de Temperatura ao

Hardware

Como o hardware utilizado para realizar o controle das diversas funções designadas

não apresenta um sensor de temperatura on-board, ou seja, construído na própria placa,

devemos, então, utilizar uma ou algumas de suas saídas de expansão para conectar ao

dispositivo um sensor de temperatura que nos forneça com certa exatidão a leitura da

temperatura interna ou externa do ambiente.

Para tanto, escolhemos como sensor TMP123, um potente conversor de temperatura

em sinais digitais que podem ser facilmente lido pelo hardware de controle. Trata-se de um

sensor de 12 bits que consegue medir com certa exatidão uma faixa de temperatura variante

entre -40°C e +125°C, com precisão de 0.0625°C. Diferente da maioria dos componentes

de expansão que podem ser conectados na placa, este sensor utiliza um protocolo de

comunicação denominado SPI, mais simples de ser utilizado, porém irá requerer saídas

dedicadas do hardware, não podendo, então, ser conectado a um barramento de

comunicação afim de economizar entradas/saídas do hardware utilizado. Desconsiderando

os pinos de alimentação (Vcc e terra), este sensor necessita conectar-se a 3 portas do

hardware, necessárias para gerar um clock de sincronia com o dispositivo, transferir os

dados e ativar/desativar o sensor.

O processo de aquisição de dados do sensor se dá de forma muito simples. Como

este mesmo se encontra em um barramento dedicado, ou seja, só ele está conectado na

porta, torna-se dispensável o processo de reconhecimento antes necessária no protocolo

I2C. Após ser dada a condição de início, o sensor inicia o processo de envio da temperatura

registrada internamente sincronizada pelo sinal de clock enviado pelo hardware de controle.

A figura 3.2 ressalta a seqüência a ser seguida para efetuar a leitura deste sensor:

23

Figura 3.2 - Seqüência de leitura do sensor TMP123

Um aspecto importante no processo de conversão de temperatura deste sensor, é que

este mesmo converte continuamente a temperatura enquanto o pino CS se mantém em nível

lógico “alto”. O sensor necessita, ainda, de pelo menos 0.25 segundos para efetuar cada

processo de leitura, então é importante durante o processo de construção do software de

leitura, que se determine este tempo mínimo de intervalo entre leituras para a obtenção de

um valor coerente com a realidade.

Para o processo de conversão do valor de temperatura lido no barramento, o

fabricante disponibiliza a tabela 3.2 com algumas leituras convertidas para valores em

graus Celsius para podermos então, montar nossa regra de conversão de temperatura:

Tabela 3.2 - Tabela de conversão de temperatura para TMP123

Verificando a tabela é possível definir matematicamente que valores positivos da

temperatura lida, em hexadecimal, pode ser obtida dividindo o valor lido, em hexadecimal,

24

por 80h. Para realizar tal divisão, foi utilizado no programa-exemplo uma rotina de divisão

de 16 bits disponibilizada no site www.8052.com, bem como as rotinas de delay da

biblioteca DELAY.INC (vide anexos) desenvolvida pelo professor Julio César Lima.

Neste exemplo, foi criada uma biblioteca com funções pré-definidas para efetuar a

leitura do sensor TMP123. Em resumo, este exemplo dispõe rotinas para efetuar a aquisição

da temperatura armazenada no sensor, registrando este valor no acumulador e

disponibilizando este valor na forma decimal para que ela possa ser impressa em algum

dispositivo de saída caso seja necessário. Tal exemplo pode ser analisado no Capítulo

Anexos, Anexo 1. Esta mesma biblioteca será utilizada quando realizarmos, de fato, a

construção da parte do software responsável pelo controle da climatização ambiental do

sistema de automação residencial.

Após este exemplo concluímos, então, a análise teórica do funcionamento do sensor

de temperatura TMP123, bem como um exemplo prático que será futuramente integrado ao

nosso hardware de controle.

25

3.3. Construção do Circuito e Medição da

Luminosidade Ambiental

Efetuar a captação e medição de valores de luminosidade é uma tarefa essencial

quando estamos projetando um sistema inteligente de controle de luminosidade ambiental.

Tal sistema deve ser capaz de detectar a luz incidente em determinado ponto, compará-lo

com um valor pré-definido e então efetuar regras de controle como o acionamento de

lâmpadas, abertura de janelas, etc. Logo, se faz necessário inicialmente elaborar um circuito

elétrico capaz de realizar a captação desta luminosidade e transformá-la em valores

analógicos ou digitais, para que sejam processadas, posteriormente, pelo hardware de

controle.

No entanto precisamos, primeiramente, definir qual o sensor que será utilizado para

realizar a aquisição da luminosidade incidente sobre a área a ser controlada. Dentre vários

disponíveis no mercado, escolhi para esta função um componente analógico denominado

LDR. Trata-se de um resistor barato e de fácil acesso, que tem sua resistência interna

variável de forma linear conforme a intensidade da luz que incide sobre sua superfície.

Basicamente, este componente apresenta uma resistência infinita quando exposto a uma

ausência de luminosidade (ambiente escuro) e uma resistência cada vez menor a medida em

que a intensidade de luz incidente sobre sua superfície aumenta. Então, para realizar a

captação de valores analógicos referentes à luminosidade ambiental, vamos utilizar o

circuito exemplificado a seguir para quantizar esta intensidade luminosa em valores

analógicos, que podem ser futuramente lidos pelo nosso hardware.

Para a construção deste circuito, consideramos que a alimentação será proveniente

do próprio hardware que fornece uma saída de 5Vcc, e de que o valor analógico de saída

deve variar entre 0 (zero) e 2.5Vcc.

26

Figura 3.3 - Circuito utilizado para captação da luminosidade ambiental

Podemos observar que os dois primeiros resistores de 1k atuam exclusivamente

como divisores de tensão, de modo a fazer a tensão resultante sobre o LDR variar entre 0 e

2.5 Vcc, necessário para a utilização correta do conversor A/D do hardware. O valor

resultante lido é relativo e varia conforme a alteração do resistor R3. O valor de 8k foi

escolhido diante uma série de alternativas, pois apresenta um sinal mais bem excursionado

quando submetido a diferentes intensidades de luminosidade.

Agora que o circuito já está montado, e tem seu sinal variando entre 0 e 2.5 Vcc,

chega a hora de conectá-lo ao hardware de controle através de uma de suas portas

disponíveis, para efetuar a leitura de valores analógicos e convertê-la posteriormente em

valores digitais. Nosso hardware apresenta 8 portas analógicas, compartilhadas com a porta

0 (zero) deste mesmo, ou seja, esta porta pode ser configurada como uma entrada/saída

digital ou como uma entrada para aquisição de valores analógicos. Para o nosso circuito,

utilizaremos apenas uma destas entradas operando em modo analógico, definida como

AD0, o canal 0 (zero) do conversor A/D. Para a configuração da entrada A/D do circuito,

devemos salientar que esta mesmo pode operar com uma resolução de 8, 16 ou 24 bits. Nos

testes de bancada realizados para ajustes do circuito e parâmetros do software, foi possível

27

observar que a utilização do conversor A/D em modo 8 bits mostrou-se bastante eficiente,

obtendo uma precisão de duas casas após a virgula, suficiente então, para realizar com certa

exatidão a leitura da luminosidade incidente sobre o sensor.

A rotina utilizada para leitura do conversor A/D, que pode ser analisada no

Capítulo Anexos, Anexo 2, foi disponibilizada pelo professor Julio César Lima. O valor de

leitura no canal 0 é registrado no acumulador em um formato de 8 bits (0-255). Tal valor

pode ser utilizado, futuramente, para comparação com outro valor pré-definido afim de

controlarmos se a taxa de luminosidade captada pelo sensor é menor ou maior do que o

configurado, acionando uma regra de controle caso necessário.

28

3.4. SMARTCARDS e suas Aplicações Cartões de memória hoje são cada vez mais introduzidos e aceitos em nosso

cotidiano, por motivos como praticidade, tamanho reduzido, segurança nos dados,

capacidade de armazenamento entre muitos outros. É comum hoje em grandes hotéis

receber ao invés de uma chave de metal, um cartão de acesso para um dormitório. Em um

restaurante, torna-se cada vez mais comum, prático e rápido substituir as tradicionais

comandas de papel por um cartão capaz de armazenar o histórico de consumo do cliente,

entre muitas outras aplicações.

Um cartão de memória, resumidamente, nada mais é do que uma memória

eletrônica (por exemplo, um chip) acoplado a um pequeno cartão de plástico, como é o caso

dos smartcards. Trata-se de uma memória re-gravável EEPROM 24LC barata e de fácil

acesso, que tem uma capacidade de armazenamento variante entre 2K, 4K, 8K e 16K

bits.Entre suas características destacam-se a confiabilidade (em média os dados gravados

não se deterioram por um período médio de 40 anos), praticidade (a transmissão de dados

entre a memória e hardware utiliza protocolo I2C), e baixo valor do produto. A figura 3.4

representa uma memória 24LC que é comumente anexada nos smartcards:

Figura 3.4 - Memória 24LC

Apesar da memória apresentar oito pinos, na maioria dos casos (e no nosso caso)

utilizaremos apenas quatro, que são os dois pinos referentes à alimentação da memória

(Terra e Vcc) e outros dois para realizar a transmissão de dados pelo protocolo I2C (um

para dados e outro para sincronia).

O soquete de leitura, comumente denominado Smartsocket, tem a simples função de

conectar firmemente o cartão e expandir estes oito pinos de forma a conectá-los

29

indiretamente, ou seja, por meio do soquete, aos seus locais apropriados como alimentação

e portas de um hardware. O soquete ainda possui um pino extra que trabalha de forma

independente ao cartão. Este pino é utilizado para sinalizar a inserção do cartão dentro do

soquete. Simplificando, quando o cartão é inserido, ele provoca o fechamento de um

contato que, quando alimentado, provoca um sinal de saída que pode ser útil para sistemas

que estejam interessados em detectar o momento que o cartão é inserido, para efetuar sua

leitura. Logo, apesar de útil, sua conexão não é necessária para efetuar a leitura/escrita do

cartão.

Como em qualquer outra memória regravável, esta memória apresenta dois

momentos distintos de trabalho. O processo de leitura, e o processo de escrita. A escrita é

necessária para efetuar processos de configuração e registro de dados. Na leitura a memória

fornece o dado armazenado na posição de memória requerida.

À seguir vamos analisar dois programas distintos. O primeiro realiza a escrita na

memória de um determinado byte em uma determinada posição de memória. O segundo

efetua a leitura de um byte armazenado em uma determinada posição, bem como a leitura

do sensor de conexão do cartão presente no soquete.

Para a escrita, vamos primeiro definir obrigatoriamente o endereço do dispositivo,

no caso a memória, para uma operação de escrita. O fabricante nos fornece a tabela 3.3 com

as definições de endereçamento para este tipo de memória.

Tabela 3.3 - Tabela de endereçamento da memória 24LC

Considerando que nem mencionamos os pinos Chip Select anteriormente, vamos

considerar que só desejamos ter uma memória 24LC02 (2K) presente no mesmo

barramento I2C, e de que estaremos trabalhando em modo Write. Logo, o endereço correto

30

pode ser definido como 10100000, ou seja, 0AH. A seguir, vamos analisar a figura 3.5 que

nos representa o processo de escrita de determinado byte em uma posição de memória:

Figura 3.5 - Processo de escrita de um byte em uma posição de memória

Fica fácil entender que após o endereçamento, o byte referente ao endereço é

enviado ao dispositivo, e após a confirmação o byte de dado é enviado à memória.

Novamente uma confirmação é enviada e uma seqüência de fim de transmissão finalizaria

o processo. Caso desejássemos escrever mais bytes de dados em seqüência, poderíamos

seguir a seqüência descrita na figura 3.6:

Figura 3.6 - Processo de escrita de bytes em seqüência em uma posição de memória

O procedimento é o mesmo para a escrita de um byte, porém a seqüência de fim de

transmissão é adiada até que todos os bytes desejados sejam escritos, seguidos, é claro,

pelo byte de confirmação que é enviado pela memória a cada escrita bem sucedida. O

software escrito como exemplo, que pode ser encontrado no Capítulo Anexos, Anexo 3,

foi escrito com o intuito de exemplificar um processo de escrita na memória. Sua função é

escrever na posição de memória 25H um byte 46H, valores ambos escolhidos de forma

aleatória para ilustrar o exemplo.

31

Vamos agora analisar o processo de leitura da memória. A figura 3.7 nos fornece a

seqüência necessária para efetuar a leitura de um byte em uma posição de memória

fornecida:

Figura 3.7 - Processo de leitura de um byte na memória

Como primeiramente vamos definir a posição de memória a ser lida, o processo de

leitura deve inicialmente começar como um processo de escrita, pois desejamos escrever

para a memória em que posição deveremos iniciar a leitura. Logo, utilizando o endereço em

forma de escrita, enviamos após a confirmação o byte referente a posição da memória que

gostaríamos de ler. Após o recebimento da confirmação, o processo deve seguir com uma

seqüência de início de transmissão, e agora sim, endereçaremos a memória como leitura

(41H). Após a confirmação, efetuamos a leitura do dado contido na posição previamente

configurada. Vale lembrar que após a leitura deste byte, a memória não envia uma

confirmação. A seqüência de fim de transmissão marca então, a conclusão do processo de

leitura. Caso fosse o caso de ler vários bytes ao invés de um, o processo seria o mesmo

descrito acima, com a diferença de que ao invés de enviar uma seqüência de fim de

transmissão para sinalizar o fim do processo, o dispositivo mestre enviaria, pelo contrário,

uma confirmação para a memória, e esta então, enviaria o próximo byte na seqüência até

que o dispositivo forneça uma seqüência de fim de transmissão finalizando o processo.A

figura 3.8 representa esta forma de leitura:

Figura 3.8 - Processo de leitura de vários bytes em seqüência na memória

32

O exemplo descrito no Capítulo Anexos, Anexo 4, efetua a leitura de em sua

posição #25h e a registra o byte recebido no acumulador. Em acréscimo, ela ainda verifica

o pino de sinalização do soquete, conectado ao pino P0.0 do hardware de controle, de forma

a efetuar a leitura somente quando o cartão estiver inserido e, conseqüentemente, disponível

para leitura.

O programa descrito no Anexo 4 será utilizado, posteriormente, para realizar um

controle de acesso controlado por smartcards, que será integrado ao nosso sistema de

automação residencial.

33

3.5 Um Estudo sobre o Expansor I/O Integrado

Como foi visto anteriormente, uma das principais limitações em um hardware de

controle é a pequena quantidade de portas de entrada/saída presentes para expansão de sua

funcionalidade. Também vimos que protocolos de comunicação como I2C ajudam a

minimizar estes problemas, oferecendo a possibilidade de conectarmos diversos

dispositivos em um mesmo barramento utilizando apenas duas portas, liberando assim,

portas que podem ser utilizadas para outros dispositivos que utilizem algum outro protocolo

de comunicação.

Porém, é possível que mesmo utilizando-se de tecnologias de comunicação que

visem uma diminuição conexões diretas ao hardware, se faça necessário utilizar-se de mais

portas de comunicação do que o hardware oferece. Para resolvermos este problema,

estudaremos a seguir a funcionalidade de expansores de saídas que podem vir a ser uma

solução fácil e econômica para suprir tais necessidades.

Para tanto, vamos utilizar em nosso circuito um expansor PCF8574. Trata-se de um

componente capaz de oferecer 8 portas de entrada/saída para o sistema utilizando para isto

o protocolo de comunicação I2C. Necessitando apenas de duas portas de conexão do

controlador (ou até de outro dispositivo de expansão) é possível integrar este ou mais

expansores em um mesmo barramento, de forma a aumentar em diversas vezes a

capacidade de comunicação do hardware analisado.

Adotando os padrões de comunicação estabelecidos pelo protocolo I2C, este

dispositivo pode operar de duas maneiras distintas: Efetuando leituras e/ou escritas, ou seja,

o dispositivo pode tanto ler dados digitais de entrada em suas portas, ou utilizar destas

como saídas extras. A comunicação com o dispositivo se dá de maneira muito simples.

Após o correto endereçamento do dispositivo, que pode ser configurado de modo a permitir

a utilização de mais de um componente PCF8574 no mesmo barramento, e a sinalização da

operação em seu bit de endereço menos significativo ( 1 = leitura, 0 = escrita), o dispositivo

expansor envia um sinal de confirmação e então lê ou envia uma seqüência de 8 bits que

no caso de leitura será o estado lógico de suas portas, ou em caso de escrita acionará suas

saídas de acordo com o estado de cada bit lido, ou seja, se os bits enviados seguirem a

seqüência “1 1 1 1 1 1 1 1, ou seja, FFH”, isto significa que o dispositivo terá todas suas

34

portas configuradas em nível lógico alto. Se a leitura retornar “1 1 1 1 1 1 1 1, ou seja,

FFH”, significa que o dispositivo está recebendo valores de nível lógico alto em todas suas

entradas. Logo após a leitura/escrita destes 8 bits, o dispositivo envia novamente um sinal

de confirmação e a operação está concluída. Funcionando como um latch, ou seja, um

retentor de dados, após recebido um comando de escrita este dispositivo mantém este valor

disposto em suas saídas até a realização de uma nova operação de escrita, ou até que sua

alimentação seja cortada.

Para o nosso hardware de controle, vamos utilizar este expansor de forma didática

para realizarmos o acionamento de dois relés. Apesar do hardware dispor de saídas não-

utilizadas que possibilitariam o acionamento direto destes relés, é importante

exemplificarmos a utilização do expansor de forma genérica, pois poderia vir a ocorrer uma

situação futura em que as portas de entrada/saída do nosso sistema viessem a ser utilizadas

por mais dispositivos tornando-se necessário, então, a utilização deste artifício de modo a

aumentar a quantidade de portas de comunicação para nós disponíveis.

O exemplo descrito no Capítulo Anexos, Anexo 5, foi escrito de modo a comandar

o acionamento de dois relés conectados em duas portas distintas do expansor de

entradas/saídas. Utilizando-se de uma posição de memória para mapear os estados dos

relés, o programa permite acionar individualmente cada porta do expansor com as rotinas

descritas no software exemplo.

Vale ressaltar que este programa será utilizado futuramente para realizar o

acionamento dos relés presentes no nosso hardware de modo a efetuar leis de controle

previamente configuradas, que serão analisadas no próximo capítulo.

35

4. Integração dos Módulos de

Controle e Construção do Software

Final

Como vimos anteriormente, o projeto de um sistema de automação residencial

compreende o estudo de diversos módulos, que vistos separadamente, são responsáveis

cada um por exercer uma função singular no processo de controle do sistema como um

todo. Analisando a pesquisa de mercado simulada previamente, podemos observar que

nosso sistema deve, além de realizar funções básicas como controle de acesso, controle de

luminosidade e controle climático, deve trabalhar com eficiência e praticidade, ou seja,

permitir uma boa interface homem-máquina de modo a facilitar processos de leitura e

configuração, requisitos muito importantes uma vez que não temos conhecimento da

formação intelectual dos nossos possíveis clientes, e até mesmo um simples processo de

configuração do nosso sistema pode tornar-se uma tarefa difícil para os mais

despreparados. É neste contexto que primeiramente iremos estudar a proposta de uma

interface gráfica que permitirá uma configuração do sistema de maneira rápida e simples.

Para o nosso sistema de automação residencial, o conceito configuração se reflete

simplesmente na determinação das variáveis de controle, ou seja, os set-points,

responsáveis pela identificação de grandezas como temperatura ideal a ser controlada, e

intensidade de luminosidade mínima que desejamos no nosso ambiente, por exemplo.

Para realizar o ajuste destas variáveis, vamos primeiramente analisar novamente

nosso hardware disponível. Constituído por cinco botões, um para reset e outros quatro para

36

funções indeterminadas, vamos definir agora quais botões utilizaremos para realizar a

configuração de nosso sistema. A figura 4.1 ajuda a identificar estes botões:

Figura 4.1 - Interface de Configuração do sistema

Como visto, podemos realizar a configuração dos parâmetros do nosso sistema

através de três botões. Todo o processo pode ser acompanhado graficamente de duas

maneiras: Através da conexão de um display LCD de no mínimo dois segmentos (16x2),

método mais simples que permite uma visualização direta do processo na própria placa, ou

conectando esta mesma, através de uma de suas portas seriais, a um micro-computador

utilizando para isto um software denominado terminal que será responsável pela aquisição

de dados provenientes do nosso hardware pelo micro-computador.

37

O processo de configuração dos set-points do software se dá da seguinte maneira:

Mantendo-se pressionado o botão “Configurar” (descrito na figura anterior), faz com que o

sistema alterne para o menu de configurações. Quando este menu é exibido, o usuário

poderá visualizar o parâmetro a ser configurado, seu valor atual e, com o auxílio das teclas

“Incrementa” e “Decrementa” (descritas na figura anterior), é possível alterar este valor de

maneira rápida e fácil, apenas mantendo pressionado o botão de função desejada. Após ter

escolhido o novo valor, o sistema automaticamente refaz sua tabela interna de registro de

variáveis alterando o valor estipulado e, então, retorna ao seu processo de controle. Para

alternar entre as funções a serem configuradas, o usuário precisa simplesmente pressionar o

botão “Configurar” até chegar ao item a ser configurado. Desta maneira conseguimos

então, com apenas três botões, realizar a configuração de maneira completa de todas as

nossas variáveis. O código fonte, que possui as funções de configuração, será exibido no

final deste capítulo.

Uma vez finalizado o módulo de configuração do software, partiremos agora para a

construção do software em si. Para isto, utilizaremos em grande parte o conhecimento

adquirido no estudo dos módulos individuais, pois estes mesmos já foram construídos e

exemplificados visando uma integração futura com o resto do sistema. Logo, com muito

poucas ou nenhuma alteração, poderemos adicionar os códigos-fonte exemplificados

anteriormente na estrutura do nosso código final.

Antes disso, devemos primeiramente analisar e definir exatamente o que cada

módulo fará e em que situação realizará o controle determinado pela sua função.

Vamos então, analisar primeiramente o módulo responsável pelo controle de

temperatura. Como este trabalho foi realizado no Brasil, em um local que normalmente a

temperatura é elevada, definimos inicialmente que este módulo será responsável pelo

conforto térmico em um ambiente de modo a manter a temperatura sempre estável. Para

isto, ele será responsável pelo acionamento de um equipamento de climatização sempre que

a temperatura ambiental ultrapassar o valor configurado previamente, ou o valor padrão

(25°C) caso o sistema ainda não tenha sido configurado. Considerando que a faixa de

temperatura de operação destes equipamentos (ar condicionados e ventiladores, por

exemplo) geralmente situa-se na faixa de 0°C a 50°C. limitamos os parâmetros de

configuração para valores dentro desta faixa de temperatura. Resumidamente, nosso

38

software realizará a leitura da temperatura ambiental através de seu sensor e acionará ou

desligará um relé responsável pelo acionamento do equipamento de climatização conectado

a ele sempre que a temperatura registrada pelo sensor ultrapassar o valor pré-definido.

Então, se a temperatura for maior, acarretará no acionamento de um ventilador, por

exemplo, e após isto, se a temperatura vier a baixar devido a circunstancias diversas como o

próprio acionamento deste ventilador, este mesmo será desligado assim que o ambiente

atingir a temperatura desejada.

Do mesmo modo, para realizarmos o controle de luminosidade, podemos partir do

principio, por exemplo, que estivéssemos interessados em acionar uma lâmpada somente no

período da noite, ou quando a luz externa não for mais suficiente para iluminar o ambiente.

Para isto, podemos posicionar o sensor de luminosidade próximo a uma janela ou até

mesmo no exterior do ambiente a ser controlado. Quando o valor de luminosidade captada

pelo sensor é menor do que o valor previamente configurado, o sistema aciona

automaticamente um relé responsável por controlar o acionamento de uma lâmpada, por

exemplo. Esta lâmpada ficará acionada até o momento em que a luminosidade captada pelo

sensor tornar-se maior do que o nível pré-determinado (quando o sol nasce, por exemplo).

Como a intensidade de luz registrada pelos sensores varia proporcionalmente conforme os

resistores montados no hardware de aquisição de dados, utilizaremos os próprios 8 bits de

resolução do sensor para realizar a configuração do set-point desejado, ou seja, a faixa de

configuração varia com valores entre 0 a 255, proporcionais a intensidade de luminosidade

(0 significa ausência total de luz, 255 significa a quantidade máxima de luz que o sensor

consegue captar).

Finalizando, vamos estudar agora o comportamento do controle de acesso realizado

por SmartCards. Vamos para isto, definir inicialmente, que na memória interna do cartão

reside uma assinatura digital responsável pela validação do acesso pelo cartão. Tal

assinatura, a título de exemplo, reside em uma posição de memória definida por 25h e

possui um valor de validação de 46h. Quando um cartão é inserido no soquete e apresenta

este valor definido na posição de memória lida, significa que o cartão foi aceito e então o

acesso foi garantido. Logo, aparecerá no display LCD e/ou no terminal a mensagem

“Acesso Garantido”. Caso o valor registrado no cartão for diferente daquele pré-definido, o

cartão é rejeitado e a mensagem “Acesso Negado” é exibida ao usuário. Obviamente, este

39

não é um dos processos mais seguros de validação, mas é bastante eficiente a titulo de

exemplo. O sistema ainda utiliza um detector de inserção do cartão no soquete, que já foi

detalhado anteriormente, e realiza a leitura do cartão somente quando este é inserido no

soquete, exibindo a mensagem “Cartão Inserido” e em seqüência, a validação ou não do

cartão. Nos outros casos, a mensagem “Cartão não Inserido” é exibida no dispositivo de

saída.

Uma vez analisadas as regras de controle de cada módulo, bem como a interface

gráfica do sistema, poderemos agora finalmente construir nosso software final, que será

responsável pelo controle de todos os módulos simultaneamente. No capítulo Anexos,

Anexo 6, é definido o corpo principal do software, ou seja, o arquivo contendo todas as

estruturas de controle, interface, procedimentos de aquisição de dados e breves comentários

sobre a estrutura do software em si. Em seqüência, nos próximos anexos, são apresentadas

todas as bibliotecas adicionadas ao projeto, que também foram utilizadas anteriormente

para a exemplificação de cada módulo em separado. Vale lembrar que estas bibliotecas

receberam pequenos ajustes para serem mais facilmente incluídas no projeto, porém

retendo ainda toda a idéia principal descrita anteriormente para a elaboração do algoritmo

utilizado para a construção destas mesmas. A lista completa de bibliotecas incluídas no

projeto final é descrita à seguir:

� Serial_IO.ASM - Anexo 7

� Config_Serial.ASM - Anexo 8

� DELAY.INC - Anexo 9

� LCD.INC - Anexo 10

� TMP123.ASM - Anexo 11

� 24LC02READ.asm - Anexo 12

� AD_DA.INC - Anexo 2

� I2C.inc - Anexo 13

� I2Csmt.inc - Anexo 14

� RELE.asm - Anexo 5

40

5. Resultados

Analisando o nosso sistema de Automação Residencial em funcionamento,

utilizando o software descrito no Capítulo Anexos, Anexo 6, ou seja, o software final que

integra todos os módulos de controle analisados nos capítulos anteriores, podemos observar

a harmonia de funcionamento entre os módulos, ou seja, o software é capaz de executar

com exatidão as funções definidas para cada módulo de controle (temperatura,

luminosidade, acesso e interface), oferecendo agora uma possibilidade real de análise do

princípio de funcionamento de um sistema real de Automação e Controle Residencial.

Obviamente, apesar da simplicidade do nosso exemplo e considerando que este mesmo foi

elaborado sem ou com muito poucos recursos financeiros, dotado principalmente de

soluções fáceis e baratas de serem elaboradas, este trabalho abre agora caminho para a

possibilidade de um estudo mais detalhado sobre Sistemas de Automação e Controle

Residencial, bem como a elaboração e aperfeiçoamento de novos módulos de controle, de

modo a que, com um certo investimento inicial, este trabalho possa dar continuidade a um

futuro investimento tornando-se então um negócio rentável de modo a penetrar neste

inovador nicho de mercado ainda pouco explorado atualmente.

41

6. Conclusões

Durante o desenvolvimento deste trabalho, tive a oportunidade de consolidar

muitas das teorias analisadas durante o curso de graduação de Engenharia de Controle e

Automação, em especial aos ramos da Engenharia Elétrica e da Engenharia de Produção. O

conceito Trabalho de Integração se faz agora presente no momento em que aplico os

conhecimentos adquiridos nos diferentes ramos da engenharia (elétrica mecânica e

produção) para o desenvolvimento do trabalho que compreende um Sistema de Automação

Residencial.

A aplicação de conceitos vistos na área de Desenvolvimento de Produto, em

especial aqueles voltados para pesquisa de mercado e satisfação do consumidor, são de

suma importância para a concretização de um novo produto no mercado, ainda mais quando

consideramos que este novo produto traz inovações tecnológicas recentes e tecnologia de

ponta, fatores estes que muitas vezes podem causar um certo receio por parte dos

consumidores em potencial, em aderir a estas novas tecnologias.

Sobre a construção do modelo final, compreendendo a fase prática deste projeto,

todos os conhecimentos adquiridos nas áreas de eletrônica analógica, eletrônica digital,

redes digitais e processadores foram decisivos para a elaboração de um modelo funcional

capaz de demonstrar o comportamento real de um Sistema de Automação Residencial.

Num futuro próximo, será comum ver a maior parte das residências, de classe

média e alta, utilizando sistemas de controle, visando segurança, conforto e economia para

seus domicílios. É com base nesta idéia que desenvolvi este projeto, visando à construção

de um protótipo que atenda estas peculiaridades, para que, futuramente, possa dar

continuidade neste trabalho visando, finalmente, o mercado brasileiro.

42

7. Anexos

Serão exibidos, à seguir, os anexos referentes aos códigos-fonte descritos

anteriormente no decorrer deste trabalho, de modo a ilustrar de maneira prática o

funcionamento de cada módulo de controle bem como o sistema final de Automação

Residencial.

Alguns dos anexos, apesar de não terem sido escritos pelo autor, foram modificados

de modo a tornar-se compatível com os módulos estudados anteriormente. Todos estes

exemplos não escritos pelo autor deste trabalho são comentados no capítulo referente a

Bibliografia deste projeto.

43

Anexo 1

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ; tmp123.asm ; Autor: Bruno Schwab de Figueiredo ; ; Rotinas: ; StartTMP123 -> Rotina opcional para configurar pinos VCC e GND ; LoadTMP123 -> Faz o componente armazenar em memoria temperatura ; GetTMP123 -> Registra no acumulador o valor da temperatura em hexa ; ConvertTMP123 -> Registra em R5 R6 e R7 digitos da temperatura ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;GND EQU PX.X ;VCC EQU P2.6 SO EQU P2.4 SCL EQU P2.2 CS EQU P2.0 StartTMP123: SETB VCC CLR GND RET LoadTMP123:

SETB CS SETB SCL MOV A,#3

ACALL DELAYx100ms RET ;===================COLOCA em A valor de temp em hexa GetTMP123: MOV R7,#8 CLR SCL CLR CS MOV C,SO LOOPHTmp123:

SETB SCL LCALL DELAY2us MOV C,SO LCALL DELAY5us CLR SCL LCALL DELAY5us RLC A DJNZ R7,LOOPHTmp123;

MOV R1,A MOV R7,#8 SETB SCL LCALL DELAY2us CLR SCL MOV C,SO LOOPLTmp123:

SETB SCL

44

LCALL DELAY2us MOV C,SO LCALL DELAY5us CLR SCL LCALL DELAY5us RLC A DJNZ R7,LOOPLTmp123

MOV R3,#00h MOV R2,#80h ACALL UDIV16 MOV A,R0 RET UDIV16:

MOV R7, #0 MOV R6, #0 MOV B, #16 div_loop:

CLR C MOV A,R0 RLC A MOV R0, |A MOV A, R1 RLC A MOV R1, A MOV A, R6 RLC A MOV R6, A MOV A, R7 RLC A MOV R7, A MOV A, R6 CLR C SUBB A,R2 MOV DPL, A MOV A, R7 SUBB A,R3 MOV DPH, A CLP C INC DIV_1 MOV R7, DPH MOV R6, DPL DIV_1:

MOV A, R4 RLC A MOV R4, A MOV A, R5 RLC A MOV R5, A DJNZ B, div_loop MOV A, R5 MOV R1, A MOV A, R4 MOV R0, A MOV A, R7 MOV R3, A MOV A, R6 MOV R2, A

45

RET Convert_TMP123:

MOV B,#100 DIV AB ADD A,#'0' MOV R7,A MOV A,B MOV B,#10 DIV AB ADD A,#'0' MOV R6,A MOV A,B ADD A,#'0’ MOV R5,A RET

46

Anexo 2

; CONVERSOR A/D E D/A ; ; Estas rotinas implementam funções básicas de acesso aos conversores A/D ; e D/A do MSC1211. As rotinas do Conversor A/D foram escritas para leitura ; apenas em 8 bits. Modifique as mesmas caso necessite de uma precisão ; maior (16 ou 24 bits). Já as rotinas do Conversor D/A foram escritas para ; 8 e 12 bits. ; ; Estas rotinas necessitam das bibliotecas de Delay e LCD! ; ; ; PRIMITIVAS ; ; INITADC0() - Inicializa do Canal 0 do conversor A/D ; READAD8bits(A) - Le os 8 bits mais significativos do A/D (24 bits) ; INITDACONV() - Inicializa o Conversor D/A ; WRITEHDAC0(A) - Escreve os 8 bits mais significativos do D/A (12 bits) ; INITADC0: MOV PDCON,#37H MOV ACLK,#0AH MOV ADCON3,#06H MOV ADCON2,#22H MOV ADMUX,#08H MOV ADCON0,#30H MOV ADCON1,#41H RET ; *** READAD8bits(A) ****************************** ************************* ; ** ** ; ************************************************* ************************* READAD8bits: LCALL READADCL ; le e descarta 3x LCALL READADCL LCALL READADCL LCALL READADCH ; le 8 bits mais significativos RET READADCL: MOV A,AIE ANL A,#20H CJNE A,#20H,READADCL MOV A,ADRESL MOV AIE,#00H RET READADCH: MOV A,AIE ANL A,#20H CJNE A,#20H,READADCH MOV A,ADRESH MOV AIE,#00H RET

47

Anexo 3 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;24LC02WRITE.asm ; Autor: Bruno Schwab de Figueiredo ; ; Programa descrito para efetuar a escrita de um byte em uma determinada posição de memória em uma memória 24LCxx ; ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

$MOD51 ORG 0000h LJMP INICIO $include(DELAY.inc) $include(I2C.inc) INICIO: ACALL InitI2C ACALL StartI2C MOV A,#0A0h ACALL WriteI2C ACALL RecvACK MOV A,#25h ;Endereço!! ACALL WriteI2C ACALL RecvACK MOV A,#46h ;Dado!!! ACALL WriteI2C ACALL RecvACK ACALL StopI2C loop: LJMP loop END

48

Anexo 4 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;24LC02LEITURA.asm ; Autor: Bruno Schwab de Figueiredo ; ; Programa descrito para efetuar a leitura de um byte em uma determinada posição de memória em uma memória 24LCxx ; ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

$MOD51 org 0000h LJMP INICIO $include(DELAY.inc) $include(I2C.inc) $INCLUDE(LCD.INC) INICIO: ACALL InitLCD MAIN: ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG1 ACALL WrStr VERIFICA: JB P0.0,LEITURA LJMP VERIFICA LEITURA: ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG2 ACALL WrStr MOV A,#0 ACALL MovCur2 ACALL LE_CARTAO LOOP2: JB P0.0,LOOP2 LJMP MAIN LE_CARTAO: ACALL InitI2C ACALL Delay1000ms ACALL StartI2C MOV A,#0A0h ;slave address write ACALL WriteI2C ACALL RecvACK CONT1: MOV A,#25h ;endereço ACALL WriteI2C

49

ACALL RecvACK CONT2: ACALL StartI2C MOV A,#0A1h ;slave address read ACALL WriteI2C ACALL RecvACK CONT3: ACALL ReadI2C ACALL StopI2C RET MSG1: DB 'Insira SmartCard',0 MSG2: DB 'Leitura:',0 end

50

Anexo 5 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;RELE.asm ;Autor: Bruno Schwab de Figueiredo ; ;Rotinas; ; ;InitPCF8574: Aciona o expansor com saidas desativadas ;Envia_IO: Envia para expansor 8bits contidos em IO_STATUS ;LIGA_RELE1: Liga relé 1 ;LIGA_RELE2: Liga relé 2 ;DESLIGA_RELE1: Desliga relé 1 ;DESLIGA_RELE2: Desliga rlé 2 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IO_STATUS EQU 0F003h InitPCF8574: MOV IO_STATUS,#0FFh ACALL ENVIA_IO RET ENVIA_IO: ACALL StartI2C MOV A,#40h ACALL WriteI2C ACALL RecvAcK MOV A,(IO_STATUS) ACALL WriteI2C ACALL StopI2C RET LIGA_RELE1: MOV A,(IO_STATUS) CLR ACC.0 MOV IO_STATUS,A ACALL ENVIA_IO RET DESLIGA_RELE1: MOV A,(IO_STATUS) SETB ACC.0 MOV IO_STATUS,A ACALL ENVIA_IO RET LIGA_RELE2: MOV A,(IO_STATUS) CLR ACC.1 MOV IO_STATUS,A ACALL ENVIA_IO RET DESLIGA_RELE2: MOV A,(IO_STATUS) SETB ACC.1 MOV IO_STATUS,A ACALL ENVIA_IO RET

51

Anexo 6

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;SIMUL.ASM ;Código Fonte final sistema automação residencial ;Autor: Bruno Schwab de Figueiredo ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ $MOD51 ;===================DEFINIÇÕES INICIAIS================================== TEMP_R EQU 0F000h ;SETPOINT DE TEMPERATURA LIGHT_R EQU 0F001h ;SETPOINT DE LUMINOSIDADE CURRENT EQU 0F002h ;INTERFACE DE CONFIGURAÇÃO SMT_PIN EQU P3.4 ;PINO INSERÇÃO SMARTSOCKET SEL EQU P1.4 ;BOTÃO DE CONFIGURAÇÃO CUR_U EQU P1.5 ;BOTÃO DE INCREMENTOI CUR_D EQU P1.7 ;BOTÃO DE DECREMENTO ;==================DEFINIÇÕES CONVVERSOR A/D ============================ PDCON EQU 0F1H ADMUX EQU 0D7H ADRESL EQU 0D9H ADRESH EQU 0DBH ADCON0 EQU 0DCH ADCON1 EQU 0DDH ADCON2 EQU 0DEH ADCON3 EQU 0DFH ACLK EQU 0F6H AIE EQU 0A6H org 0000h LJMP INICIO ;===================CONFIGURAÇÕES INICIAIS DO SISTEMA =================== INICIO: ACALL CONFIG_SERIAL

ACALL InitLCD ACALL StartTMP123 ACALL LoadTMP123 CLR SMT_PIN MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG3 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE MOV DPTR,#MSG3 ACALL WrStr MOV CURRENT,#0 MOV TEMP_R, #25 MOV LIGHT_R,#100 ACALL InitI2C

52

ACALL InitPCF8574 SETB P2.6 ;DESLIGA BUZZER ACALL DELAY500ms ;==========================LOOP PRINCIPAL DE CONTROLE ================== MAIN: ACALL VERIFICA_TECLADO ACALL VERIFICA_TEMPERATURA ACALL Delay1000ms ACALL VERIFICA_TECLADO ACALL VERIFICA_CARTAO ACALL Delay1000ms ACALL VERIFICA_TECLADO ACALL VERIFICA_AD ACALL Delay1000ms LJMP MAIN ;===================ROTINAS DE INPUT E CONFIGURAÇÃO=================== VERIFICA_TECLADO: JNB SEL,CFG_SHOW_0 RET CFG_SHOW_0: MOV A,(CURRENT) CJNE A,#0,CFG_SHOW_1 INC A MOV (CURRENT),A MOV DPTR,#MSG1 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG1 ACALL WrStr LJMP CONFIG_TEMPERATURA RET CFG_SHOW_1: MOV A,(CURRENT) CJNE A,#1,CFG_SHOW_2 INC A MOV (CURRENT),A MOV DPTR,#MSG2 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG2 ACALL WrStr LJMP CONFIG_LUMINOSIDADE RET CFG_SHOW_2:

53

MOV A,(CURRENT) CJNE A,#2,CFG_SHOW_3 INC A MOV (CURRENT),A MOV DPTR,#MSG6 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG6 ACALL WrStr ACALL Delay1000ms RET CFG_SHOW_3: MOV (CURRENT),#0 LJMP MAIN CONFIG_TEMPERATURA: MOV A,#0 ACALL MovCur2 MOV A,TEMP_R ACALL FORMAT MOV A,R7 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV A,R6 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV A,R5 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV DPTR,#MSG8 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE MOV DPTR,#MSG8 ACALL WrStr ACALL Delay1000ms JNB CUR_U,CFG_TEMP_UP JNB CUR_D,CFG_TEMP_DOWN ACALL Delay500ms RET CFG_TEMP_UP: MOV A,TEMP_R INC A MOV (TEMP_R),A CJNE A,#50,CONFIG_TEMPERATURA MOV A,#0 MOV (TEMP_R),A LJMP CONFIG_TEMPERATURA

54

CFG_TEMP_DOWN: MOV A,TEMP_R DEC A MOV (TEMP_R),A CJNE A,#0,CONFIG_TEMPERATURA MOV A,#49 MOV (TEMP_R),A LJMP CONFIG_TEMPERATURA CONFIG_LUMINOSIDADE: MOV A,#0 ACALL MovCur2 MOV A,LIGHT_R ACALL FORMAT MOV A,R7 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV A,R6 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV A,R5 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV DPTR,#MSG9 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE MOV DPTR,#MSG9 ACALL WrStr ACALL Delay1000ms JNB CUR_U,CFG_LIGHT_UP JNB CUR_D,CFG_LIGHT_DOWN ACALL Delay500ms RET CFG_LIGHT_UP: MOV A,LIGHT_R INC A MOV (LIGHT_R),A CJNE A,#255,CONFIG_LUMINOSIDADE MOV A,#0 MOV (LIGHT_R),A LJMP CONFIG_LUMINOSIDADE CFG_LIGHT_DOWN: MOV A,LIGHT_R DEC A MOV (LIGHT_R),A CJNE A,#0,CONFIG_LUMINOSIDADE MOV A,#255 MOV (LIGHT_R),A LJMP CONFIG_LUMINOSIDADE ;======================================================================

55

;==================ROTINAS DE CONTROLE DE TEMPERATURA ============== VERIFICA_TEMPERATURA: ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG10 ACALL WrStr MOV A,#0 ACALL MovCur2 PUSH TEMP_R PUSH LIGHT_R PUSH CURRENT PUSH IO_STATUS ACALL GetTMP123 PUSH ACC ACALL Convert_TMP123 POP ACC POP IO_STATUS POP CURRENT POP LIGHT_R POP TEMP_R ;============CONTROLE ;se nivel de temperatura for maior, liga rele PUSH ACC SUBB A,TEMP_R JNC LIGA_TEMP ACALL DESLIGA_RELE2 CONTINUA_CONTROLE_TEMP: POP ACC ;=================== MOV A,R7 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV A,R6 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV A,R5 ACALL ESCREVE_SERIAL_REG ACALL WrChar MOV DPTR,#MSG16 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE MOV DPTR,#MSG16 ACALL WrStr ACALL LoadTMP123 RET LIGA_TEMP: ACALL LIGA_RELE2 LJMP CONTINUA_CONTROLE_TEMP ;========================== ROTINAS SMARTCARD =========================

56

VERIFICA_CARTAO: JB SMT_PIN,LE_CARTAO ; Se o cartao foi inserido, desvia ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG12 ACALL WrStr MOV DPTR,#MSG12 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE RET LE_CARTAO: ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG11 ACALL WrStr MOV DPTR,#MSG11 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE ACALL Delay100ms ACALL Read24LC CJNE A,#46h,CARTAO_ERRO ; Se o codigo for 46h, continua, senao erro MOV A,#0 ACALL MovCur2 MOV DPTR,#MSG13 ACALL WrStr MOV DPTR,#MSG13 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE RET CARTAO_ERRO: MOV A,#0 ACALL MovCur2 MOV DPTR,#MSG14 ACALL WrStr MOV DPTR,#MSG14 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE RET ;================================================================== ;================= ROTINAS SENSOR DE LUMINOSIDADE ============ VERIFICA_AD: ACALL ClearLCD MOV A,#0 ACALL MovCur1 MOV DPTR,#MSG15 ACALL WrStr MOV DPTR,#MSG15 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE

57

MOV A,#0 ACALL MovCur2 ACALL INITADC0 ACALL READAD8bits MOV B,A MOV A,#255 SUBB A,B ;============ CONTROLE ;se nivel luz (A) for menor que LIGHT_R, liga rele PUSH ACC SUBB A,LIGHT_R JC LIGA_LUZ ACALL DESLIGA_RELE1 CONTINUA_CONTROLE_LUZ: POP ACC ;=================== PUSH TEMP_R PUSH LIGHT_R PUSH CURRENT PUSH IO_STATUS ACALL FORMAT MOV A,R7 ACALL WrChar ACALL ESCREVE_SERIAL_REG MOV A,R6 ACALL WrChar ACALL ESCREVE_SERIAL_REG MOV A,R5 ACALL WrChar ACALL ESCREVE_SERIAL_REG MOV DPTR,#MSG9 ACALL WrStr MOV DPTR,#MSG9 ACALL ESCREVE_SERIAL_DPTR ACALL SERIAL_NEWLINE POP IO_STATUS POP CURRENT POP LIGHT_R POP TEMP_R ACALL Delay1000ms LJMP MAIN LIGA_LUZ: ACALL LIGA_RELE1 LJMP CONTINUA_CONTROLE_LUZ ;=========== ROTINA PARA SEPARAR ALGARISMOS DECIMAIS FORMAT:

MOV B,#100 DIV AB ADD A,#'0' MOV R7,A

58

MOV A,B MOV B,#10 DIV AB ADD A,#'0' MOV R6,A MOV A,B ADD A,#'0' MOV R5,A RET ;====== BIBLIOTECAS DE INCLUSÃO ========================== $INCLUDE(seriaL~1.ASM) ;ROTINAS DE I/O SERIAL $INCLUDE(CONFIG~1.ASM) ;CONIGURAÇÃO DA PORTA SERIAL $INCLUDE(DELAY.INC) ;ROTINAS DE DELAY $INCLUDE(LCD.INC) ;ROTINAS DE CONFIGURAÇÃO E I/O DO LCD $INCLUDE(TMP123.ASM) ;ROTINAS DE AQUISIÇÃO DE TEMPERATURA $INCLUDE(24LC02~1.asm) ;ROTINAS DE LEITURA DO SMARTCARD $INCLUDE(AD_DA.INC) ;ROTINAS DE LEITURA DO CONVERSOR A/D $INCLUDE(I2C.inc) ;ROTINAS DE COMUNICAÇÃO I2C $INCLUDE(RELE.asm) ;ROTINAS DE ACIONAMENTO DO RELÉ PELO EXPANSOR ;=========== MENSAGENS DIVERSAS ========================= MSG1: DB 'Setup Temperatura: ',0 MSG2: DB 'Setup Luminosidade: ',0 MSG3: DB 'Sistema ativo',0 MSG4: DB 'Sistema Inativo',0 MSG5: DB 'Sistema Iniciado',0 MSG6: DB 'Status SMARTCARD:',0 MSG7: DB 'Config OK',0 MSG8: DB ' o C (1-49)',0 MSG9: DB ' (0-255)',0 MSG10: DB 'Temperatura Atual',0 MSG11: DB 'SMARTCARD Inserido',0 MSG12: DB 'SMARTCARD Nao Inserido',0 MSG13: DB 'Acesso Garantido',0 MSG14: DB 'Acesso Negado',0 MSG15: DB 'Taxa Luminosidade:',0 MSG16: DB ' o C',0 END

59

Anexo 7

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;@ serial_IO ;@ Rotina para escrever mensagens e ler a serial previamente configurada. ;@ ;@ ESCREVE_SERIAL_DPTR -> Manda para a porta de saída serial os dados contidos no registrador ; DPTR ;@ ESCREVE_SERIAL_REG -> Manda para a porta de saida serial os dados contidos no registrador -A- ;@ LER_SERIAL -> Quando a rotina é chamada, ela armazena no registrador -A- o byte de entrada. ;@ SERIAL_NEWLINE -> Muda a linha ;@ ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;============================================================== ;======================== ESCREVE_SERIAL_DPTR ================= ; ;Escreve os dados contidos em DPTR para a porta serial ;ADDCHARSERIAL adiciona caractere a caractere na porta serial ADDCHARSERIAL: JNB TI, ADDCHARSERIAL ; Espera liberar a porta CLR TI ; Indica porta ocupada MOV SBUF,A ; Escreve na porta serial RET ; Escreve uma mensagem: DPTR aponta para a mensagem ESCREVE_SERIAL_DPTR: CLR A MOVC A,@A+DPTR ; Pega letra da mensagem INC DPTR JZ EXIT_SERIAL ; Zero final: sai ACALL ADDCHARSERIAL ; Escreve a letra SJMP ESCREVE_SERIAL_DPTR EXIT_SERIAL: RET ;============================================================== ;======================== ESCREVE_SERIAL_REG ================= ; ;Escreve os dados contidos em REGISTRADOR_MSG_SERIAL para a porta serial ESCREVE_SERIAL_REG: JNB TI,ESCREVE_SERIAL_REG CLR TI MOV SBUF,A RET

60

;============================================================== ;======================== LER_SERIAL=========================== ; ;Escreve no registrador A o dado de entrada da porta serial LER_SERIAL: JNB RI, LER_SERIAL CLR RI MOV A, SBUF RET ESCREVE_SERIAL_BIN: MOV R2,#8 ; Conta 8 voltas do loop ESB1: RLC A ; Pega 1 bit de A PUSH ACC ; Salva A na pilha CLR A ADDC A,#'0' ; Converte carry para '0' ou '1' ACALL ADDCHARSERIAL ; Escreve digito binario POP ACC ; Restaura A DJNZ R2,ESB1 ; Repete 8 vezes RET SERIAL_NEWLINE: MOV A,#13 ACALL ESCREVE_SERIAL_REG RET ;============================================================== ;===================FIM ESCREVE_SERIAL=========================

61

Anexo 8

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;@ config_serial ;@ Rotina para configurar a porta de comunicação serial ;@ ;@ CONFIG_SERIAL -> Deve ser chamada uma unica vez para que seja configurado os registradores seriais ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;============================================================== ;====================== CONFIG_SERIAL ========================= ; ;Rotina de configuração da porta de comunicação serial CONFIG_SERIAL: ;Timer 1 em modo 2 (8 bits com auto recarga) MOV SCON,#01011010B ; UART de 8 bits sem paridade MOV PCON,#0 ; Para 19200 baud PCON=80H ANL TMOD,#0FH ; Apaga os bits do timer1 ORL TMOD,#20H ; Coloca timer1 em modo 2 MOV TCON,#11010010B MOV TH1,#-3 RET ;============================================================== ;====================FIM CONFIG_SERIAL=========================

62

Anexo 9 ; Rotinas de Delay ; ; Os exemplos aqui descritos se referem ao microcontrolador ; MSC1211. Este microcontrolador é idêntico ao 8051 em ; hardware e software, porém é mais rápido! Cada ciclo do ; MSC dura 4 pulsos de clock (12 são necessários para 8051). ; ; Considere que o clock da máquina é de 11.0592MHz. Então, ; cada ciclo de máquina dura 0.361689us! Considere também ; que estas rotinas foram escritas para usar o banco 0! Modifique ; os exemplos para elaborar outras rotinas que forem necessárias. ; ; Como sugestão, crie uma biblioteca destas rotinas e as coloque ; em um arquivo do tipo include (.inc) com o nome DELAY.INC. ; Adicione então esta biblioteca ao final do programa com a ; seguinte linha de comando: ; ; $INCLUDE(DELAY.INC) ; ; ; PRIMITIVAS ; ; DELAY2us() - Delay não parametrizável de 2us. ; DELAY5us() - Delay não parametrizável de 5us. ; DELAY250us() - Delay não parametrizável de 250us. ; DELAY1ms() - Delay não parametrizável de 1ms. ; DELAY5ms() - Delay não parametrizável de 5ms. ; DELAY10ms() - Delay não parametrizável de 10ms. ; DELAYx10ms(A) - Delay parametrizável de 10ms. Parametro passado em A. ; DELAY100ms() - Delay não parametrizável de 100ms. ; DELAYx100ms(A) - Delay parametrizável de 100ms. Parametro passado em A. ; DELAY200ms() - Delay não parametrizável de 200ms. ; DELAY500ms() - Delay não parametrizável de 500ms. ; DELAY1000ms() - Delay não parametrizável de 1000ms. ; ; *** DELAY 2us *********************************** ************************* ; ** ** ; *********************************** [ MSC1211 @ 1 1.0592MHz = 6 CICLOS] *** ; DELAY2us: NOP NOP RET ; *** DELAY 5us *********************************** ************************* ; ** ** ; ***********************************[ MSC1211 @ 11 .0592MHz = 14 CICLOS] ***

63

; DELAY5us: PUSH 07H ; SALVA R7 (CONTADOR!!!) MOV R7,#4 ; INICIALIZA CONTADOR _LOOP5us: DJNZ R7,_LOOP5us NOP ; Para minimizar erro de truncamento!!! POP 07H ; RESTAURA VALOR DE R7 RET ; RETORNA ; *** DELAY 250us ********************************* ************************* ; ** ** ; **********************************[ MSC1211 @ 11. 0592MHz = 691 CICLOS] *** ; DELAY250us: PUSH 07H MOV R7,#228 _LOOP250us: NOP DJNZ R7,_LOOP250us POP 07H RET ; *** DELAY 1ms *********************************** ************************* ; ** Baseada na rotina de 250us! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAY1ms: PUSH 07H MOV R7,#4 _LOOP1ms: LCALL DELAY250us ; Aguarda 250us!!! DJNZ R7,_LOOP1ms ; Repete 4x POP 07H RET ; *** DELAY 2ms *********************************** ************************* ; ** Baseada na rotina de 250us! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAY2ms: PUSH 07H MOV R7,#8 _LOOP2ms: LCALL DELAY250us ; Aguarda 250us!!! POP 07H RET ; *** DELAY 5ms *********************************** ************************* ; ** Baseada na rotina de 250us! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAY5ms: PUSH 07H MOV R7,#20

64

_LOOP5ms: LCALL DELAY250us ; Aguarda 250us!!! DJNZ R7,_LOOP5ms ; Repete 20x POP 07H RET ; *** DELAY 10ms ********************************** ************************* ; ** Baseada na rotina de 250us! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAY10ms: PUSH 07H MOV R7,#40 _LOOP10ms: LCALL DELAY250us ; Aguarda 250us!!! DJNZ R7,_LOOP10ms ; Repete 4x POP 07H RET ; *** DELAYx10ms(A) ******************************* ************************* ; ** Baseada na rotina de 10ms! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAYx10ms: PUSH 07H MOV R7,A _LOOPx10ms: LCALL DELAY10ms ; Aguarda 250us!!! POP 07H RET ; *** DELAY 100ms ********************************* ************************* ; ** Baseada na rotina de 5ms! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAY100ms: PUSH 07H MOV R7,#20 _LOOP100ms: LCALL DELAY5ms ; Aguarda 5ms!!! DJNZ R7,_LOOP100ms ; Repete 20x POP 07H RET ; *** DELAYx100ms(A) ****************************** ************************* ; ** Baseada na rotina de 100ms! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAYx100ms: PUSH 07H MOV R7,A _LOOPx100ms: LCALL DELAY100ms ; Aguarda 5ms!!!

65

DJNZ R7,_LOOPx100ms ; Repete 20x POP 07H RET ; *** DELAY 200ms ********************************* ************************* ; ** Baseada na rotina de 5ms! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAY200ms: PUSH 07H MOV R7,#40 _LOOP200ms: LCALL DELAY5ms ; Aguarda 5ms!!! DJNZ R7,_LOOP200ms ; Repete 40x POP 07H RET ; *** DELAY 500ms ********************************* ************************* ; ** Baseada na rotina de 5ms! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAY500ms: PUSH 07H MOV R7,#100 _LOOP500ms: LCALL DELAY5ms ; Aguarda 5ms!!! DJNZ R7,_LOOP500ms ; Repete 100x POP 07H RET ; *** DELAY 1000ms ******************************** ************************* ; ** Baseada na rotina de 5ms! ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; DELAY1000ms: PUSH 07H MOV R7,#200 _LOOP1000ms: LCALL DELAY5ms ; Aguarda 5ms!!! DJNZ R7,_LOOP1000ms ; Repete 100x POP 07H RET

66

Anexo 10 ; DISPLAY LCD ; ; Os Display LCDs do tipo Texto tem uma interface de comunicação padrão ; composta de um barramento de dados de 8 bits e de três sinais de ; controle: RS, R/W e E. Estes dispositivos permitem a conexão à um uC ; através de um barramento de 4 bits ou de 8 bits. Os exemplos mostrados ; aqui são apenas para interfaces de 8 bits. O sinal E é o Chip Select ; (Ativo Alto) do LCD. O sinal RS é utilizado para sinalizar que os ; dados recebidos são comandos para o display (RS = 0) ou são caracteres ; a serem impressos (RS = 1). Para maiores detalhes, veja a TEMPORIZAÇÃO ; apresentada a seguir. O sinal R/W permite ao uC ler (R/W = 1) ou ; escrever (R/W = 0) no display. Nos exemplos apresentados aqui, o uC ; somente escreve no display e portanto o R/W está conectado ao GND! A ; alimentação do display é 5V e o pino VO é utilizado para ajustar o ; contraste do display. Isto é feito utilizando um trimpot de 10k a 50k, ; conforme ilustra o circuito elétrico. ;; ; Para mover o cursor no display, um comando específico deve ser enviado ; para o display, o qual relaciona a linha e a coluna com um endereço na ; RAM de dados do LCD. Estes endereços estão listados a seguir: ; ; Endereços para um display de 2 linhas ; +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ ; |80|81|82|83|84|85|86|87|88|89|8A|8B|8C|8D|8E|8F| Linha 1 ; |C0|C1|C2|C3|C4|C5|C6|C7|C8|C9|CA|CB|CC|CD|CE|CF| Linha 2 ; +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ ; ; Endereços para um display de 4 linhas ; +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ ; |80|81|82|83|84|85|86|87|88|89|8A|8B|8C|8D|8E|8F| Linha 1 ; |90|91|92|93|94|95|96|97|98|99|9A|9B|9C|9D|9E|9F| Linha 2 ; |C0|C1|C2|C3|C4|C5|C6|C7|C8|C9|CA|CB|CC|CD|CE|CF| Linha 3 ; |D0|D1|D2|D3|D4|D5|D6|D7|D8|D9|DA|DB|DC|DD|DE|DF| Linha 4 ; +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ ; ; Comandos são utilizados pelo uC para programar o LCD. O uC vai enviar um ; comando quando quiser por exemplo, limpar o display, mudar de linha, ; trocar o status do cursor, etc. A tabela a seguir apresenta os comandos ; básicos: ; ; COMANDOS ESSENCIAIS ; +-------------------------+----------------------------------------------+ ; | 0 0 0 0 0 0 0 1 | Clear Display - Display Home (1,1) | ; +-------------------------+----------------------------------------------+ ; | 0 0 0 0 0 0 1 0 | Display Home (1,1) | ; +-------------------------+----------------------------------------------+ ; | 0 0 0 0 0 1 ID SH | ID = 0 -> Cursor para esquerda | ; | | ID = 1 -> Cursor para direita | ; | | SH = 0 -> Display sem Shift | ; | | ID = 1 -> Display com Shift | ; +-------------------------+----------------------------------------------+ ; | 0 0 0 0 1 D C B | D = 0 -> Display OFF |

67

; | | D = 1 -> Display ON | ; | | C = 0 -> Cursor OFF | ; | | C = 1 -> Cursor ON | ; | | B = 0 -> Cursor Fixo | ; | | B = 1 -> Cursor Piscante | ; +-------------------------+----------------------------------------------+ ; | 0 0 1 DL N F 0 0 | DL = 0 -> Interface 4 bits | ; | | DL = 1 -> Interface 8 bits | ; | | N = 0 -> Display 1 Linha | ; | | N = 1 -> Display 2/4 Linhas | ; | | F = 0 -> Matriz 5x8 (1 Caracter/Linha) | ; | | F = 1 -> Matriz 5x11 (1 Caracter/2 Linhas) | ; +-------------------------+----------------------------------------------+ ; ; Para o Display LCD funcionar é necessário um processo de inicialização, ; composta de uma sequencia de comandos a serem enviados para o display. A ; sequencia de Inicialização é : 38h, 38h, 38h, 0Eh, 06h, 01h a qual ; inicializa o display na seguinte condição: ; ; Interface de 8 bits, 2/4 Linhas, Caracter 5x8, Cursor para Direita, ; Sem Shift, Display ON, Cursor ON, Cursor Fixo, Clear Display! ; ; ; PRIMITIVAS ; ; Wrcom(A) - Escrever Comando passado no Acumulador. ; Wrchar(A) - Escrever Caracter passado no Acumulador. ; InitLCD() - Inicializa Display. ; WrStr(DPTR) - Escreve String passada em DPTR. ; MovCur1(A) - Move Cursor na Linha 1, para posição passada no acumulador. ; MovCur2(A) - Move Cursor na Linha 2, para posição passada no acumulador. ; MovCur3(A) - Move Cursor na Linha 3, para posição passada no acumulador. ; MovCur4(A) - Move Cursor na Linha 4, para posição passada no acumulador. ; ClearLCD() - Apaga Display ; CursorON() - Mostra Cursor Fixo. ; CurBlink() - Mostra Cursor Piscante. ; CurHide() - Esconde Cursor. ; WrCGRAM() - Cria 8 caracteres especiais nos enderecos 00..07h ; ; Obs.: As rotinas de LCD utilizam a biblioteca "Delay" para temporização! ; Exemplo de rotinas de Display LCD TEXTO de 1, 2 ou 4 linhas, com 16/20/24 ; caracteres e interface de 8 bits! ; DADOS EQU P0 ; DEFINIÇÃO DOS PINOS. DEPENDE DO HW!!! E EQU P3.6 RS EQU P3.7 ; *** Wrcom(A) ************************************ ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; Wrcom: MOV DADOS,A ; Escreve comando no barramento de dados CLR RS ; Coloca no modo comando SETB E

68

LCALL DELAY5us CLR E LCALL DELAY10ms RET ; *** Wrchar(A) *********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; Wrchar: MOV DADOS,A ; Escreve caracter no barramento de dados SETB RS ; Coloca no modo caracter SETB E LCALL DELAY5us CLR E LCALL DELAY10ms RET ; *** InitLCD() *********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; InitLCD: MOV A,#38H ; Envia sequência de inicialização LCALL Wrcom ; 38h,38h,38h,0Eh,06h,01h LCALL Wrcom LCALL Wrcom MOV A,#0EH LCALL Wrcom MOV A,#06H LCALL Wrcom MOV A,#01H LCALL Wrcom RET ; *** WrStr(DPTR) ********************************* ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; WrStr: MOV A,#0 ; Ajusta offset do Ponteiro MOVC A,@A+DPTR ; Verifica se chegou o fim de string (0) CJNE A,#0,Wrstring RET Wrstring: LCALL Wrchar ; Escreve caracter INC DPTR ; Incrementa o ponteiro LJMP Wrstr ; repete escrita até terminar ; *** MovCur1(A) ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; MovCur1: ADD A,#80H ; Posiciona curso na linha 1, coluna A LCALL Wrcom

69

RET ; *** MovCur2(A) ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; MovCur2: ADD A,#0C0H ; Posiciona curso na linha 2, coluna A LCALL Wrcom RET ; *** MovCur3(A) ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; MovCur3: ADD A,#90H ; Posiciona curso na linha 3, coluna A LCALL Wrcom RET ; *** MovCur4(A) ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; MovCur4: ADD A,#0D0H ; Posiciona curso na linha 4, coluna A LCALL Wrcom RET ; *** ClearLCD() ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; ClearLCD: MOV A,#01H ; Limpa o LCD LCALL Wrcom RET ; *** CursorON() ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; CursorON: MOV A,#0EH ; Liga curso em modo não piscante LCALL Wrcom RET ; *** CurBlink() ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; CurBlink: MOV A,#0FH ; Liga cursor em modo piscante LCALL Wrcom RET

70

; *** CurHide() *********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; CurHide: MOV A,#0CH ; Esconde o cursor LCALL Wrcom RET ; *** WrCGRAM() *********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; WRCGRAM: PUSH 07H MOV DPTR,#TABCGRAM MOV R7,#64 ; TAMANHO DA TABELA DE DADOS MOV A,#40H ; POSICAO DA CGRAM LCALL WRCOM LOOPCGRAM: MOV A,#0 MOVC A,@A+DPTR ; BUSCA NA TABELA DE PONTOS INC DPTR LCALL WRCHAR DJNZ R7,LOOPCGRAM MOV A,#80H LCALL WRCOM POP 07H RET ; ; TABELA DO GERADOR DE CARACTERES ESPECIAIS ; ; Esta tabela está vazia e deve ser preenchida pelo usuário. Cada linha ; (8 bytes) é responsável por gerar um caracter na forma de uma matriz ; 7x5. Os últimos 3 bytes de cada linha não são utilizados e só foram ; colocados para facilitar a escrita da rotina de gravação da CGRAM! ; Os bits mais significativos de cada byte também não são considerados. ; Uma vez inicializada a CGRAM, o usuário poderá mostrar estes ; caracteres chamando a função WRCHAR como os caracteres 00H a 07H. ; ; bloco de 8 bytes ; +-+-+-+-+-+-+-+-+ ; |x|x|x|x|x|x|x|x| ; |0|0|0|0|0|x|x|x| ; |0|1|0|1|0|x|x|x| ; |1|1|1|1|1|x|x|x| ; |1|1|1|1|1|x|x|x| ; |0|1|1|1|0|x|x|x| ; |0|0|1|0|0|x|x|x| ; |0|0|0|0|0|x|x|x| ; +-+-+-+-+-+-+-+-+ ; TABCGRAM: DB 0AH,1FH,0EH,1FH,02H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H

71

DB 00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H

72

Anexo 11 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ; tmp123.asm ; Autor: Bruno Schwab de Figueiredo ; ; Rotinas: ; StartTMP123 -> Rotina opcional para configurar pinos VCC e GND ; LoadTMP123 -> Faz o componente armazenar em memoria temperatura ** ; GetTMP123 -> Registra no acumulador o valor da temperatura em hexa ; ConvertTMP123 -> Registra em R5 R6 e R7 digitos da temperatura ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;GND EQU PX.X (Nao incluso pois GND FIXO) VCC EQU P2.6 SO EQU P2.4 SCL EQU P2.2 CS EQU P2.0 StartTMP123: SETB VCC ;CLR GND (Não incluso pois GND FIXO) RET LoadTMP123: SETB CS SETB SCL MOV A,#3 ACALL DELAYx100ms RET ;===================COLOCA em A valor de temp em hexa GetTMP123: MOV R7,#8 CLR SCL CLR CS MOV C,SO LOOPHTmp123: SETB SCL LCALL DELAY2us MOV C,SO LCALL DELAY5us CLR SCL LCALL DELAY5us RLC A DJNZ R7,LOOPHTmp123; MOV R1,A MOV R7,#8 SETB SCL LCALL DELAY2us

73

CLR SCL MOV C,SO LOOPLTmp123: SETB SCL LCALL DELAY2us MOV C,SO LCALL DELAY5us CLR SCL LCALL DELAY5us RLC A DJNZ R7,LOOPLTmp123 MOV R3,#00h MOV R2,#80h ACALL UDIV16 MOV A,R0 RET UDIV16:

mov r7, #0 mov r6, #0 mov B, #16 div_loop:

clr C mov a, r0 rlc a mov r0, a mov a, r1 rlc a mov r1, a mov a, r6 rlc a mov r6, a mov a, r7 rlc a mov r7, a mov a, r6 clr C subb a, r2 mov dpl, a mov a, r7 subb a, r3 mov dph, a cpl C jnc div_1 mov r7, dph mov r6, dpl div_1: mov a, r4 rlc a mov r4, a mov a, r5 rlc a mov r5, a djnz B, div_loop mov a, r5

74

mov r1, a mov a, r4 mov r0, a mov a, r7 mov r3, a mov a, r6 mov r2, a ret Convert_TMP123: MOV B,#100 DIV AB ADD A,#'0' MOV R7,A MOV A,B MOV B,#10 DIV AB ADD A,#'0' MOV R6,A MOV A,B ADD A,#'0' MOV R5,A RET

75

Anexo 12 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;24LC02READ.asm ; Este programa lê o endereço xxx da memória e registra o byte no registrador A ;Autor: Bruno Schwab de Figueiredo ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ $INCLUDE(I2CSMT.asm) Read24LC: ACALL _StartI2C MOV A,#0A0h ;slave address write ACALL _WriteI2C ACALL _RecvACK CONT1: MOV A,#25h ;endereço ACALL _WriteI2C ACALL _RecvACK CONT2: ACALL _StartI2C MOV A,#0A1h ;slave address read ACALL _WriteI2C ACALL _RecvACK CONT3: ACALL _ReadI2C ACALL _StopI2C RET

76

Anexo 13 ; ROTINAS DE I2C com Temporização STANDARD. ; ; PRIMITIVAS ; ; InitI2C() - Coloca na condição inicial a interface I2C. ; StartI2C() - Da o processo de "START" do I2C. ; StopI2C() - Do o processo de "STOP" do I2C. ; WriteI2C(A) - Escreve um byte passado em A no I2C. ; ReadI2C(A) - Le um byte no I2C. Devolve valor em A. ; RecvACK() - Le um bit de Acknowledge. Valor esta armazenado no Carry. ; SendACK() - Envia um bit de Acknowledge (0). ; SendNAK() - Envia um bit de não Acknowledge (1). ; ; Obs.: As rotinas de LCD utilizam a biblioteca "Delay" para temporização! ; SDA2 EQU P1.0 SCL2 EQU P1.1 ; *** InitI2C() *********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; InitI2C: SETB SDA2 SETB SCL2 RET ; *** StartI2C() ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; StartI2C: SETB SDA2 LCALL DELAY5us SETB SCL2 LCALL DELAY5us CLR SDA2 LCALL DELAY5us CLR SCL2 LCALL DELAY5us RET ; *** StopI2C() *********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; StopI2C: CLR SDA2

77

LCALL DELAY5us SETB SCL2 LCALL DELAY5us SETB SDA2 LCALL DELAY5us RET ; *** WriteI2C(A) ********************************* ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; WriteI2C: PUSH 07 ; CONTADOR. CONTROLA ENVIO DE 8 BITS! MOV R7,#8 LOOPWRI2C: RLC A ; LOOP DE ENVIO. UTILIZA CARRY PARA WR JC SENDBIT1 CLR SDA2 LCALL DELAY5us LJMP NEXTWR SENDBIT1: SETB SDA2 LCALL DELAY5us NEXTWR: SETB SCL2 LCALL DELAY5us CLR SCL2 LCALL DELAY5us DJNZ R7,LOOPWRI2C POP 07H RET ; *** ReadI2C(A) ********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; ReadI2C: PUSH 07H ; CONTADOR. CONTROLA RECEBIMENTO DE 8 BITS MOV R7,#8 SETB SDA2 ; SDA VIRA ENTRADA!!! MOV C,SDA2 LOOPRDI2C: SETB SCL2 ; LOOP DE RECEBIMENTO. UTILIZA CARRY P/RD LCALL DELAY2us MOV C,SDA2 LCALL DELAY5us CLR SCL2 LCALL DELAY5us RLC A DJNZ R7,LOOPRDI2C POP 07H RET

78

; *** Rdbit() ************************************* ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; RecvACK: SETB SDA2 ; SDA VIRA ENTRADA!!! MOV C,SDA2 SETB SCL2 ; LE BIT DE ACK LCALL DELAY2us MOV C,SDA2 LCALL DELAY5us CLR SCL2 LCALL DELAY5us RET ; *** SendACK() *********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; SendACK: CLR SDA2 SETB SCL2 LCALL DELAY5us CLR SCL2 LCALL DELAY5us RET ; *** SendNAK() *********************************** ************************* ; ** ** ; **********************************************[ M SC1211 @ 11.0592MHz ] *** ; SendNAK: SETB SDA2 SETB SCL2 LCALL DELAY5us CLR SCL2 LCALL DELAY5us RET

79

Anexo 14 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ;Rotina similar à I2C.inc, porém como há um dispositivo I2C soldado na placa sem possibilidade ;de expansão do barramento, foi criado outro barramento secundário I2C. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ _SDA EQU P0.1 _SCL EQU P3.3 _StartI2C: SETB _SDA LCALL DELAY5us SETB _SCL LCALL DELAY5us CLR _SDA LCALL DELAY5us CLR _SCL LCALL DELAY5us RET _WriteI2C: PUSH 07 ; CONTADOR. CONTROLA ENVIO DE 8 BITS! MOV R7,#8 _LOOPWRI2C: RLC A ; LOOP DE ENVIO. UTILIZA CARRY PARA WR JC _SENDBIT1 CLR _SDA LCALL DELAY5us LJMP _NEXTWR _SENDBIT1: SETB _SDA LCALL DELAY5us _NEXTWR: SETB _SCL LCALL DELAY5us CLR _SCL LCALL DELAY5us DJNZ R7,_LOOPWRI2C POP 07H RET _RecvACK: SETB _SDA ; SDA VIRA ENTRADA!!! MOV C,_SDA SETB _SCL ; LE BIT DE ACK LCALL DELAY2us MOV C,_SDA LCALL DELAY5us CLR _SCL LCALL DELAY5us RET _ReadI2C: PUSH 07H ; CONTADOR. CONTROLA RECEBIMENTO DE 8 BITS MOV R7,#8

80

SETB _SDA ; SDA VIRA ENTRADA!!! MOV C,_SDA _LOOPRDI2C: SETB _SCL ; LOOP DE RECEBIMENTO. UTILIZA CARRY P/RD LCALL DELAY2us MOV C,_SDA LCALL DELAY5us CLR _SCL LCALL DELAY5us RLC A DJNZ R7,_LOOPRDI2C POP 07H RET _StopI2C: CLR _SDA LCALL DELAY5us SETB _SCL LCALL DELAY5us SETB _SDA LCALL DELAY5us RET InitSMT: SETB _SDA SETB _SCL RET

81

8. Referências Bibliográficas [1] AD_DA.INC. Rotinas para ler conversor A/D. Autor: Júlio César de Marques Lima.

Linguagem: Assembler. Equipamento: MSC1211

[2] SERIAL_IO.ASM. Rotinas de input/output via porta serial. Autor:Marcos Augusto

Stemmer. Linguagem: Assembler: Equipamento: MSC1211

[3] CONFIG_SERIAL.ASM. Rotinas de configuração de comunicação serial. Autor: Marcos

Augusto Stemmer. Linguagem: Assembler. Equipamento: MSC1211

[4] DELAY.INC. Rotinas de delay. Autor: Júlio César de Marques Lima. Linguagem:

Assembler. Equipamento: MSC1211

[5] LCD.INC. Rotinas de configuração e output para display LCD. Autor: Júlio César de

Marques Lima. Linguagem: Assembler. Equipamento: MSC1211

[6] I2C.INC. Rotinas de comunicação por protocolo I2C. Autor: Júlio César de Marques

Lima. Linguagem: Assembler. Equipamento: MSC1211

[7] I2CSMT.INC. Rotinas de comunicação por protocolo I2C. Autor: Júlio César de

Marques Lima. Linguagem: Assembler. Equipamento: MSC1211