• Nenhum resultado encontrado

Firmware da Estação Remota

No documento 2011.1 RelatorioTCCLintonVFinal (páginas 45-50)

2 FUNDAMENTAÇÃO TEÓRICA

3.3 Projeto de Software

3.3.2 Firmware da Estação Remota

Ao ligar o módulo da estação remota, inicialmente são realizadas as rotinas de configuração do hardware do microcontrolador, inicialização do módulo RF e criação de uma conexão com a base.

Após essas operações de configuração, a estação remota entra em um laço onde são executadas suas funcionalidades específicas. Na figura 20, é possível visualizar um fluxograma das operações realizadas por esse módulo e dos caminhos tomados, a depender do evento ocorrido.

Figura 20 - Fluxograma da estação remota Fonte: Próprio Autor

O primeiro procedimento realizado nesse laço é verificar se é hora de coletar um dado do sensor. Buscando oferecer uma solução flexível e que possa atender a um maior número de usuários, o projeto prevê a alteração do intervalo de aquisição remotamente. Para tanto foram criadas duas variáveis, uma para armazenar o horário da última aquisição e outra para armazenar o intervalo de aquisição dos dados. A partir desses dois valores é possível calcular o horário da próxima aquisição através da seguinte equação:

Hora da última aquisição + Intervalo = Hora da próxima aquisição

Seguindo esse raciocínio, um módulo que coletou um dado do sensor às 14h 25min e 30s com um intervalo de aquisição de 45 segundos fará a próxima aquisição às 14h 26min e 15s.

Ao atingir o horário da próxima aquisição, o nível de tensão presente no sensor é captado e seu valor armazenado na memória, juntamente com o seu respectivo rótulo temporal, em um total de 8 bytes por amostra (Figura 21).

Figura 21 - Estrutura de uma amostra Fonte: Próprio Autor

Objetivando aperfeiçoar o processo de leitura e escrita dos dados na memória EEPROM, foram construídas rotinas específicas para essas operações. O ponto chave para o seu funcionamento, é a utilização de um ponteiro que aponta para a última posição da última amostra armazenada.

No início de toda operação de escrita, o ponteiro estará sempre indicando a posição final da última amostra (Figura 22 a). Ao iniciar o processo de escrita, esse valor é acrescido de 1 (Figura 22 b) e o ponteiro passa a indicar o local onde deve ser iniciada a gravação do próximo dado. A cada valor inserido, a posição do ponteiro é incrementada e, no fim do processo, ele estará apontando para o último dado inserido (Figura 22 c), fechando o ciclo de gravação.

Figura 22 - Processo de escrita: antes do início do processo (a); início do processo (b); fim do processo (c) Fonte: Próprio Autor

O processo de leitura, assim como o de escrita, parte da premissa que inicialmente o ponteiro de endereço está apontando para a posição final da última amostra armazenada (Figura 23 a). Como a leitura é realizada de forma sequencial, o valor do ponteiro deve ser subtraído de 7 para apontar para o início da amostra a ser lida (Figura 23 b). A partir desse ponto, a leitura é realizada sequencialmente byte a byte até se atingir o final da amostra. Nesse momento, o valor do ponteiro é subtraído de 8, fazendo com que o mesmo aponte para a próxima amostra (Figura 23 c), “apagando” a amostra lida. Uma leitura sequencial pode ser realizada com a repetição desses passos.

Figura 23 - Processo de leitura: antes do início da leitura (a); início da leitura (b); fim da leitura (c) Fonte: Próprio Autor

Como explicado anteriormente, as portas do microcontrolador que possibilitam a utilização da comunicação I2C via hardware não puderam ser utilizadas para comunicação com o 24FC512, pois foram cedidas ao módulo RF. Dessa forma, a utilização desse protocolo só foi possível via software. Felizmente, a microchip disponibiliza uma biblioteca para esse tipo de situação, a sw_i2c.h, que é instalada juntamente com o compilador C18 no computador (MICROCHIP TECHNOLOGY INC., 2010a). Sendo assim, as funções de leitura e escrita de dados nas memórias foram construídas através dessa biblioteca, com base nos passos contidos no datasheet do 24FC512 (MICROCHIP TECHNOLOGY INC., 2010c).

Após executar a função de aquisição de dados, o próximo passo é verificar se o módulo recebeu uma mensagem do coordenador. Caso positivo, a mesma é analisada e processada; caso contrário, o programa é redirecionado para o passo anterior, fechando um ciclo de operação.

Toda mensagem enviada entre os módulos é composta por um byte de controle que identifica o tipo de operação a ser realizada. Para o módulo que está recebendo a mensagem, esse byte é armazenado na posição 0 do vetor PayLoad contido no struct rxMessage. Da mesma forma, o módulo que deseja enviar a solicitação deve inserir o comando de controle na posição 0 do buffer TX. Ao identificar a chegada de uma nova mensagem, o valor contido em

rxMessage.PayLoad[0] é analisado e a operação correspondente acionada. Na versão atual do

firmware, as operações de controle suportadas são as contidas na Tabela 4.

Tabela 4 - Lista dos comandos de controle.

Controle Comando Descrição

10 Ajustar hora Possibilita a base atualizar o horário da estação remotamente.

20 Solicitação de dados Esse comando indica que base está solicitando que as amostras contidas na memória EEPROM da estação sejam enviados

30 Verificar estado A base está apenas verificando se a estação está operando corretamente

40 Atualizar intervalo Atualiza o intervalo de aquisição de dados remotamente

50 Verificar hora A base está solicitando que a estação envie o horário contido no RTC naquele momento

60 Reservado -

70 Apagar memória Reiniciar o ponteiro de endereçamento da memória para a posição inicial

80 Verificar memória Verifica a quantidade da memória utilizada até aquele momento

90 Verificar intervalo Verifica o intervalo de aquisição utilizado na estação

O código de controle 60 é reservado à estação, sendo utilizado para informar à base que a memória EEPROM está ficando cheia. Essa é a única situação em que uma troca de mensagens é iniciada por uma estação remota.

Em muitos casos, apenas a presença do comando de controle na mensagem é suficiente para se processar uma solicitação. No entanto, existem casos que é necessário a existência de mais informações além do comando de controle para que a solicitação desejada possa ser processada, essas informações são armazenadas entre a posição 1 e 99 dos vetores

PayLoad, no módulo receptor, e TX, no emissor. A exemplo tem-se o comando ajustar hora,

que é enviado pela base juntamente com a hora que se deseja configurar na estação. Esse procedimento ocorre tanto no envio das solicitações a partir da base quanto nas respostas a essas solicitações por parte da estação.

Nessa versão do firmware, apenas a porta AN2 foi utilizada para coleta de dados dos sensores, o que limita a quantidade de sensores a serem conectados a apenas um. Vale ressaltar que a tensão de referência utilizada é a própria tensão de alimentação do módulo, o que possibilita a aquisição de sinais entre 0 e 3,3 V. Se o sensor adotado apresentar uma faixa de operação não compatível, o sinal do mesmo deve ser condicionado às especificações do sistema, sob a pena de causar incompatibilidade nas aquisições.

No documento 2011.1 RelatorioTCCLintonVFinal (páginas 45-50)

Documentos relacionados