Страница 65 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт янв 27, 2011 22:45:02
ploop
Да я понял уже из твоего примера.
У меня мега48 - регистры или TCCR0A или TCCR0B за это отвечают. Регистр A еще отвечает за выход на порты непосредственно с таймера (как бы не промахнуться, на них у меня выходы с логики напрямую включены.)
Попробую прогнать в VMLAB
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт янв 27, 2011 22:59:06
DX168B
Проверь на всякий.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 00:50:34
ploop
Что-то нифига сброс не получается настроить...
Хотя есть такой режим - Clear Timer on Compare Match (CTC) Mode
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 02:11:45
DX168B
Вот, погоняй мой проект. Только он на ATTINY26L.
Значения для OCR1C занесены в EEPROM (это надо было мне для быстрого подбора частоты)
Всего там 5 байт. Первые 4 - для OCR1C и последний пятый - для TCCR1B (подделитель и сбросы таймера по сравнению) В конце листинга есть описание всех пяти байтов.
ЗЫ: Прошу не пинать за возможную кривость исходника.
Всё делалось на грубых расчётах и на скорую руку.
Но факт в том, что в железе всё прекрасно работает.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 09:39:19
ploop
Благодарствую, посмотрел. Но у меня немного не так таймер инициализируется. Делаю по даташиту:
Код: Выделить всё
; В TIMSK0 разрешаем прерывание.
; Он за пределами команды OUT, поэтому обращаемся как к ячейке памяти
ldi zh,high(TIMSK0)
ldi zl, low(TIMSK0)
ldi r16,(1<<OCIE0A)
st z,r16
ldi r16,(1<<WGM01) ; Режим CTC (судя по даташиту)
out TCCR0A,r16
ldi r16,(1<<CS00) ; Предделитель отключим для отладки (частота = clk)
out TCCR0B,r16
ldi r16,$07 ; Число 7 в регистр сравнения
out OCR0A,r16
После этого прерывание после семи тиков срабатывает, но счётчик идёт по кругу - переполнится, дойдёт до семи и опять прерывание. Короче, режим CTC не работает...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 09:54:42
ploop
Вот таблица. WGM02 находится в регистре TCCR0B, а WGM01 и WGM00 в регистре TCCR0A.
Но судя по таблице для режима CTC бит WGM02 не нужен.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 12:36:28
DX168B
Ну на некоторых более крупных МК да, надо как к памяти обращаться. Сейчас даташит возьму и попробую сделать тестовый проект.
Вот архив. Всё пашет в студии.

Я привык сначала настраивать таймер, потом разрешать его прерывание и только потом, в самую последнюю очередь подавать на него тактовую частоту.
Так - же таймеры настраиваю последними в программе, после всех инициализаций и настроек. (стек, порты, компараторы и прочее)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 13:22:19
ploop
Ну и у меня так же! Блин, заметил вот что: в VMLAB, когда пишешь в TCCR0A, меняется прескалер, т.е. как будто записал в TCCR0B. Запись в последний ничего не меняет...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 13:30:36
DX168B
Глючит VMLAB? Я с него слез на время, он постоянно ругался на такое как ldi r16, 0x45 то есть на совершенно нормальные команды. Лучше в ПРОТЕУСе проверить. Там тоже есть осциллограф.
Я обычно в свойствах МК протеуса указываю путь к HEX файлу в проекте. Запускаю симуляцию, и если надо что-то подправить, то просто исправляю в проекте, потом компилирую и снова в протеусе запускаю симуляцию. МК уже работает с изменённой прошивкой.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 13:35:54
ploop
Да я под линуксом работаю, а запускать таких монстров под вайном не реально, а в виртуалке неудобно... Ща попробую в студии сделать, там наглядней.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 13:40:48
DX168B
Да, Вы правы. Протеус - это тот ещё монстр.

Я обычно всё в студии проверяю, так как в протеусе нет модели на мои МК, с которыми я постоянно работаю. После студии идёт уже тест сразу в железе.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 15:28:18
ploop
Пришлось качать студию. Да, там работает как часы

Выходит глюк VMLAB'а.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 16:56:11
ploop
Блин, теперь другая проблема. При формировании меандра программно с применением счетчика максимальную частоту можно выжать 500кГц (при 12МГц такта), про том конкретно загрузив МК. Аппаратно - лучше, но тут жёсткая привязка к ноге, чего тоже не хотелось бы...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 17:39:54
ibiza11
1.5 МГц программный
меандр без привязки к ноге аппаратного ШИМа при 12МГц
вопрос, а сколько вы хотели выжать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 18:12:38
ploop
Угу, замечательный способ!
вопрос, а сколько вы хотели выжать?
В идеале - около 1МГц. Ну а так, сколько получится.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 21:42:58
ibiza11
Предыдущий пост конечно же шутка
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
я бы не ставил таких высоки целей) какой камень? опишите, что именно должен делать девайс. попоробую помочь, чем смогу.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 22:05:58
ploop
Мега 48. Она до 20 работает, но это сильно не влияет на результат.
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
Опрос кнопок, больше ничего в этом режиме. Частота нужна регулируемая. Это просто верхний предел. Если бы была свободна нога OC0A/B и т.д., можно было бы врубить аппаратный режим CTC - проблема бы исчезла.
я бы не ставил таких высоки целей)
Цель больше самообучение, нежели конкретный результат. Для последнего можно и отдельный генератор впаять в крайнем случае.
---------------
Есть такая идея: запустить синхронно два восьмибитных таймера. По первому включаем ногу (sbi - 1 такт + прерывание), по второму отключаем. Экономия очевидна. Но как их запустить синхронно в режиме CTC и со смещением по фазе на 180°?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 22:59:51
DX168B
В таймере есть 2 регистра OCR. Засовываем 2 разных числа, разрешаем прерывание по сравнению обоих чисел. У них даже обработчики разные. В одном прерывании включим ногу, а в другом выключим. Режимом таймера так и останется CTC. Одно число будет выражать длинну импульса, а другое - длинну интервала между импульсами. Так и частоту можно поднять и интервалы покороче сделать. Работа в следующем: таймер досчитает до первого числа и сработает прерывание А. В этом прерывании мы включим ногу и сразу выйдем из него. Даже SREG не надо сохранять, так как там кроме флага I больше ничего не должно измениться. Таймер продолжает считать дальше. Теперь он досчитает до второго числа и уйдёт в прерывание B. В этом прерывании мы отрубаем ногу. Таймер сбрасывается CTC режимом и начинает всё сначала.
Таааак, идея есть, теперь я её проверю.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 23:20:12
ploop
Так получится, если по одному совпадению он будет генерить прерывание и продолжать считать, а по другому сбрасываться.
Это было бы идеально. Получится так?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 28, 2011 23:24:08
DX168B
Да. Уже получилось. Держи...
