Estou seguindo este tutorial , programando o ATtiny85 com um Arduino, usando-o para tocar alguns tons (através de um alto-falante piezo). Estou tendo dificuldades para obter os tons no tom certo (estou criando as formas de onda manualmente, pois a função tone () não é suportada no ATtiny85).
Acredito que o problema pode estar relacionado a diferentes velocidades de clock no Arduino e no ATtiny. Entendo que a velocidade do relógio pode ser alterada no ATtiny, como faço isso usando o ambiente do arduino?
Respostas:
Acredito que o software Arduino (bibliotecas e tudo) pressupõe que você esteja operando em 16MHz. Se você aplicar essa suposição ao relógio em que está realmente executando ... as coisas devem dar certo. Supondo que você esteja executando o Tiny85 em seu oscilador interno, acho que ele roda a 1 MHz, então multiplique todas as suas declarações de atraso (e outras noções de tempo) por 16.
Se você precisar de uma precisão melhor do que o oscilador interno fornece, pense em usar um cristal externo ou um ressonador, mas precisará alterar as configurações de fusíveis do AVR para que funcionem, e acho que você precisará de um programador como o AVRISP mkII para fazer isso com o AVR Studio (minha recomendação).
Eu não sei muito sobre o esboço do ArduinoISP, mas para mim parece um pouco complicado o protocolo ISP carregar um programa no chip de destino (não no Mega328 integrado), não tenho certeza de que ele esteja equipado para manipular fusíveis. O ArduinoISP está documentado aqui http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Observe que você não pode usar um UNO atualmente para executar o esboço do ArduinoISP. Não me parece que você possa usar o esboço para tornar o Arduino uma interface viável para usar as ferramentas da GUI do AVR Studio.
EDIT : Parece que as coisas foram atualizadas e uma UNO é viável para o ArduinoISP agora - obrigado pelos comentários
fonte
delay(20)
insted dedelay(40)
na sua definição devoid heartbeat()
.)Estou usando o Arduino UNO + ArduinoISP com êxito.
Adicione
-U
sinalizadores ao seuavrdude
comando para definir um ou todos os três fusíveis ATtiny.A seleção do relógio é feita em bits [3: 0] no terceiro fusível ('Fuse Low Byte'). Defina-os da seguinte forma para fazer uso de um cristal externo (de 8 MHz ou mais rápido):
Sua definição (eu deduzo) deve ser algo como: [Fuse Low Byte]: [write]: [hex value]: [set manualmente]
O valor padrão para os quatro bits altos desse byte é
0110
, então deixe o6
in0x6f
como está e altere apenas o segundo dígito, of
(seu valor padrão é2
).NB: Se os seus processos demoram mais ou menos do que o esperado, verifique o prescaler relógio e sua definição de F _ CPU.
fonte
-U lfuse:w:0x6f:m
opção avrdude acima . Vou precisar redefini-lo usando uma configuração de alta tensão. Portanto, uma palavra de cautela para as pessoas (como eu) que estão tentando redefinir os fusíveis sem saber o que estão fazendo.Tente usar o tutorial relacionado do mesmo grupo (High-Low Tech) do MIT, intitulado Programming an ATtiny w / Arduino 1.0 .
Um resumo rápido: no menu Ferramentas-> Placa no IDE do Arduino, selecione o ATtiny85 e a frequência que você deseja executar (relógio interno de 1 ou 8 Mhz ou cristal externo de 20Mhz) e use o menu Ferramentas -> Gravar carregador de inicialização " Eu acredito que a seleção da placa de velocidade desejada modifica a maneira como o delay () e outras funções do Arduino relacionadas ao tempo funcionam para sincronizar com a velocidade do relógio.
Eu mesmo tive sucesso com essa abordagem usando alguns chips ATtiny84. O programa simples de piscar é fixo, bem como o tempo mais sensível necessário para controlar manualmente os pulsos enviados para um servo usando delayMicroseconds ().
fonte
Parece que você está usando o ArduinoISP, tente usar o AVR Studio ou as opções de linha de comando para
avrdude
. Dependendo de como o ArduinoISP foi escrito, ele pode funcionar como um Atmel AVRISP mkII ou similar.fonte
As configurações padrão de fusível para o ATtiny85 são: lfuse 0x62, hfuse 0xdf, efuse 0xff. Isso usa o oscilador RC (8 MHz) interno com "dividir por 8", portanto o relógio é de 1 MHz.
Consulte http://www.engbedded.com/fusecalc para obter mais configurações de fusível.
Você ainda pode usar o avrdude diretamente para alterar as configurações de fusível do seu ATtiny85, mesmo quando usar um ArduinoISP como programador.
Se você acabar trocando manualmente o fusível para alterar o relógio, edite a
attiny85.build.f_cpu
linha do seu arquivo [arduino_folder] \ hardware \ attiny45_85 \ boards.txt.fonte
Acho que você pode definir os fusíveis com o ArduinoISP, mas não com o Arduino IDE, mas com o avrdude, verifique este link . Nunca testei eu mesmo.
O tutorial diz explicitamente que você pode usar o Arduino UNO e eu o testei e funcionou, para que eu possa confirmar isso, para que a página ArduinoISP esteja desatualizada e o aviso da UNO deva ser ignorado. Se o seu UNO foi um do primeiro lote, você provavelmente tem um carregador de inicialização com defeito, precisará atualizar novamente o carregador de inicialização. Verifique esta página para obter mais informações (ignore os números de série, todas as minhas UNOs não eram dessa série e tiveram problemas).
As bibliotecas principais portadas que você baixou do tutorial foram escritas para usar o oscilador interno de 1 MHz (confirmado no arquivo boards.txt), portanto, talvez o problema de temporização possa estar nas bibliotecas principais portadas ou no seu código.
Atenciosamente
fonte
Escolha uma placa ATTiny no "gerenciador de placas" que inclui a ATTiny85. Isso está no menu "Ferramentas". Eu acho que isso inclui "PLL interno de 16 MHz" agora. (Você pode instalar um em http://drazzy.com/package_drazzy.com_index.json )
Selecione ATTiny85 explicitamente, se necessário.
Escolha um relógio. Até você saber mais, escolha um relógio interno .
Clique em "Burn Bootloader" como um item de menu.
Cuidado, talvez você não consiga mais programar o MCU se escolher valores muito baixos. Se essa é sua intenção, faça isso por último, a menos que você tenha peças de reposição ou um programador de alta tensão para reiniciar os fusíveis.
fonte