Делитель частоты кварца

Тема в разделе "Микроконтроллеры AVR", создана пользователем forfrends, 21 апр 2017.

  1. forfrends

    forfrends Нерд

    Всем добрый день.
    Делаю радиоуправление на микроконтроллерах и столкнулся с проблемой:
    передатчик: Attiny2313 кварц 8 мгц (максимальная частота)
    приемник; Atmega8 ... и оказалось что у меня нет в наличии еще кварца на 8 мегагерц. Есть кучка 12 мгц и 1 шт. на 16 мегагерц.
    Можно ли как-то выставить в фьюзах делитель частоты на Меге8 чтобы подключить кварц на 16 мгц, а получить 8 мегагерц? Какие фьюзы выставлять?
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Смысл?Просто так поделить не получиться в свойствах проекта поменяйте частоту кварца перекомпильте и все.В принципе любой кварц может подойти код на Си не привязан напрямую к тактовой частоте.
     
  3. serg_admin

    serg_admin Гик

    В процессоре есть свой генератор на 8 MHz. У него погрешность конечно значительно выше чем у кварца. Кроме того его желательно калибровать перед использованием.

    Т.е. для работы процессору кварц не нужен.
     
  4. AlexU

    AlexU Гуру

    У ATmega8 нет делителя частоты, поэтому нет ни специальных фьюзов, ни регистров.
    У Attiny2313 максимальная частота 20 МГц. У версии 'V' 10 МГц, но это при пониженном напряжении, поэтому можно попробовать запустить на частотах до 20 МГц при питании от 5 V (хотя работа может быть не стабильной, а может и вообще не запустится).
    По крайней мере есть подтверждённые успешные запуски ATmega8L на 16 МГц, хотя у версии 'L' предел 8 МГц.
    Так что можно попробовать всё хозяйство запустить на 12 МГц, раз уж их "целая куча".
    Функции, связанные с подсчетом времени/задержками без использования таймеров, завязаны на тактовую частоту. Для определения значения тактовой частоты используется макрос F_CPU.
     
  5. У меня Attiny2313 8 МГц внутренний генератор.
    Пробовал в таких вариантах:
    Код (C++):
    #define F_CPU 8000000
    #define F_CPU 8000000L
    #define F_CPU 8000000UL
    Но функция
    Код (C++):
    delay(1000);
    длится около 3-4 секунд.
    Что я сделал не так?
     
  6. Unixon

    Unixon Оракул Модератор

    Фьюз CKDIV8 ?
     
  7. forfrends

    forfrends Нерд

    Всем спасибо за ответы. Решил поэкспериментировать, ставил на Тиньку (передатчик) разные кварцы - от 8 до 24 МГц - Аттини2313 успешно работала на любом кварце, только чем выше частота, тем отзывчевее управление было. Оставил кварц на 24 Мгц. На Мегу8 (приемник) пробовал ставить разные кварцы (8-16 Мгц), разницы в работе не увидел. Оставил кварц на 16 МГц.
     
  8. AlexU

    AlexU Гуру

    Во всех трёх случаях Вы задавали одну и ту же частоту -- задержка будет одна и та же. Остаётся понять вопрос -- "что Вы сделали не так"?
     
  9. Да действительно я не заметил что делитель стоит.
    Теперь работает правильно.
    Большое СПАСИБО.