Розгін ATmega328 (30 МГц)
Цей проект більше орієнтований на отримання задоволення, ніж на щось корисне, оскільки ATmega328 не призначений для тактової частоти вище 20 МГц (див. даташит).
В цьому «експерименті», замість кварца 16МГц (як в Arduino), був використаний 29.491MHz, підключень до 100nF конденсатора для фільтрації рівнів постійного струму. Сигнал з конденсатора йде на вивід XTAL1 ATmega. Вивід XTAL2 не підключений.
На малюнку нижче показаний сигнал з генератора після конденсатора:
Для перевірки різниці в швидкості до і після розгону, я використовував наступний код з 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:
При більшій частоті можна буде мати більше пікселів у створеному зображенні. Але це в наступному хаку! :)