47
Universidade Federal de Pernambuco Departamento de Eletrˆ onica e Sistemas Reservat´ orio Microcontrolado Implementa¸ ao com PIC16F877 Henrique M¨ uller Vasconcelos Tallita Campˆ elo Sobral Rafaelli Neves de Alencar Vidal Orientador: Prof. Mauro Rodrigues dos Santos Relat´ orio final, referente ` as atividades realizadas na disci- plina EL361 - Trabalho de Gradua¸ ao 1, apresentado ao Curso de Gradua¸ ao em Engenharia El´ etrica modalidade Eletrˆ onica da Universidade Federal de Pernambuco. DES - UFPE Mar¸ co de 2007

Reservatório Microcontrolado

Embed Size (px)

DESCRIPTION

Trabalho de graduação em Engenharia Eletrônica, UFPE.

Citation preview

Page 1: Reservatório Microcontrolado

Universidade Federal de Pernambuco

Departamento de Eletronica e Sistemas

Reservatorio Microcontrolado

Implementacao com PIC16F877

Henrique Muller VasconcelosTallita Campelo Sobral

Rafaelli Neves de Alencar Vidal

Orientador:

Prof. Mauro Rodrigues dos Santos

Relatorio final, referente as atividades realizadas na disci-plina EL361 - Trabalho de Graduacao 1, apresentado aoCurso de Graduacao em Engenharia Eletrica modalidadeEletronica da Universidade Federal de Pernambuco.

DES - UFPEMarco de 2007

Page 2: Reservatório Microcontrolado

Conteudo

1 Introducao 51.1 Motivacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Projeto da Interface Grafica 62.1 Software de Interface Grafica e Linguagem de Programacao . . . . . . 62.2 Blocos da interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Projeto do Microcontrolador 83.1 O Microcontrolador PIC16F877 . . . . . . . . . . . . . . . . . . . . . 83.2 Blocos do Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.2.1 O sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.2.2 Digitalizacao do nıvel . . . . . . . . . . . . . . . . . . . . . . . 103.2.3 Comparacao dos nıveis . . . . . . . . . . . . . . . . . . . . . . 103.2.4 Bloco de decisao . . . . . . . . . . . . . . . . . . . . . . . . . 113.2.5 Troca de dados serialmente com o PC . . . . . . . . . . . . . . 11

3.3 Registros especiais do PIC . . . . . . . . . . . . . . . . . . . . . . . . 123.3.1 Entradas e saıdas . . . . . . . . . . . . . . . . . . . . . . . . . 123.3.2 Conversao AD . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3.3 Comunicacao serial . . . . . . . . . . . . . . . . . . . . . . . . 13

3.4 Lista de material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4 Sistema de Potencia 164.1 Acionamento da Bomba . . . . . . . . . . . . . . . . . . . . . . . . . 16

5 Montagem Fısica do Projeto 185.1 Montagem do cabo de Comunicacao Serial . . . . . . . . . . . . . . . 185.2 Layout dos PCBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

5.2.1 Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195.2.2 Potencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5.3 Confeccao da Placa de Circuito Impresso . . . . . . . . . . . . . . . . 215.4 Montagem do Sensor de Nıvel e Sistema Fısico . . . . . . . . . . . . . 265.5 Testes Experimentais . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

6 Conclusao 29

2

Page 3: Reservatório Microcontrolado

A Tabelas para configuracao dos registros especiais do PIC16F877 30

B Codigo Fonte 33B.1 Programacao do PIC16F877 em ASSEMBLY . . . . . . . . . . . . . . 33B.2 Programacao da interface com o Borland C++ . . . . . . . . . . . . . 39

B.2.1 controle.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39B.2.2 controle.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

3

Page 4: Reservatório Microcontrolado

Lista de Figuras

3.1 Esquema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.2 Botoes LIGA e MANUAL . . . . . . . . . . . . . . . . . . . . . . . . 153.3 Botao RESET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4 Tensoes de referencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.1 Esquematico do sistema de potencia . . . . . . . . . . . . . . . . . . . 16

5.1 Layout do circuito impresso do controlador . . . . . . . . . . . . . . . 195.2 Layout do circuito impresso do acionamento da bomba . . . . . . . . 205.3 Circuito do controlador de nıvel de agua montado no protoboard. . . 225.4 Desenho do circuito desenhado em computador impresso em papel

gloss. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225.5 Papel com o desenho do circuito impresso e placa de fenolite. . . . . . 235.6 Prensa termica utilizada para transferir o desenho impresso no papel

para a placa de fenolite. . . . . . . . . . . . . . . . . . . . . . . . . . 235.7 Conjunto de placa e papel na agua para esfriar. . . . . . . . . . . . . 245.8 Placa de fenolite apos a transferencia do desenho. . . . . . . . . . . . 245.9 Mergulhando a placa na solucao de percloreto de ferro. . . . . . . . . 255.10 Placa de fenolite sendo corroıda por percloreto de ferro. . . . . . . . . 255.11 Placa depois da lavagem. . . . . . . . . . . . . . . . . . . . . . . . . . 265.12 Sistema fısico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.13 Aquario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.14 Bloco Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.15 Microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

A.1 Registro ADCON0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30A.2 Registro ADCON1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31A.3 Registro TXSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31A.4 Registro RCSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32A.5 Registro SPBRG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4

Page 5: Reservatório Microcontrolado

Capıtulo 1

Introducao

O uso de uma tecnologia reprogramavel, como nos microcontroladores, permitemodificacoes e melhorias no projeto sem modificar o sistema. Dessa forma, a fase deprojeto e reduzida e barateada e a confiabilidade aumenta, pois estamos usando umamenor quantidade de CIs. O conceito de microcontrolador se espalhou rapidamentee hoje em dia existe uma grande diversidade de produtos para solucionar os maisdiferentes problemas de controle.

De uma forma geral neste projeto, o PIC controlara o fluxo de entrada do re-servatorio de acordo com os dados recebidos pelo sistema hidraulico, sendo estecomposto por um sensor de nıvel e pelo proprio reservatorio.

1.1 Motivacao

A motivacao deste trabalho esta em implementar a tecnologia dos microcontro-ladores em um problema pratico utilizando recursos do PIC, de forma a comple-mentar os conhecimentos adquiridos ao longo do curso de graduacao em EngenhariaEletronica. O projeto sera concluıdo com a montagem fısica do sistema, chegandoao produto final.

1.2 Objetivos

Este trabalho de graduacao visa projetar e montar um controlador de nıvel deagua de um reservatorio utilizando o PIC16F877 que tera uma comunicacao bilateralcom um computador atraves da porta serial. Desta forma, pelo computador, ousuario estara apto a fornecer ao controlador configuracoes relativas ao nıvel deagua e coletar dados obtidos pelo mesmo.

5

Page 6: Reservatório Microcontrolado

Capıtulo 2

Projeto da Interface Grafica

Por meio da interface provida pelo computador, o usuario deve ser capaz dese comunicar de forma simples com o dispositivo de hardware. Os tipos de dadosenviados (PC → PIC) envolve informar o nıvel em percentual da altura do reser-vatorio e requisicao de nıvel. Entre os dados recebidos (PIC → PC), contera apenasinformacoes do nıvel do reservatorio.

Como informacao grafica dos dados, a interface contara com uma animacao doreservatorio variando o nıvel a partir dos dados recebidos pelo PIC. E importanteressaltar que e apenas o PIC realiza o acionamento ou nao da bomba.

2.1 Software de Interface Grafica e Linguagem de

Programacao

Utilizando o software Borland C++ Builder, podemos criar a interface com oauxılio de diversas ferramentas num ambiente grafico. E o mesmo ambiente doDelphi e muito parecido com o Visual BASIC, inclusive na forma de construcaografica do aplicativo.

O Borland C++ Builder e um ambiente de desenvolvimento de aplicacoes, orien-tado a objeto, que permite desenvolver sistemas para alguns sistemas operacionais,por enquanto somente da famılia Windows da Microsoft. Para se criar aplicativoscomeca-se com a montagem de componentes em janelas, como se fosse um programagrafico, o usuario tambem pode utilizar componentes desenvolvidos por terceiros oucriar seus proprios componentes.

2.2 Blocos da interface

A interface grafica do projeto e composta por quatro botoes, dois campos paranumeros e um display na forma de ”progress bar”, que mostra o nıvel do reservatorio.

O Botao 1 (Abrir Porta) abre a porta serial que foi selecionada. Inicialmenteverifica-se qual porta foi selecionada, apos esta verificacao chama-se uma funcao que

6

Page 7: Reservatório Microcontrolado

tem como argumento de entrada a porta que sera aberta e como argumento de saıdauma variavel booleana, que indica se a porta esta aberta (“true”) ou nao (“false”).Se a variavel de saıda da funcao for “false” e por que ocorreu algum erro, desta formao erro e detalhado, podendo aparecer duas mensagens de erro diferentes: a portaselecionada nao existe ou a porta selecionada esta em uso. Se nao ocorreu erro, ouseja, a saıda da funcao e “true”, a funcao ConfiguraUART e chamada. Esta funcaoconfigura a porta serial que sera utilizada. Uma mensagem e enviada para o usuariode que a porta selecionada ja esta aberta. O botao 1 e desabilitado, impedindo queusuario tente abrir a porta novamente uma vez que ela ja esteja aberta.

O Botao 2 (Fechar Porta) e responsavel por fechar a porta selecionada. Primei-ramente, verifica-se a porta selecionada, se estiver aberta, ela e fechada atraves dafuncao CloseHandle. O Botao 1 e reabilitado, botao responsavel por abrir portaserial, o botao 2 e desabilitado, e a mensagem que a porta selecionada esta fechadae enviada ao usuario.

O Botao 3 (Enviar) e responsavel por enviar dados para a porta serial. O objetivoe enviar ao PIC a altura da agua no reservatorio que se deseja ter. Para que isto sejaentendido pelo PIC, devemos enviar a ele a relacao do sensor (potenciometro) e naoda porcentagem de agua no reservatorio. Como o usuario entra com a porcentagemdesejada, uma funcao de conversao transforma a porcentagem (de 0 a 100) em umbyte referente ao resultado da conversao A/D do PIC. O PIC precisa saber que odado que sera recebido por ele e altura desejada, entao, e enviado ao PIC o comandode envio de altura (caracter “i”). Um tempo de delay e dado para que o PIC possareceber todos os dados corretamente. O proximo dado e o valor de saıda da funcaoconversao (“rc1”). O mesmo tempo de delay e dado. No caso de nao entar enviandoum valor novo para o nıvel, o PC envia o comando de requisicao de nıvel (caracter”a”), e espera a resposta do PIC. Esta resposta e convertida pela funcao inversada anterior, que nos fornece um valor de 0 a 100, que e utilizada para atualizar o”progress bar”. Depois disso, o Timer 1 e habilitado para que o PC fique executandoesse loop.

O Botao 4 (Parar) e responsavel por desabilitar a transmissao automatica dedados PIC-PC.

Os detalhes da funcao de conversao podem ser estudados na secao de com-paracao dos nıveis do capıtulo 3. O codigo fonte da programacao da interface graficaencontra-se disponıvel em anexo no apendice B.

7

Page 8: Reservatório Microcontrolado

Capıtulo 3

Projeto do Microcontrolador

3.1 O Microcontrolador PIC16F877

A ideia basica do microcontrolador e construir um processador com uma grandequantidade de recursos voltados para o controle. Com isso, o sistema fica muito maissimples e emprega poucos componentes. Dessa forma, a fase de projeto e reduzida ebarateada e a confiabilidade aumenta, pois estamos usando uma menor quantidadede CIs. Como nao sera feito processamento sofisticado, sua CPU nao precisa deter uma grande capacidade de processamento, mas deve oferecer um conjunto deinstrucoes simples, que gere programas pequenos e de rapida execucao.

O PIC 16F877 e um microcontrolador da famılia de 8 bits e nucleo de 14 bitsfabricado pela Microchip Technology. Possui memoria flash de programa com 8192palavras de 14 bits, memoria RAM com 368 bytes e memoria eeprom com 256 bytes.Sua frequencia de operacao (clock) vai ate 20MHz, resultando em uma velocidadede processamento de 5 MIPS. Seu conjunto de instrucoes RISC se compoe de 35instrucoes. Pode funcionar com alimentacao de 2V a 5,5V. Sua pinagem DIP tem 40pinos. PICs com memoria FLASH sao altamente flexıveis na fase de desenvolvimentopois permitem uma rapida alteracao do codigo de programa.

Faremos uso para o projeto das funcoes:

• Conversor analogico digital

• Periferico de comunicacao serial

• Portas de entrada e saıda de dados

A configuracao destas funcoes e feita atraves de registros especiais do PIC16F877e sera detalhada mais adiante.

3.2 Blocos do Hardware

Para atender as necessidades basicas de um controlador de nıvel de reservatorio,estabelecemos que este bloco deveria realizar as seguintes tarefas:

8

Page 9: Reservatório Microcontrolado

• Ler informacao de nıvel enviado pelo sensor

• Realizar a conversao A/D e armazenar o nıvel lido

• Comparar o nıvel lido com o ”setado”pelo usuario

• Decidir habilitar ou nao a bomba d’agua

• Realizar trocas de dados serialmente com o PC

3.2.1 O sensor

A escolha do sensor de nıvel e um dos pontos mais crıticos de um controlador denıvel de um reservatorio, pois sua informacao estabelece como e quando o controleda bomba atuara e o quanto de exatidao teremos da leitura real. Em virtude damontagem fısica simplificada do nosso projeto, optamos pelo esquema abaixo.

Figura 3.1: Esquema

O uso de uma resistencia variavel com o giro de um potenciometro gera umsinal de tensao variavel de acordo com o angulo compreendido entre a haste decomprimento fixo e o eixo vertical como mostrado na figura.

Desta forma, o arranjo fısico deve posibilitar que a haste do sensor percorratoda extensao de nıveis do reservatorio, proporcionando os angulos φmax e φmin,relacionados respectivamente por, nıvel maximo e mınimo a serem setados pelousuario.

9

Page 10: Reservatório Microcontrolado

3.2.2 Digitalizacao do nıvel

Como o sinal do sensor e representado por um simples divisor de tensao, o nıvelque faz o maximo angulo φmax deve ser convertido para o valor 255 (11111111) naconversao A/D, assim como o nıvel mınimo para o valor 0 (00000000). Porem o girodo potenciometro nao percorre toda a sua extensao um vez que φmax − φmin nuncaexcedera 90o (na verdade, nem chegara a 90o).

O PIC16F877 permite que voce estabeleca as tensoes de referencia maxima emınima externamente, criando o intervalo de tensao que sera digitalizado. Issosignifica que pode ser feito um ajuste durante a instalacao do equipamento ao re-servatorio medindo as tensoes de saıda do sensor e fixando a maxima amplitude denıveis para o dado reservatorio.

3.2.3 Comparacao dos nıveis

O arranjo proposto para o sensor de nıvel ainda e caracterizado pela relacaonao-linear entre o nıvel de tensao convertido pelo microcontrolador e a altura realdo reservatorio.

lmax = 1− cosφmax

lmin = 1− cosφmin

hmax = lmax − lmin = cosφmin − cosφmax

O resultado da conversao A/D (RC) e um numero inteiro entre 0 e 255, portanto,o angulo φmax − φmin e dividido em 255 partes iguais (potenciometro linear). Destaforma, seja:

n = φmax − φmin

δ =φmax − φmin

255

Logo:

h = 1− cos(φmin + RC · δ

)−

(1− cosφmin

)e

h% =h

hmax

· 100 =cosφmin − cos(φmin + RC · δ)

φmin − φmax

· 100

Assim, o resulatdo da conversao e entendido como nıvel percentual do reser-vatorio pela funcao acima. Porem, este calculo e deixado para fer feito na interfacegrafica com o usuario, onde se utiliza uma linguagem de programacao de alto nıvel

10

Page 11: Reservatório Microcontrolado

(C++) em contraponto a linguagem por nos adotada para o PIC16F877 (ASSEM-BLY). Finalmente, quando o usuario insere o nıvel percentual do reservatorio, eaplicada a seguinte formula:

RC =1

δ·[arccos

(cosφmin −

h%

100(cosφmin − cosφmax)

)− φmin

]que e a funcao inversa da anterior, e o valor obtido e enviado serialmente em binariopadrao para o microcontrolador que pode comparar o nıvel setado pelo usuario di-retamente com o nıvel digitalizado da entrada analogica referente ao sensor. Oresultado desta comparacao indica o acionamento ou nao da bomba de entrada doreservatorio. Deste modo, os angulos φmax e φmin devem ser medidos experimental-mente e informados na interface para a realizacao dos calculos.

3.2.4 Bloco de decisao

Para este tipo de controle, onde apenas estamos habilitando e desabilitando umabomba de aquario simples, basta fazer a comparacao direta do nıvel setado pelousuario e o nıvel atual medido pelo sensor. Mas basear-se apenas nisso pode serperigoso na medida em que os nıveis vao se igualando. Pequenas variacoes em tornoda medida pode ligar e desligar repetidas vezes a bomba causando um transitorioque em ulguns casos podem danificar o equipamento. Este problema e ainda maisfrequente em sistemas dinamicos como o que pretendemos criar.

A saıda para esta situacao pode ser implementada facilmente criando-se um nıvelligeiramente inferior ao realmente setado pelo usuario, de modo que a bomba so ere-ligada quando o nıvel esta abaixo do nıvel inferior e desligada somente quando onıvel ultrapassa o limite superior, que e de fato o setado pelo usuario. A separacaodos nıveis deve ser suficiente para evitar que as vibracoes e oscilacoes no nıvel d’aguanao liguem e religuem a bomba sucessivamente.

Um algorıtmo para implementar esta decisao pode ser visto abaixo.

COMPARA COM NIVEL INFERIOR

SE MENOR: LIGA A BOMBA

TESTA SE BOMBA ESTA LIGADA

SE SIM: COMPARA COM NIVEL SUPERIOR

SE MAIOR OU IGUAL: DESLIGA A BOMBA

3.2.5 Troca de dados serialmente com o PC

A troca de informacao entre a interface grafica e os dispositivos de hardwareobedece a um protocolo pre-definido. A comunicacao e sempre requisitada pelainterface que aguarda ate que o microcontrolador envie a resposta. O protocoloescolhido para o projeto foi a USART em modo assıncrono. Neste modo, o trans-missor e o receptor utilizam o mesmo formato de dados e concordam com uma taxa

11

Page 12: Reservatório Microcontrolado

de transmissao (Baud Rate) em comum. Durante a comunicacao, tem-se um startbit, oito bits de dados e por fim um stop bit.

Para ocorrer a troca de informacao, a interface envia dois bytes consecutivosmas separados por um intervalo de tempo curto. Exitem dois tipos de comandoque a interface estabelece. Mandando o caracter ASCII ’i’ (01101001), o microcon-trolador indentifica que o segundo byte e referente nıvel setado pelo usuario (setuplevel) e mandando o caracter ASCII ’a’ (01100001), o microcontrolador identifica arequisicao de dados (asking level) e retorna serialmente o nıvel atual do reservatorio.

3.3 Registros especiais do PIC

3.3.1 Entradas e saıdas

A configuracao dos registros especias PORT foi feita da forma mostrada abaixo.Os ∗ indicam que nao importa o valor do referido bit porque o mesmo nao esta sendousado ou porque nao existe funcao para ele.

PORTA∗ ∗ 1 ∗ 1 1 1 1

RA0 (pino 2) Entrada analogica canal 1RA1 (pino 3) Entrada analogica canal 2RA2 (pino 4) VREF− para conversao ADRA3 (pino 5) VREF+ para conversao ADRA5 (pino 7) Ligar

PORTB0 ∗ 0 ∗ ∗ ∗ ∗ ∗

RB5 (pino 40) Led Power OnRB7 (pino 38) Led PIC Comunicando

PORTC1 0 0 ∗ 0 ∗ ∗ 1

RC0 (pino 15) Modo ManualRC3 (pino 18) VCC auxiliarRC5 (pino 24) Enable BombaRC6 (pino 25) TX OutputRC7 (pino 26) RX Input

PORTD∗ ∗ ∗ ∗ ∗ ∗ 0 ∗

12

Page 13: Reservatório Microcontrolado

RD1 (pino 20) Indicador Modo Manual Ativo

3.3.2 Conversao AD

A configuracao da conversao AD no PIC se faz pelos dois registros abaixo.

ADCON01 0 0 0 0 0 ∗ 1

Configuramos o relogio do conversor com frequencia F = FOSC

32, usaremos o canal

0 (RA0/AN0) inicialmente e o canal 1 (RA1/AN1) mudando o bit 3 para 1 duranteo programa. Para iniciar uma conversao A/D, setamos o bit 2 de ADCON0. Omesmo bit volta pra zero quando a conversao e finalizada. O bit 0 liga o modulo deconversao A/D.

ADCON10 ∗ ∗ ∗ 1 1 0 1

O resultado da conversao encontra-se em ADRESH e outros dois bits menossignificantes em ADRESL. Durante o programa somente consideramos o registroADRESH. Os pinos de RA2 e RA3 estao habilitados para receber VREF− e VREF+,respectivamente. E RA0 e RA1 sao as duas entradas analogicas que podem serusadas pelo modulo conversor.

3.3.3 Comunicacao serial

A transmitissao dados serialmente pelo PIC se faz configurando os tres registrosabaixo.

TXSTA∗ 0 1 0 ∗ 1 0 0

Configuramos transmissao de 8 bits de dados usando USART em modo assıncrono,high speed Baud Rate. O bit 1 indica se o registro de deslocamento da transmissaoesta vazio (1) ou se ainda esta cheio (0). Ou seja, basta testar este bit para saberse podemos carregar o buffer.

RCSTA1 0 ∗ 1 0 0 0 0

O bit 7 habilita a porta serial do PIC. Configuramos a recepcao de 8 bits dedados, recepcao contınua, modo de enderecamento desabilitado.

SPBRG0 0 0 1 1 0 0 1

13

Page 14: Reservatório Microcontrolado

Calculo do Baud Rate:

BaudRate =FOSC

16(X + 1)

Escolhemos:Baud Rate = 9600 bpsFOSC = 4MHzLogo:

X =4 · 106

16 · 9600− 1

X = 25

Portanto, carregando SPBRG com 25 teremos ransmissao numa taxa de 9600bps.

As tabelas de configuracao dos registros especiais do PIC para este projetoencontra-se no apendice A.

3.4 Lista de material

Lista de material e componentes

Descricao Especificacao Quant

Microcontrolador PIC16F877 1Driver/Receiver MAX232 1

Regulador de tensao 7805 1Cristal 4MHz 1

Diodo Zener 2.7V 1Diodo Zener 4.7V 1

Resistor 1kΩ 4Resistor 1.2kΩ 2Resistor 1.8kΩ 2Resistor 6.8kΩ 4

Capacitor eletrolıtico 10µF/16V 4Capacitor eletrolıtico 1µF/16V 3Capacitor eletrolıtico 4.7µF/16V 1Capacitor poliester 0.1µF 1Capacitor poliester 47nF 1Botao de pressao Single Pole 3

Trimpot 10kΩ 1Led Qualquer cor 4

Soquete 3 Conexoes para fios 2Caixa 19 x 11 x 5 cm 1

Abaixo sao mostrados os esquematicos para ligacoes de botoes e as tensoes dereferencia.

14

Page 15: Reservatório Microcontrolado

Figura 3.2: Botoes LIGA e MANUAL

Figura 3.3: Botao RESET

Figura 3.4: Tensoes de referencia

15

Page 16: Reservatório Microcontrolado

Capıtulo 4

Sistema de Potencia

Neste sistema, temos o poder de controlar o fluxo de entrada do reservatorioacionando uma bomba. Num primeiro momento, seria interessante o controle dapotencia da bomba e, por consequencia, o fluxo. Porem, isto envolveria um estudodetalhado da bomba em questao, caracterizando seu comportamento sob diferentesamplitudes e frequencias da alimentacao. Somente apos este estudo, poderıamosindicar que tipo de conversor de potencia deverıamos implementar.

Em nosso trabalho, apenas nos concentramos em ligar e desligar a bomba. Umsinal de controle (enable) e gerado pelo microcontrolador que deve ser ligado aosistema de potencia.

4.1 Acionamento da Bomba

Figura 4.1: Esquematico do sistema de potencia

16

Page 17: Reservatório Microcontrolado

Utilizando um rele controlado pelo PIC, faremos o acionamento da bomba. Ocircuito tambem e responsavel pela alimentacao da placa do microcontrolador com9V, obviamente, este nıvel e baixado para 5V para alimentar os circuitos digitais.

A lista dos componentes usados nesta parte sao listados abaixo:

Lista de componentes

Descricao Especificacao Quant

Capacitor eletrolıtico 1000µF 1Capacitor poliester 33nF 1

Resistor 4K7 1Diodo 1N4001 5

Transistor BC547 1Regulador de tensao 7809 1

SPDT Rele 5A/250Vac 1

17

Page 18: Reservatório Microcontrolado

Capıtulo 5

Montagem Fısica do Projeto

A montagem fısica do projeto para um controlador de nıvel de agua foi, primeira-mente, montada sobre um protoboard onde seria facil modificar algum componentea medida que os testes fossem feitos e que se tornasse necessario esta mudanca.Quando o circuito montado sobre o protoboard estava mostrando os resultados es-perados, so entao o circuito foi montado sobre uma placa de circuito impresso.

Ambos os circuitos, no protoboad e na placa de circuito impresso, foram tes-tados juntamente com o programa feito no computador para se comunicar com ousuario. Desta forma, um cabo para viabilizar a comunicacao serial entre o PIC e ocomputador foi montado.

Um sistema mecanico tambem foi montado com o objetivo de relacionar o nıvel deagua num reservatorio com um sinal de entrada no PIC, este sinal e posteriormenteenviado ao computador para ser processado. Todos os circuitos que foram citadosanteriormente sao descritos com detalhes nesta secao.

5.1 Montagem do cabo de Comunicacao Serial

A comunicacao entre o dispositivo de hardware e o PC utiliza um protocolo decomunicacao no qual faz-se necessario duas vias de dados (Rx e Tx) e outra detensao referencial (terra). O cabo acessa a porta serial DB-9 do PC fazendo uso deapenas 3 pinos. O pino 2 do DB-9 do PC e o TX do computador, enquanto que opino 3 e o RX. E pelo TX que ele envia dados e pelo RX ele os recebe. O pino 5 eo pino de referencia. Os nıveis de tensao usados pela porta serial sao padronizadosem 12v em relacao ao pino de referencia. Como o microcontrolador opera com sinaisde ate 5v, esses nıveis de tensao precisam ser convertidos no caminho entre o PICe o PC. O uso do chip MAX232 faz-se necessario por ser um driver/receiver queconverte nıveis TTL/CMOS em nıveis IA/EIA-232-F e vice-versa. O MAX232 estaincluso na placa do circuito com o PIC, restando apenas a confeccao do cabo com aconeccao dos pinos apropriados.

Usamos dois conectores DB-9, um macho e outro femea, um cabo de 1,5 metro decomprimento com pelo menos tres fios. Soldamos um fio ligando os pinos 2 de cadaDB-9, outro fio para os pinos 3 e, por fim, os pinos 5 com o terceiro fio. Para testar

18

Page 19: Reservatório Microcontrolado

se o cabo esta corretamente soldado, fizemos uso de um pequeno software chamadorcomserial, cedido no site rogercom.com. Conectando o cabo numa porta serial doPC e jumpeando os pinos 2 e 3, podemos enviar dados e conferir o recebimentodos mesmos pela interface do rcomserial. Uma vez estabelecida a transmissao e arecepcao dos dados, o cabo esta pronto para ser usado na comunicacao serial entreo PC e o PIC.

5.2 Layout dos PCBs

O primeiro passo para a concepcao fısica do nosso dispositivo de hardware edesenhar as trilhas para a placa de circuito impresso. E de fundamental importanciaa utilizacao de softwares para design de PCBs. Existem bibliotecas com os maisvariados componentes usados em eletronica com suas pinagens e tamanhos padraopara facilitar o desenho. Tambem e fundamental criar um arquivo que pode serusado inumeras vezes para reproduzir a fabricacao da placa.

Para o design dos layouts escolhemos o Protel DXP.

5.2.1 Controlador

Figura 5.1: Layout do circuito impresso do controlador

Para contrucao do layout da placa do controlador, usamos as medidas da tabelaabaixo.

19

Page 20: Reservatório Microcontrolado

Medidas para o CI

Hole size 0.9mmX - size 2mmY - size 2mmShape Round

Medidas para os demais componentes

Hole size 0.8mmDiameter 2mm

Lines width 1mm

Medidas para os soquetes

Hole size 0.8mmDiameter 2.4mm

Medidas para o conector de fonte

Hole size 0.8mmX - size 3mmY - size 2mmShape Rectangle

5.2.2 Potencia

Figura 5.2: Layout do circuito impresso do acionamento da bomba

20

Page 21: Reservatório Microcontrolado

Medidas para os componentes

Hole size 0.8mmX - size 2.4mmY - size 2.4mmShape Round

Medidas para as trilhas

Lines width 1mm

Medidas para solda dos fios

Hole size 0.8mmX - size 4mmY - size 5mmShape Rectangle

5.3 Confeccao da Placa de Circuito Impresso

A placa de circuito impresso foi feita em varias etapas. Desde seu desenho, feitoem software, ate a soldagem de seus componentes na placa. Todas estas etapassao detalhadamente explicadas na ordem cronologica em que foram feitas, e fotosexplicativas foram tiradas de todas essas etapas para que pudesse ser mais facilmentevisualizado como e o processo de confeccao de um circuito em placa impressa.

1. O protoboard e uma ferramenta muito util quando queremos montar um cir-cuito de teste. O circuito pode ser facilmente modificado ate que possamosobter o resultado esperado. Por este motivo, o circuito do controlador de nıvelde agua foi inicialmente montado num protoboard, pois as alteracoes que ocor-reram durante o desenvolvimento do projeto podiam ser facilmente obtidas,seja por pequenas modificacoes que foram feitas nos recursos do controlador,ou pela mudanca de parametros que pediam modificacoes de componentes.

2. O circuito a ser montado foi desenhado em um software direcionado paraimpressao de circuito em placa, no nosso caso, o software utilizado foi o Protel.A placa utilizada para a montagem do circuito e uma placa de fenolite.

3. O desenho feito no Protel foi impresso em papel gloss em impressora a laserpara que a tinta da impressora fosse, posteriormente, transferida para a placa.O papel gloss foi utilizado porque a tinta e mais facilmente transferida paraa placa depois do aquecimento em comparacao com a folha de transparenciapara retroprojetores que tambem e comumente utilizada para este tipo deprocedimento.

4. O papel gloss impresso e entao colocado sobre a placa o desenho virado para aparte condutora. A placa deve ser previamente ariada com palha de aco pararemover oxidacoes e gorduras que possam dificultar a passagem da tinta paraa mesma ou prejudicar a corrosao. Vedamos as extremidades do papel e da

21

Page 22: Reservatório Microcontrolado

Figura 5.3: Circuito do controlador de nıvel de agua montado no protoboard.

Figura 5.4: Desenho do circuito desenhado em computador impresso em papel gloss.

22

Page 23: Reservatório Microcontrolado

placa com fita adesiva para que, numa etapa posterior, nao entre agua entrea placa e o papel, borrando, assim, o desenho.

Figura 5.5: Papel com o desenho do circuito impresso e placa de fenolite.

5. O conjunto da placa e do papel e entao colocado num equipamento que funci-ona como uma prensa, mas as chapas, superior e inferior, aquecem, e a medidasque esquentam e desenho que estava no papel gloss vai sendo transferido paraa placa por contato. A placa e o papel ficam em contato dentro deste equipa-mento por cerca de 1 minuto e 50 segundos.

Figura 5.6: Prensa termica utilizada para transferir o desenho impresso no papelpara a placa de fenolite.

6. Apos o tempo descrito anteriormente, a placa e o papel sao colocados em um

23

Page 24: Reservatório Microcontrolado

recipiente com agua para que a placa possa esfriar. Eles ficam na agua porcerca de 4 minutos.

Figura 5.7: Conjunto de placa e papel na agua para esfriar.

7. Apos o tempo determinado na agua, as fitas adesivas e o papel sao retirados,ficamos somente com a placa de fenolite com o desenho impresso nela.

Figura 5.8: Placa de fenolite apos a transferencia do desenho.

8. Apos a placa de fenolite esta com o desenho do circuito, podemos, entao,corroer o metal sobre a placa, pois o desenho transferido ira proteger as areasque nao queremos que sejam corroıdas. A placa e mergulhada em percloretode ferro para que o metal seja corroıdo.

24

Page 25: Reservatório Microcontrolado

Figura 5.9: Mergulhando a placa na solucao de percloreto de ferro.

Figura 5.10: Placa de fenolite sendo corroıda por percloreto de ferro.

9. Depois que o metal e completamente corroıdo pelo percloreto de ferro, o queresta e a placa com o desenho do circuito em metal. A placa e lavada em aguapara retirar o restante do percloreto de ferro.

10. A placa e, entao, perfurada para a introducao dos componentes e soquetes.Foi feito o uso de um perfurador de pressao manual proprio para placas decircuito impresso. Para os orifıcios que precisaram ser alargados, usamos umafuradeira de mao tambem para uso em eletronica.

11. Agora, usamos palha de aco para retirar a tinta que protegeu o desenho durantea corrosao. Os componentes sao colocados em suas devidas posicoes e, emseguida, soldados na placa.

12. Passamos tambem verniz para circuito impresso a fim de proteger as trilhasem metal da oxidacao e de curtos entre as trilhas que ficam expostas.

25

Page 26: Reservatório Microcontrolado

Figura 5.11: Placa depois da lavagem.

5.4 Montagem do Sensor de Nıvel e Sistema Fısico

Para a confeccao do sensor de nıvel foi preciso encontrar um potenciometro compouca resistencia ao giro (torque) de forma que ele acompanhasse o sobe e descedo nıvel d’agua. A haste deve ser de um material anti-oxidante e leve como oalumınio. O uso de um knob de parafuso foi utilizado para conectar uma parte aoutra, encaixando-se por um furo feito cuidadosamente com o diametro da haste.Na outra extremidade, um material deve ser usado para desempenhar o papel deuma boia.

O sistema fısico deve possuir um recipiente como um aquario com o sensor me-canicamente acoplado e com um registro de saıda d’agua no fundo que despeja emum segundo recipiente. Uma bomba e usada para retornar a agua para o primeiroaquario.

5.5 Testes Experimentais

Para a montagem funcionar devidamente, alguns parametros tiveram que serajustados na pratica. Primeiramente, verificamos que nao dava para colocar sim-plesmente qualquer valor para as referencias do sensor. Isto implicou que o menorcaracter lido no reservatorio (dada uma posicao do sensor acoplado) nao foi o Nulo(00000000), logo nao tinhamos 255 divisoes que separavam o φmax e φmin. Porem,pequenas alteracoes na formula de conversao na parte da programacao da interfaceresolveram o problema.

26

Page 27: Reservatório Microcontrolado

Figura 5.12: Sistema fısico

Figura 5.13: Aquario

27

Page 28: Reservatório Microcontrolado

Figura 5.14: Bloco Controlador

Figura 5.15: Microcontrolador

28

Page 29: Reservatório Microcontrolado

Capıtulo 6

Conclusao

A realizacao fısica do projeto nos mostrou nos testes que a leitura do sensor foibem sucedida para a aplicacao proposta apesar de sua simplicidade. A interfacegrafica torna o ambiente mais amigavel para usuarios leigos e permite monitorar re-servatorios fechados ou a distancia. O microcontrolador desempenhou com maestriaseu papel no sistema de controle e os seus diferentes recursos nos permite ir muitoalem do que foi explorado neste projeto.

Alguns pontos podem ser relevantes para melhorias futuras ou motivacao paraoutros estudantes. Um tipo de controle que analise o comportamento e variacao donıvel d’agua para fornecer diferentes potencias a bomba. Um sensor de protecao parainformar se o reservatorio da bomba esta seco. E uma interface capaz de apresentarum historico grafico do reservatorio com os nıveis que foram lidos em cada instantepassado.

Este trabalho de graduacao se fez importante para complementar nossos conhe-cimentos de microcontroladores em sistemas de controle usando o recurso de comu-nicacao serial com outros dispositivos, construcao de interfaces graficas, manuseiode softwares para design de layouts e manufatura de placas de circuito impresso.

29

Page 30: Reservatório Microcontrolado

Apendice A

Tabelas para configuracao dosregistros especiais do PIC16F877

Figura A.1: Registro ADCON0

30

Page 31: Reservatório Microcontrolado

Figura A.2: Registro ADCON1

Figura A.3: Registro TXSTA

31

Page 32: Reservatório Microcontrolado

Figura A.4: Registro RCSTA

Figura A.5: Registro SPBRG

32

Page 33: Reservatório Microcontrolado

Apendice B

Codigo Fonte

B.1 Programacao do PIC16F877 em ASSEMBLY

;---------------------------------------------------------------------;-----------------------TRABALHO DE GRADUACAO-------------------------;--------------------HENRIQUE MULLER VASCONCELOS----------------------;---------------------RAFAELLI NEVES DE ALENCAR-----------------------;----------------------TALLITA CAMPELO SOBRAL-------------------------;---------------------------------------------------------------------

#INCLUDE<P16F877.INC>

CBLOCK 0X20

SETUP_SUP ; GUARDA VALOR RECEBIDO EM RCREGSETUP_INF ; GUARDA LIMITE INFERIORCONV_CH1 ; GUARDA VALOR DA ULTIMA CONVERSAO NO CH1CONV_CH2 ; GUARDA VALOR DA ULTIMA CONVERSAO NO CH2INF_LEVEL ; INFORMACAO DE NIVELASK_LEVEL ; REQUISICAO DE NIVELADDRESS ; GUARDA BYTE DE ENDERECAMENTODIFERENCA ; GUARDA A DIFERENCA ENTRE OS NIVEIS SETUP SUP E INF

ENDC

;---------------------------------------------------------------------;-----------------------------ENTRADAS--------------------------------;---------------------------------------------------------------------

#DEFINE AD_P1 PORTA,0 ; SENSOR DE NIVEL#DEFINE AD_P2 PORTA,1 ; POT. SETUP MANUAL#DEFINE VREF1 PORTA,2 ; VREF- PARA CONVERSAO A/D#DEFINE VREF2 PORTA,3 ; VREF+ PARA CONVERSAO A/D

33

Page 34: Reservatório Microcontrolado

#DEFINE LIGAR PORTA,5 ; BOTAO LIGA

#DEFINE MANUAL PORTC,0 ; BOTAO SETUP MANUAL#DEFINE RXUSART PORTC,7 ; COMUNICACAO SERIAL IN

;---------------------------------------------------------------------;------------------------------SAIDAS---------------------------------;---------------------------------------------------------------------

#DEFINE POWER PORTB,5 ; INDICADOR ON/OFF#DEFINE COMMUN PORTB,7 ; TRANSMITINDO DADO

#DEFINE VCC_AUX PORTC,3 ; VCC AUXILIAR#DEFINE ENABLE PORTC,5 ; ENABLE CONTROL#DEFINE TXUSART PORTC,6 ; COMUNICACAO SERIAL OUT

#DEFINE SET_MANUAL PORTD,1 ; LOOP DE SETUP MANUAL

;---------------------------------------------------------------------;------------------------------0UTROS---------------------------------;---------------------------------------------------------------------

#DEFINE BANK0 BCF STATUS,RP0 ; MUDA PARA O BANK 0#DEFINE BANK1 BSF STATUS,RP0 ; MUDA PARA O BANK 1

#DEFINE CH_1 BCF ADCON0,3 ; MUDA PARA CANAL 1 AD (AN0)#DEFINE CH_2 BSF ADCON0,3 ; MUDA PARA CANAL 2 AD (AN1)

;---------------------------------------------------------------------;---------------------------------------------------------------------;---------------------------------------------------------------------

ORG 0X0000GOTO INICIAR

INICIAR ; INICIALIZACAO

CLRF PORTACLRF PORTBCLRF PORTCCLRF PORTDCLRF PORTE

CLRF ADDRESSCLRF SETUP_SUPCLRF SETUP_INF

34

Page 35: Reservatório Microcontrolado

CLRF CONV_CH1CLRF CONV_CH2

BANK1

MOVLW B’11111111’ ; INPUT PINSMOVWF TRISA ;MOVLW B’00000000’ ; OUTPUT PINSMOVWF TRISB ;MOVLW B’10000001’ ; INPUT PINSMOVWF TRISC ;MOVLW B’00000000’ ; OUTPUT PINSMOVWF TRISD ;MOVLW B’00000000’ ; OUTPUT PINSMOVWF TRISE ;MOVLW B’11010111’ ; CONFIGURA OPTION_REGMOVWF OPTION_REG ;MOVLW B’00000000’ ; INTERRUPCOES DESABILITADASMOVWF INTCON ;MOVLW B’00001101’ ; CONFIGURA CONVERSAO A/DMOVWF ADCON1 ;MOVLW B’00100100’ ; CONFIGURA TRANSMISSAOMOVWF TXSTA ;MOVLW .25 ; CONFIGURA BAUD RATEMOVWF SPBRG ;

BANK0

MOVLW B’10010000’ ; CONFIGURA RECEPCAOMOVWF RCSTA ;MOVLW B’10000001’ ; CONFIGURA CONVERSAO A/DMOVWF ADCON0 ;

MOVLW 0x20MOVWF FSR

MOVLW B’01101001’ ; CARACTERE "i"MOVWF INF_LEVEL ; CONFIGURA ENDERECO DE INFORMACAO DE NIVELMOVLW B’01100001’ ; CARACTERE "a"MOVWF ASK_LEVEL ; CONFIGURA ENDERECO DE REQUISICAO DE NIVELMOVLW B’00000100’MOVWF DIFERENCA

BSF VCC_AUX ; PIC PROGRAMADO E CONFIGURADO, PINO USADO COMO 5V

35

Page 36: Reservatório Microcontrolado

;---------------------------------------------------------------------;-----------------------------PROGRAMA--------------------------------;---------------------------------------------------------------------

PRINCIPAL

BCF POWERBCF ENABLEBCF SET_MANUALBTFSS LIGAR ; TESTA BOTAO LIGAR APERTADOGOTO $-1 ; ESPERA ATE QUE INICIO DO PULSOBTFSC LIGARGOTO $-1 ; ESPERA ATE FIM DO PULSOBSF POWER ; LIGA LED DE POWER ONBSF ADCON0,GO ; INICIA CONVERSAO AD

LOOP

BTFSC MANUAL ; TESTA BOTAO MANUAL APERTADOCALL MODO_MANUAL ; SIM, CHAMAR A ROTINA MODO_MANUAL

BTFSS ADCON0,GO ; TESTA FIM DA CONVERSAO ADCALL FIM_CONVERSAO_AD ; SIM, CHAMAR A ROTINA FIM_CONVERSAO_AD

BTFSC PIR1,RCIF ; TESTA FLAG DE RECEPCAO DE DADOS NA SERIALCALL DADO_RECEBIDO ; SIM, CHAMAR ROTINA DADO_RECEBIDOBCF COMMUN ; DESLIGA LED DE COMUNICACAO

BLOCO_DECISAO

MOVF DIFERENCA,WSUBWF SETUP_SUP, W ; SETUP_SUP - DIFERENCAMOVWF SETUP_INF ; GUARDA RESULTADO EM SETUP_INF

MOVF CONV_CH1,W ; TESTA ALTURA COM SETUP_INFSUBWF SETUP_INF,W ; SETUP_INF - CONV_CH1BTFSC STATUS,C ; TESTA O CARRYBSF ENABLE ; SETUP_INF >= CONV_CH1, LIGA A BOMBA

BTFSS ENABLE ; TESTA BOMBA LIGADAGOTO LOOP ; BOMBA DESLIDADA, VOLTA PRO LOOPMOVF CONV_CH1,W ; BOMBA LIGADA, TESTA ALTURA COM SETUP_SUPSUBWF SETUP_SUP,W ; SETUP_SUP - CONV_CH1BTFSS STATUS,C ; TESTA O CARRYGOTO DESLIGAR_BOMBA ; SETUP_SUP < CONV_CH1. MANDA DESLIGARBTFSC STATUS,Z ; SETUP_SUP >= CONV_CH1, TESTA IGUALDADE

36

Page 37: Reservatório Microcontrolado

GOTO DESLIGAR_BOMBA ; SETUP_SUP = CONV_CH1. MANDA DESLIGARGOTO LIGAR_BOMBA ; SETUP_SUP > CONV_CH1. MANDA LIGAR

LIGAR_BOMBA

BSF ENABLE ; HABILITA A BOMBAGOTO LOOP ; RETORNA PARA INICIO DO LOOP

DESLIGAR_BOMBA

BCF ENABLE ; DESABILITA A BOMBAGOTO LOOP ; RETORNA PARA INICIO DO LOOP

;---------------------------------------------------------------------;-----------------------------ROTINAS---------------------------------;---------------------------------------------------------------------

FIM_CONVERSAO_AD

MOVF ADRESH,W ; RESULTADO DA CONVERSAO DO CANAL 1MOVWF CONV_CH1 ; GRAVA EM CONV_CH1BSF ADCON0,GO ; INICIA OUTRA CONVERSAORETURN ; CONTINUA PROGRAMA

DADO_RECEBIDO

BSF COMMUN ; SETA LED DE COMUNICACAOMOVF RCREG,W ; CARREGA RECEPCAO EM WORKMOVWF ADDRESS ; SALVA O ENDERECO RECEBIDOSUBWF INF_LEVEL,W ;BTFSC STATUS,Z ; COMPARA O ENDERECO COM INF_LEVELGOTO MODIFY_LEVEL ; OK. CHAMA ROTINA DE MODIFICACAO DE NIVELMOVF ADDRESS,W ; CARREGA RECEPCAO EM WORKSUBWF ASK_LEVEL,W ;BTFSC STATUS,Z ; COMPARA O ENDERECO COM ASK_LEVELGOTO TRANSMISSAO ; OK. CHAMA ROTINA DE TRANSMISSAOGOTO DESCARTA ; NAO IDENTIFICADO. CHAMA ROTINA DE DESCARTE

TRANSMISSAO

MOVF CONV_CH1,W ; CARREGA CONV_CH1 EM WORKBANK1 ; MUDA PARA BANK 1BTFSS TXSTA,TRMT ; VERIFICA SEM BUFFER ESTA VAZIOGOTO $-1 ; ESPERA ESVAZIAR BUFFERBANK0 ; VOLTA PARA BANK 0MOVWF TXREG ; CARREGA BUFFER E INICIA TRANSMISSAOGOTO DESCARTA ; CHAMA ROTINA DE DESCARTE

37

Page 38: Reservatório Microcontrolado

MODIFY_LEVEL

BTFSS PIR1,RCIF ; ESPERA DADO DE NIVELGOTO MODIFY_LEVEL ; CONTINUA NA ROTINA ATE QUE CHEGUE O DADOMOVF RCREG,W ; MOVE O DADO RECEBIDO EM WORKMOVWF SETUP_SUP ; CARREGA NIVEL EM SETUP_SUPRETURN ; CONTINUA PROGRAMA

DESCARTA

BTFSS PIR1,RCIF ; ESPERA PROXIMO BYTEGOTO DESCARTA ; CHAMA ROTINA DE DESCARTEMOVF RCREG,W ; LE O REGISTRO RCREGMOVLW .0 ; DESCARTARETURN ; CONTINUA PROGRAMA

MODO_MANUAL

BTFSC MANUAL ; TESTA FIM DO PULSOGOTO $-1 ; AGUARDA FIM DO PULSOBSF SET_MANUAL ; LIGA LED INDICADOR DO MODO MANUALCH_2 ; MUDA PARA O CANAL 2 DE CONVERSAO A/D (RA1)BSF ADCON0,GO ; PEDE CONVERSAOBTFSC ADCON0,GO ; TESTA FIM DA CONVERSAO ADGOTO $-1 ; AGUARDA RESULTADOMOVF ADRESH,W ; CARREGA RESULTADO EM WORKMOVWF CONV_CH2 ; SALVA RESULTADO EM CONV_CH2MOVWF SETUP_SUP ; CARREGA NIVEL EM SETUP_SUPBTFSS MANUAL ; TESTE DE FIM DA OPERACAOGOTO MODO_MANUAL ; NEGATIVO, CONTINUA NO LOOP DE AJUSTECH_1 ; POSITIVO. MUDA PARA O CANAL 1 DE CONVERSAO A/D (RA0)BSF ADCON0,GO ; INICIA CONVERSAO A/DBTFSC MANUAL ; TESTA FIM DO PULSOGOTO $-1 ; AGUARDA FIM DO PULSOBCF SET_MANUAL ; DESLIGA LED INDICADOR DO MODO MANUALRETURN ; CONTINUA PROGRAMA

;---------------------------------------------------------------------;---------------------------------------------------------------------;---------------------------------------------------------------------

END ; FIM DO PROGRAMA

38

Page 39: Reservatório Microcontrolado

B.2 Programacao da interface com o Borland C++

B.2.1 controle.cpp

//----------------------------------------------------------------------------// Inclusao de Bibliotecas, difinicoes de Variaveis Globais e !!!!!!//----------------------------------------------------------------------------

#include <vcl.h>#include<math.h>#include <stdio.h>#pragma hdrstop#include "controle.h"

#pragma package(smart_init)#pragma resource "*.dfm"

#define LEN_BUFFER 100

//Variaveis Globais

TForm1 *Form1;

//Variaveis da API

HANDLE hCom;DCB dcb;COMMTIMEOUTS CommTimeouts;DWORD COMStatus;DWORD BytesEscritos=0;DWORD BytesLidos=0;Word TimeOver;int TamaString, g=0;char BufferEnvia[LEN_BUFFER];char BufferLer[LEN_BUFFER];bool CONECTADO=false; // bool pq n"o

39

Page 40: Reservatório Microcontrolado

void Status(String Comando);String StrCom;float conversao(int);float conversao1(int);//bool vModoAuto;//bool vModoManual;

//-----------------------------------------------------------------------------// Form1//-----------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)

//-----------------------------------------------------------------------------//Configuracao da Porta Serial//-----------------------------------------------------------------------------

bool ConfiguraUART(DWORD baud, BYTE size, BYTE parity, BYTE stop)

if(!GetCommState(hCom, &dcb))

return false;

dcb.BaudRate = baud;dcb.ByteSize = size;dcb.Parity = parity;dcb.StopBits = stop;dcb.fDtrControl = DTR_CONTROL_DISABLE;dcb.fRtsControl = RTS_CONTROL_DISABLE;

if ( SetCommState(hCom, &dcb) == 0 )

return false;return true;

//-----------------------------------------------------------------------------//Abre a Porta Serial COMx//-----------------------------------------------------------------------------

40

Page 41: Reservatório Microcontrolado

bool AbrirPortaSerial(char *NomePorta)

hCom = CreateFile(NomePorta,GENERIC_READ | GENERIC_WRITE,0, // dispositivos comm abertos com acesso exclusivoNULL, // sem atributos de seguranAaOPEN_EXISTING, //deve usar OPEN_EXISTING0, //Entrada e saIda sem ovelap.NULL //hTemplate deve ser NULL para comm);

if(hCom == INVALID_HANDLE_VALUE)

return false;

return true;

//-----------------------------------------------------------------------------// Organizacao ...//-----------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

//inicializando todos os botıes como desativadosGroupBox3->Enabled=false;Timer1->Enabled=false;

//-----------------------------------------------------------------------------// Botao 1: Abre a porta selecionada//-----------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)DWORD ComErro;bool ret;

StrCom=ComboBox1->Text ;

ret = AbrirPortaSerial(StrCom.c_str()); //Abre a Porta Serial Especificada.

if(ret == false) //se houve erro.

switch(GetLastError()) //Detalha o erro.

41

Page 42: Reservatório Microcontrolado

case ERROR_FILE_NOT_FOUND:

ShowMessage("A Porta "+StrCom+" selecionada nao existe!");break;

case ERROR_ACCESS_DENIED:ShowMessage("A Porta "+StrCom+" selecionada esta em uso!");break;

default: break;

else

ConfiguraUART(CBR_9600,8,NOPARITY,ONESTOPBIT); //Configura UART.CONECTADO=true;

Label4->Caption="Porta "+StrCom+" Aberta";GroupBox3->Enabled=true;

Button1->Enabled = false;Button2->Enabled = true;Button3->Enabled = true;Button4->Enabled = true;

//-----------------------------------------------------------------------------// Botao 2: Fecha a porta selecionada//-----------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)

if(hCom != INVALID_HANDLE_VALUE) // Se a porta est· aberta.

CloseHandle(hCom); //Fecha a porta.Button1->Enabled = true;Button2->Enabled = false;Button3->Enabled = false;Button4->Enabled = false;Label4->Caption="Porta "+StrCom+" Fechada";

GroupBox3->Enabled=false;

//-----------------------------------------------------------------------------// Botao 3: Envia dado para a porta serial//-----------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

42

Page 43: Reservatório Microcontrolado

float rc,rc1;int h,alt;alt=atoi(Form1->Edit1->Text.c_str());h=alt;rc=conversao(h);rc1=floor(rc);BufferEnvia[0]=’i’; // comando de envio de alturaBufferEnvia[1]=’\0’;WriteFile(hCom, BufferEnvia,1,&BytesEscritos,NULL);Sleep(10);BufferEnvia[0]=rc1; // valor da alturaBufferEnvia[1]=’\0’;WriteFile(hCom, BufferEnvia,1,&BytesEscritos,NULL);Sleep(10);Button3->Enabled = true;Button4->Enabled = true;Timer1->Enabled=true;

//-----------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

int alt,altr,alts,h;BufferEnvia[0]=’a’; // comando de envio de alturaBufferEnvia[1]=’\0’;WriteFile(hCom, BufferEnvia,1,&BytesEscritos,NULL);Sleep(10);BufferEnvia[0]=’a’; // comando de envio de alturaBufferEnvia[1]=’\0’;WriteFile(hCom, BufferEnvia,1,&BytesEscritos,NULL);Sleep(100);ReadFile(hCom,BufferLer,2,&BytesLidos,NULL);

altr=BufferLer[0];if(altr>=0)alts=altr;elsealts=256+altr;ProgressBar1->Min=0;ProgressBar1->Max=100;h=conversao1(alts);ProgressBar1->Position= h;Edit2->Text=h;

43

Page 44: Reservatório Microcontrolado

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)Timer1->Enabled=false;Button4->Enabled=false;Button3->Enabled=true;

//---------------------------------------------------------------------------

float conversao1(int rc2)

int alt,altr,alts;char Crac;float a,b,c,d,rc,rc1,x;float h;float tmax=72.5, tmin=32.5;float pi=3.1415;float tmax1, tmin1,n, delta;

alt=atoi(Form1->Edit1->Text.c_str());

h=alt;tmax1=(tmax/180)*pi;tmin1=(tmin/180)*pi;

a=cos(tmax1);b=cos(tmin1);c=tmin1;d=b-a;

n=tmax1-tmin1;delta=n/(255-44);

h=100*(b-cos(c+(rc2-44)*delta))/d ;

if (h>=0)return h;elsereturn 0;

float conversao(int h2)

int alt,altr,alts;

44

Page 45: Reservatório Microcontrolado

char Crac;float a,b,c,d,rc,rc1,x;float h;float tmax=72.5, tmin=32.5;float pi=3.1415;float tmax1, tmin1,n, delta;

alt=atoi(Form1->Edit1->Text.c_str());

h=alt;tmax1=(tmax/180)*pi;tmin1=(tmin/180)*pi;

a=cos(tmax1);b=cos(tmin1);c=tmin1;d=b-a;n=tmax1-tmin1;delta=n/(255-44);

rc=44+(acos(b-h*d/100)-c)/delta;

return rc;

B.2.2 controle.h

//---------------------------------------------------------------------------

#ifndef controleH#define controleH

//---------------------------------------------------------------------------

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <ComCtrls.hpp>#include <ExtCtrls.hpp>//---------------------------------------------------------------------------

class TForm1 : public TForm__published: // IDE-managed Components

45

Page 46: Reservatório Microcontrolado

TGroupBox *GroupBox1;TGroupBox *GroupBox3;TButton *Button1;TButton *Button2;TLabel *Label1;TEdit *Edit1;TLabel *Label2;TEdit *Edit2;TLabel *Label3;TLabel *Label4;TLabel *Label7;TTimer *Timer1;TButton *Button3;TButton *Button4;TProgressBar *ProgressBar1;TLabel *Label8;TLabel *Label9;TComboBox *ComboBox1;

void __fastcall Button1Click(TObject *Sender);void __fastcall Button2Click(TObject *Sender);void __fastcall Button3Click(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);void __fastcall Timer1Timer(TObject *Sender);void __fastcall Button4Click(TObject *Sender);//void __fastcall RadioButton5Click(TObject *Sender);//void __fastcall RadioButton6Click(TObject *Sender);

private: // User declarationspublic: // User declarations

__fastcall TForm1(TComponent* Owner);;

//---------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;//---------------------------------------------------------------------------

#endif

46

Page 47: Reservatório Microcontrolado

Bibliografia

[1] David Jose de Souza, Nicolas Cesar Lavinia, Conectando o PIC: Recursosavancados, Editora Erica, primeira edicao, 2003.

[2] Mohan, Undeland, Robbins, Power ElectronicsConverters: Applications andDesign, second edition, 1995

[3] H. M. Deitel, P. J. Deitel, C++: Como Programar, Editora Bookman, terceiraedicao, 2001

47