Ибэй, Али, Амазон и прочие магазины в помощь. Правда, приходится ждать.
ploop писал(а):
то программную коррекцию, и пару месяцев настройки
Как сделать? Просто никогда не интересовался. Правильно понимаю, что находим уход, скажем, за 30 дней, делим на 30, получаем уход за день и подправляем время на эту величину ежедневно, например, в полночь? А с RTC (там можно только с секундной дискретностью менять время) как сделать - вычислить "обратную" величину, т.е. за какое время часы уходят на 1 сек, и с этим интервалом корректировать на 1 с?
_________________ У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
RTC считают как правило по 10мс - до сотых долей секунды можно извлечь и установить время. Просто надо высчитать коэффициент и корректировать каждые N секунд на положенные + или - 10мс. Впрочем, это всего лишь математика. Можно даже не считать а занести в флеш в виде табличных значений N для каждого возможного коэффициента коррекции - например от 0 до +-6.3 сек/сутки - всего 63 ячейки.
Например, коэффициент 0.1сек/сутки если корректировать по 10мс то для этого нужно это сделать 10 раз за сутки - N = 24*60*60/10 = 8640, для коррекции 6 сек/сутки необходимо 600 раз откорректировать в сутки - N = 24*60*60/600 = 144
Да вообще решений много может быть. У меня просто переменная - счётчик корректируется каждый час (грубая коррекция) и она же, но каждые сутки (точная). Эта реализация не самая лучшая, но оказалась самая простая.
Да, и коррекция обязательно должна быть в меню настройки, а не в коде
А с RTC (там можно только с секундной дискретностью менять время) как сделать
Корректируете всегда на целое число секунд. Оставшуюся дробную часть прибавляете к предыдущей дробной части. Если сумма больше единицы, то коррректируете на+1секунду, от суммы отнимаете 1.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Карма: 9
Рейтинг сообщений: 19
Зарегистрирован: Ср мар 10, 2010 22:28:34 Сообщений: 1287 Откуда: Запад Беларуси
Рейтинг сообщения:0
Вроде бы как сделал опрос кнопок. В прерывании проверяется состояние портов кнопок часов и минут. Если нажата, то переключить флаг на 1. В основном цикле сперва проверяется флаг, потом кнопка, после проверка: Не нажата ли кнопка установить будильник. и потом инкремент. По ходу задержки больше не нужны...
От задержек вообще избавляться надо всеми силами. Если же где-то все таки нужна задержка, скажем, антидребезг, то если есть возможность, выделить один таймер под организацию отложенного выполнения. В главном цикле можно вводить задержки, но моветон.
_________________ У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
А зачем проверять кнопку если уже есть флаг означающий её нажатие? Впрочем, не надо фиксировать факт нажатия - в прерывании запомнить состояние кнопки и все. При условии если прерывание происходит не чаще чем длится дребезг контакта - проблем с дребезгом не будет, обычно этот безопасный период - 10мс. В вашем варианте флаг-проверка кнопки дребезг будет влиять, но всего лишь в меньшей степени - ведь прерывание может произойти прямо перед проверкой флага в основном цикле - и считывание кнопки придется прямо на период дребезга где состояние кнопки не будет гарантированным.
При строго периодической фиксации состояния кнопок все что может сделать дребезг - это "отложить" момент нажатия кнопки на период одного опроса.
Карма: 9
Рейтинг сообщений: 19
Зарегистрирован: Ср мар 10, 2010 22:28:34 Сообщений: 1287 Откуда: Запад Беларуси
Рейтинг сообщения:0
Как бы с этими фьюзами разобраться?.. какие надо выставлять... Прошивать буду по ходу через COM порт (4 диода 8 резисторов). Либо тритоном, если получится до него добраться ...
Карма: 9
Рейтинг сообщений: 19
Зарегистрирован: Ср мар 10, 2010 22:28:34 Сообщений: 1287 Откуда: Запад Беларуси
Рейтинг сообщения:0
Я так понимаю, в Uniprof нужно выставлять такие фьюзы? (SPI и внешний кварц) И, если прошивка занимает немного памяти, то может в настройках оптимизировать под скорость, а не под размер?
_________________
Последний раз редактировалось Xatrix Вс фев 02, 2014 15:29:04, всего редактировалось 1 раз.
Довольно глупо ставить часовой кварц, а потом оптимизировать по скорости Делай, как делают все - МК запускай от встроенного RC-генератора на высокой частоте, тогда вообще можно забыть об ограничениях по быстродействию, а часовой кварц заводи на таймер. Так будет намного проще. Тем более что схему для этого менять не надо, только софт. Если тактовая частота 1 МГц устраивает, то фьюзы вообще можно не трогать, оставить по умолчанию.
_________________ У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Карма: 9
Рейтинг сообщений: 19
Зарегистрирован: Ср мар 10, 2010 22:28:34 Сообщений: 1287 Откуда: Запад Беларуси
Рейтинг сообщения:0
контроллер начинает работать только после того, как прикоснусь пальцем к подстроечному конденсатору. может с фьюзами напортил? Резонатор и конденсаторы припаяны нормально, проверено...
У вас выбран фьюзами кварц на частоту 0.9-3.0Мгц. Потому и не работает. И еще, часовым кварцам с такой схемой включения резонатора нужен еще резистор между его выводами на 10...20МОм т.к. кварц любит статику на себе собирать в процессе работы.
И судя по всему, минимальная частота кварцевого резонатора с которой контроллер может работать - это 400кГц. Не пытайтесь изобрести велосипед, подавайте частоту 32768 на вход таймера, а не основной частоты(ATTINY2313 не имеет встроенного генератора на входе таймера, поэтому придется его сделать на рассыпухе - например 561ЛЕ5 или 561ЛА7).
Карма: 9
Рейтинг сообщений: 19
Зарегистрирован: Ср мар 10, 2010 22:28:34 Сообщений: 1287 Откуда: Запад Беларуси
Рейтинг сообщения:0
хорошо. что значит на вход таймера? можно понятнее? так сказать - для нубов... схему менять уже нельзя. но можно изменить прошивку. да и ничего на плату уже не влезет. Она под корпус от Электроники 12-41 заточена.
Если у тебя 2313, то без изменения схемы не получится, как сказал Alexeyslav, генератор пришлось бы на рассыпухе делать. Я то пользуюсь Мегой 8, там схему менять не надо.
Хотя, есть вариант просто перепаять кварц на 4.194 МГц (эта частота является степенью двойки) и поделить его на 16 разрядном таймере, прерывания попрут с частотой 64 Гц (если правильно посчитал), дальше считать программным счетчиком. Можно делить не до 64 Гц, а выше, например до 256 или 512, и сделать на этом же прерывании еще и динамическую индикацию.
_________________ У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Последний раз редактировалось Darth Cuauhtemoc Вс фев 02, 2014 18:43:18, всего редактировалось 1 раз.
Тогда прийдется использовать кварц на 4Мгц и задействовать 16-битный таймер в режиме CTC (может ли он так?) для счета до 20000 при тактировании от частоты ядра получим 200Гц прерывания, внутри прерывания инкрементируй еще один программный счетчик который будет считать до 200 сбрасываться и прибавлять секунду к счетчику времени.
Хотя, можно считать до 5000 и использовать прерывание для динамической индикации(перебор знакомест с частотой 1кГц, и обновление всех 4-х цифр с частотой 200Гц), и каждое 4-е прерывание выполнить выше описанный алгоритм.
Карма: 9
Рейтинг сообщений: 19
Зарегистрирован: Ср мар 10, 2010 22:28:34 Сообщений: 1287 Откуда: Запад Беларуси
Рейтинг сообщения:0
Значит ставим кварц на 4МГц. Можно использовать таймер по совпадению, задать число и по прерыванию инкрементировать msec. Вот с подбором числа для совпадения и msec я тогда и запарился... Тем более частоту можно подогнать и конденсатором... В контроллере есть фьюз CKDIV8, или лучше его не использовать?.
Режим таймера CTC - это счет по модулю N. Чего его парится выбирать-то? максимальный период таймера - 65535. Поэтому выбираем меньшее удобное число N, с учетом того что нам еще динамическую индикацию гонять - надо подобрать такое N чтобы с 4Мгц получить прерывания примерно частотой 800-1000Гц(чтобы 4 разряда перебирать с частотой не менее 200Гц иначе глаза сломаешь смотреть на такое мерцание), да так чтобы еще число можно было удобно дальше поделить до секунд. Я бы выбрал N = 5000 тогда получаем 800 Гц которые делятся на 4 при реализации динамической индикации на 4 разряда. Частоту начала цикла индикации(вывод в первое знакоместо) получаем 200Гц, тут же не отходя от кассы считаем счетчиком из одного регистра (который может считать только до 255) делим эти 200Гц на 200 и получаем событие происходящее раз в секунду. Если бы пришлось делить что-то на число большее 255 нам надо было бы реализовать арифметику на 16 бит и пользоваться парами регистров, зачем нам лишние трудности когда их можно избежать?
Кстати если иногда ставить коэффициент счета таймера N+1 и N-1 можно замедлять и ускорять ход времени, не нужна будет коррекция частоты в железе, можно обойтись программной коррекцией хода. Надо только вычислить необходимо количество прерываний M через которое надо делать N+1 или N-1 на один раз. Можно заранее просчитать все значения M для коэффициентов коррекции от -6сек/сутки до +6сек/сутки с шагом 0.1сек и после сборки часов за 10 дней определить необходимую коррекцию и задать её в часах.
ну, почти так же как и есть только в прерывании устрой динамическую индикацию. А счет времени уже потом прикрутишь. Ибо динамическая индикация в основном цикле не есть хорошо... Длительность отдельных фаз будет отличаться из-за того что delay твой будет удлинятся прерываниями, на реальном индикаторе это выльется в виде неравномерного мерцания индикатора. Да еще с частотой 50Гц - в шпротеусе этого видно не будет, но на реальных индикаторах будет жуДко мерцать. Светодиоды не лампочки - инертностью не обладают.
Пойдет, но если с переполнением, то лучше кварц на 4194304 Гц - это даст ровно 64 мсек между прерываниями. С кварцем ровно 4 МГц будут отставать на 50 с хвостиком секунд в сутки, если я правильно подсчитал (часто путаюсь в таких расчетах) - а это очень много.
Alexeyslav писал(а):
Длительность отдельных фаз будет отличаться из-за того что delay твой будет удлинятся прерываниями, на реальном индикаторе это выльется в виде неравномерного мерцания индикатора.
Xatrix
Совершенно верно, динамическая индикация всегда делается в прерывании - выдал очередную цифру, включил соответствующий ей анодный ключ. До тех пор, пока не придет следующее прерывание - будет гореть данная цифра. Т.е. для каждой цифры получается "задержка" (точнее будет сказать - отводится время) для горения, равная промежутку времени между прерываними. Однако тогда придется либо разобраться с прерываниями по совпадению (CTC), поскольку c прерываниями по переполнению частота индикации будет около 15 Гц , либо ставить прескалер clk/64 вместо clk/256. Второй вариант даст приемлемую частоту индикации 61 Гц, но msec должен быть по крайней мере двухбайтным беззнаковым целым - uint16_t, если в библиотеке есть такой тип. Если нет, то unsigned int должен подойти.
В принципе, в данном конкретном случае, где всего одно прерывание, причем быстрое, скорее всего неравномерность свечения будет незаметна на глаз, тем не менее дурных привычек лучше не приобретать с самого начала.
Везде, где можно избавиться от задержек - лучше избавляться. Засовывать в прерывания (как в случае с динамической индикацией), организовывать отложенный запуск, если это какой-то "долгий" код, который нежелательно выполнять в прерывании - то в прерывании установить флажок, а выполнять в главном цикле, но избавляться от задержек всеми силами.
_________________ У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 245
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения