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

Циклический таймер на ATtmega8A.

Ср апр 07, 2021 08:13:36

Алгоритм которого написан по просьбе Александр_73.
Александр_73 писал(а):По возможности програмируем время покоя, время работы и общее время программы.Общее время программы до 24часов.
ПРИМЕР 1:включили,задаем время покоя 10мин,время работы 1сек,общее время 6часов.
ПРИМЕР2:включили ,время покоя 3мин,время работы 30сек,общее время 1час

В таймере можно выбирать период, продолжительность времени которого логической единицы (Hi) от 1 сек. до 59 мин и время логического нуля (Lo) также от 1 сек. до 59 мин. А также можно выбирать количество циклов (общее время работы до 24 часов.).
Для понимания работы в виде примера: допустим время лог 1 (Hi) выставили 5 секунд, а время лог 0 (Lo) выставили 3 минуты. Таким образом, общее время периода составило - 3 мин, 5 сек. Если нам нужно общее время работы около 1 часа, то в данном примере это получится 19 периодов, то есть время общей работы точнее составит 58 минут 35 секунд.

Устройство выполнено на МК ATtmega8A. МК тактируется на частоте 4 МГц. Ставить или не ставить кварцевый резонатор зависит от желания пользователя. В виде дисплея используется LCD WH1602 или подобный на HD44780 (шрифт используется латиница).
Схема:
Изображение
Прошивка:
Timer.hex
(8.05 KiB) Скачиваний: 42

Фьюзы для тактирования от внутреннего генератора:
F1.png
(15.18 KiB) Скачиваний: 55

Фьюзы для тактирования от кварца:
F2.png
(15.21 KiB) Скачиваний: 53

Краткое описание управления.
Описание.pdf
(173.38 KiB) Скачиваний: 23


ЗЫ. Прошивка требует тщательного тестирования. Тестирование мною производилось поверхностно.
Последний раз редактировалось Самсусамыч Ср апр 07, 2021 14:22:46, всего редактировалось 1 раз.

Re: Циклический таймер на ATtmega8A.

Ср апр 07, 2021 12:15:33

Спасибо,проверю.

Re: Циклический таймер на ATtmega8A.

Ср апр 07, 2021 13:45:35

то, что весь экран на порте РС - это не удобно в программе - нужно передаваемый байт двигать туда-сюда для передачи старшей и младшей тетрады.
я у себя сажаю данные на экран на порты PD4-PD7. это получается, что старшую тетраду можно передавать сразу, а для передачи младшей тетрады применить всего одну команду swap.
и еще одно неудобство применения в качестве выходов выводов порта РС - обязательно нужно подавать питание на вывод AVCC.
в моем же случае подавать питание на вывод AVCC вообще не нужно, что упрощает монтаж.

Re: Циклический таймер на ATtmega8A.

Ср апр 07, 2021 14:12:38

Библиотека для ЖКИ написана для универсального использования выводов МК. То есть, нет жёсткой привязки какого либо порта… да, универсальные алгоритмы с точки зрения минимизации кода считаются более массивными, но зато позволяют быстро манипулировать выводами при необходимости во время создания ПП. Если у кого возникнут потребности для изменения портов подключения ЖКИ или кнопок, то это легко можно будет организовать.

Re: Циклический таймер на ATtmega8A.

Ср апр 07, 2021 14:37:49

...swap...

Пишем на С, подключаем библиотеки и забываем про
Starichok51 писал(а):...не удобно...

Re: Циклический таймер на ATtmega8A.

Ср апр 07, 2021 22:23:01

кому что нравится, дело вкуса ....
лично я пишу на ассемблере и вообще никакими библиотеками не пользуюсь.
для меня написать вывод на 1602 - примерно, как два пальца ...
и изменить порты, при необходимости, - точно также.
хотя я заново для каждого проекта не пишу вывод на 1602, а просто копирую из ранее сделанных проектов.
у меня на ассемблере разработана собственная "плавающая точка", которая гораздо быстрее работает Сишной "float".

Re: Циклический таймер на ATtmega8A.

Ср апр 07, 2021 22:37:22

У меня готовое устройство , простой - работа от 0 сек до 99 часов, 99 минут, 99 секунд .. до 99 циклов . Всё проверено , не раз . Правда на микрочипе (16ф684) . А ещё и для лсд на Кириллице.

Re: Циклический таймер на ATtmega8A.

Чт апр 08, 2021 10:32:04

у меня на ассемблере разработана собственная "плавающая точка", которая гораздо быстрее работает Сишной "float".

Таковы мы, олдскульные :) То же самое, причём для двух платформ: AVR и ST62XX. + функции: тригонометрия, корень, степень.

Re: Циклический таймер на ATtmega8A.

Чт апр 08, 2021 10:39:03

Рационально и разумно все, чем в конкретное время владеешь и можешь с максимальной пользой для конкретного случая применить.
:beer:

Re: Циклический таймер на ATtmega8A.

Чт апр 08, 2021 21:43:38

Jack_A писал(а):+ функции: тригонометрия, корень, степень.
+ функции я не делал - пока мне без надобности.
ограничился 4-мя арифметическими операциями - сложение, вычитание, умножение и деление.

Re: Циклический таймер на ATtmega8A.

Чт апр 08, 2021 23:40:09

у меня на ассемблере разработана собственная "плавающая точка", которая гораздо быстрее работает Сишной "float".

А Кто сказал что в СИ обязательно пользоваться float ?

Re: Циклический таймер на ATtmega8A.

Пт апр 09, 2021 10:16:14

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

Re: Циклический таймер на ATtmega8A.

Пт апр 09, 2021 23:46:41

Если допустим нужно приращение очень малого параметра к счётчику ( к примеру замер емкости набранной за 0,1 секунды и прибавление к общему счётчику) можно считать в переменную типа INT32 с умножением на 10 000 000 . Если непонятно то объясню на примере.

Re: Циклический таймер на ATtmega8A.

Вс апр 11, 2021 12:14:19

чтобы не потерять мелкую добавку к суммирующему счетчику делается совсем иначе.
для накопительного счетчика при очень маленькой прибавке сохраняется остаток от деления.
потом, при следующем делении, этот остаток сначала прибавляется, а уже потом делается деление и опять сохраняется новый остаток.
например.
расчет емкости ведем каждую секунду, поэтому для получения амперчасов проходящий ток нужно делить на 3600 секунд.
и допустим, что ток у нас измеряется в миллиамперах, поэтому будем считать в миллиамперчасах.
пусть ток будет 100 мА.
делим 100 на 3600 - целой части нет, и 100 попадает в остаток.
через 2 секунды мы к 100 прибавляем остаток 100, и делим 200 на 3600. 200 опять попадает в остаток.
через 35 секунд остаток будет равен 3500.
через 36 секунд 100 + 3500 делим на 3600 и получаем 1 - 1 мАч.
через 3600 секунд (1 час) мы получаем ровно 100 мАч.
а зачем тебе такое большое число 10 000 000?
ты что, собираешься считать емкость в микроамперчасах или даже в наноамперчасах? кому такое нужно?

Re: Циклический таймер на ATtmega8A.

Вс апр 11, 2021 21:53:55

Ток у нас не одинаковый ! Зарядные устройства телефонов ( ГАДжеТОВ) не держат ток на одном уровне !!!

Добавлено after 21 minute 37 seconds:
То есть ток заряда регулируют не зарядные устройства, а контроллеры в устройствах конечно - но это не важно кто . Наша задача считать ёмкость.

Добавлено after 1 hour 31 minute 48 seconds:
:) Как быть? Задача : просто подсчитать ёмкость за 0,1 секунды ! От АЦП ! То есть ТОК - не постоянный . Ток считанный и равный миллиамперам !

Re: Циклический таймер на ATtmega8A.

Пн апр 12, 2021 07:58:47

я очень подробно расписал, как считать емкость, что тебе еще осталось не понятно?
а по поводу 0,1 секунды я тебе задал вопрос:
ты что, собираешься считать емкость в микроамперчасах или даже в наноамперчасах?
но ты на него не ответил.

Re: Циклический таймер на ATtmega8A.

Пн апр 12, 2021 20:48:37

Ты конечно подробно расписал, но немного не адекватно , может хотел запутать ? И у тебя это получилось ! Твоя фраза "делим 100 на 3600 - целой части нет, и 100 попадает в остаток." Когда делим 100 на 3600 (в целочисленном делении) в остаток попадает ноль. Ну я разобрался с алгоритмом . Наверное он имеет место быть .

Re: Циклический таймер на ATtmega8A.

Пн апр 12, 2021 20:54:34

Когда делим 100 на 3600 (в целочисленном делении) целая часть равна нулю, а в остаток попадает 100.

Re: Циклический таймер на ATtmega8A.

Пн апр 12, 2021 21:16:17

Это по какому закону ньютона ? Там получается ( по математике , может какой то другой) =0,027777

Добавлено after 2 minutes 57 seconds:
Может ты слишком умный , а я слишком тупой , и потому Мы не можем понять друг друга ?

Re: Циклический таймер на ATtmega8A.

Пн апр 12, 2021 21:56:44

Который раз убеждаюсь, что интернет выдуман очень умными людьми, но для обезьян. Поэтому в нём есть даже калькулятор остаток от деления (йопт..)

https://ru.onlinemschool.com/math/assis ... ry/modulo/

Если кто-то что-то подзабыл, то велком.
Ответить