Lilia 0 14 января, 2021 Опубликовано 14 января, 2021 · Жалоба Помогите пожалуйста настроить таймер в Attiny1607, новое поколение выпущенное Microchip. Я хочу настроить таймер TCA 16bit на период 0.2мс(5КГц) в режиме частоты(frequency mode). Я расчитываю CMP0 по формуле из даташита. N = 16 CMP0 = 20000KHz/(2*N * 5KHz)-1 = 124 = 0x7C Но при таких настройках таймер работает не правильно. Я подбирала по осциллограме с ножки PB0(WO0), получилось, что для настройки периода 0.2мс CMP0 = 0x14 Таймер настраивала так: TCA0.SINGLE.CTRLA = 0x00; TCA0.SINGLE.CMP0 = 0x14; TCA0.SINGLE.CTRLB = 0x10|TCA_SINGLE_WGMODE_FRQ_gc; TCA0.SINGLE.CTRLD = 0x00; TCA0.SINGLE.CTRLECLR = 0x00; TCA0.SINGLE.EVCTRL = 0x00; TCA0.SINGLE.INTCTRL= TCA_SINGLE_OVF_bm |TCA_SINGLE_CMP0_bm; TCA0.SINGLE.CNT = 0; TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV16_gc; TCA0.SINGLE.CTRLA |= TCA_SINGLE_ENABLE_bm; В чем может быть проблема, как вы думаете? А еще есть вторая проблема, с перываниями. Я хочу настроить прерывание с частотой 2мс. Но в действительности ISR (TCA0_CMP0_vect) не срабатывает. Зато срабатывает ISR (TCA0_OVF_vect) с периодом ~0,05м Помогите пожалуйста разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 14 января, 2021 Опубликовано 14 января, 2021 · Жалоба С этим МК не работал, но попробую предположить. Если по каким-то причинам входная частота все-таки не 20МГц, надо выяснить, какая. Fout = 5000 = x / (2 * 16 * (0x14 + 1)), где x - входная частота тактирования модуля TCA. Значит, она равна 3.36МГц. Судя по документации (см. раздел 10.3.3 Main Clock After Reset), делаю вывод, что Вы вовсе не настраивали тактирование. А значит, оно там штатное: 20МГц внутреннего генератора делится на 6 (~3.3МГц) - это и есть сигнал на всю периферию, в том числе TCA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lilia 0 14 января, 2021 Опубликовано 14 января, 2021 · Жалоба 1 hour ago, Arlleex said: С этим МК не работал, но попробую предположить. Если по каким-то причинам входная частота все-таки не 20МГц, надо выяснить, какая. Fout = 5000 = x / (2 * 16 * (0x14 + 1)), где x - входная частота тактирования модуля TCA. Значит, она равна 3.36МГц. Судя по документации (см. раздел 10.3.3 Main Clock After Reset), делаю вывод, что Вы вовсе не настраивали тактирование. А значит, оно там штатное: 20МГц внутреннего генератора делится на 6 (~3.3МГц) - это и есть сигнал на всю периферию, в том числе TCA. Спасибо огромное! Именно в этом было дело! А насчет проблемы с прерываниями есть какие-нибудь идеи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 14 января, 2021 Опубликовано 14 января, 2021 · Жалоба 25 минут назад, Lilia сказал: А насчет проблемы с прерываниями есть какие-нибудь идеи? А что с ними? Я не понял в чем конкретный вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lilia 0 14 января, 2021 Опубликовано 14 января, 2021 · Жалоба 1 hour ago, Arlleex said: А что с ними? Я не понял в чем конкретный вопрос. Срабатывает прерывание OVF, со стабильной не зависящим от CMP0 частотой, выше чем 5КГц, на которые я настроила таймер. Как я понимаю мне для 5 КГц нужно TCA0_CMP0_vect, но оно не срабатывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 14 января, 2021 Опубликовано 14 января, 2021 · Жалоба 16 минут назад, Lilia сказал: Срабатывает прерывание OVF, со стабильной не зависящим от CMP0 частотой, выше чем 5КГц, на которые я настроила таймер. Ну измерьте, с какой? 16 минут назад, Lilia сказал: Как я понимаю мне для 5 КГц нужно TCA0_CMP0_vect, но оно не срабатывает. В том режиме, в котором Вы настроили таймер (режим частоты), не работает модуль сравнения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lilia 0 14 января, 2021 Опубликовано 14 января, 2021 · Жалоба 21 мкс или 47,6 КГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 14 января, 2021 Опубликовано 14 января, 2021 · Жалоба А как измеряете? Вы же сами сказали, что настраиваете таймер в режиме FRQ. Согласно документации, в этом режиме значение TOP (число, до которого считает таймер), определяется регистром CMPn. Когда счетчик сравняется с TOP, на следующем цикле будет формироваться сигнал UPDATE, который обнулит счетчик CNT. Здесь же (когда CNT достигает TOP и выдается UPDATE) выдается сигнал OVF, который является источником запроса на прерывание. К сожалению, даташит очень криво описывает поведение флагов OVF и CMP, и об этом стоит лишь догадываться. Однако, глянем в таблицы Table 20-7.Timer Waveform Generation Mode и Table 20-3/4. Available Interrupt Vectors and Sources in Normal Mode. Там вскользь можно понять, что в режиме FRQ событие MATCH (CMP) равносильно OVF. Что и подтверждается вашими потугами с железкой. Кстати, имейте ввиду, что, в зависимости от размера Flash Вашего МК, вектора имеют различный размер. В проекте нужно правильно выбрать МК. P.S. Сдался Вам этот FRQ-режим... Хотите прерывания с периодами 0.2мс и 2мс? Настройте таймер в режиме Single-slop PWM, задайте PER для получения 2мс, а CMPn - для получения 0.2мс. Теперь обработчик прерывания CMPn будет вызываться через каждые 0.2мс, а OVF - через каждые 2мс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ae_ 2 15 января, 2021 Опубликовано 15 января, 2021 · Жалоба 12 hours ago, Arlleex said: задайте PER для получения 2мс, а CMPn - для получения 0.2мс. Теперь обработчик прерывания CMPn будет вызываться через каждые 0.2мс, а OVF - через каждые 2мс Возможно я ошибаюсь, т.к. не работал с новыми Attiny, но по-моему оба прерывания будут с одинаковым периодом 2мс, только сдвинуты на 0.2мс или на 1.8мс, смотря в какую сторону считать. Можно настроить таймер на быстрое прерывание 0.2мс и каждое 10-е прерывание вызывать другой процесс, который нужен с периодом 2мс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 15 января, 2021 Опубликовано 15 января, 2021 · Жалоба 2 часа назад, ae_ сказал: Возможно я ошибаюсь, т.к. не работал с новыми Attiny... А, пардон, затупил я немножечко Вы правы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lilia 0 15 января, 2021 Опубликовано 15 января, 2021 · Жалоба Все работает. Спасибо большое :) В режиме FRQ , прерывание действительно OVF. Надо было было его еще квитировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
son313 0 10 февраля, 2023 Опубликовано 10 февраля, 2023 · Жалоба Добрый день! Подскажите пожалуйста как attiny1607 инициализировать на вход. На входе ножки порта А стоит кнопка. На выходе порта В на ножке светодиод. Задача при нажатии кнопки зажечь диод. В даташите про DDRA как в обычных avr типа атмега 8 нету ничего. Пишу в атмелстудии. Инклуд i/o подключен, как настроить не пойму. Помогите пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 17 10 февраля, 2023 Опубликовано 10 февраля, 2023 · Жалоба 0x0400 PORTA Port A Configuration 16.3.1 Initialization After Reset, all standard function device I/O pads are connected to the port with outputs tri-stated and input buffers enabled, even if there is no clock running. На вход оно из коробки настроено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 10 февраля, 2023 Опубликовано 10 февраля, 2023 · Жалоба 1 hour ago, son313 said: Подскажите пожалуйста как attiny1607 инициализировать на вход. Глава 16 в DS - всё о портах. Глава 7.1 - адреса, где они лежат Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
son313 0 11 февраля, 2023 Опубликовано 11 февраля, 2023 · Жалоба Спасибо за помощь, теперь разобраля с портами. А то прям в ступор какойто вошел. Еще вопрос. У меня в целом задача под attiny1607 на вход ножки порта А подать сигнал 64 Гц и на выходе порта В на ножке получить 1 если частота 64 и больше и 0 если частота меньше 64. Как это реализовать на этом микроконтроллере? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться