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

DSCN1086.jpg

Цей проект більше орієнтований на отримання задоволення, ніж на щось корисне, оскільки ATmega328 не призначений для тактової частоти вище 20 МГц (див. даташит).

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

На малюнку нижче показаний сигнал з генератора після конденсатора:

DSCN1088.jpg

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

PS: Щоб завантажити програму, був використаний кварц 16 МГц замість генератора 30 МГц. Я ще не знаю, чому це необхідно, оскільки генератор не працює під час завантаження. Можливо, потрібно налаштувати AVRDUDE (за допомогою IDE?), щоб швидкість завантаження була такою ж. Будь-яка допомога буде оцінена.

void setup() {                
    DDRB = 0xFF;
}

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

В будь-якому випадку, погляньте на результати обох швидкостей:

Кварц 16 МГц:

DSCN1089.jpg

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

DSCN1087.jpg

Частота йде від 4 МГц до майже 6 МГц. Дуже цікавий приріст. Але нормально чи працює мікроконтролер?

Напевно, ні! Або він, ймовірно, покаже погану роботу коли-небудь або в деяких ситуаціях. Але, оскільки це робиться більше для розваги, ніж для виробництва медичних приладів, чому б нам не перевірити послідовний зв'язок?

Послідовний зв'язок

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

Оскільки для кодування та завантаження був використаний Arduino IDE, файл boards.txt, у папці Hardware має бути змінений, що визначає нову тактову частоту. У цьому «експерименті», була створена нова плата у списку плат, але було б достатньо просто зміни частоти UNO плати (ATmega328 була використана з UNO завантажувачем).

ScreenShot20121222at10_32_54PM.png

Зверніть увагу на 35 рядок.

Перед завантаженням коду, була вибрана нова плата, так що МК може "знати", з якою частотою він працює. Таким чином, можливо розрахувати час для правильної швидкості передачі даних. У даному випадку: 9600.

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

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

Код дуже простий, він просто отримує символ і повторює його.

Це працює! Символи повторюються в Serial Monitor просто відмінно!

Наскільки корисний розгін?

Ймовірно, це більше для навчання та задоволення, але особисто я думаю, що це може покращити проект Генерація кольорового VGA сигналу на Arduino, опублікований тут, в GL:
DSCN1666.jpg
При більшій частоті можна буде мати більше пікселів у створеному зображенні. Але це в наступному хаку! :)

Top