Перейти к содержанию

WetCrow

Members
  • Постов

    8
  • Зарегистрирован

  • Посещение

Весь контент WetCrow

  1. Заработало! Помогла замена контроллера -- похоже, я умудрился спалить ему что-то.
  2. Доброго дня. У меня похожая проблема. Завёл отдельную ветку на этом же форуме: Буду очень рад, если вы зайдёте туда и посмотрите, правильно ли я включаю асинхронный режим и нет ли других проблем.
  3. @snn_krs , увы, не помогло. Кстати: если закомментировать строку ASSR |= 1 << AS2; (которая, собственно, включает асинхронный режим), таймер работает (разумеется, с другой частотой). Нашёл похожую тему: Только там асинхронный режим вообще не стартовал, из-за неправильного кварца, а у меня он, вероятно, работает от каких-то помех или что-то в этом роде. После прочтения у меня возникло два вопроса: 1. Как определить, правильный ли у меня кварц? Выглядит он как цилиндр белого металла, диаметром 3 мм и высотой 8 мм, без каких-бы то ни было опознавательных знаков. Покупал в мелком интернет-магазинчике, нацеленном на ардуинщиков и электронщиков. 2. В той теме есть идея проверить, возникают ли колебания на кварце с помощью осциллографа. Увы, его у меня нет, но я подключил его в протеусе. Быть может, "я просто не умею его готовить", но с параметрами по-умолчанию он показывает гладкую кривую на обоих выходах. Должно быть иначе?
  4. В даташите, в разделе Errata, есть такой пункт: Поставил конденсаторы на 22 пФ. @snn_krs , упростил программу, как вы предлагали. Пока всё безрезультатно: по-прежнему мигает раз в несколько секунд не периодично. Воспроизвести раннее поведение, с миганием в 1.5 раза чаще положенного, не удалось. В протеусе по-прежнему всё работает идеально, как с кварцем, так и вовсе без него. К этому сообщению прикладываю код. Схема элементарна -- помимо кварца с конденсаторами на 22 пФ, соединяющими его ноги с землёй, ещё есть светодиод с резистором на PB1. P.S.: если вдруг это имеет значение, у меня, скорее всего, Atmega8-PU. (По крайней мере, это утверждает сайт магазина, где брал). test_async_timer.cpp
  5. Сейчас нет таких конденсаторов. Если я хочу использовать встроенные, какие ещё фьюзы, помимо CKOPT, нужно менять? В даташите указано: Значит ли это, что я должен установить CKSEL в указанное значение, или это только для случая, когда нужно весь контроллер тактировать от этого таймера?
  6. Перечитал ещё раз даташит, и вот что там написано: Решил делать всё чётко "по бумажке": TIMSK &= ~((1 << OCIE2) | (1 << TOIE2)); // 1. Disable the Timer/Counter2 interrupts by clearing OCIE2 and TOIE2 ASSR |= 1 << AS2; // 2. Select clock source by setting AS2 as appropriate // 3. Write new values to TCNT2, OCR2, and TCCR2 TCNT2 = 0; OCR2 = 0xFF; TCCR2 = 0b000000101; // set timer prescaler while (ASSR & 0b111) {}// 4. To switch to asynchronous operation: Wait for TCN2UB, OCR2UB, and TCR2UB TIFR &= 0b00111111; // 5. Clear the Timer/Counter2 Interrupt Flags TIMSK |= 1 << TOIE2; // 6. Enable interrupts, if needed Результат: Контроллер засыпает на долгое время -- видимо, на инструкции while. После этого прерывания возникают, но через неравные большие промежутки времени, порядка 30 секунд и более. Замена МК и кварца ничего не изменила.
  7. Добрый день! Пытаюсь настроить на Atmega8 Asynchronous Clock. Цель -- сделать часы. По задумке, мк работает на частоте 1МГц (фьюзы не трогаю, оставляю заводские значения), к пинам TOSC1/TOSK2 подключается кварц на 32.768 кГц, а Timer2 настраивается таким образом, что генерирует прерывания один раз в секунду. Вот, что я делаю: ASSR |= 1 << AS2; TCCR2 = 0b00000101; TIMSK |= 1 << TOIE2; sei(); Нужно ли подключать кварц с конденсаторами, или без -- не понял. В даташите информации не нашёл. Пробовал и так, и эдак -- разницы не заметил. Что получилось: В Протеусе всё вроде работает правильно, однако, даже если отсоединить кварц, это ни на что не влияет. На макетной плате схема работает раза в 1.5 быстрее, чем нужно; опять таки, отсоединение кварца ничего не меняет. В чём я ошибаюсь, чего не учитываю? К сообщению прикладываю файл прошивки и протеуса. Примечания: в Протеусе сделал имитацию дисплея на светодиодах, так как встроенный вариант не работал корректно. Для того, чтоб цифры мигали медленнее, можно раскомментировать строку "#define DEBUG_BLINKING" -- иначе в протеусе не рассмотреть, что получается. Пишу на C++ под avr-g++, впрочем, никаких фишек языка не использую. clock.cpp clock_build_with_LEDs.pdsprj
×
×
  • Создать...