Fala Galera,

Essa é mais uma curiosidade/brincadeira do que outra coisa porque o ATmega328, segundo o datasheet pode operar até 20MHz, então 30MHz já é forçar a barra. :) Além disso, não estudei nada a fundo para implementar, então podem malhar!

Nesse "experimento" foi usado um oscilador de 29.491MHz com sua saída passando por um capacitor de 100nF para filtrar DC. O sinal obtido foi ligado direto ao pino XTAL1, enquanto que o XTAL2 foi deixado desconectado.

A imagem abaixo mostra o sinal obtido no oscilador:

Para vermos a diferença de velocidade bruta, passei a seguinte programação utilizando a IDE do Arduino (boot de UNO). Bem simples, ela apenas sobre e desce os pinos do registrador B.

Obs: Para passar a programação, foi recolocado o cristal de 16MHz, sendo trocado novamente após o upload. Não estudei o porquê que o upload não funciona com o oscilador de 30MHz, mas provavelmente o AVRdude deva ser configurado (via IDE?) para corresponder à velocidade de resposta do bootloader com o oscilador mais rápido. Se alguém puder contribuir neste ponto...

void setup() {                

    DDRB = 0xFF;

}

void loop() {

  while(1){

    PORTB = 0x00;

    PORTB = 0xFF;

  }

}

De qualquer forma, veja a diferença:

COM CRISTAL DE 16MHz:

COM OSCILADOR DE 29.491MHz:

Ou seja, a frequência na saída subiu de 4MHz para quase 6MHz. Um ganho interessante. Mas o microcontrolador está funcionando corretamente?

Provavelmente não, ou provavelmente vai dar problema em algum momento/situação. Mas já que é de brincadeira mesmo, porque não testar a comunicação serial?

Comunicação Serial

Como curiosidade, foi testada a comunicação serial. Mas para isso, é preciso alterar as configurações para que os tempos correspondam à frequência de clock utilizada agora 29.491MHz, e não mais 16MHz.

Como foi utilizada a IDE do Arduino para a programação. O arquivo boards.txt, dentro da pasta "Hardware" precisou ser alterado, especificando agora uma nova frequência de operação (clock). Neste teste, foi criada uma nova placa para o menu "board" da IDE, mas bastaria alterar a frequência da placa UNO, já que o ATmega está com bootloader de UNO:

Repare na linha 35, a frequência foi alterada.

Ao passar a programação abaixo, foi selecionada a placa nova criada, para que o microcontrolador "saiba" a que frequência está operando, a fim de calcular os tempos corretamente, e o baud rate da comunicação serial. No caso 9600.

void setup() {                

    Serial.begin(9600);

}

void loop() {

 if (Serial.available()>0){

   Serial.write(Serial.read());

 }

}

Um programa bem simples que apenas recebe e repete o caracter recebido.

Funcionou! Os caracteres foram apresentados no Serial Monitor corretamente!

No que o overclock pode ser útil?

Provavelmente mais para aprendizado e estudo, mas pessoalmente, acho que pode melhorar bastante o projeto Gerando Sinal VGA com Arduino, publicado no Lab há um tempo atrás:

Com uma frequência mais alta, será possível obter muito mais pontos/definição na imagem gerada.

Mas isto é para uma próxima! :)

Valeu galera!!!

Exibições: 7308

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Ricardo Napoli em 14 outubro 2014 às 21:11

Arduino overclocking with Liquid Nitrogen cooling 65.3Mhz@-196°C

30 MHz é um passeio no parque ...hahahah

https://www.youtube.com/watch?v=KVRvWmcxnA0

Comentário de Nilton em 10 março 2013 às 0:46

Mt louco

testei um atmega8-8pu e consegui fazer ele rodar  com crystais de 29mhz.

com um programa q pisca led "SOS em codigo morse" e ele piscou bem mais rapido.

show

Comentário de Marcelo Rodrigues em 17 janeiro 2013 às 10:32

Daniel,

Boa! Deve ser isso mesmo. Vou tentar...

Muito obrigado!

Abraço!!

Comentário de Daniel Omar Basconcello Filho em 16 janeiro 2013 às 16:09

Primeiro parabéns pelo Artigo.

Queria também te dizer que o bootloader do arduino foi compilado para 16MHz, por isso que a placa não funciona para gravação quando você coloca o cristal de 30MHz.

Você pode fazer o seguinte: Baixe os fontes do bootloader do Arduino UNO, prepare a sua toolchain para compilar o hexa (GCC, winAVR, AVRDude, etc) e recompile trocando o FCPU para o clock do cristal que você quer usar. Eu uso o Eclipse para compilar AVR, escrevi um artigo para ensinar como usar o eclipse para fazer isso. Dê uma olhada aqui: http://www.robotizando.com.br/artigo_eclipseAvr_pg1.php

No mais, parabéns pelo Artigo!

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço