|
O dispositivo ainda incompleto mas já funcional,
capaz de dar partida, comunicar-se via serial e
medir voltagem e freqüência. Clique para ampliar.
Medindo a voltagem no pino ICP da MCU com o
osciloscópio, surpreendi-me ao constatar uma
onda senoidal um tanto achatada no topo.
|
Começando a Montagem do Monitor de Linha Elétrica
Rec 10-fev-2008 20:11
Ao longo das últimas duas semanas, gastei meu "copioso" tempo livre montando o protótipo
do monitorador de falhas de energia elétrica. Montei a fonte, unidade de condicionamento
do sinal, o microcontrolador e o conversor de nível serial.
No momento, o
firmware suporta:
- Comunicação serial baseada em interrupts com uma FIFO de transmissão de 120 bytes
- simplifca a programação porque podemos gerar mensagens consideravelmente grandes e a rotina de interrupção se encarrega de transmitir cada byte
- Uma interface de usuário baseada em linha de comando com editor de linha ultra-simples
- Apenas ENTER e Backspace, sem setinhas
- Relógio de Tempo Real com calendário, com as viradas de mês corretas de acordo com o número de dias de cada mês e tratamento de anos bissextos, correto até o ano 2099;
- Rotinas para imprimir números decimais em vírgula fixa
- Registra a data/hora e duração da queda de energia mais recente
Comandos disponíveis no momento:
-
ver
: mostra número da versão
-
time
: define hora atual
-
date
: define data atual
-
log
: ativa exibição das medidas uma vez por segundo; qualquer caractere desativa
-
reboot
: pula para o bootloader para atualizar o firmware
Eu tirei essa foto momentos antes de soldar o cristal e o conector ISP. Logo após plugá-los,
as medições de freqüência ficaram bem próximas de 60.00Hz, tal como eu previa.
As medições de voltagem ficaram a +/- 5V dos 220V nominais quando usando a constante
de multiplicação de 2978 que calculamos na
planilha do Excel.
Isso
foi surpreendente, dada a quantidade de coisas que podiam dar errado. Chacoalhei a cabeça em estupefação: não estou
acostumado às coisas funcionarem de primeira.
Mudei a rotina de disparo do ADC (na realidade, a rotina de tratamento da interrupção do Comparador A do Timer1)
para puxar o pino ICP para terra por alguns microssegundos pouco antes do ADC iniciar a medida e pluguei tudo isso
no osciloscópio, de forma que pude ver exatamente em que ponto da onda a medida estava ocorrendo. Estava um pouco
além do pico da onda; eu reduzi a contagem de acordo para colocá-la o mais visualmente próximo do centro que pude.
Fez pouca diferença, entretanto, por causa de uma pequena surpresa: a forma de onda vindo da minha tomada não
era uma senoide lá muito bonita -- ela estava com um estranho achatamento, como mostra a figura.
De volta ao software: com a comunicação serial funcionando legal, pensei em colocar um
bootloader, de sorte
que eu não precisasse nem do meu programador ISP. Eu tenho um
bootloader cheio de recursos compatível com
o padrão
AVR910, mas, com 1
KiB de tamanho, é meio grande, pois
suspeito que, quando terminar, o
firmware vai caber raspando nos 8KiB de área de programa que o ATmega8
oferece -- eu mal o comecei e já passamos dos 3KiB de tamanho.
Procurando no Google, achei um
bootloader para o ATmega16 com apenas ~430 bytes de tamaho
que usa o
protocolo XMODEM comumente disponível em programas de
emulação de terminal para subir o firmware. Adaptei-o para funcionbar no ATmega8 e otimizei seu tamanho,
fazendo-o caber em meros 256 bytes -- o menor tamanho de bootloader que o ATmega8 suporta. Agora, ele é
meio minimalista: só suporta escrever na memória flash; não é possível nem ler a flash, nem ler/escrever
a EEPROM embutida do AVR, nem tampouco os fusíveis. Mas funciona que é uma beleza em um espaço mínimo -- pegue-o
aqui.
Até agora as coisas têm sido razoavelmente fáceis. Agora é hora de acrescentar o LCD, a EEPROM Serial e
escrever código para usá-las. Isso vai ser divertido.
Próximos posts sobre esse assunto:
topo