Estou trabalhando em um arduino personalizado que funcionará a 3,3 V sem reguladores ou chips USB (para consumo de energia). Ouvi dizer que fazer overclock no chip em 16 MHz / 3,3 V geralmente é bom, mas eu gostaria de permanecer dentro das especificações de qualquer maneira.
Primeiro: para rodar em 8 MHz, só preciso substituir o cristal? Ou há mais alguma coisa que eu tenho que fazer?
Segundo: preciso fazer alterações no código para refletir a nova velocidade? Estou usando conexões seriais, SPI e I2C neste projeto, juntamente com o sistema operacional NilRTOS e funções millis / delay. Alguma dessas coisas será quebrada? O código funcionará visivelmente mais devagar?
Terceiro: como posso programar o chip? É possível programá-lo em um Arduino Uno a 16 MHz e depois transplantá-lo para o arduino personalizado?
Quarto: o consumo de energia mudará em 8 MHz?
Obrigado!
Respostas:
A fórmula parece ser volt * 5.9-6.6 = mhz (válida entre 1.8v e 4.5v), então em 3.3v, isso daria 12.8mhz. Esteja ciente de que, se você estiver rodando a 12,8 mhz, QUALQUER queda abaixo de 3,3 v PODE causar problemas (e muito difícil de diagnosticar também!) Ou PODE se safar.
No entanto, os chips Arduino Atmega328p têm uma detecção de "escurecimento" definida em 4,3v - qualquer queda abaixo disso, o chip é desligado. Você pode solicitar a um provedor de serviços de Internet (AKA ICSP) que troque os fusíveis - vá para http://www.engbedded.com/fusecalc/ para descobrir como definir os fusíveis. Você também pode usar o ISP para ler os fusíveis atuais ou reprogramar o chip sem uma placa Arduino - todos os meus projetos têm um cabeçalho de 6 pinos. Se você fizer isso, antes de reprogramar usando a placa Arduino, precisará "Burn Bootloader" (no menu Ferramentas). Observe que a programação ainda pode ser feita via IDE do Arduino.
Como alternativa, se você quiser ficar "leve" (e possuir um ISP), poderá mudar os fusíveis para usar o relógio interno de 8 mhz - isso libera 2 pinos extras também! Lembre-se, no entanto, de que o relógio interno pode variar 1,2 horas por dia (= 5%), comparado a 1,7 segundos por dia (= 20 partes por milhão) em um cristal de quartzo típico. Se você não usá-lo para cronometragem, isso provavelmente não importa.
Você precisará fazer alterações no tempo, para o seu código - você precisa adicionar um boards.txt com as configurações corretas para o seu chip / velocidade do relógio, etc. - você pode copiar as configurações da entrada do quadro, alterar o nome e alterar a configuração "build.f_cpu"; reinicie (ou inicie) o seu Arduino IDE, vá em "Ferramentas-> Placa" e selecione a placa que você adicionou.
Você pode ativar / desativar o chip na placa e reprogramar a mesma (observe que a placa selecionada em Ferramentas-> Placa é a placa FINAL, não a placa de programação). Cuidado ao conectar / desconectar - eventualmente, você VAI dobrar os pinos! Como alternativa, você pode usar o ISP (ICSP), como mencionado acima - muito recomendado. A programação do provedor também funcionará se o chip for o padrão de fábrica, desde que tenha um relógio funcionando.
A quantidade de energia usada pelo chip depende muito do que você faz com ele - não apenas a velocidade do relógio, a fonte do relógio, etc., mas também os modos de suspensão. Se você estiver dormindo muito, pode demorar menos quando estiver mais rápido do que em um ritmo mais lento - se quase todo o seu tempo estiver adormecido, o consumo de energia deverá ser contado por ciclo de relógio, não por segundo - se seu relógio estiver com metade da velocidade e meia corrente, você desenha a mesma corrente por instrução. Como o resto do seu tempo é gasto no sono, você não recebe nenhum benefício. Consulte http://www.gammon.com.au/power para obter uma análise muito boa do uso de energia, dicas sobre como economizar energia, etc.
Se você desacelerar demais o relógio, o serial e o i2c podem se tornar não confiáveis (a menos que você diminua a velocidade), mas eu esperaria poder diminuir para 1mhz antes que isso seja um problema - um chip de 1mhz tentando fazer 9600bps possui 104 instruções por bit de dados transferidos. O i2c roda a 100khz, portanto, você recebe 10 instruções por bit (a 1mhz) - possivelmente pressionando-o. 8mhz deve estar bem. Teste, teste, teste.
ATUALIZAÇÃO: Existem 3 configurações possíveis para a detecção de escurecimento - existem 3 valores possíveis para o AtMega328p: desativado, 1,8v, 2,7v e 4,3v. Fiquei com a impressão (acima) de que os Arduinos eram normalmente configurados em 4,3v; aparentemente esse não é o caso (veja o comentário abaixo). Lembro-me de ter visto em algum lugar que havia detecção de queda de energia. Isso é algo a ter em mente, se o seu arduino for redefinido, especialmente ao colocar cargas maiores na bateria (motores em funcionamento, leds múltiplos, etc.).
fonte
Não, execute o oscilador interno conforme sugerido pela AMADANON Inc.
Como alternativa, defina o fusível "dividir o relógio por 8" (que o executaria em 2 MHz a partir de um cristal de 16 MHz) e, em seguida, no código, altere a divisão novamente para 2. ie.
Ou, para programar em outro Uno, deixe o fusível em paz, programe a 16 MHz e depois diminua o relógio no chip de destino, esperando que funcione o suficiente a 3,3V para executar a primeira instrução. O mais seguro seria instalar apenas um cristal ou ressonador de 8 MHz na placa de destino. No entanto, se o tempo não for crítico, execute o oscilador interno.
Se você informar ao IDE que possui um processador de 8 MHz (por exemplo, um Lilypad), ele deverá ajustar atrasos, cálculos de taxa de transmissão etc.
I2C e SPI têm auto-clock. Eles podem ser executados em uma variedade de taxas. Duvido que haja algum problema com eles. Quanto ao serial, desde que os cálculos sejam feitos corretamente, uma ampla faixa de taxas de transmissão ainda deve estar disponível.
Bem, sim, ele será executado a meia velocidade em comparação com 16 MHz.
Você pode fazer isso. Ou você pode conectar um cabeçalho ICSP ou FTDI e programá-lo in situ.
Exemplos aqui: http://www.gammon.com.au/breadboard
Sim, é um pouco reduzido.
Você pode reduzi-lo consideravelmente mais usando outras técnicas descritas em http://www.gammon.com.au/power e mencionadas pela AMADANON Inc.
fonte