Разгон ATmega328 (30 МГц)

Этот проект больше ориентирован на получение удовольствия, чем на что то полезное, потому что ATmega328 не предназначен для тактовой частоты выше 20 МГц (см. даташит).

В этом «эксперименте», вместо кварца 16МГц (как в Arduino), был использован 29.491MHz, подключений к 100nF конденсатору для фильтрации уровней постоянного тока. Сигнал с конденсатора идет на вывод XTAL1 ATmega. Вывод XTAL2 не подключен.

На рисунке ниже показан сигнал c генератора после конденсатора:

Для проверки разницы в скорости до и после разгона, я использовал следующий код с Arduino IDE (UNO/Optiboot загрузчик). Код простейший, он просто дает на контакты регистра B высокий и низкий уровень.

PS: Чтобы загрузить программу, был использован кварц 16 Мгц вместо генератора 30 МГц. Я ещё не знаю, почему это необходимо, потому что генератор не работает во время загрузки. Возможно, нужно настроить AVRDUDE (с помощью IDE?), чтобы скорость загрузки была такой же. Любая помощь будут оценена.

void setup() {
DDRB = 0xFF;
}

void loop() {
while(1){
PORTB = 0x00;
PORTB = 0xFF;
}
}

Во всяком случае, взгляните на результаты обеих скоростей:

Кварц 16 МГц:

Генератор 29.491 МГц:

Частота идет от 4 МГц до почти 6 МГц. Очень интересный прирост. Но нормально ли работает микроконтроллер?

Наверное, нет! Или он, вероятно, покажет плохую работу когда-нибудь или в некоторых ситуациях. Но, потому что это делается больше для развлечения, чем для производства медицинских приборов, почему бы нам не проверить последовательную связь?

Последовательная связь

Прежде чем мы сможем использовать последовательную связь, необходимо изменить параметры работы, так что бы тайминги могли соответствовать новой тактовой частоте: 29.491МГц (уже не 16 МГц).

Так как для кодинга и загрузки был использован Arduino IDE, файл boards.txt, в папке Hardware должен быть изменен, определяющий новую тактовую частоту. В этом «эксперименте», была создана новая плата в списке плат, но было бы достаточно просто изменение частоты UNO платы (ATmega328 была использована с UNO загрузчиком).

Обратите внимание на 35 строку.

Перед загрузкой кода, была выбрана новая плата, так что МК может «знать», с какой частотой он работает. Таким образом, возможно рассчитать время для правильной скорости передачи данных. В данном случае: 9600.

void setup() {
Serial.begin(9600);
}

void loop() {
if (Serial.available()>0){
Serial.write(Serial.read());
}
}

Код очень простой, он просто получает символ и повторяет его.

Это работает! Символы повторяются в Serial Monitor просто отлично!

Насколько полезен разгон?

Вероятно, это больше для обучения и удовольствия, но лично я думаю, что это может улучшить проект Генерация цветного VGA сигнала на Arduino, опубликованный здесь, в GL:

При более высокой частоте можно будет иметь больше пикселей в созданном изображении. Но это в следующем хаке! 🙂

Добавить комментарий

Ваш адрес email не будет опубликован.