Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Да я понял уже из твоего примера.
У меня мега48 - регистры или TCCR0A или TCCR0B за это отвечают. Регистр A еще отвечает за выход на порты непосредственно с таймера (как бы не промахнуться, на них у меня выходы с логики напрямую включены.)

Попробую прогнать в VMLAB
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Проверь на всякий. :)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Что-то нифига сброс не получается настроить... :(
Хотя есть такой режим - Clear Timer on Compare Match (CTC) Mode
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Вот, погоняй мой проект. Только он на ATTINY26L.
Значения для OCR1C занесены в EEPROM (это надо было мне для быстрого подбора частоты)
Всего там 5 байт. Первые 4 - для OCR1C и последний пятый - для TCCR1B (подделитель и сбросы таймера по сравнению) В конце листинга есть описание всех пяти байтов.

ЗЫ: Прошу не пинать за возможную кривость исходника.
Всё делалось на грубых расчётах и на скорую руку.
Но факт в том, что в железе всё прекрасно работает. :)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение 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 не работает...
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Вот таблица. WGM02 находится в регистре TCCR0B, а WGM01 и WGM00 в регистре TCCR0A.
Но судя по таблице для режима CTC бит WGM02 не нужен.

Изображение
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Ну на некоторых более крупных МК да, надо как к памяти обращаться. Сейчас даташит возьму и попробую сделать тестовый проект.

Вот архив. Всё пашет в студии. :) Я привык сначала настраивать таймер, потом разрешать его прерывание и только потом, в самую последнюю очередь подавать на него тактовую частоту.
Так - же таймеры настраиваю последними в программе, после всех инициализаций и настроек. (стек, порты, компараторы и прочее)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Ну и у меня так же! Блин, заметил вот что: в VMLAB, когда пишешь в TCCR0A, меняется прескалер, т.е. как будто записал в TCCR0B. Запись в последний ничего не меняет...
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Глючит VMLAB? Я с него слез на время, он постоянно ругался на такое как ldi r16, 0x45 то есть на совершенно нормальные команды. Лучше в ПРОТЕУСе проверить. Там тоже есть осциллограф.
Я обычно в свойствах МК протеуса указываю путь к HEX файлу в проекте. Запускаю симуляцию, и если надо что-то подправить, то просто исправляю в проекте, потом компилирую и снова в протеусе запускаю симуляцию. МК уже работает с изменённой прошивкой.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Да я под линуксом работаю, а запускать таких монстров под вайном не реально, а в виртуалке неудобно... Ща попробую в студии сделать, там наглядней.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Да, Вы правы. Протеус - это тот ещё монстр. :) Я обычно всё в студии проверяю, так как в протеусе нет модели на мои МК, с которыми я постоянно работаю. После студии идёт уже тест сразу в железе.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Пришлось качать студию. Да, там работает как часы :) Выходит глюк VMLAB'а.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Блин, теперь другая проблема. При формировании меандра программно с применением счетчика максимальную частоту можно выжать 500кГц (при 12МГц такта), про том конкретно загрузив МК. Аппаратно - лучше, но тут жёсткая привязка к ноге, чего тоже не хотелось бы...
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ibiza11 »

1.5 МГц программный меандр без привязки к ноге аппаратного ШИМа при 12МГц

Код: Выделить всё

a:
sbi PortB,0
nop
nop
cbi PortB,0
rjmp a
:)))
вопрос, а сколько вы хотели выжать?
Ставим плюсы: )
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Угу, замечательный способ! :)))
вопрос, а сколько вы хотели выжать?

В идеале - около 1МГц. Ну а так, сколько получится.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ibiza11 »

Предыдущий пост конечно же шутка :)))
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
я бы не ставил таких высоки целей) какой камень? опишите, что именно должен делать девайс. попоробую помочь, чем смогу.
Ставим плюсы: )
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Мега 48. Она до 20 работает, но это сильно не влияет на результат.
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.

Опрос кнопок, больше ничего в этом режиме. Частота нужна регулируемая. Это просто верхний предел. Если бы была свободна нога OC0A/B и т.д., можно было бы врубить аппаратный режим CTC - проблема бы исчезла.

я бы не ставил таких высоки целей)

Цель больше самообучение, нежели конкретный результат. Для последнего можно и отдельный генератор впаять в крайнем случае.
----------
Есть такая идея: запустить синхронно два восьмибитных таймера. По первому включаем ногу (sbi - 1 такт + прерывание), по второму отключаем. Экономия очевидна. Но как их запустить синхронно в режиме CTC и со смещением по фазе на 180°?
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

В таймере есть 2 регистра OCR. Засовываем 2 разных числа, разрешаем прерывание по сравнению обоих чисел. У них даже обработчики разные. В одном прерывании включим ногу, а в другом выключим. Режимом таймера так и останется CTC. Одно число будет выражать длинну импульса, а другое - длинну интервала между импульсами. Так и частоту можно поднять и интервалы покороче сделать. Работа в следующем: таймер досчитает до первого числа и сработает прерывание А. В этом прерывании мы включим ногу и сразу выйдем из него. Даже SREG не надо сохранять, так как там кроме флага I больше ничего не должно измениться. Таймер продолжает считать дальше. Теперь он досчитает до второго числа и уйдёт в прерывание B. В этом прерывании мы отрубаем ногу. Таймер сбрасывается CTC режимом и начинает всё сначала.
Таааак, идея есть, теперь я её проверю.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Так получится, если по одному совпадению он будет генерить прерывание и продолжать считать, а по другому сбрасываться.
Это было бы идеально. Получится так?
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Да. Уже получилось. Держи... :)
Вложения
M48_CTC_MODE.zip
(6.43 КБ) 179 скачиваний
I am DX168B and this is my favourite forum on internet!
Ответить

Вернуться в «AVR»