Contador Simples com ATtiny2313
O KTimer é um temporizador de contagem regressiva baseado no microcontrolador
ATtiny2313 que apita ao final de um
período pré-estabelecido, tal como os de forno de microondas. Funciona a bateria e além de poder controlar
um dispositivo externo, pode ser também usado como contador de mão
ou cronômetro.
Advertência
Levar um temporizador caseiro na sua bagagem pode lhe render complicações com a segurança aeroportuária.
Características/Recursos do Hardware
- Com apenas 8.5 x 4.5 cm, cabe na palma da mão
- Alimentado por 3 pilhas alcalinas comuns tipo AA
- Vida da bateria: 4 anos em modo de espera, >80 horas em atividade
- Mostrador LED de 4-digítos em modo multiplexado
- Teclado de três teclas
- Alto-falante piezoelétrico miniatura com freqüência controlável
- Conector com sinais para estágio de potência externo permitindo controlar outros aparelhos
- Conector para porta serial
- Circuito sem cristal
- Baixo custo, menos de R$ 30,00 em componentes
Características/Recursos do Firmware
- Temporizador de contagem regressiva apita por 30 segundos quando o tempo acaba
- Operação extremamente simples, tal como temporizadores de fornos de microondas:
- Dois botões programam o período, aumentando ou diminuindo em um minuto
- Outro botão inicia/para a contagem
- Período máximo 99 minutos
- Cronômetro com contagem progressiva
- Contador manual, incrementa contagem cada vez que uma tecla é pressionada
- Desligamento automático após 20 segundos de inatividade
- Carregador compatível com o padrão AVR910 permite atualização do programa via porta serial
- Contadores de instrumentação registram número de partidas, desligamentos, tempo total contado
- Console serial permite inspeção dos contadores de instrumentação e chamar o carregador
Projeto de Hardware
Os requisitos do projeto foram:
- O clássico 'use a menor quantidade de componentes possível'
- Faça-o consumir o mínimo de energia possível, para que a bateria dure bem
Note que não há regulador de voltagem: o dispositivo é alimentado diretamente pelas baterias. Isso elimina correntes quiescentes que podem ser bem subsanciais. Aqui tiramos vantagem da ampla faixa de voltagem (2,7 a 5,5V) suportada pelo ATTiny2313. Combinados, esses dois recursos permitem uma boa longevidade das pilhas.
Também não há cristal, de sorte que não se almeja alta precisão. Ajustando o valor máximo do Timer/Contador1 no código, pode-se atingir uns 2% de precisão. O firmware tem um procedimento de calibração que permite melhorar isso para cerca de uns 0,5%.
Os quatro mostradores numéricos de LED são multiplexados no esquema clássico, com transistores para prover mais corrente do que os meros 20mA que as portas do AVR podem prover. Considerei usar esquemas mais sofisticados, tais como alternar mostradores de anodo comum com outros e catodo comum (teria economizado dois pinos), ou mesmo a técnica de
Charlieplexação (teria economizado três pinos
e quatro transistores), mas rejeitei porque suspeitei que teria problemas com brilho.
Usando mostradores LSD056BSR-10 tipo "super red", foi possível fazê-lo brilhante o bastante para ser usado em plena luz do dia usando apenas 30mA. Um outro display antigão (um Para-Light
A-552E) vermelho-laranja gastava 72mA e não ficava tão brilhante. Já a versão azul (usando um Para-Light
A-551UB) ficou tão brilhante que se pode usar o dispositivo como lanterna. Se você pretende usá-los, tenha em mente que é comum eles terem brilhos diferentes. Para obter mais uniformidade, procure escolhê-los de um mesmo lote de fabricação. A versão pequeninha usa um módulo LN543GA com LEDs verdes que eu comprei de segunda mão.
Se você quiser menos brilho e mais tempo de bateria, use 330 ou 470 Ohms para os resistores R1-R8 ao invés dos 220 Ohms mostrados no circuito. Por outro lado, ser quiser mais brilho e menos bateria, diminua-os para 150 ou mesmo 100 Ohms.
Nas fotos dá pra notar que usei o também clássico truque de colocar os dois
displays finais de cabeça para baixo, para fazer com que os pontos decimais emulassem os dois-pontos.
Para economizar alguns pinos, os interruptores do teclado compartilham as mesmas linhas do segmentos dos
displays. Alguns resistores tornam imperceptível a queda de brilho quando você os pressiona.
O outro lado do teclado é conectado via um resistor e um diodo em paralelo à linha de interrupção zero do microcontrolador. Isso é usado para fazê-lo acordar do modo de espera. Esse resistor é traiçoeiro -- em alguns casos, ele precisa ter um valor alto (o esquema tem 100k), mas parece que em AVRs fabricados mais recentemente ele precisa ser bem mais baixo. Eu tenho usado 3k3 ultimamente.
Há duas versões da placa: uma com um conector para serial em nível TTL (5V) e outra com um circuitinho de dois transistores para servir como conversor de voltagem, permitindo conexão direta à porta serial (ainda que limitado a
half-duplex). Nenhuma das versões tem um conector ISP para programação diretamente no circuito. Assume-se que você possa fazer o
upload inicial em uma
protoboard ou tenha uma placa de desenvolvimento tal como a
STK-200 da
Kanda ou a
STK-500 da Atmel.
O programa de 'Contador Regressivo'
Instalação do Firmware
Se você estiver usando o
avrdude e o
usbasp como eu, verifique antes se os caminhos no
Makefile
estão corretos para o seu sistema e digite:
make fuses
make upload_usbasp_full
Isso vai subir a imagem
full.hex
, que contém tanto o carregador (
bootloader) quanto a aplicação principal.
Você também pode subir primeiro o carregador serial com:
make fuses
make upload_boot
Em seguida, ligue a porta serial e suba a aplicação em si com:
make upload_serial
Se você estiver usando outro programador, adapte o
Makefile
de acordo.
Compilando
É preciso que você tenha um
avr-gcc recente (eu usei a versão 3.4.4) com a
avr-libc 1.4.0 ou superior. Se você estiver usando Windows, imagino que versões recentes do
WinAVR devem funcionar.
- Nota: Se você estiver usando o avr-gcc 4.0 ou mais recente, adicione a cláusla "externally-visible" na extensão __attribute__((...)) na declaração
SIGNAL
. Sem isso não vai funcionar.
Se você quiser montar o carregador, você precisará do AvrAssembler2 contido no
AVRStudio da Atmel. Também tive sucesso usando o
avra.
Mude os caminhos no
Makefile
para que façam sentido no seu sistema. Feito isso, digite
make clean
para remover as versões precompiladas e qualquer outra sujeira e por fim digite
make
. O resultado deve sair nos arquivos
ktimer.hex
,
eeprom.hex
e
avrboot2313.hex
.
Operação
Os dois primeiros botões são chamados
- e
+. Eels ajustam
o valor inicial da contagem. O terceiro botão se chama
ENTER
e ele dá partida
na contagem. Com a contagem em andamento, qualquer botão pausa a contagem.
Pressionando-se
ENTER
novamente ela é retomada de onde parou.
Os últimos dez segundos são pontuados por cliques audíveis (parece mesmo que uma
bomba vai explodir). Quando a contagem chega a zero, o dispositivo apita e pisca
por 30 segundos. Pressionando-se
ENTER
os bipes param.
Apertando-se
+ e
- ao mesmo tempo, a contagem é interompida
e o contador é zerado. Isso funciona em todos os modos, inclusive no 'contador manual'
descrito mais adiante.
Se você iniciar a contagem com o mostrador em
00:00
, ele vai
entrar no 'modo cronômetro', contando para frente ao invés de
para trás. Não há alarme nesse modo. Se você der uma pausa e
depois retomar a contagem, ele continuará contando para cima,
mesmo se você usar as teclas
+ e
- para
reajustar o valor. Para que ele volte a contar para trás,
será preciso primeiro usar o comando de zerar o contador
(pressionar
+ e
- ao mesmo tempo) e depois
ajustar o valor inicial.
O desligamento automático entra em ação após 20 segundos de inatividade.
Se você pressionar as três teclas ao mesmo tempo, a taxa de atualização do mostrador vai sendo sucessivamente reduzida pela metade. Isso é útil para mostrar o princípio da multiplexação. Ela volta à taxa normal de 50Hz quando o dispositivo sai do modo de espera.
O estado da contagem é reflexito no pino
PD6
, disponível no contector
XTRNL_DEVICE
. Você pode conectar um circuito de potência nele para
controlar outros dispositivos.
O dispositivo opera em dois modos: simples e avançado,
descritos em mais detalhes abaixo. Essa distinção foi
criada porque alguns usuários se confundiam, entrando
sem querer no modo de contador manual quando o que
realmente queriam era zerar o contador.
Modo Simples
É o modo inicial quando o dispositivo é ligado pela primeira vez. Nesse modo há algumas restrições:
- As teclas - and + atuam apenas no contador dos minutos, de sorte que a resolução no ajuste é limitada a um minuto.
- Quando o dispositivo é ligado (ou melhor, quando ele acorda da hibernação), o contador é automaticamente zerado.
- O modo contador manual é desativado; os comandos para entrar e sair desse modo simplesmente zeram o contador.
Modo Avançado
Para entrar no Modo Avançado, segure as teclas
- and
ENTER
ao mesmo tempo por cerca de 15 segundos até ouvir os bipes.
Para sair do Modo Avançado e retornar ao Modo Simples, mantenha as teclas
+ e
ENTER
pressionadas por uns 15 segundos até ouvir os bipes.
Esse modo apresenta alguns recursos adicionais:
- Os botões de ajuste provêem resolução de um segundo: eles subtraem/adicionam primeiro um segundo de cada vez, então 10 segundos de cada vez, depois um minuto de cada vez, se você os mantiver pressionados.
- O contador não é automaticamente zerado quando o dispositivo acorda; ele mantém o mesmo valor de antes de ir dormir. Você pode precisar zerá-lo manualmente pressionando - e + ao mesmo tempo se você não quiser continuar a contagem anterior.
- Pressionando-se rapidamente - e
ENTER
ao mesmo tempo ativa o modo contador manual, descrito abaixo. Para voltar ao modo timer/contador, pressione brevemente as teclas + e ENTER
ao mesmo tempo.
Modo Contador Manual
Esse modo é útil para contar coisas, como por exemplo inventários de estoque, sem medo de perdermos a conta no meio de uma contagem longa.
Para tornar visualmente evidente que estamos no modo contador, os "dois pontos" desaparecem e os zeros à esquerda não significativos também não são exibidos.
Para contar um item, pressione e solte a tecla
ENTER
. Você pode mantê-la pressionada indefinidamente. Não há repetição automática: a contagem só acontece mesmo quando você solta a tecla.
Para contar para baixo (para corrigir um erro, digamos), pressione a tecla
-. Como no caso acima, não há repetição automática e a contagem vale quando a tecla é liberada.
Nesse modo, a tecla
+ não faz nada. Ela é útil para acordar o dispositivo sem perturbar a contagem.
Outras Aplicações
Pode-se dar uma personalidade totalmente diferente ao dispositivo reescrevendo-lhe o
firmware. Algumas idéias:
- Conectando-se um fotointerruptor no sinal
XTRNL_DEVICE
, pode-se usá-lo como contador de eventos, contador de voltas em bobinas, odômetro, tacômetro, velocímetro, taxímetro, e por aí vai.
Se você escrever algum
firmware desses e não se importar em compartilhá-lo, mande pra mim para que eu crie um
link daqui para o seu site e/ou o hospede aqui.
Licença e Downloads
Este projeto é disponibilizado sob a licença 'Atribuição-Uso / Não-Comercial / Compatilhamento pela mesma licença' versão 2.5 do Creative Commons:
O
bootloader foi adaptado do projeto
Atmex da
LadyAda e é licenciado nos termos da Licença Pública Geral GNU v2:
Comentários, Sugestões, etc.
Se você construir um dispositivo desses, eu gostaria de saber. Da mesma forma, se você tiver sugestões, críticas ou comentários, não hesite em me mandar um email:
topo