Свежие обсуждения
Микроконтроллеры

AVR начинающим - вопросы и ответы

1 4 68

Хотел узнать ,есть камень mega128 - какое назначение имеют выходы TOSC1 и TOSC2 18,19pin ?

 

Можно кварц подключить, часовой , например.

 

т.е. сделать точный таймер в программе ?

 

В последнем номере журнала, есть программатор для AVR. Хочу доработать свой Extra-PIC.
Правильно ли я понял алгоритм программирования (точнее некоторые "скользкие моменты):
До включения режима программирования на ноге RESET должна быть 1 (или она может просто "висеть в воздухе").
При включении режима, на ногу RESET подаётся сигнал низкого уровня, и с небольшой задержкой подаётся Vcc (нужна ли эта задержка, или она вообще должна быть "обратной", т.е. сперва - Vcc, а потом - RESET).
Сигнал MOSI имеет больший приоритет, по сравнению с сигналом MISO. Т.е. MOSI может влиять на MISO, а наоборот - нет.

Ну, и такой "побочный" вопрос. Можно ли вставлять чип в программатор, когда Vcc хоть и снято, но на остальных пинах программирования присутствуют логические уровни?

 

"Побочный" ответ - такие ситуации при программировании случались, последствий не было.

Если речь идет о низковольтном программировании (serial downloading):

1. Насчет приоритета MOSI перед MISO - честно говоря, не заметил На мой взгляд - две абсолютно независимые ноги.
2. Насчет порядка подачи сигналов - в принципе можно подавать Vcc и Reset как угодно, достаточно после подачи обоих сигналов выставить на Reset лог.1 (миллисекунд на 100), а затем перевести его в лог.0 - девайс перейдет в режим программирования.

Если будут вопросы - пишите (можно сразу на мыло). Свои программаторы для AVR я писал и делал сам по своим схемам, думаю, что подсказать что-то смогу.

 

chav1961: Каких именно прерываний - по переполнению или по OCR?

Все равно.

 

Объясните - как управлять выводом AVR ? Спрашивал там
http://www.radiokot.ru/forum/viewtopic.php?t=6637
вместо ответа спор разгорелся. Кто прав не ясно.

 

Вот это правильно:

Aheir:
Подведем итоги. PINx и PORTx - разные регистры МК. Соответственно, PINx содержит логические уровни на соответствующих выводах МК, PORTx хранит записанное туда вами. PORTx читается всегда одинаково (до тех пор пока вы его сами не перепишете), вне зависимости от изменения внешних сигналов, если мы хотим следить за происходящим во внешнем мире - читаем PINx. Регистр DDRx определяет направление порта в том смысле, что блокирует передачу на выход уровней PORTx, если порт настроен на вход. Примерно так. Несколько упрощенно, но, думаю, понятно.

 

Проблема в данном случае не в программе, а в симуляторе - Вы просто невнимательно смотрели. Для тех линий порта, у которых DDRB[i]=1, симулятор автоматически переносит выведенные биты из PORTB[i] в PINB[i], для тех линий, которые только вводные, значения PINB[i] при выполнении команд out PORTB,rNN не изменяются. В реальном микроконтроллере при выводе лог.1 на линиях PINB[5] и PINB[6] действительно появилась бы лог.1, т.к при этом на линиях должны были бы включиться подтягивающие резисторы, но симулятор, как видите, не настолько умный. Если хотите поотлаживаться, пощелкайте по битам PINB[i] мышкой, поустанавливайте нужные значения руками - сам симулятор их не установит. Вообще, симулятор - первый шаг к резиновой женщине

Касаемо прерываний от таймера (описываю для TIMER0 OVF):
1. В начало программы в обязательном порядке включается код со стр 46 даташита (полного).
2. В регистре TIMSK устанавливается бит 0.
3. В регистр TCCR0 записывается число от 0x01 до 0x05 (в зависимости от того, какой коэффициент деления требуется, стр 84 даташита)
4. Вставляется команда sei (разрешение прерываний).
5. Пишется обработчик прерываний для TIM0_OVF (стр 46)
Все

 

chav1961: В реальном микроконтроллере при выводе лог.1 на линиях PINB[5] и PINB[6] действительно появилась бы лог.1

Не всегда при выводе в порт, настроенный на выход, единицы, с его PIN читается единица. При достаточно большой нагрузке может читаться и ноль, если порт подсел

chav1961: Вообще, симулятор - первый шаг к резиновой женщине

Целиком и полностью поддерживаю