Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да я понял уже из твоего примера.
У меня мега48 - регистры или TCCR0A или TCCR0B за это отвечают. Регистр A еще отвечает за выход на порты непосредственно с таймера (как бы не промахнуться, на них у меня выходы с логики напрямую включены.)
Попробую прогнать в VMLAB
У меня мега48 - регистры или TCCR0A или TCCR0B за это отвечают. Регистр A еще отвечает за выход на порты непосредственно с таймера (как бы не промахнуться, на них у меня выходы с логики напрямую включены.)
Попробую прогнать в VMLAB
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Проверь на всякий. 
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Что-то нифига сброс не получается настроить...
Хотя есть такой режим - Clear Timer on Compare Match (CTC) Mode
Хотя есть такой режим - Clear Timer on Compare Match (CTC) Mode
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот, погоняй мой проект. Только он на ATTINY26L.
Значения для OCR1C занесены в EEPROM (это надо было мне для быстрого подбора частоты)
Всего там 5 байт. Первые 4 - для OCR1C и последний пятый - для TCCR1B (подделитель и сбросы таймера по сравнению) В конце листинга есть описание всех пяти байтов.
ЗЫ: Прошу не пинать за возможную кривость исходника.
Всё делалось на грубых расчётах и на скорую руку.
Но факт в том, что в железе всё прекрасно работает.
Значения для OCR1C занесены в EEPROM (это надо было мне для быстрого подбора частоты)
Всего там 5 байт. Первые 4 - для OCR1C и последний пятый - для TCCR1B (подделитель и сбросы таймера по сравнению) В конце листинга есть описание всех пяти байтов.
ЗЫ: Прошу не пинать за возможную кривость исходника.
Всё делалось на грубых расчётах и на скорую руку.
Но факт в том, что в железе всё прекрасно работает.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Благодарствую, посмотрел. Но у меня немного не так таймер инициализируется. Делаю по даташиту:
После этого прерывание после семи тиков срабатывает, но счётчик идёт по кругу - переполнится, дойдёт до семи и опять прерывание. Короче, режим CTC не работает...
Код: Выделить всё
; В 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 в вопросах и ответах
Вот таблица. WGM02 находится в регистре TCCR0B, а WGM01 и WGM00 в регистре TCCR0A.
Но судя по таблице для режима CTC бит WGM02 не нужен.

Но судя по таблице для режима CTC бит WGM02 не нужен.

- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну на некоторых более крупных МК да, надо как к памяти обращаться. Сейчас даташит возьму и попробую сделать тестовый проект.
Вот архив. Всё пашет в студии.
Я привык сначала настраивать таймер, потом разрешать его прерывание и только потом, в самую последнюю очередь подавать на него тактовую частоту.
Так - же таймеры настраиваю последними в программе, после всех инициализаций и настроек. (стек, порты, компараторы и прочее)
Вот архив. Всё пашет в студии.
Так - же таймеры настраиваю последними в программе, после всех инициализаций и настроек. (стек, порты, компараторы и прочее)
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну и у меня так же! Блин, заметил вот что: в VMLAB, когда пишешь в TCCR0A, меняется прескалер, т.е. как будто записал в TCCR0B. Запись в последний ничего не меняет...
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Глючит VMLAB? Я с него слез на время, он постоянно ругался на такое как ldi r16, 0x45 то есть на совершенно нормальные команды. Лучше в ПРОТЕУСе проверить. Там тоже есть осциллограф.
Я обычно в свойствах МК протеуса указываю путь к HEX файлу в проекте. Запускаю симуляцию, и если надо что-то подправить, то просто исправляю в проекте, потом компилирую и снова в протеусе запускаю симуляцию. МК уже работает с изменённой прошивкой.
Я обычно в свойствах МК протеуса указываю путь к HEX файлу в проекте. Запускаю симуляцию, и если надо что-то подправить, то просто исправляю в проекте, потом компилирую и снова в протеусе запускаю симуляцию. МК уже работает с изменённой прошивкой.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да я под линуксом работаю, а запускать таких монстров под вайном не реально, а в виртуалке неудобно... Ща попробую в студии сделать, там наглядней.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, Вы правы. Протеус - это тот ещё монстр.
Я обычно всё в студии проверяю, так как в протеусе нет модели на мои МК, с которыми я постоянно работаю. После студии идёт уже тест сразу в железе.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Пришлось качать студию. Да, там работает как часы
Выходит глюк VMLAB'а.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Блин, теперь другая проблема. При формировании меандра программно с применением счетчика максимальную частоту можно выжать 500кГц (при 12МГц такта), про том конкретно загрузив МК. Аппаратно - лучше, но тут жёсткая привязка к ноге, чего тоже не хотелось бы...
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
1.5 МГц программный меандр без привязки к ноге аппаратного ШИМа при 12МГц
вопрос, а сколько вы хотели выжать?
Код: Выделить всё
a:
sbi PortB,0
nop
nop
cbi PortB,0
rjmp aвопрос, а сколько вы хотели выжать?
Ставим плюсы: )
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Угу, замечательный способ!
В идеале - около 1МГц. Ну а так, сколько получится.
вопрос, а сколько вы хотели выжать?
В идеале - около 1МГц. Ну а так, сколько получится.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Предыдущий пост конечно же шутка
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
я бы не ставил таких высоки целей) какой камень? опишите, что именно должен делать девайс. попоробую помочь, чем смогу.
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
я бы не ставил таких высоки целей) какой камень? опишите, что именно должен делать девайс. попоробую помочь, чем смогу.
Ставим плюсы: )
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Мега 48. Она до 20 работает, но это сильно не влияет на результат.
Опрос кнопок, больше ничего в этом режиме. Частота нужна регулируемая. Это просто верхний предел. Если бы была свободна нога OC0A/B и т.д., можно было бы врубить аппаратный режим CTC - проблема бы исчезла.
Цель больше самообучение, нежели конкретный результат. Для последнего можно и отдельный генератор впаять в крайнем случае.
----------
Есть такая идея: запустить синхронно два восьмибитных таймера. По первому включаем ногу (sbi - 1 такт + прерывание), по второму отключаем. Экономия очевидна. Но как их запустить синхронно в режиме CTC и со смещением по фазе на 180°?
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
Опрос кнопок, больше ничего в этом режиме. Частота нужна регулируемая. Это просто верхний предел. Если бы была свободна нога OC0A/B и т.д., можно было бы врубить аппаратный режим CTC - проблема бы исчезла.
я бы не ставил таких высоки целей)
Цель больше самообучение, нежели конкретный результат. Для последнего можно и отдельный генератор впаять в крайнем случае.
----------
Есть такая идея: запустить синхронно два восьмибитных таймера. По первому включаем ногу (sbi - 1 такт + прерывание), по второму отключаем. Экономия очевидна. Но как их запустить синхронно в режиме CTC и со смещением по фазе на 180°?
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
В таймере есть 2 регистра OCR. Засовываем 2 разных числа, разрешаем прерывание по сравнению обоих чисел. У них даже обработчики разные. В одном прерывании включим ногу, а в другом выключим. Режимом таймера так и останется CTC. Одно число будет выражать длинну импульса, а другое - длинну интервала между импульсами. Так и частоту можно поднять и интервалы покороче сделать. Работа в следующем: таймер досчитает до первого числа и сработает прерывание А. В этом прерывании мы включим ногу и сразу выйдем из него. Даже SREG не надо сохранять, так как там кроме флага I больше ничего не должно измениться. Таймер продолжает считать дальше. Теперь он досчитает до второго числа и уйдёт в прерывание B. В этом прерывании мы отрубаем ногу. Таймер сбрасывается CTC режимом и начинает всё сначала.
Таааак, идея есть, теперь я её проверю.
Таааак, идея есть, теперь я её проверю.
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Так получится, если по одному совпадению он будет генерить прерывание и продолжать считать, а по другому сбрасываться.
Это было бы идеально. Получится так?
Это было бы идеально. Получится так?
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да. Уже получилось. Держи... 
- Вложения
-
- M48_CTC_MODE.zip
- (6.43 КБ) 179 скачиваний
I am DX168B and this is my favourite forum on internet!