В процессе экспериментов установил, что Арду Нано (для теста) - миллис работает отлично, задал 10 минут, он отсчитал ровно 10 минут 00 сек. К слову, Delay 600000 отсчитал на той же Нано 9 минут 59 сек, что вполне хорошо.
В 13-шке миллис вообще работает через пень-колоду, в любое время срабатывает (обычно позже указанных 5 секунд).
Delay - не вариант, но и он работает очень неточно, к тому же вешает систему.
С зависанием выкрутился пока приращением vrodeMillis++ на каждой delay(1), на 10 минут ошибается на 30 секунд, ужас, но что поделать, пока так.
Пробовал все частоты - думал, вдруг поможет, не помогло вообще никак.
Вопрос - вообще есть какой-то способ с помощью Attiny13 отсчитать ровно 10 минут с точностью до секунды?
И еще вопрос. Понравилось пользоваться функцией для ежеминутного срабатывания. if (millis() % 60000 == 0)
Но, как сказал Alexgyver, эта функция сильно замедляет всю программу, может сработать больше одного раза (т.к. 60000 может держаться два или три прохода условия), а также это условие может вообще проскочить 60000 и не выполниться никогда.
Что еще можно придумать, что еще и заработает на Attiny13a?
The ATtiny13 only has one timer, timer0. On "regular" arduinos like the UNO, this timer is used for generating millis() and micros(). On the ATtiny13 I'm using the watchdog for generating millis and micros, which frees timer0. The reason for the error you're seeing is that WDT_vect
Цитата:
У ATtiny13 есть только один таймер — timer0. На «обычных» Arduinoх, таких как UNO, этот таймер используется для генерации millis() и micros(). На ATtiny13 я использую сторожевой таймер для генерации милли и микро, который освобождает таймер 0. Причина ошибки, которую вы видите, заключается в том, что WDT_vect
Столкнулся с этим моментом некоторое время назад. Используйте millis(), micros() для безответственных дел. Отчет о времени напр. через таймер. Тогда придется не использовать задержку. (Если для небольших периодов можно например nop в цикле).
И "точное время" из внутреннего генератора, тем более: без индивидуальная коррекция OSCALL - невозможно. А некоторые экземпляры МК сильно отличаются частотой внутреннего генератора и там вероятно OSCALL не откалиброван на заводе.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Пока не будет внешнего кварцованного тактирования tn13, точных временных интервалов не получите.
Насколько я понял, к Attiny13 не подключишь кварц, только внешний генератор, а у меня габариты девайса не позволяют кучу дополнительных элементов , к сожалению. И цена девайса тоже возрастет, а мне это также критично. Пока будем работать с "Примерно минутой", с этим жить можно.
Что еще можно придумать, что еще и заработает на Attiny13a?
Не пользоваться Ардуино IDE. А если пользуетесь, то говорите хотя бы какое ядро.
Если честно, я сами не знаю, какое ядро. Ардуино Нано с Али, Attiny13 с Чип Дипа, подключал 13 к Нано 4 проводами + питание и земля. Прошил Нано скетчем ArduinoASP, а далее прошил скетч в 13. Где посмотреть какое ядро? Вот скрин Arduino IDE на всякий, если это поможет.
The ATtiny13 only has one timer, timer0. On "regular" arduinos like the UNO, this timer is used for generating millis() and micros(). On the ATtiny13 I'm using the watchdog for generating millis and micros, which frees timer0. The reason for the error you're seeing is that WDT_vect
Цитата:
У ATtiny13 есть только один таймер — timer0. На «обычных» Arduinoх, таких как UNO, этот таймер используется для генерации millis() и micros(). На ATtiny13 я использую сторожевой таймер для генерации милли и микро, который освобождает таймер 0. Причина ошибки, которую вы видите, заключается в том, что WDT_vect
Столкнулся с этим моментом некоторое время назад. Используйте millis(), micros() для безответственных дел. Отчет о времени напр. через таймер. Тогда придется не использовать задержку. (Если для небольших периодов можно например nop в цикле).
И "точное время" из внутреннего генератора, тем более: без индивидуальная коррекция OSCALL - невозможно. А некоторые экземпляры МК сильно отличаются частотой внутреннего генератора и там вероятно OSCALL не откалиброван на заводе.
Спасибо! Понятия не имею, как реализовать мою 60сек задержку на сторожевом таймере, поэтому возник более важный вопрос - может, выбрать что-то еще вместо tiny13 для решения моей задачи?
Только мне нужна 1. Миниатюрность (в идеале в дип корпусе,а то SOIC паять тяжеловато). 2. Экономичность по питанию и 3-4 вольта для нормальной работы. 3. Дешевизна.
Готов на неудобства типа покупки программатора именно для этой задачи (хотя USBISP тоже есть, но я его не использую, шью через ArduinoISP в Arduino IDE, так удобнее).
P.S. Заказал пяток attiny85-20pu DIP для эксперимента, но они придут только через две недели.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
как лично по мне, так крайне сомнительный выбор чипа. Стоимость как у меги88, а возможностей несравнимо меньше. Для себя применяю серию мега48/88/168/328. Полностью заменимы снизу вверх и адекватная стоимость.
Если честно, я сами не знаю, какое ядро. Ардуино Нано с Али, Attiny13 с Чип Дипа, подключал 13 к Нано 4 проводами + питание и земля. Прошил Нано скетчем ArduinoASP, а далее прошил скетч в 13. Где посмотреть какое ядро?
Ну вы же плату выбираете из списка плат. Какой? Для тини13 microCore, DIY tiny core, возможно ещё какая. Из Arduino IDE можете использовать компилятор. Только не использовать функции Ардуино. 10 минут вполне точно должно отрабатывать и без кварцевого генератора.
В сообщении выше следует читать: автор MicroCore сделал всё необходимое, но функции millis, micros сделани уже с помощью WDT. С соответствующими неудобствами и нестыковками. (не нужно делать ничего дополнительного)
А согласно быстрым собств. тестам, вляния колебания температуры к клока и jitter в AVR хуже, напр. от PIC. Если хотите точности, то хотя бы кварц /в ATtiny13A нет возможности/ или внешой генератор.
Для чего используется конструкция? Анализируйте и делитесь информацией хотя бы относительно времени (и clock МК)?
Насколько я понял, к Attiny13 не подключишь кварц, только внешний генератор, а у меня габариты девайса не позволяют кучу дополнительных элементов , к сожалению. И цена девайса тоже возрастет, а мне это также критично.
Сейчас кварцевые генераторы это одна деталька, размером +- с тот же самый кварц, и стоят не на много дороже этого кварца.
Ну или как выше писали, при старте, читаем OSCCAL, прибавляем/отнимаем +-1, перезаписываем, компилируем, шьем, замеряем, мало (много)? Меняем OSCCAL дальше, пока не подойдем максимально близко к 10:00:000. Но при изменении температуры оно потом все равно уедет
Попадались пару раз tiny2313, которые через UART на 9600 не работали, ошибка по частоте большая была, только изменением OSCCAL выкрутился, там все ноги заняты были, ни кварц ни генератор не подключишь...
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
возьмите например STM32G030C6T6, его можно купить и подешевле ATTINY13, по размерам тоже сопоставимо, корпус правда LQFP48, но не думаю что это проблема, я и лутом под них платы делал, а с фоторезистом вообще в легкую
зато получите полноценные RTC на борту и свои 10 минут отсчитаете с точностью до сотых секунды если не лучше по энергопотреблению STM32 думаю даже лучше AVR будет (но это не точно), и если прям сильно важно энергопотребление смотрите STM32L серию, она специально сделана для батарейных девайсов
ну и ко всему прочему получите кучу дополнительной периферии
Код:
Features Core Arm® 32-bit Cortex®-M0+ CPU, frequency up to 64 MHz -40°C to 85°C operating temperature Memories Up to 64 Kbytes of Flash memory with protection 8 Kbytes of SRAM with HW parity check CRC calculation unit Reset and power management Voltage range: 2.0 V to 3.6 V Power-on/Power-down reset (POR/PDR) Low-power modes:Sleep, Stop, Standby VBAT supply for RTC and backup registers Clock management 4 to 48 MHz crystal oscillator 32 kHz crystal oscillator with calibration Internal 16 MHz RC with PLL option Internal 32 kHz RC oscillator (±5 %) Up to 44 fast I/Os All mappable on external interrupt vectors Multiple 5 V-tolerant I/Os 5-channel DMA controller with flexible mapping 12-bit, 0.4 µs ADC (up to 16 ext. channels) Up to 16-bit with hardware oversampling Conversion range: 0 to 3.6V 8 timers 16-bit for advanced motor control, four 16-bit general-purpose, two watchdogs, SysTick timer Calendar RTC with alarm and periodic wakeup from Stop/Standby Communication interfaces Two I2C-bus interfaces supporting Fast-mode Plus (1 Mbit/s) with extra current sink, one supporting SMBus/PMBus and wakeup from Stop mode Two USARTs with master/slave synchronous SPI; one supporting ISO7816 interface, LIN, IrDA capability, auto baud rate detection and wakeup feature Two SPIs (32 Mbit/s) with 4- to 16-bit programmable bitframe, one multiplexed with I2S interface Development support serial wire debug (SWD) All packages ECOPACK 2 compliant All packages ECOPACK 2 compliant
ну и минус, после того как освоите STM32 на AVR вы уже никогда не вернетесь
Ну, с этим не поспоришь.) Хотя... Когда то сталкивался с похожим как у ТС с одним из ядер. Проблема была с удлинением delay на 1,2 мгц (на 9,6 ОК). Удлиняли прерывания от таймера. Но миллис отрабатывал нормально. Поэтому, если ТС сформулирует свою задачу, то можно попробовать подсказать решение.
Добавлено after 4 hours 32 seconds: Just_Fluffy, этот пример для того, что если руки кривые, то и кварц не поможет).
ну так стандартный делей не учитывает прерывания. А миллис.... Ну вот никогда не понимала "костыли" в виде ардуины... В принципе, для простой программы (а в тринадцатую тню другая и не влезет) хватает одного таймера, задающего периодичность выполнения суперцикла. А уже в самом цикле делать все задержки и отсчеты на программных таймерах. Тогда уже к периоду суперцикла можно привязать кучу задач, выполняющихся параллельно. При этом таймер можно использовать и по прямому назначению - генерации ШИМ, если выходная частота таймера не сильно высокая.
millis(), micros() в MicroCore сделали с WDT Oscillator. (Timer0 остается для приложений). WDT Oscillator имеетмеет худшую зависимость от напряжения и температуры, не калибруется на заводе и не можно калибрировать.
См. millis.S:
Код:
ldi ZL, lo8(wdt_millis_counter) ld tmp1, Z subi tmp1, -19 ; Add 19 (not 16) because the WDT clock isn't really 128 kHz
Подправляли "методом проб и ошибок", потому что без этого порядка будет еще хуже. Если для время используете Timer0, будет лучше. Он: по Fclock, он: по OSCALL. Но если не нужен таймер для чего другого. Так что при малом количестве ресурсов в МК - самое то. Мне нравится ATtiny13A именно из-за этого и он один из моих любимых МК - заставляет думать "по-другому" при написании программного кода .
АТмега8, конечно, крупнее, чем АТтини13, но у АТмега8 внутренняя частота 1 МГц хорошо откалибрована - отклонение не более 0,5%. на 10 минут это составит не более 3 секунд, а может и меньше. я даже первые версии одного своего проекта делал без кварца, а там у меня работал секундомер для подсчета времени работы. но потом на форуме меня попросили поставить кварц для более точного подсчета времени. когда запущен процесс, то за несколько часов без кварца накапливалась заметная ошибка.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Сейчас этот форум просматривают: Energizer-A и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения