Ассемблер (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- Реклама
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МГц. Ну а так, сколько получится.вопрос, а сколько вы хотели выжать?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Предыдущий пост конечно же шутка
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
я бы не ставил таких высоки целей) какой камень? опишите, что именно должен делать девайс. попоробую помочь, чем смогу.
1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
я бы не ставил таких высоки целей) какой камень? опишите, что именно должен делать девайс. попоробую помочь, чем смогу.
Ставим плюсы: )
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Мега 48. Она до 20 работает, но это сильно не влияет на результат.
---------------
Есть такая идея: запустить синхронно два восьмибитных таймера. По первому включаем ногу (sbi - 1 такт + прерывание), по второму отключаем. Экономия очевидна. Но как их запустить синхронно в режиме CTC и со смещением по фазе на 180°?
Опрос кнопок, больше ничего в этом режиме. Частота нужна регулируемая. Это просто верхний предел. Если бы была свободна нога OC0A/B и т.д., можно было бы врубить аппаратный режим CTC - проблема бы исчезла.1 МГц меандр сложновато будет получить на независимой ноге на частоте 12МГц при том, что контроллер еще чем то должен будет заниматься.
Цель больше самообучение, нежели конкретный результат. Для последнего можно и отдельный генератор впаять в крайнем случае.я бы не ставил таких высоки целей)
---------------
Есть такая идея: запустить синхронно два восьмибитных таймера. По первому включаем ногу (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!


