Após ter tido vários problemas com a temporização do micro, tal como prova a semana de teste que passou não é fácil obter um tempo certo.
Hoje coloquei de lado a utilização do sleep mode quando vi que alimentado a 4V, com clock de 125KHz e usando o Timer1 para "cronometrar" consumia apenas 400uA. Não é tão bom como os 256uA do sleep mode, mas é muito mais preciso assim.

Agora estou a utilizar mudança da freq de clock a meio do programa, para reduzir o consumo. Durante as medições e escrita na EEPROM, utilizo 2MHz, mas para "passar o tempo" baixo para 125KHz (INFO).

Usando um timer a contar ciclos de clock, faz com que consiga ter mais precisão temporal do que usando o INTRC de 31KHz do Watch Dog Timer.

Esta é a pequenina parte do código que não existia e foi acrescentada hoje para fazer com que tudo funcione certo.

SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_4);
(...)
setup_oscillator(OSC_125KHZ);
#USE delay(clock=125KHz)
(...)
SET_TIMER1(0);
ENABLE_INTERRUPTS(INT_TIMER1);
while(!acorda);
DISABLE_INTERRUPTS(INT_TIMER1);
(...)
#INT_TIMER1
void tempo()
{
j++;
if(j==108)
{
acorda=1;
}
}
Até ao momento, passadas já 4h30min de teste, ainda não ganhou nem perdeu um segundo de "erro", o que a meu ver é óptimo!


Próximos passos:

Esta semana que se segue vou preparar todos os componentes para a construção do Radiation Shield.
Infelizmente a montagem "definitiva" do circuito está dependente de um conversor USB-Serial que ainda não chegou. Não gosto de avançar com a produção da PCB sem ter tudo a funcionar na breadboard.
Lá para a "parte 20" já devo estar muito perto de terminar.

2 Responses so far.

  1. vamos colocar fotos, análise energética teórica, screen-grabs de osciloscópio com os ciclos de firmware e as correntes gastas?

    muito importante, para aprendizagem pessoal!


    keep up the good work!

  2. Tenho de fazer isso.
    Algum sitio com instruções.

Enviar um comentário