Skip to topic | Skip to bottom
www.postcogito.org
          ...sine propero notiones
Kiko
Você está aqui: Kiko > SistemasEmbutidos > TimerContador2313 Imprimível | fim do tópico


Start of topic | Skip to actions
English Version

O protótipo...
O protótipo em uma placa universal 10 x 5 cm.
Nessa versão não coloquei os conectores de saída.

...funciona legal
O firmware de contagem regressiva em ação.
Cores e tamanhos diferentes
Outras encarnações desse projeto com
mostradores diferentes

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


Você está aqui: Kiko > SistemasEmbutidos > TimerContador2313

topo

Creative Commons License   O conteúdo deste site está disponibilizado nos termos de uma Licença Creative Commons, exceto onde dito em contrário.
  The content of this site is made available under the terms of a Creative Commons License, except where otherwise noted.