Обсуждаем контроллеры компании Atmel.
Ответить

Re: Таймеры/счётчики в AVR

Ср сен 04, 2013 13:26:48

Считает только вперёд, флаг и прерывание выставляется когда переваливается через 255 ($FF) на 0 ($00)
Точно? (см. Phase Correct PWM и CTC)
таймер/счётчик0 и таймер/счётчик1 используют один и тот же предделитель
Точно? Или имелся в виду только сброс предделителя?

Re: Таймеры/счётчики в AVR

Ср сен 04, 2013 13:48:09

У таймера 0 в меге8 нет режимов Phase Correct PWM и CTC. Считает только вперед.
Предделитель один на два таймера, но у него 4 выхода и для каждого таймера можно выбрать индивидуально частоту с предделителя: /8, /64, /256, /1024. Имелся ввиду, конечно, сброс предделителя - использовать с осторожностью.

Re: Таймеры/счётчики в AVR

Ср сен 04, 2013 15:22:35

Да, речь конкретно про самый простой т/с0 в Мега8, соответствующий пруф (картинки из ДШ) представлен.
Прескалер у т/с1 и т/с0 общий, а вот мультиплексоры источника тактирования у каждого свой.
Интересно что он всегда считает с частотой clkI/O, даже ни один таймер не задействован. Хотя в процентном отношении по сравнению с ядром, он, наверное, жрёт не много.

Re: Таймеры/счётчики в AVR

Ср сен 04, 2013 16:39:39

У таймера 0 в меге8 нет режимов Phase Correct PWM и CTC. Считает только вперед.
Да. Согласен. В Евстифееве они описаны вместе, Т0 и Т2, но в даташите описания ШИМов и прочего нет. Впрочем среди фич упоминается
• Single Channel Counter
Frequency Generator
• External Event Counter
• 10-bit Clock Prescaler
Но в TCCR0 битов WGMx не предусмотрено.

Re: Таймеры/счётчики в AVR

Чт сен 05, 2013 09:20:59

COKPOWEHEU писал(а):Но в TCCR0 битов WGMx не предусмотрено.

Наверное, имеется в виду программный :) Надо же для пафоса побольше умных слов понаписать.

Re: Таймеры/счётчики в AVR

Чт сен 05, 2013 11:03:42

Вот только программный генератор частоты не хватало городить на этом убожестве. :))) Ладно бы был хотя бы асинхронным, подобрать предделитель и считать секунды, так и этого нет. Я ему вижу всего несколько применений:
- измерение частоты на выводе Т0
- переключение задач в RTOS или ее подобии
- полупрограммный счет времени
Программные ШИМы и CTC за применение именно этого таймера не считаю.

Re: Таймеры/счётчики в AVR

Пт сен 06, 2013 11:34:52

COKPOWEHEU писал(а): - переключение задач в RTOS или ее подобии

А не слишком ли большой маразм городить RTOS на этом убожестве?

Re: Таймеры/счётчики в AVR

Пт сен 06, 2013 12:25:48

На ATmega8-то, с чего бы? Да и необходимость ОСРВ определяется не мощностью контроллера а задачей. Например, нужно опрашивать клавиатуру, выводить данные на дисплейчик, UART и SPI. При этом что-то регулировать. Можно, конечно, реализовать все это вручную, но и RTOS в данном случае не помешает. Сами задачи простые, но их много и надо отслеживать чтобы они друг другу не мешали.

Re: Таймеры/счётчики в AVR

Пт сен 06, 2013 14:29:52

А по прерываниям раскидать?

Re: Таймеры/счётчики в AVR

Пт сен 06, 2013 16:38:04

У обработчиков клавиатуры и дисплея своих прерываний нет.
Да и это был всего лишь пример

Re: Таймеры/счётчики в AVR

Пт сен 13, 2013 10:41:28

Gudd-Head писал(а):а вот мультиплексоры источника тактирования у каждого свой.

А, что за мультиплексор такое (шо цэ такэ?!)
Вы написали про источник тактирования -
Источник тактирования -это генератор который выдаёт импульсы определённого времени и счётчик их считает.
А что такое мультиплексор объясните пожалуйста и для чего он нужен в таймерах.
Не раз слышал про про выражение -мультиплексор.

Re: Таймеры/счётчики в AVR

Пт сен 13, 2013 10:51:17

Импульс писал(а): А, что за мультиплексор такое (шо цэ такэ?!)

2 трапеции на этой картинке — мультиплексоры тактовых импульсов Т/С1 и Т/С0:
Изображение
А далее я посылаю вас в жопу Вики: http://ru.wikipedia.org/wiki/Мультиплексор_(электроника) :)))
Импульс писал(а):для чего он нужен в таймерах.

В таймерах он нужен для того, чтобы:
а) иметь возможность выбора источника тактовых импульсов (внешний/внутренний) и
б) иметь возможность выбора коэффициента деления (прескалера) оных.

Знатоки ATMega, как настроить таймер?

Вс сен 22, 2013 15:06:47

Всем доброго времени суток, сильно не пинайте-первая самостоятельная работа с МК.
Есть Мега2560, пишу прогу в ассамблере (С не владею), требуется внести байт настройки в TCCR1B (аналогично можно в любой другой регистр), компилятор ругается на превышение значения первого операнда:

out TCCR1B, TEMP1 ; НАСТРОЙКА ПРЕДДЕЛИТЕЛЯ НА 1024

и это понятно, ведь первым операндом в операции OUT может быть число от 0 до 63, а адресуемый регистр TCCR1B имеет адрес 0х81. Подскажите, как правильно кинуть в него данные? По аналогии и в любой другой регистр с адресом выше 0х3F (63 в дес.виде), если 0х3F предел адресации команды OUT.

Re: Знатоки ATMega, как настроить таймер?

Вс сен 22, 2013 16:37:21

Известный косячек... Используйте инструкции STS/LDS вместо OUT/IN для регистров с адресом больше 63. У AVR все "лежит" в одном адресном пространстве.
У Атмелов был даже аппнот с макросом, который сам подсовывал нужную инструкцию. Щас уже не помню какой, тк на AVR забил.
UPD: нашел http://www.atmel.com/Images/doc2550.pdf и http://www.atmel.com/Images/AVR001.zip

Re: Знатоки ATMega, как настроить таймер?

Вс сен 22, 2013 17:01:01

Вот спасибо большое! Все пошло сразу! Не учел,дурья голова,что адреса старше 63 располагаются в RAM))) А насчет скрипта,он ведь на СИ,разве я могу его вставить в программу на ассамблере? Огромное спасибо за подсказку! :))

Re: Знатоки ATMega, как настроить таймер?

Вс сен 22, 2013 17:08:54

Архивчик смотрели? Как раз для ассемблера сделаны макросы, в Си и так все хорошо :)

Re: Знатоки ATMega, как настроить таймер?

Вс сен 22, 2013 17:47:21

Понятно,будем пробовать :)
И попутный вопросик: что где требуется прописать,чтоб заработали внешние (и внутренние) прерывания. В регистр TCCR я внес настройки режима СТС. В регистр EIMSK пытаюсь внести 0b00000001 для разрешения работы INT0 :

LDI TEMP1, 0b00000001
STS EIMSK, TEMP1

Но при прогоне в симуляторе AVRStudio моя единичка ну никак не хочет записываться в EIMSK :cry: В чем может быть беда? И нужно-ли настраивать регистры EIСRA, EIСRB и MCUCR для запуска работы INT0?
Поборол я его)) Так вот он заработал:

LDI TEMP1, 0b00000001
OUT EIMSK, TEMP1

Таймер запустить удалось,но не происходит прерывание по совпадению((( В OCR1A внес требуемый интервал, настроил предделитель на CLK/1024 в TIMSK внес 2 - установил бит OCIE1A в единицу (прерывание по равенству TCNT1 и OCR1A), включил глобальные прерывания SEI, но чуда не случилось. Счетный регистр переполняется свыше OCR1A а прерывание не поступает :( В чем я ошибся?
Включил глобальные прерывания командой SEI. Подпрограмма запуска таймера у меня вызывается обработчиком прерывания с лапки INT0, но при прижатии ноги INT0 к земле прерывания не возникло :( И на будущее,как настроить прерывания по ногам PCINTn?
Ну и совсем нубский вопрос: что означает запись (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0) или (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)? Как расшифровать эти иероглифы? :oops: :)) Ну и остальные на них похожие)) Я верно понимаю, что это операции установки отдельных битов регистров портов ввода-вывода в единицу?
Последний раз редактировалось Ghostgkd777 Вс сен 22, 2013 22:36:13, всего редактировалось 2 раз(а).

Re: Знатоки ATMega, как настроить таймер?

Вс сен 22, 2013 20:33:07

По XMega не подскажу. Я, как уже писал, забил на AVR уже пару лет назад. Те я использую пока только "малоногие" тиньки, и в будущем, скорее всего, откажусь и от них. Скажем, XMega не может тягаться с ARM ни по производительности, ни по цене. Однако не стоит начинать холивар.

Ghostgkd777 писал(а):Ну и совсем нубский вопрос: что означает запись (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0) или (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)? Как расшифровать эти иероглифы? :oops: :)) Ну и остальные на них похожие)) Я верно понимаю, что это операции установки отдельных битов регистров портов ввода-вывода в единицу?

А (1<<PB7) означает единичку, сдвинутую на позицицю PB7.
(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0) - это объединенные операцией ИЛИ такие единички, что в результате даст 0b11000011 или 0xC3.
Все эти конструкции вычисляются компилятором на стадии сборки и представляют собой ничто инное, как константы. Такая запись просто улучшает читабельность текста программы.

Re: Знатоки ATMega, как настроить таймер?

Вс сен 22, 2013 20:52:35

Спасибо,я примерно так и понял))
Я мучаю не ХМегу а обычную ATMega2560. Понимаю,что не с того "жука" начал освоение АВР, но обстоятельства диктуют свои правила))
Чтож,может еще кто подскажет, почему в EIMSK не хотят писаться байтики...
С EIMSK разобрался. Требовалось заносить данные командой OUT, а не STS, как я пытался.
После занесения единички в нулевой разряд EIMSK мои прерывания заработали, но почему-то не INT0, а INT1! Если выставить единичку в первый бит EIMSK, начинает работать прерывание INT3! почему не по порядку,как должно было быть? :(

Re: Знатоки ATMega, как настроить таймер?

Пн сен 23, 2013 05:56:33

Таблица векторов прерываний правильно составлена?
СпойлерИзображение
Ответить