Pessoal bom dia/tarde/noite kkkkkkkk

Estou desenvolvendo uma aplicação bem simples para leitura através de sensores de temperatura e umidade. Como tenho algum conhecimento (pouco) em eletrônica e programação, sei que obter esses dados a cada 5 segundos com um Arduino (ATMega328P-AU) rodando a 16 MHz, precisando de componentes externos (cristal e capacitores), gastando uma energia desnecessária, é como matar um mosquito com uma bala de canhão kkkkkkkk

Para isso, dei uma pesquisada e consegui fazer com que o microcontrolador trabalhasse a uma frequência de 8 MHz, conforme tutorial abaixo:

Arduino 8 MHz

Agora, a pergunta é: Utilizando o microcontrolador ATMega328P é possível fazê-lo trabalhar a uma frequência de 1 MHz ? Pois de acordo com o datasheet do microcontrolador, o consumo de corrente seria aproximadamente 1,6% do necessário para manter o mesmo chip ativo em 16 MHz. E além disso, tenho a intenção de rodar toda a aplicação (uC + sensores) com uma bateria de relógio comum de 3.0 V.


Alguém já rodou a 1 MHz ou leu algo que possa me ajudar ?

Desde já, valeu galera :)

############################################################################

Pessoal, depois de muito trabalho, descobri o imenso passo a passo pra escrevermos um bootloader novo para o Arduino (ou melhor, para o ATMega328P). Como contribuição, deixo um .pdf disponível Construindo um Bootloader – 1 e 8 MHz [ATMega328P] . 

Usem e abusem do conteúdo, pois foi um parto acertar todos os detalhes técnicos (que ainda faltam alguns, então revisões virão \o/)

Obrigado aos amigos que me ajudaram a garimpar os pensamentos pra resolver este problema.

Grande abraço.

############################################################################

Exibições: 1678

Responder esta

Respostas a este tópico

Osvaldo,

Eu utilizo no meu projeto um ATMEGA328P-MMH com clock interno 8Mhz dividido por 8 via fusebits e clock externo de 32.768Khz para o controle de interrupção com mais precisão.

Você pode mudar o fusebits para 8Mhz interno ou externo e dividir por 8 via fusebits, mas terá que ter um bootloader preparado para 1Mhz se for programar via bootloader.

Abs

Mauricio Ortega

Ola Mauricio, valeu pelas dicas.

Ainda sou muito novo nesta área de programação (baixo nível) que envolve bootloader e afins, mas mesmo assim irei pesquisar sobre como fazer o que você mencionou acima.

Valeu :)

Projeto interessante.

Programe-o antes no modo normal com o clock de 8 MHz. 

E depois troque o cristal. Será que funciona ?

As rotinas baseadas no clock, deverão ser reajustadas. 

Fiquei curioso.

José Gustavo,

Desta forma você não conseguira gravar via bootloader, pois o boot é dependente do valor do cristal, principalmente a serial no momento de carregar o software.

Via ISP vai de boa, mas como você disse tem que mudar os tempos no firmware, não é o correto a fazer, mas....

O correto é trocar o bootloader, assim continua com a característica de um Arduino, podendo fazer o upload via serial.

Abs.

Mauricio Ortega 

Nunca fiz essas coisas com o Arduino, mas normalmente para baixar drasticamente o consumo se vc não terá tarefas a realizar se usa o sleep+watchdog.

A ideia é programar o watchdog para resetar o microcontrolador e usar um comando que trava ele, baixando o consumo para uma fração ridícula do que era antes.

Ele acordaria periodicamente para ver se já é hora de trabalhar, caso negativo dorme novamente.

Por isso mtos aparelhos são ligados com pressionamento longo do botão power. Acontecia de ele só ler o botão por ex a cada 1s então um pressionamento curto falhava as vezes. Foi mudado para um pressionamento longo assim garante que pega um momento de lucidez e ainda mais um pouco.

Vide:

http://www.atmel.com/images/doc7903.pdf

http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__avr__slee...

Obvio, qualquer pino ficara no estado anterior, então para que vc realmente elimine qualquer consumo precisa desligar leds e coisas assim. Recomenda-se colocar um transistor na forma de "chave geral" para desligar tb os sensores. As portas podem voltar para o treestate. Conforme o dispositivo tb não faz diferença.

  Eduardo H,

Você está correto,  dormindo o consumo cai drasticamente, mas em meu caso eu queria que em funcionamento ele consumisse +-1mA, por este motivo eu mudei a velocidade do clock e a tensão de alimentação para 1,8V.

Abs

Mauricio Ortega  

Maurício,

Estou aqui procurando informações e batendo a cabeça com esses fusebits kkkkkkk

Pelo que consegui entender, devo carregar o bootloader de 8 MHz e alterar no arquivo "boards.txt" os parâmetros abaixo?

atmega328bb.bootloader.low_fuses=0xE2

- atmega328bb.bootloader.high_fuses=0xDA

- atmega328bb.bootloader.extended_fuses=0x05

- atmega328bb.build.f_cpu=8000000L

Que deverão ficar:

- atmega328bb.bootloader.low_fuses="0xE2/8"

- atmega328bb.bootloader.high_fuses="0xDA/8"

- atmega328bb.bootloader.extended_fuses="0x05/8"

- atmega328bb.build.f_cpu=1000000L

Estou ligeiramente perdido neste mundo de bootloaders :x

O caminho é este mas vc tem que alterar os fusibts com um programador especifico para Atmel.

Abs

Mauricio Ortega

Mauricio,

Achei este tutorial que diz "passo a passo" como realizar estas operações. Acho que agora vai kkkkkk

Muito obrigado pelas dicas e pela ajuda, iria demorar algumas semanas para entender se não fosse sua ajuda.

Obrigado.

Não esqueça de encontrar um bootloader para 1MHz.

Abs

Mauricio Ortega

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço