Você está na página 1de 72

ALEXANDRE VAZ DE ALMEIDA

IMPLEMENTAO DE UM SISTEMA
DE AUTOMAO RESIDENCIAL
MODULAR SEM FIO: MDULO
PERIFRICO

Trabalho de Concluso de Curso apresentado
Escola de Engenharia de So Carlos, da
Universidade de So Paulo

Curso de Engenharia Eltrica com nfase em
Sistemas de Energia e Automao

ORIENTADOR: Prof. Dr. Dennis Brando

So Carlos
2009






DEDICATRIA
Dedico este projeto aos meus pais, Clvis e Olga, por toda a pacincia,
educao, ateno e suporte me apoiando em minhas decises.
Dedico ao meu irmo, Ren, por exemplar conduta como pessoa e pela infinita
boa vontade para me ensinar tantas coisas.
Dedico a minha namorada, Ana Eliza, muito ffa, que sempre foi uma
companheira maravilhosa, ouvindo e aconselhando em todos os momentos.
Dedico, em memria, ao Tio Carlos, por todas as coisas que me ensinou, pela
imensa sabedoria e bondade, servindo como moral para minha pessoa, no melhor de
mim.




Para conseguir a amizade de uma pessoa digna preciso
desenvolvermos em ns mesmos as qualidades que naquela
admiramos. - Scrates






















AGRADECIMENTOS
Agradeo ao Prof. Dr. Dennis Brando, pela ajuda e confiana em nosso
trabalho.
Agradeo tambm ao Prof. Clvis de Almeida, meu pai, que em muitos
momentos nos ajudou com sua vasta experincia aconselhando e criticando
construtivamente, sempre.
Agradeo ao amigo Alex Okajima Watanabe pelo bom humor em criticar e
pelas dicas to relevantes para facilitar meu trabalho.
Agradeo ao amigo Fbio Domingues Caetano, pelas diversas vezes que teve
a pacincia de nos ouvir e opinar de forma inteligente, simplificando nosso trabalho
para darmos um passo de cada vez.
Agradeo ao amigo Luiz Henrique Pessa Da Costa Trondoli pelas diversas
horas em que se empenhou para me ajudar, pelas experincias compartilhadas e
exigncia de explicaes para tudo.
Agradeo ao amigo Srgio Zauner Gimenes por toda a chatisse sincera ao me
ensinar tantas coisas de eletrnica; o que veio a despertar uma paixo pela
engenharia eltrica.













RESUMO
Este projeto tem por objetivo o desenvolvimento e a construo de um sistema
prottipo microcontrolado capaz de associar entradas e sadas discretas, como
sensores e atuadores, utilizando-se de combinaes de estado e operaes lgicas
simples. O sistema composto de mdulos independentes com 4 entradas e 4 sadas,
cuja lgica programada por uma central ligada a um computador. O diferencial deste
projeto a utilizao de comunicao sem fio (RF) entre os mdulos e a central,
eliminando a necessidade de conexo fsica, agregando assim flexibilidade s
aplicaes. Outra caracterstica importante diz respeito autonomia que cada mdulo
tem para gerenciar suas tarefas, no dependendo da central para coorden-las; isto
permite ao usurio programar o mdulo e utiliz-lo mesmo onde a central no esteja
presente.

Palavras-chave: automao residencial, mdulo perifrico, comunicao sem
fio, microcontrolador, PIC.



















ABSTRACT
The purpose of this project is the development and construction of a microcon-
trolled prototype system capable of associating discrete inputs with outputs, as sensors
and actuators, using state combinations and simple logical operations. The system is
made of independent modules with 4 inputs and 4 outputs, whose logic is programma-
ble by a central unit which is connected to a computer. The cardinal difference of this
project is the use of wireless communication between the modules and the central unit,
eliminating thus the need of a hardware connection, providing flexibility to the applica-
tion. Another important characteristic is the autonomy that each module has to manage
its own tasks, not depending on the central unit to coordinate them. This permits the
user to program the module and use it even where the central unit is not present.

Keywords: residential automation, wireless communication, microcontroller,
PIC.

















1. SUMRIO

1. LISTA DE FIGURAS ....................................................................................................................
2. LISTA DE ABREVIATURAS E SIGLAS ..........................................................................................
3. INTRODUO ........................................................................................................................ 1
4. OBJETIVOS ............................................................................................................................. 4
5. SEQUNCIA DAS ATIVIDADES REALIZADAS ........................................................................... 6
6. DESCRIO DO PROJETO ....................................................................................................... 8
7. PROGRAMA DE INTERFACE COM O USURIO ..................................................................... 10
7.1. Consideraes iniciais ................................................................................................. 10
7.2. Linguagem de programao adotada ......................................................................... 10
7.3. Software de Interface com o usurio .......................................................................... 10
8. COMUNICAO COM O MDULO CENTRAL ...................................................................... 15
................................................................................................................................................. 19
9. O MDULO CENTRAL .......................................................................................................... 21
10. O MDULO PERIFRICO AUTNOMO ............................................................................ 25
10.1. Endereamento e comunicao .............................................................................. 28
10.2. O procedimento de configurao de um mdulo ................................................... 34
10.3. Como as sadas e entradas lgicas funcionam ........................................................ 35
10.4. Limitaes do projeto .............................................................................................. 37
10.5. Conexo das cargas eltricas .................................................................................. 37
11. RESULTADOS ................................................................................................................... 39
12. CONCLUSES ................................................................................................................... 43
13. REFERNCIAS BIBLIOGRFICAS ....................................................................................... 45
14. ANEXOS ........................................................................................................................... 47
14.1. Anexo 1: Cdigo do programa do Mdulo Perifrico .............................................. 47
14.2. Anexo 4: Esquema eltrico do mdulo central ....................................................... 53
14.3. Anexo 5: Esquema eltrico do mdulo perifrico ................................................... 54









1. LISTA DE FIGURAS

Figura 1 - 30 entradas RS232 .................................................................................................. 2
Figura 2 - 8 dimmers digitais para rede Multipoint ................................................................ 2
Figura 3 - Termmetro digital ................................................................................................... 2
Figura 4 - Janela de configurao ......................................................................................... 12
Figura 5 - Diagrama de fluxo de dados ................................................................................. 15
Figura 6 - Fluxograma de conexo com a central ............................................................... 17
Figura 7 - Fluxograma de configurao ................................................................................ 19
Figura 8 - Caractersticas do PIC16F873A .......................................................................... 26
Figura 9 - Pinos do PIC16F873A ........................................................................................... 26
Figura 10 - Fluxograma ilustrativo do funcionamento do mdulo perifrico ................... 27
Figura 11 - Esquema eltrico simples do transmissor RF ................................................. 28
Figura 12 - Mdulo RF emissor Telecontrolli 433,92MHz .............................................. 29
Figura 13 - Esquema eltrico simples do receptor RF ....................................................... 29
Figura 14 - Mdulo RF receptor Telecontrolli 433,92MHz .............................................. 29
Figura 15 - Byte contendo endereo e dado ........................................................................ 30
Figura 16 - Modulao da mensagem travs da portadora de RF e utilizao de
encoder e decoder ................................................................................................................... 30
Figura 17 - Pinagem dos encoder e decoder utilizados ..................................................... 31
Figura 18 - Diagrama funcional do encoder HT12E ........................................................... 32
Figura 19 - Fluxograma funcional do decoder HT12D ....................................................... 33
Figura 20 - Comunicao entre mdulos central e perifrico ............................................ 35
Figura 21 - Byte de seleo das entradas e sadas a serem utilizadas .......................... 36
Figura 22 - Bytes utilizados para representar operaes lgicas ..................................... 36
Figura 23 - Exemplo explicativo de dados relativos a uma tarefa .................................... 37
Figura 24 - Esquema eltrico interno do acoplador ptico (4N25) e pinagem ............... 38
Figura 25 - Computador com o Programa M. Config. aberto ............................................ 39
Figura 26 - Circuito do mdulo central montado em protoboard ...................................... 40
Figura 27 - Circuito do mdulo perifrico montado em protoboard .................................. 40
Figura 28 - Montagem das cargas e sensores .................................................................... 41
Figura 29 - Detalhe da placa de rels ................................................................................... 42
Figura 30 - Montagem das cargas e sensores .................................................................... 42






2. LISTA DE ABREVIATURAS E SIGLAS

PCI Placa de Circuito Impresso
CI Circuito Integrado
LSN Less Significant Nibble
MSN Most Significant Nibble
TCC Trabalho de Concluso de Curso
LED Light Emitting Diode
PC Personal Computer
PIC Peripheral Interface Controller






1

3. INTRODUO

Seguindo a proposta de o TCC ser um projeto interdisciplinar e, aliado ao gosto
pessoal por reas da engenharia como programao, eletrnica e automao, surgiu a idia
de desenvolver um projeto flexvel para atender algumas necessidades residenciais, a partir
de um produto simples, de baixo custo e bastante verstil para automatizar aes do
cotidiano em uma residncia. Os benefcios desta automatizao so a comodidade, por ter
um sistema ajudando o usurio no seu dia-dia, economia de energia eltrica acionando
lmpadas e outros dispositivos somente quando necessrio, e a integrao direta com a
segurana do ambiente, com sistemas de trava e identificao mais sofisticados. Estas e
outras idias so tratadas com mais detalhes na crescente rea denominada domtica.
A domtica teve suas primeiras aplicaes no Brasil na dcada de 80, na construo
de prdios com recursos de suporte mais dinmicos, integrando o controle de iluminao,
temperatura, segurana e comunicao num nico sistema. A partir da este conceito
difundiu-se com rapidez, apoiada pelas inovaes tecnolgicas em sensoriamento e
telecomunicaes.
Novas empresas tomaram iniciativa no Brasil em fornecer solues para automao
residencial e comercial, impulsionadas pela demanda do setor civil, em novos conjuntos
habitacionais, residncias de luxo e usurios com interesse de melhorar e valorizar seus
lares.
Apesar de ainda ser pouco conhecida e ter um custo ainda bastante elevado para
grande parte do pblico, a domtica, como novo ramo da automao est crescendo e
promete vir a ter muitos adeptos.
Este projeto, apesar de possuir foco na automao de residncias, pode facilmente,
devido a sua flexibilidade, ser implementado em automao comercial e industrial. Esta
flexibilidade decorre da possibilidade de se conectar qualquer tipo de sensor e acionar
qualquer tipo de sada discreta, a exemplo de uma esteira numa indstria para monitorar a
presena de um produto; se o objeto estiver na posio correta para um sensor, a esteira
caminha, ou mesmo um atuador descarta o produto. Ou numa casa, onde o usurio ao
chegar, um sensor de presena na garagem acende uma luz externa e abre o porto da
garagem.
O mercado atual oferece opes automao que abrangem diversas faixas tanto
de complexidade quanto de custo. A inteno deste projeto oferecer uma alternativa
2
intermediria, permitindo ao usurio com conhecimento bsico de lgica combinacional
configurar e instalar os mdulos tudo a um custo acessvel.
Alguns exemplos de projetos existentes no mercado podem ser observados nas
figuras 1, 2 e 3.


Figura 1 - 30 entradas RS232


Figura 2 - 8 dimmers digitais para rede Multipoint


Figura 3 - Termmetro digital
Aplicaes: Acionamento de cargas
dimmerizveis.
Caractersicas: 8 canais independentes, pode
adicionar at 32 dimmers no mesmo barramento
de controle, potncia por canal 500w em 110v e
ou 1000w em 220 volts, etapa de potncia opto
isolada, cdigo fonte em Delphi, confirmao de
comando do canal e potncia por software,
dimerizao automtica ou manual por software,
tempo de dimmerizao ajustvel para cada
canal
Aplicaes: Central de deteco de sensores de
contato seco em geral: sensores magnticos ,
infravermelho de movimento e coletor de dados de
ciclos de produo de parque de mquinas .

Caractersticas da placa: Conexo com a porta
serial RS232 do PC, retorna o estado de todas as 30
entradas ao mesmo tempo a cada 300ms,
alimentao 12 volts, aceita sensores de comum em
GND ou 5 volts.

Aplicaes: Em prdios, residncia ou comrcio,
monitoramento e controle da temperatura
ambiente, medio da temperatura de objetos:
chocadeiras, cmaras, freezers, motores e estufas.
Caractersticas: Conversor digital, no precisa
ajustar, resoluo 16 bits, range -45 a + 125 graus
Celsius, at 32 placas idnticas no mesmo cabo,
retorno da temperatura e do estado dos rels.

3



4

4. OBJETIVOS

Com respeito s motivaes expostas anteriormente concentrou-se esforos para
realizar o estudo e projeto de um sistema de automao residencial sem fio de baixo custo,
facilmente configurvel por envolver a utilizao de microcontroladores e programao de
linguagem de alto nvel. Alm disso, realizou-se tambm o projeto do circuito eletrnico
utilizado.
Desta forma objetivou-se o desenvolvimento de sistemas simples, onde os
resultados obtidos, as habilidades desenvolvidas, e as conseqentes pesquisas serviram de
suporte para a proposta final do projeto.


5



6

5. SEQUNCIA DAS ATIVIDADES REALIZADAS

O projeto como um todo foi realizado basicamente em nove etapas:
Estudo das necessidades do usurio pesquisa com pessoas ligadas
a rea de instalaes eltricas residenciais e opinies de pessoas
prximas;
Estudo do microcontrolador a ser adotado no mdulo central e o
mdulo perifrico considerando o nmero de pinos necessrios, a
memria de programa, interfaces de comunicao e custos para cada
tipo de mdulo
Estudo da linguagem e ambiente de programao a ser utilizado para
programar o software de interface com o usurio e o software para
operao dos mdulos;
Projeto do algoritmo funcional para cada mdulo;
Desenvolvimento do protocolo de comunicao e configurao dos
mdulos;
Montagem dos circuitos em protoboard e testes funcionais;
Rotinas de teste operacional para cada mdulo;
Teste de integrao entre o computador e os mdulos;
Aprimoramentos finais.
O projeto foi desenvolvido por um grupo de trs alunos de graduao, cada qual
responsvel por uma parte do projeto, porm, com direta integrao entre as partes. Assim,
foram criadas trs monografias para o mesmo projeto. Cada documento contm explicaes
detalhadas de uma das trs partes e as outras duas partes foram tratadas resumidamente,
considerando-as como contedo a ser detalhado nas outras monografias.


7




8

6. DESCRIO DO PROJETO

6.1. Programa de Interface com o Usurio
Programa desenvolvido em Visual Basic com o objetivo de realizar a interface
com o usurio permitindo ao mesmo a seleo de operaes desejadas e a gravao
das configuraes nos mdulois perifricos.

6.2. Mdulo Central
O papel do mdulo central traduzir para os mdulos perifricos os
comandos passados pelo computador.
Para isso, possui uma interface RS232 para comunicao com o computador
e uma interface RF para comunicao com os mdulos perifricos.

6.3. Mdulo Perifrico
Mdulo responsvel por realizar toda a automatizao do ambiente a partir
das configuraes recebidas do programa utilizado pelo usurio. As configuraes
so diferenciadas em tarefas, cada uma relacionada a uma carga a ser controlada.
Os sinais lgicos dos sensores so interpretados pelo mdulo, e efetuando as
operaes lgicas j programadas, aciona ou desaciona a carga correspondente a
cada tarefa.



9



10

7. PROGRAMA DE INTERFACE COM O USURIO

7.1. Consideraes iniciais
Nesta seo sero exibidas algumas definies e conceitos tericos utilizados
no desenvolvimento do projeto, alm de justificativas para os procedimentos e
opes definidas.
7.2. Linguagem de programao adotada
O Visual Basic uma linguagem de programao desenvolvida pela
Microsoft, e parte integrante do pacote Microsoft Visual Studio. Sua verso mais
recente parte do pacote Visual Studio .NET, voltada para aplicaes .Net. Sua
verso anterior era parte do Microsoft Visual Studio 6.0, ainda muito utilizado
atualmente.
Como um aperfeioamento do BASIC, a linguagem dirigida por eventos
(event driven), e possui tambm um ambiente de desenvolvimento integrado (IDE -
Integrated Development Environment) totalmente grfico, facilitando enormemente a
construo da interface das aplicaes GUI (Graphical User Interface), da o nome
"Visual". Em suas primeiras verses, o Visual Basic no permitia acesso a bancos de
dados sendo, portanto, aplicaes bem simples. Mas devido ao sucesso entre as
empresas, que faziam uso de componentes adicionais fabricados por terceiros para
acesso a dados, a linguagem logo adotou tal recurso, permitindo fcil acesso a bases
de dados.
A escolha da linguagem de programao para realizar a interface com o
usurio foi baseada na caracterstica mais pronunciada do Visual Basic que
justamente a orientao a objeto. Desta forma, proporciona uma aparncia
sofisticada e ao mesmo tempo uma interface fcil, intuitiva e amigvel ao usurio.
Assim, foi possvel dispor ao usurio uma maneira muito prtica para configurar os
mdulos perifricos.
7.3. Software de Interface com o usurio

A interface com o usurio foi desenvolvida objetivando a simplicidade de
operao, possibilitando a um usurio domstico com conhecimento mnimo de

11

lgica combinacional realizar a configurao dos mdulos da melhor forma para seu
uso.
A Figura 4 exibe a janela de configurao que se abre ao iniciar o software.

12


Figura 4 - Janela de configurao

13

O software configura mdulos com quatro entradas e quatro sadas digitais.
Estas entradas e sadas podem ser combinadas de forma conveniente para realizar
acionamentos em geral, a partir dos sinais de entrada conectados. Cada associao
lgica foi chamada de tarefa, e a associao de quatro tarefas foi chamada de perfil,
assim, aps configurar quatro tarefas, o usurio salva um perfil que pode ser gravado
em qualquer mdulo detectado.

14



15


8. COMUNICAO COM O MDULO CENTRAL

O meio de comunicao entre um computador com o software de configurao e
cada mdulo isolado o mdulo central. Este se comunica de modo serial com o
computador e por rdio freqncia com cada elemento perifrico. A Figura 5 ilustra a idia
de comunicao do sistema.


Figura 5 - Diagrama de fluxo de dados
H basicamente dois tipos de troca de dados entre central e computador. No primeiro
ocorre a contagem dos mdulos ativos e a identificao dos endereos. O segundo tipo
executa a programao propriamente dita com a troca dos dados de configurao.
Como descrito anteriormente necessrio conectar-se com a central antes de
executar a gravao dos dados. Isto se deve ao carregamento das informaes dos
mdulos ativos, a qual ocorre da seguinte maneira:
Envio do caractere de abertura de comunicao (I);
Recebimento do caractere de confirmao (I);
Envio do endereo do primeiro mdulo (1);
Recebimento do caractere de confirmao (S para mdulo presente,
e N para mdulo ausente);
Envio do endereo do prximo mdulo (2 at 10);
16

Assim sucessivamente, perguntando central se o endereo est
ativo ou no e gravando os endereos ativos no banco de variveis.
Nota-se que a comunicao baseada em uma pergunta e uma resposta, ou
seja, a comunicao sempre verifica o estado do canal em ambos os sentidos. Para evitar
que um ou outro dispositivo espere uma reposta indefinidamente, foram estabelecidos
temporizadores timeout, que a cada envio de dado espera um tempo mximo pr-
determinado, encerrando a comunicao e exibindo uma tela de erro quando este tempo
excedido.
Para cada endereo ativo includo na caixa de seleo de mdulo o nmero dos
respectivos endereos dos mdulos encontrados. Assim, ao trmino da primeira troca de
dados, possvel escolher o mdulo a ser configurado a partir de seu endereo. O endereo
a ser conferido depende somente do software de configurao, dentro dos 256 endereos
possveis de um byte. O processo do ponto de vista do computador, de forma geral, pode
ser entendido segundo o fluxograma da Figura 6.

17


Figura 6 - Fluxograma de conexo com a central
18

Seguindo o fluxograma da Figura 6 nota-se que a central pode ser conectada
sucessivas vezes, o que interessante do ponto de vista da aplicao prtica, uma vez que
torna possvel a verificao de todos os mdulos conectados e a imediata deteco de um
possvel mdulo fora do alcance da central.
O outro processo de comunicao com a central ocorre quando h a gravao dos
dados nos mdulos perifricos. A comunicao se d baseada no envio e recebimento da
mesma informao. Por exemplo: um byte de endereo enviado central, esta retransmite
este byte como forma de confirmar o recebimento da informao. O computador verifica se a
informao retransmitida vlida, realizando assim, uma verificao dos dados. Tal
transferncia de dados ocorre da seguinte forma:
Envio do byte de incio de comunicao (C);
Recebimento do byte de confirmao (C);
Envio do endereo do mdulo a ser gravado (byte de endereo );
Recebimento do byte de endereo;
Envio do byte de operao;
Recebimento do byte de operao;
Envio do byte de I/O utilizado
Recebimento do byte de I/O;
Envio do byte de sinais invertidos;
Recebimento do byte de sinais negados;
O envio dos bytes de configurao ocorre quatro vezes completando a
tarefa programada. A qualquer momento A pode ser recebido da
central, indicando uma falha na comunicao entre a central e o
mdulo, provocando uma janela de alerta advertindo ao usurio que
uma nova tentativa de gravao necessria.
Um melhor entendimento da troca de dados pode ser obtida acompanhando-se o
fluxograma da Figura 7, o qual compe as informaes trocadas do ponto de vista do
computador.


19


Figura 7 - Fluxograma de configurao
20



21

9. O MDULO CENTRAL

O mdulo central, ou simplesmente chamado de central, um circuito digital
composto de um microcontrolador PIC16F877A da Microchip, um encoder e um decoder
Holtek, modelos HT12E e HT12D, um MAX232 e um par de rdios emissor-receptor RT4 e
RR3 da Telecontrolli, alm de componentes auxiliares, tais como capacitores, resistores,
conectores, fonte de tenso, chaves e cristal.
O papel da central fazer o interfaceamento entre o computador em que est
instalado o software M. Config e todos os mdulos perifricos adquiridos pelo usurio. Este
interfaceamento feito respeitando um protocolo de comunicao muito bem definido, o que
confere a este sistema confiabilidade e facilidade de deteco de erros causados por
possveis interferncias externas.
A central est programada para receber pacotes de dados (bytes) do computador via
comunicao serial e envi-los aos mdulos perifricos atravs de uma interface sem fio
composta pelo par de rdios citados. Esta interface possibilita central no s enviar dados,
mas tambm receb-los, completando a comunicao entre ela e os perifricos.
Alm de traduzir para os mdulos perifricos os comandos passados pelo
computador, a central foi criada com o intito de tornar o projeto mais verstil. Uma vez
adquiridos e instalados os mdulos perifricos, o usurio no precisar desconect-los para
que seja feita a programao, pois a central se comunica via rdio-freqncia. Isto agrega
outra caracterstica interessante central: por no precisarem ser conectados fisicamente a
ela, possvel reprogramar todos os mdulos perifricos de uma s vez com um simples
comando Gravar no software. Quando isso acontece, a central recebe os comandos do
computador e repassa-os, um a um, para cada mdulo perifrico. Tal procedimento
repetido at que todos os mdulos estejam gravados.
Para aumentar a segurana no envio de dados via rdio-freqncia a central usa um
protocolo de verificao de palavra de dados que consiste em enviar o byte, receb-lo e
verificar se o byte recebido condiz com o enviado, deste modo ela pode tomar atitudes como
reenviar o byte ou alertar erro de comunicao.
Devido ao fato de cada palavra de dado ter 8 bits e o par encoder/decoder trabalhar
com um nibble, a central e os perifricos comunicam-se nibble a nibble. Para isso, a central
divide o byte recebido pelo computador em dois nibbles e os envia separadamente para os
perifricos. Cada perifrico recompe os nibbles como byte para poder compreender a
instruo.
22

A central foi programada de modo a ser verstil, ela pode tanto dizer ao computador
quantos mdulos esto presentes e quais so estes mdulos, como tambm program-los.
Quando inicializada, a central espera por um comando do computador, que pode ser
um I ou um C. Esta comunicao feita pela porta serial do microcontrolador a uma taxa
de 9600 baud. O I recebido diz para a central que o sistema est em modo de inicializao,
portanto ela ter de informar ao computador quais dos mdulos esto presentes. Logo aps
esta instruo, ela reenvia o I para o computador para que este faa a verificao de erro e
saiba que pode continuar a comunicao. Neste momento a central espera receber o
endereo do mdulo que o computador deseja saber se est presente. O endereo vir no
nibble menos significativo do byte recebido. Aps o recebimento deste endereo, a central
utiliza o encoder conectado ao rdio para enderear o mdulo em questo e envia a palavra
1 1 1 1 (Traduzida como: Voc est a?) ao mesmo. Esta palavra faz parte do protocolo
de comunicao e no pode ser confundida com nenhum comando passado ao mdulo
perifrico. Cabe, agora, frisar uma caracterstica fundamental do projeto da central: Todo
dado (nibble) recebido de um perifrico pela central recebido via interrupo do pino RB0,
que est ligado ao VT (Valid Transmission) do decodificador. Deste modo, aps perguntar
se o mdulo est presente, a central conta um tempo de 200ms, que funciona como time
out, se o mdulo responder 1 1 1 1 dentro deste intervalo o programa entra na
interrupo, grava o valor para saber que o mdulo est presente e retorna contagem de
tempo. Terminado o tempo de resposta a central verifica se o mdulo est ou no presente,
caso esteja, a central envia a letra S para o computador, caso contrrio ser enviada a
letra N. Neste ponto o computador j sabe se o mdulo est ou no presente e a central
volta para esperar um novo byte de endereo, para verificar se o prximo mdulo est ou
no presente atravs do mesmo procedimento. Para esta verso do projeto ficou definido
que o nmero mximo de mdulos a serem conectados seria dez, portanto o computador
enviar dez endereos de mdulos para a central, que repetir a verificao dez vezes, uma
para cada mdulo e retornar para esperar por um C ou um I novamente, caso seja
requisitado pelo computador.
De volta ao incio do programa, a central estar espera da letra C ou I, e neste
caso ela receber a letra C (Configurao), pois j enviou para o computador quais
mdulos esto presentes e agora eles devero ser configurados.
Uma vez recebida a letra C o programa a reenvia para o computador para que este
faa a verificao de erro e saiba que pode continuar a comunicao. Neste momento a
central espera pelo endereo do primeiro mdulo a ser programado (quem escolhe isso o
computador, o que confere central a capacidade de obedecer prioridades de programao

23

dos mdulos). Recebido este byte, a central coloca o endereo do mdulo no encoder e o
reenvia atravs da serial para o computador, para que este faa novamente a verificao de
erro e saiba que pode continuar a comunicao.
Neste ponto a central est esperando pelo primeiro byte de configurao que ser
enviado ao perifrico. Recebido este byte ela o divide em dois nibbles. O primeiro nibble (o
menos significativo) ento enviado para o mdulo em questo e aguarda-se a resposta.
Recebida a resposta, a central guarda o nibble recebido, que deve ser igual ao enviado e
manda o nibble mais significativo, pois sabe, pela resposta do perifrico, que este est
pronto para receber mais um dado. O mesmo procedimento de resposta ocorre e a central
monta um byte com os dois nibbles recebidos e os compara com os dois enviados. Esta a
verificao de erro de envio que confere mais segurana comunicao e permite a tomada
de decises. Nesta verso do projeto foi implementada a verificao para que o usurio
possa saber se ocorreu algum tipo de erro na comunicao, para isso, caso o byte recebido
seja diferente do byte enviado, a central envia a letra A para o computador, para que este
saiba do ocorrido e entra em loop, colocando em nvel alto e baixo uma sada, na qual pode
ser ligada a qualquer tipo de alerta sonoro ou visual. Para este projeto escolhemos o alerta
visual via LED.
Caso no tenha ocorrido falha na comunicao, a central esperar pelo prximo byte
de configurao do perifrico. Isso ser feito trs vezes completando o nmero de bytes
necessrios para se configurar uma tarefa em um mdulo, como ser explicado mais
adiante. Aps isto, a central volta ao incio do programa para esperar mais uma vez por um
C ou I.
Este procedimento refora a caracterstica de a central ser um mdulo verstil, pois
no restringe ao usurio ou s novas verses de programa um nmero determinado de
tarefas que cada mdulo poder receber, facilitando a melhoria do projeto e abrindo margem
a outras aplicaes.


24



25

10. O MDULO PERIFRICO AUTNOMO

Esta etapa do projeto conta com a descrio mais detalhada do componente
responsvel pela execuo das tarefas: o mdulo perifrico. constitudo fisicamente por
um sistema lgico de comando, um sistema de comunicao via rdio e um circuito de
potncia.
O sistema lgico de comando foi implementado com o microcontrolador da
Microchip, o PIC16F873A, um CI de baixo custo, de fcil programao e suficientemente
robusto. A linguagem de programao utilizada foi C, e os programas foram desenvolvidos
no compilador MikroC PRO 2009 (v. 1.65). Trata-se de um excelente software que converte
e compila programas escritos em linguagem C para linguagem assembly, gerando os
arquivos necessrios para gravao no PIC. Vale destacar ainda das facilidades deste
software algumas funes muito teis para programadores que estejam migrando de
compiladores de linguagem assembly para compiladores C, tais como funes prontas de
temporizao, comunicao serial, acesso memria, controle de LCD, etc. Tambm
oferece ferramentas teis de diagnstico para depurar o cdigo.
As caractersticas do microcontrolador utilizado so apresentados na Figura 8 e a
configurao dos pinos na Figura 9. A descrio de cada pino pode ser encontrada no
datasheet do fabricante (vide referncias bibliogrficas).
26


Figura 8 - Caractersticas do PIC16F873A


Figura 9 - Pinos do PIC16F873A

O mdulo pode executar at quatro tarefas, seqencialmente e sem prioridade entre
estas. Ainda que no tenha a simultaneidade de tarefas, o processo todo ocorre de forma
muito rpida, sendo que o intervalo de tempo entre uma entrada relevante e a resposta

27

esperada no perceptvel pelo usurio. A princpio no foram tratadas as situaes onde o
tempo de resposta seja realmente crtico, mas possvel mudar alguns parmetros de
hardware para adequar o sistema para uma resposta ainda mais rpida.
As tarefas recebidas pelo mdulo perifrico so armazenadas na memria EEPROM
interna do microcontrolador PIC16F873A, o que previne a perda das configuraes na
ocorrncia de uma interrupo no fornecimento de energia eltrica.
Na Figura 10 temos o fluxograma operacional do mdulo perifrico.

Figura 10 - Fluxograma ilustrativo do funcionamento do mdulo perifrico

28

10.1. Endereamento e comunicao

O sistema de comunicao entre os mdulos perifricos e o mdulo central feito via
rdio utilizando pequenos mdulos RF pr-fabricados (marca Telecontrolli) de somente uma
portadora cada, na freqncia de 433,92 MHz e com alcance mximo de 60 metros (sem
obstculos). Para esta freqncia de portadora foi calculado o comprimento da antena para
se obter um bom alcance. Para um rdio que trabalha na freqncia de 433,92MHz, pode
ser usado um fio de cobre rgido como antena, de comprimento igual a 17,5 cm.
Um par de rdios composto por receptor e emissor foi instalado em cada mdulo
(central e perifricos), possibilitando a comunicao bidirecional. Apesar disso, a
comunicao feita no modo half-duplex, pois as transmisses e recepes so feitas em
rotinas diferentes pelo microcontrolador (no simultneas). Por conseqncia isto tambm
torna a verificao de dados mais fcil. Um diagrama bsico de conexo dos mdulos de
rdio podem ser observados nas Figuras 11 e 12, assim fotos dos modelos do fabricante
Telecontrolli (Figuras13 e 14)

Figura 11 - Esquema eltrico simples do transmissor RF


29


Figura 12 - Mdulo RF emissor Telecontrolli 433,92MHz


Figura 13 - Esquema eltrico simples do receptor RF


Figura 14 - Mdulo RF receptor Telecontrolli 433,92MHz

30
O endereo de cada mdulo uma combinao binria de quatro bits definida via
hardware a partir de mini-chaves (DIP Switch) soldadas na placa de circuito impresso do
mdulo. O dispositivo responsvel pelo endereo do mdulo em si um decoder, Holtek
modelo HT12D, responsvel por repassar as informaes (o nibble menos significativo) para
o microcontrolador somente quando o endereo recebido estiver correto. Ou seja, durante a
programao todos os mdulos recebero informaes via rdio, mas somente ser
programado o mdulo com endereo equivalente ao atribudo pelo mdulo central. O pacote
de informaes enviado pela central um byte composto por quatro bits de endereo e
quatro bits de dados (Figura 15).
1 0 1 0 1 1 0 0
Endereo do
perifrico
destino
Dado de confi-
gurao

Figura 15 - Byte contendo endereo e dado
O mdulo central tambm possui um decoder similar ao dos perifricos com um
endereo fixo, o qual cada mdulo perifrico est configurado para responder confirmaes
de verificao de recebimento.
Para o envio de dados foi utilizado o dual do decoder citado, o encoder Holtek
modelo HT12E, com bits de endereamento atribudos via software no mdulo central, vista
a necessidade de se alterar as combinaes de endereo para se comunicar com cada
mdulo perifrico. Nos mdulos perifricos este encoder possui um endereo fixo (via
hardware), assim como o da central, pois somente podem estabelecer troca de dados com
o mdulo central.
Na Figura 16 ilustrada a comunicao e endereamento feitos pelos mdulos de
rdio e encoder/decoder.

31


Os encoder e decoder implementados trazem vrias outras vantagens para o
sistema, como filtragem de rudo e interferncias recebidos pelo rdio, a verificao de
dados feita pelos prprios encoders cada encoder envia 3 vezes o mesmo dado e o
decoder deve receber 3 vezes este mesmo para ento repassar a informao ao
microcontrolador. Outra vantagem a impossibilidade do recebimento de uma informao
enviada pelo prprio mdulo, seja este central ou perifrico, pois h um endereo distinto
para cada unidade. Na Figuras 17, 18 e 19 seguem a identificao de cada pino e os
respectivos fluxogramas funcionais.


Figura 17 - Pinagem dos encoder e decoder utilizados

32

Circuito ligado
Sistema em
espera
Transmisso
habilitada?
4 palavras de
dados so
transmitidas
Transmisso
ainda est
habilitada?
4 palavras de
dados so
transmitidas
continuamente
sim
sim
no
no

Figura 18 - Diagrama funcional do encoder HT12E

33


Figura 19 - Fluxograma funcional do decoder HT12D
34

10.2. O procedimento de configurao de um mdulo

Um mdulo pode ser configurado a qualquer momento, bastando apenas a central
emitir o cdigo correto para o endereo do mdulo a ser configurado. Este executar as
rotinas necessrias para a recepo das configuraes.
Logo que o microcontrolador do mdulo perifrico recebe informaes da central, a
informao analisada e classificada ou como um comando de verificao de presena do
mdulo ou uma nova configurao de tarefa a ser gravada na memria EEPROM de dados.
Para o caso de ser um comando de verificao de presena do mdulo enviada
uma resposta (cdigo) simples para a central como confirmao. J no caso de se tratar de
informaes de configurao ento o microcontrolador segue para rotinas da sua
interrupo onde tratar os nibbles e salvar os dados adequadamente na memria.
Aps a configurao ser completada o mdulo inicia a execuo das tarefas
imediatamente.
Na Figura 20 temos o esquema ilustrativo do processo de configurao de um
mdulo.

35


Figura 20 - Comunicao entre mdulos central e perifrico


10.3. Como as sadas e entradas lgicas funcionam

Aps o mdulo salvar as configuraes na memria EEPROM o sistema comea a
executar as tarefas salvas.
Cada tarefa composta por trs bytes: byte de seleo, byte de operao e byte de
estados.
O byte de seleo indica as entradas e sadas que foram selecionadas para a
execuo da tarefa. Como cada mdulo possui quatro entradas e quatro sadas, ento os
quatro bits mais significativos do byte de seleo indicam as entradas escolhidas (valor 1)
ou no (valor 0) e os outros quatro bits so destinados para uma das sadas a ser utilizada
(bit assume valor 1).
36

Na Figura 21 temos um exemplo em que o usurio escolheu utilizar as entradas
dois e quatro e a sada dois do mdulo.

Figura 21 - Byte de seleo das entradas e sadas a serem utilizadas

O byte de operao utiliza apenas o nibble mais significativo e pode definir trs tipos
de operao, cada qual formada por uma seqncia de bits (Figura 22).

Figura 22 - Bytes utilizados para representar operaes lgicas

O byte de estados contm valores para as entradas selecionadas e sero
comparados com os valores reais vindos dos sensores ligados ao mdulo. Dependendo da
operao escolhida pelo byte de operao o mdulo tomar a deciso de acionar a sada
selecionada ou no.
Como exemplo temos a seguinte situao exibida na Figura 23.

37

Entradas 2 e 4 selecionadas
para atuar a sada 2
Estados das entradas 2 e 4
esperados para atuar a
sada 2.
0 1 0 0 0 1 0 1
0 1 0 0 0 0 0 1
Byte de seleo:
Byte de estados:
1 2 3 4 1 2 3 4
Entradas Sada
Byte de operao: 0 0 0 0 1 1 1 0
Operao OU escolhida
Exemplo de tarefa

Figura 23 - Exemplo explicativo de dados relativos a uma tarefa

10.4. Limitaes do projeto

Somente uma sada lgica pode ser utilizada em cada tarefa.
Os equipamentos acoplados ao mdulo perifrico somente podero
ser ligados ou desligados.
O mdulo perifrico comunica-se somente com o mdulo central no
h nenhuma interao com demais mdulos perifricos.

10.5. Conexo das cargas eltricas

Diversos tipos de carga eltrica e sensores podem ser conectados ao mdulo
perifrico sem necessariamente ter uma alimentao extra. O circuito do mdulo fornece
alimentao em corrente contnua para a grande maioria dos sensores do mercado e tem
sadas lgicas de potncia para equipamentos, chaveando (por meio de rels) tenses
alternadas padronizadas, como 110V e 220V.
Exemplos de cargas passveis de utilizao com o mdulo perifrico:
Lmpadas (incandescentes, fluorescentes, halgenas, etc)
Motores AC assncronos, (abertura de portes, portas, ventiladores,
etc)
Bombas dgua (submersas ou no poos e piscinas)
38

Servo-motores (acionamento de persianas, cmeras, painis)
Solenides (abertura e fechamento de vlvulas, trancas)
Alimentao de tomadas (110/220 V)
Aquecedores e Ar Condicionados
Exemplos de sensores bastante conhecidos e de fcil implementao:
Sensores de presena (infravermelho, ultra-som)
Sensores de luminosidade (LDR)
Sensores de temperatura (NTC, LM35)
Sensores magnticos (reed switch)
Sensores indutivos
Sensores capacitivos
Chaves manuais (botes, interruptores)
Chaves fim de curso
Os sensores listados podem fornecer diferentes tenses de sada, implicando para o
mdulo perifrico a necessidade de aceitar nveis de tenso variados. Assim, como forma de
se obter versatilidade em aplicaes fez-se o uso de acopladores pticos (Fairchild
modelo 4N25), drenando uma corrente eltrica mnima do sensor e proporcionando tempo
de resposta pequeno, de (2s). Acopladores ticos (Figura 24) tambm tm a funo de
bloquear eventuais picos de tenso que podem danificar circuitos sensveis como, por
exemplo, os circuitos de comando.

Figura 24 - Esquema eltrico interno do acoplador ptico (4N25) e pinagem




39

11. RESULTADOS

O software de configurao dos mdulos funcionou perfeitamente. Ao longo do
desenvolvimento, tanto o programa pricipal desenvolvido quanto as ferramentas propostas
mostraram-se teis e eficientes. O software tambm atendeu as expectetivas no que diz
respeito facilidade de uso. A Figura 25 mostra um computador com o programa de
configurao aberto.


Figura 25 - Computador com o Programa M. Config. aberto

A interface serial com o mdulo central, assim como as intefaces de rdio entre
central e perifricos tambm mostraram-se confiveis e estveis, superando as
expectativas. A Figura 26 mostra o Circuito do mdulo central montado em protoboard. E a
Figura 27 mostra o circuito do mdulo perifrico.



40


Figura 26 - Circuito do mdulo central montado em protoboard



Figura 27 - Circuito do mdulo perifrico montado em protoboard


41

Aps comprovado o funcionamento e a comunicao das partes, confeccionou-se
duas placas de madeira com exemplos de cargas (motores e lmpadas) instaladas, alm de
sensores de proximidade, movimento e fins de curso. Nesta tambm foi fixada uma placa
de circuito impresso com rels, os quais acionam o circuito de potncia (Figura 29). Tais
placas foram confeccionadas com cargas alimentadas em 110V (Figura 28) e 220V (Figura
30), a fim de exemplificar a versatilidade do projeto.


Figura 28 - Montagem das cargas e sensores




42


Figura 29 - Detalhe da placa de rels



Figura 30 - Montagem das cargas e sensores


43

12. CONCLUSES

A proposta deste trabalho teve, em muitas ocasies, de ser reestudada e rediscutida
a fim de se direcionar com clareza os rumos do projeto. Isto porque observou-se muitos
possveis problemas, ignorados no momento da idealizao do mesmo. A execuo do
projeto consistiu-se basicamente de duas etapas; a primeira de estudos sobre as
necessidades de um usurio comum e os produtos j existentes na rea de domtica, a
segunda sobre as especificaes tcnicas gerais do projeto. Posteriormente estudou-se em
detalhes o microcontrolador a ser utilizado, junto dos softwares de desenvolvimento.
Paralelamente a isto se deu incio s atividades prticas (montagem de prottipos dos
mdulos central e perifrico em protoboard). Durante as montagens foi preciso realizar
testes funcionais dos mdulos de rdio, dos CIs encoder / decoder, entre outras
singularidades, objetivando resolver passo a passo problemas de hardware limitantes e
algumas vezes at rever partes do projeto por conta disto.
Como etapa final, situaes diversas previstas para uma aplicao comum foram
simuladas com os mdulos prottipos. Nesta etapa foi possvel avaliar qualitativamente
todos os recursos oferecidos pelo sistema, e, apesar do desempenho satisfatrio, foram
criticados alguns pontos frgeis e pequenas debilidades, enquadradas para futuras
melhorias. Algumas delas como aprimoramentos do software de interface com o usurio,
maior robustez nas comunicaes entre mdulos e consideraes prevendo uso incorreto
ou mau uso valem ateno para aperfeioar a segurana e confiabilidade do sistema.
O intento dos integrantes deste trabalho foi de mostrar na prtica os assuntos
estudados durante o curso de graduao.
Dentro da idia proposta e tempo disponvel foram atingidos os objetivos esperados
e obtiveram-se resultados com indicativos promissores. Os experimentos prticos criaram
expectativas otimistas para a continuidade do projeto, com margem para muitos
aprimoramentos, no cabveis no escopo deste trabalho, mas perfeitamente factveis sem a
necessidade de demais recursos que os j utilizados at ento.

44




45

13. REFERNCIAS BIBLIOGRFICAS

FAIRCHILD. Fairchild Semiconductor Webpage. General Purpose 6-PIN Photo-
transistor Optocoupler. Disponvel em:
<http://www.fairchildsemi.com/ds/4N%2F4N25-M.pdf>. Acesso em: 22 set. 2009

MESSIAS, A. R. artigo: LPTWIRELESS - CONTROLANDO 8 DISPOSITIVOS VIA
RF (RR3 E RT4). Disponvel em:
<http://www.rogercom.com/pparalela/LptWireless.htm>. Acesso em: 15 ago. 2009

MICROCHIP. Microchip Website. PIC16F87X Data Sheet - 28/40-Pin 8-Bit CMOS
FLASH Microcontrollers. Disponvel em:
<http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf>. Acesso em:
21 mar. 2009.

ROBERTO, P. Comunicao Serial. Disponvel em:
<http://gerds.utp.br/roberto/roberto/4Bim/Serial.ppt>. Acesso em: 15 set. 2009.

SOUZA, J. D., LAVINIA, N. C. Conectando o PIC: Recursos Avanados. 2
a
Edio.
So Paulo: rica, 2003. 379p.

Telecontrolli. Telecontrolli Website. Radio Receiver - RR3-XXX - Super
Regenerative Radio Receiver With Laser Trimmed Inductor. Disponvel em:
<http://www.telecontrolli.com/pdf/receiver/rr3.pdf>. Acesso em: 12 set. 2009.

Telecontrolli. Telecontrolli Website. Radio Transmitter - RT4-XXX - Radio
Transmitter Module with SAW Resonator and External Antenna. Disponvel
em: <http://www.telecontrolli.com/pdf/transmitter/rt4.pdf>. Acesso em: 12 set.
2009.




46



47

14. ANEXOS
14.1. Anexo 1: Cdigo do programa do Mdulo Perifrico

/*----------------------------------------------------------------------------------------------------*/
/*-----------------------------PROGRAMA PARA MDULOS PERIFRICOS--------------------------------------*/
/*----------------------------------------------------------------------------------------------------*/
/*----------------- variveis-------------------------*/
unsigned short NIBBLE_LSB = 0b00000000; // Varivel para separar nibble menos significativo
unsigned short NIBBLE_MSB = 0b00000000; // Varivel para separar nibble mais significativo
unsigned short FILTRO_LSB = 0b00001111; // Varivel para fazer "AND" com byte a ser quebrado
unsigned short FILTRO_MSB = 0b11110000; // Varivel para fazer "AND" com byte a ser quebrado
unsigned short OPERACAO_OR = 0b01110000; // Definio da palavra para a funo lgica OR (OU)
unsigned short OPERACAO_AND = 0b00010000; // Definio da palavra para a funo lgica AND(E)
unsigned short OPERACAO_IGUAL = 0b01100000; // Definio da palavra para a funo IGUAL (=)
unsigned short ENDERECO_EEPROM [4][3]; // Endereo onde sero salvas as config na eeprom
unsigned short CONTA_NIBBLE = 1; // Conta nibbles recebidos pela Central (comea em 1!)
unsigned short CONTA_BYTE = 0; // Contador de bytes gravador por linha da matriz
unsigned short TAREFA = 0; // Contador para a linha onde ser gravado cada srie de 3 bytes recebido
unsigned short OPERACAO_DA_EEPROM = 0; // Operao recebida da Central e gravada na eeprom do mdulo
unsigned short SELECAO_IO_EEPROM = 0; // Byte indicativo das entradas e sadas selecionadas para atuar
unsigned short ESTADOS_IO_EEPROM = 0; // Byte indicativo dos estados para que as entradas atuem para cada
sada
unsigned short BYTE = 0; // Varivel para carregar dados gravados na EEPROM
unsigned short SELECAO_SAIDA = 0; // Guarda sada selecionada
unsigned short SELECAO_ENTRADA = 0; // Guarda entradas selecionadas
unsigned short ESTADO_SAIDA = 0; // Guarda estado da sada
unsigned short ESTADO_ENTRADA = 0; // Guarda estado(s) da(s) entrada(s)

/*-----------------------------------DECLARAO DE FUNES------------------------------------------------*/
void TESTE_SAIDA1 (void); // Funo para executar tarefas na sada 2 do portA
void TESTE_SAIDA2 (void); // Funo para executar tarefas na sada 2 do portA
void TESTE_SAIDA3 (void); // Funo para executar tarefas na sada 2 do portA
void TESTE_SAIDA4 (void); // Funo para executar tarefas na sada 2 do portA
/*----------------------------------------INTERRUPO-----------------------------------------------------*/
void interrupt (void) //
{ //
if (INTCON.INTF = 1) // Verifica se a interrupo externa (RB0) que foi chamada
{ //
if (CONTA_NIBBLE == 1) // Compara contador para verificar se o primeiro nibble a receber
{ //
if (TAREFA == 4) // Implica em fim do nmero de tarefas (4 no mx)
{ //--------------------------------------------------------------\
CONTA_NIBBLE = 1; // Reseta contador de nibbles recebidos |
TAREFA = 0; // Reseta contador de linhas para gravao na EEPROM |
goto FIM_GRAVACAO; // Vai para o fim da interrupo e depois volta para o "main" |
} //-------------------------------------------------------------/
NIBBLE_LSB = PORTB; // Pega dado do PortB
NIBBLE_LSB >> 1; // Rotaciona nibble de 1 posio para direita para compensar o RB0 usado p/ intrrp.
NIBBLE_LSB = NIBBLE_LSB & FILTRO_LSB; // Filtra dado considerando somente o nibble_lsb
PORTA = NIBBLE_LSB; // Reflete o nibble recebido para a Central
if (NIBBLE_LSB == 0b00001111) // Comparao para avaliar se a verificao de existncia deste mdulo
(00001111)
{ //--------------------------------------------------------------------------------\
PORTA = NIBBLE_LSB; // Reflete sinal para Central indicando presena no sistema (s para um feedback)
|
goto FIM_GRAVACAO; // Vai para fim da funo de interrupo e de l ento voltar para a funo "main"|
} //-------------------------------------------------------------------------------/
CONTA_NIBBLE = 0; // Este valor necessrio para mudar o contador para receber o nibble 2
} // ao final da rotina da interrupo
//
if (CONTA_NIBBLE == 2) // Compara contador para chacar se o segundo nibble a receber
{ //
NIBBLE_MSB = PORTB; // Pega dado do PortB
NIBBLE_MSB << 3; // Rotaciona nibble recebido para a esquerda, para virar msb
NIBBLE_MSB = NIBBLE_MSB & FILTRO_MSB; // Separa o nibble_msb do dado recebido no PortB
PORTA = NIBBLE_MSB; // Reflete nibble recebido para a Central
/*COLOCAR AQUI UM TEMPO PARA MANDAR PELO ENCODER E DEPOIS DESABILITAR O ENVIO PELA PORTA*/
BYTE = NIBBLE_MSB | NIBBLE_LSB; // Combina os dois nibbles recebidos na variavel "BYTE"
CONTA_NIBBLE = 1; // Rebobina contador de nibbles recebidos
CONTA_BYTE = CONTA_BYTE ++; // Incrementa contador de bytes
if (CONTA_BYTE == 1) // Rotina para gravar Byte2 na EEPROM
48

{ //--------------------------------------------------\
EEPROM_Write (ENDERECO_EEPROM [TAREFA][0], BYTE); // Escreve BYTE2 na eeprom |
Delay_ms (20); // Tempo necessrio para garantir escrita na EEPROM |
} //-------------------------------------------------/
if (CONTA_BYTE == 2) // Rotina para gravar Byte3 na EEPROM
{ //--------------------------------------------------\
EEPROM_Write (ENDERECO_EEPROM [TAREFA][1], BYTE); // Escreve BYTE3 na eeprom |
Delay_ms(20); // Tempo necessrio para garantir escrita na EEPROM |
} //-------------------------------------------------/
if (CONTA_BYTE == 3) // Rotina para gravar Byte4 na EEPROM
{ //--------------------------------------------------\
EEPROM_Write (ENDERECO_EEPROM [TAREFA][2], BYTE); // Escreve BYTE4 na eeprom |
Delay_ms(20); // Tempo necessrio para garantir escrita na EEPROM |
TAREFA = TAREFA ++; // Incrementa a posio p/ prxima linha da matriz |
CONTA_BYTE = 0; // |
} //-------------------------------------------------/
CONTA_NIBBLE = 1; // Rebobina o contador de nibbles
} //
} //
FIM_GRAVACAO: // Rotina para sair da interrupo quando receber
if (CONTA_NIBBLE = 0) // sinal de fim ou para carregar novo valor do conta
{ // dor de nibbles.
CONTA_NIBBLE = 2; //
} //
}
/*-------------------------------------*ROTINA PRINCIPAL*--------------------------------------------*/
void main (void) //
{ //
/*------------Configuraes iniciais----------*/
ADCON1 = 0x06; // Configura o PORTA como digital input
TRISA = 0b00111111; // Porta de sada para encoder, PORTA.F4 habilita envio no encoder
TRISB = 0b00011111; // Porta de entrada do decoder
TRISC = 0b11110000; // Porta de entrada e sada para perifricos
INTCON.GIE = 1; // Habilita interrupes globais
INTCON.PEIE = 1; // Habilita interrupes de perifricos
INTCON.INTE = 1; // Habilita a interrupo externa em RB0

PORTA = 0x00; // Zera PortA
PORTB = 0x00; // Zera PortB
PORTC = 0x00; // Zera PortC
/*---------------------------------------------------------------------------------------------------*/
INICIO: //
OPERACAO_DA_EEPROM = Eeprom_read (ENDERECO_EEPROM [TAREFA][1]); // L operao da EEPROM
Delay_ms(20); // Tempo para garantir leitura da EEPROM
//
SELECAO_IO_EEPROM = Eeprom_read (ENDERECO_EEPROM [TAREFA][0]); // Carrega Byte com selees de
entradas e sada
Delay_ms(20); // Tempo para garantir leitura da EEPROM
SELECAO_SAIDA = SELECAO_IO_EEPROM & FILTRO_LSB; // Carrega bits da seleo de sada - s 1
sada permitida!
SELECAO_ENTRADA = SELECAO_IO_EEPROM & FILTRO_MSB; // Carrega bits da seleo das entradas - 2
selees no mximo
//
ESTADOS_IO_EEPROM = Eeprom_read (ENDERECO_EEPROM [TAREFA][2]); // Carrega dado da EEPROM na
varivel
Delay_ms(20); // Tempo para garantir leitura da EEPROM
ESTADO_SAIDA = ESTADOS_IO_EEPROM & FILTRO_LSB; // Byte com estado da sada selecionada
ESTADO_ENTRADA = ESTADOS_IO_EEPROM & FILTRO_MSB; // Byte com estado(s) da(s) sada(s)
selecionada(s)

if (SELECAO_SAIDA == 0b00000001) // Verifica se a sada 1 foi selecionada
{ //
TESTE_SAIDA1 (); // Chamada para funo de operaes para a Tarefa relacionada a esta sada
} //
if (SELECAO_SAIDA == 0b00000010) // Verifica se a sada 2 foi selecionada
{ //
TESTE_SAIDA2 (); // Chamada para funo de operaes para a Tarefa relacionada a esta sada
} //
if (SELECAO_SAIDA == 0b00000100) // Verifica se a sada 3 foi selecionada
{ //
TESTE_SAIDA3 (); // Chamada para funo de operaes para a Tarefa relacionada a esta sada
} //
if (SELECAO_SAIDA == 0b00001000) // Verifica se a sada 4 foi selecionada
{ //
TESTE_SAIDA4 (); // Chamada para funo de operaes para a Tarefa relacionada a esta sada

49

} //
TAREFA = TAREFA ++; // Incrementa posio da EEPROM a ser lida
if (TAREFA == 4) // Verifica se as 4 tarefas j foram executadas
{ //
TAREFA = 0; // Reseta posio de memria para as tarefas
} //
goto INICIO; // FIM DA FUNO MAIN!
}
/*-----------------------------FUNES DE OPERAES--------------------------------------------------*/
void TESTE_SAIDA1 (void)
{
if (OPERACAO_DA_EEPROM == OPERACAO_IGUAL) // Operao de igual (=)
{
switch (SELECAO_ENTRADA)
{
case 0b00010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4) // Comparara entrada1 do PortC com Entrada configurada
PORTC.F0 = ESTADO_SAIDA.F0; // Seta estado escolhido da sada na sada 1
case 0b00100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5) // Comparara entrada2 do PortC com Entrada configurada
PORTC.F0 = ESTADO_SAIDA.F0; // Seta estado escolhido da sada na sada 1
case 0b01000000:
if (PORTC.F6 == ESTADO_ENTRADA.F6) // Comparara entrada3 do PortC com Entrada configurada
PORTC.F0 = ESTADO_SAIDA.F0; // Seta estado escolhido da sada na sada 1
case 0b10000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7) // Comparara entrada4 do PortC com Entrada configurada
PORTC.F0 = ESTADO_SAIDA.F0; // Seta estado escolhido da sada na sada 1
}
}
if (OPERACAO_DA_EEPROM == OPERACAO_AND) // Operao "E"
{
switch (SELECAO_ENTRADA)
{
case 0b00110000: // _______________________________________
if (PORTC.F4 == ESTADO_ENTRADA.F4 && PORTC.F5 == ESTADO_ENTRADA.F5) // /Compara valor das
portas selecionadas \
PORTC.F0 = ESTADO_SAIDA.F0; // |com valores setados nos estados das |
case 0b01010000: // |portas. Se coincidir para o caso, setar|
if (PORTC.F4 == ESTADO_ENTRADA.F4 && PORTC.F6 == ESTADO_ENTRADA.F6) // |a sada 1 do PortC
com o valor de estado|
PORTC.F0 = ESTADO_SAIDA.F0; // |configurado para tal. |
case 0b01100000: // \_______________________________________/
if (PORTC.F5 == ESTADO_ENTRADA.F5 && PORTC.F6 == ESTADO_ENTRADA.F6) //
PORTC.F0 = ESTADO_SAIDA.F0;
case 0b10010000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F0 = ESTADO_SAIDA.F0;
case 0b10100000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F0 = ESTADO_SAIDA.F0;
case 0b11000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F0 = ESTADO_SAIDA.F0;
}
}
if (OPERACAO_DA_EEPROM == OPERACAO_OR) // Operao "OU"
{
switch (SELECAO_ENTRADA)
{
case 0b00110000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 || PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F0 = ESTADO_SAIDA.F0;
case 0b01010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F0 = ESTADO_SAIDA.F0;
case 0b01100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F0 = ESTADO_SAIDA.F0;
case 0b10010000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F0 = ESTADO_SAIDA.F0;
case 0b10100000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F0 = ESTADO_SAIDA.F0;
case 0b11000000:
50

if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F0 = ESTADO_SAIDA.F0;
}
}
}
void TESTE_SAIDA2 (void)
{
if (OPERACAO_DA_EEPROM == OPERACAO_IGUAL) //operacao de igual (=)
{
switch (SELECAO_ENTRADA)
{
case 0b00010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b00100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b01000000:
if (PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b1000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7)
PORTC.F1 = ESTADO_SAIDA.F1;
}
}
if (OPERACAO_DA_EEPROM == OPERACAO_AND)
{
switch (SELECAO_ENTRADA)
{
case 0b00110000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 && PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b01010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b01100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b10010000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b10100000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b11000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F1 = ESTADO_SAIDA.F1;
}
}
if (OPERACAO_DA_EEPROM == OPERACAO_OR)
{
switch (SELECAO_ENTRADA)
{
case 0b00110000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 || PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b01010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b01100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b10010000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b10100000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F1 = ESTADO_SAIDA.F1;
case 0b11000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F1 = ESTADO_SAIDA.F1;
}
}
}
void TESTE_SAIDA3 (void)

51

{
if (OPERACAO_DA_EEPROM == OPERACAO_IGUAL) //operacao de igual (=)
{
switch (SELECAO_ENTRADA)
{
case 0b00010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b00100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b0100000:
if (PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b10000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7)
PORTC.F2 = ESTADO_SAIDA.F2;
}
}
if (OPERACAO_DA_EEPROM == OPERACAO_AND)
{
switch (SELECAO_ENTRADA)
{
case 0b00110000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 && PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b01010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b01100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b10010000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b10100000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b11000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F2 = ESTADO_SAIDA.F2;
}
}
if (OPERACAO_DA_EEPROM == OPERACAO_OR)
{
switch (SELECAO_ENTRADA)
{
case 0b00110000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 || PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b01010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b01100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b10010000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b10100000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F2 = ESTADO_SAIDA.F2;
case 0b11000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F2 = ESTADO_SAIDA.F2;
}
}
}
void TESTE_SAIDA4(void)
{
if (OPERACAO_DA_EEPROM == OPERACAO_IGUAL) //operacao de igual (=)
{
switch (SELECAO_ENTRADA)
{
case 0b00010000:
52

if (PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b00100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b01000000:
if (PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b10000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7)
PORTC.F3 = ESTADO_SAIDA.F3;
}
}
if (OPERACAO_DA_EEPROM == OPERACAO_AND)
{
switch (SELECAO_ENTRADA)
{
case 0b00110000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 && PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b01010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b01100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b10010000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b10100000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b11000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 && PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F3 = ESTADO_SAIDA.F3;
}
}
if (OPERACAO_DA_EEPROM == OPERACAO_OR)
{
switch (SELECAO_ENTRADA)
{
case 0b00110000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 || PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b01010000:
if (PORTC.F4 == ESTADO_ENTRADA.F4 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b01100000:
if (PORTC.F5 == ESTADO_ENTRADA.F5 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b10010000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F4 == ESTADO_ENTRADA.F4)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b10100000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F5 == ESTADO_ENTRADA.F5)
PORTC.F3 = ESTADO_SAIDA.F3;
case 0b11000000:
if (PORTC.F7 == ESTADO_ENTRADA.F7 || PORTC.F6 == ESTADO_ENTRADA.F6)
PORTC.F3 = ESTADO_SAIDA.F3;
}
}
}









14.2. Anexo 4: Esquema

Anexo 4: Esquema eltrico do mdulo central
53
54
14.3. Anexo 5: Esquema eltrico do mdulo perifrico


Anexo 5: Esquema eltrico do mdulo perifrico

Você também pode gostar