Например TDA7294

Форум РадиоКот • Просмотр темы - Arduino. Не работает Serial при установке Таймера
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пн апр 29, 2024 15:49:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 26 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 19:56:03 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт окт 09, 2018 10:01:10
Сообщений: 76
Рейтинг сообщения: 0
Вот код

Код:
#include«timer-api.h»

void setup() {
Serial.begin(9600);
timer_init_ISR_500KHz(TIMER_DEFAULT); //////
pinMode(13, OUTPUT);
}

void loop() {
while(Serial.available()>0){
Serial.write(Serial.read());
}
}

void timer_handle_interrupts(int timer) {
digitalWrite(13, !digitalRead(13));
}


Вот использую библиотеку для установки таймера https://habr.com/ru/post/337430/
Но тогда отказывается работать Serial.read() и Serial.available().

Можно ли как-то и прерывание по таймеру установить и Serial не сломать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 20:42:09 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 1
Вообще-то в "классической ардуино" трогать таймеры по собственному усмотрению (а тем более с прерываниями) НЕ КОРРЕКТНО.
На их основе часть функционала IDE отрабатывается -
delay, millis, micros - T0;
tone - T2;
analogwrite - в зависимости от выводов используют T0, T1 и Т2;
...
Использование за рамками предустановленных функций черевато непредсказуемыми проблемами.
8)
Как варианты решений - использование переменной со значением micros (чтение-запись и сравнение с предыдущим значением) для частот выше 65КГц.
При частоте 31Гц - 65КГц удобно использовать тандем tone() и прерывания по INT0/INT1.
:tea:

Ну уж если "никак без самодеятельности" - делаем программу ПОЛНОСТЬЮ ПОД СТАНДАРТНЫМ Си (или АССЕМБЛЕРОМ).
:twisted:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 20:56:25 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 1
500 кГц ?! Ха-ха. Когда у вас МК будет что-то другое делать, кроме как в прерывание заходить? Он тупо больше ничего и не успеет сделать, будет всё время в прерывании таймера вашем висеть. Ну почти, но конечно на всякие остальные вещи тупо не хватает времени. МК на 16 МГц, прерывание 500 кГц = 32 тика между прерываниями всего. Компилятор в функции ISR сохраняет/восстанавливает регистры и сам вход в прерывание что-то занимает. Вы просто не оставляете МК шансов заниматься чем-то еще, кроме обработки прерывания по сути.

Ставьте частоту ниже, нафига вам там 500кГц светодиодиком мигать.

PS: Такие вещи, как дрыганье ножкой с определенной частотой решается аппаратным ШИМ. Банально analogWrite в Arduino и ресурсы CPU не расходуются после установки режима.


Последний раз редактировалось NStorm Вт фев 25, 2020 21:04:35, всего редактировалось 1 раз.

Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 21:01:48 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт окт 09, 2018 10:01:10
Сообщений: 76
Рейтинг сообщения: 0
500 кГц ?! Ха-ха. Когда у вас МК будет что-то другое делать, кроме как в прерывание заходить? Он тупо больше ничего и не успеет сделать, будет всё время в прерывании таймера вашем висеть. Ну почти, но конечно на всякие остальные вещи тупо не хватает времени.
Ставьте частоту ниже, нафига вам там 500кГц светодиодиком мигать?

Ну Serial.write() вполне себе же успевает работать.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 21:14:37 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 1
FuseStart, подумайте чем write от read отличается и кто задает "темп" работы. Как минимум. Ну и сами реализации этих функций в либах ардуино тоже вопрос.
Я выше дополнил ответ про 32 тика. Это очень мало. Попробуйте поставить, скажем 1 кГц - и если всё заработает, значит я прав.

Добавлено after 7 minutes 4 seconds:
подумайте чем write от read отличается и кто задает "темп" работы

На всякий случай поясню. Не заглядывая в исходники реализаций класса Arduino в общем случае думаю как отправка работает - строка в буфер легла и начинает по байту отправляться записываясь в UDR. Ушел байт - пошел следующий и т.д. Клоки соблюдаются, т.к. передача аппаратная. Прерывания могут не использоваться, т.к. метод афаик блокирующий. А приемка по прерыванию. Но вот надо успеть достать символ в буфер пока следующий не пришел, т.к. уже не мы отправляем. А тут у нас вклинивается прерывание таймера - запросто пропускаем какое-то из прерываний входящих данных UART, не успеваем выпуливать их в буфер и т.д.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 21:35:21 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт окт 09, 2018 10:01:10
Сообщений: 76
Рейтинг сообщения: 0
FuseStartПопробуйте поставить, скажем 1 кГц - и если всё заработает, значит я прав.
[


На 50 кГц работает, выше - нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 21:45:26 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Ну значит так и есть - не хватает свободных циклов на прием при срабатывании таймера чаще. Какая цель-то?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 21:46:55 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 1
...
PS: Такие вещи, как дрыганье ножкой с определенной частотой решается аппаратным ШИМ. Банально analogWrite в Arduino и ресурсы CPU не расходуются после установки режима.


К сожалению аппаратный ШИМ (analogWrite) имеет ФИКСИРОВАННУЮ частоту примерно в 490Гц.
8)
Так что "любителям 500КГц остается только "дрыголап".
:wink:

Можно конечно и чего поинтереснее - но то нужен МК с PLL - чего-то типа attiny25/45/85(тактирование Т1 от 64МГц или 32МГц) и не под компилятором ардуино, а под чистым ассемблером или чистым Си.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 21:55:47 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 1
BOB51, ну на таймере 1 и 2 можно и 500 кГц сделать меандр без ногодрыга. В общем-то даже ардуиновские либы вроде какие-то были для этого, хотя можно и ручками настроить, если знать, что больше эти таймеры нигде не будут другим кодом использоваться.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 21:59:47 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Можно, но не для начинающего.
И выход должен быть не по прерыванию, а аппаратный.
8)
А тут похоже еще с самой задачей у топикстартера "потемки".
:tea:

Собственно уже ранее много раз говорено - адуринка хороша для обработки данных, получаемых от "периферии с мозгами".
Или отправки данных в подобные "мозговитые" блоки.
Как вариант - типовые протоколы или их заменяющий "программный ногодрыг" в разумных пределах.
Иначе - работаем "по старинке" с "чистыми компиляторами" и даташитом.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 22:07:36 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Код:
OCR2A = 31; // 32 тика
TCCR2A = 1 << WGM1; // режим CTC
TCCR2B = 1 << CS20; // предделитель 1 и запуск таймера

Вроде как-то так на вскидку на таймере 2.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 22:26:29 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
tone убит.
:?
Глубококопатели рассматривали случай, когда используется второй OCRnn.
Только вот какой УЖЕ задействован, а какой СВОБОДЕН - то рыть в дебрях IDE надо.
:dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 22:39:56 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Я ж поэтому и написал "если знать, что больше эти таймеры нигде не будут другим кодом использоваться.". Не вижу, чтобы ТС пользовался tone. Что tone также использует таймер2 вы сами уже написали ранее. Если это держать в голове (а оно как бы вообще надо держать в голове то, что пишешь :wink: ), то всё будет ок.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Вт фев 25, 2020 23:11:13 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Кстати...
Ещё одна капушка в пользу "не выходить за рамки" предоставляемые функционалом IDE.
В рамках ардуиноподобных используются платформы на основе различных семейств МК.
Там и esp8266 и ARMы разнообразные и интеловские МП, а не только атмега328Р используются.
Исходники программы, написанной в рамках "референса" будут одинаково работать на любой из применяемых для IDE платок.
А вот те, что "заточены под эксклюзив аппаратной части" - создадут весьма большие затруднения при смене/переносу на другую платформу.
Это как программа для ПК - или работает на любой материке или жёстко привязана к аппаратной начинке конкретной платы.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Ср фев 26, 2020 07:20:16 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
BOB51, ну как правило когда пишут на ардуино - пишут разовую поделку для себя и точно знают на чем она будет работать. А в универсальных штуках и либах в мире ардуино это всё-равно решается пачкой #ifdef'ов для платформозависимого кода. Всё-равно он (зависимый от платформы код) где-то нужен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Ср фев 26, 2020 09:15:04 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт окт 09, 2018 10:01:10
Сообщений: 76
Рейтинг сообщения: 0
Итак, задача.
Надо получить 4 независимых канала , генерирующие прямоугольные импульсы.
Параметры импульсов нужно менять посылкой команды на ардуино через Serial.
Первые два канала:
Длительность импулсов от 55 до 120 мкс.
Период должен меняться от 560 до 13104 мкс с шагом в 128 мкс.

Вторые два канала, по просто ШИМ. Важно только, чтобы кол-во шагов было не 256, а 1024.

Я думал, что сделаю таймер на 500 кГц, а в теле события таймера будут считать, сколько тиков прошло, и соответственно буду включать 0 или 1 на нужном пине.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Ср фев 26, 2020 09:36:18 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14078
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Пишем на чистом ассемблере или на чистом Си и не имеем проблем.
Да и ардуина там не особо нужна.
один независимый канал=одна тини2313 (таймер Т1)
С ШИМами можно и одной корпусиной обойтись.
Это ежли аппаратные использовать.
Программные также допустимы, но там уже явно ассемблер потребуется.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Ср фев 26, 2020 12:18:49 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
FuseStart, на ардуино уже тикает таймер каждые 4 мкс. Если планируется использовать ардуино, то использовать micros() тогда. Но кратность будет 4мкс соотв + все задеркжи от промежуточного кода.
Если нужно точнее - на 8-битном AVR только без ардуино если писать.
Или брать ESP8266/ESP32 и из того же ардуино можно будет и ногодрыгом успевать.
Ну или в сторону STM32 смотреть.

Первые 2 канала у вас в общем-то тоже ШИМ по-сути.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Ср фев 26, 2020 21:48:12 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1385
Рейтинг сообщения: 0
Книжку по архитектуре МК AVR в зубы и вперёд. Ардуино и форумы не учителя ни разу. Генератор сигналов на МК подразумевает прерывания от таймеров формирующих сигнал. И любое другое прерывание ломает сигнал. Это означает, что другие прерывания нельзя использовать. К примеру, прерывания от uart. Если генератор сигнала, значит все остальное только в основном цикле. Либо только в единственном случае. Когда нет генерации сигналов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Не работает Serial при установке Таймера
СообщениеДобавлено: Ср фев 26, 2020 23:47:18 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Длительность импулсов от 55 до до 120 мкс.
................
Важно только, чтобы кол-во шагов было ... 1024.

Ну ну... Сейчас тут насоветуют всякого, не понимая основной сути проблемы.
Поделите ка 55 us на 1024 и прикиньте какой должен быть квант отчётов.

Добавлено after 5 minutes:
Хотя нет. Точнее будет так :
(120-55)us / 1024 = 63.5 ns


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 35


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y