-1
Конфеты хорошие с липецкого комбината.
  • avatar
  • Dikoy
  • 12 апреля 2018, 20:41
+1
Не знаю было ли, но для не высоких требований к точности очень быстрый результат дают:
temp = (ms * 205) >> 11; // 205/2048 близко к /10
и
(X * 655) >> 16 (деление на 100)
Или вот быстрое деление на 3:
x/3 = x * 21845 / 65536 = (x * 21845) >> 16

Недостаток — возможно переполнение, т.к. умножение делается первым. И это вынуждает переходить на большую разрядность. Но всё равно работает быстро.
  • avatar
  • Dikoy
  • 08 апреля 2018, 18:46
0
Я им когда-то спаял партию GPS трекеров. По плате частоты от 16 МГц до 2,4 ГГц. Осознаёте боль?
Но отмылся. 2 бутылки уайт-спирита и сутки работы УЗ ванны. Банка была келлеровская.
  • avatar
  • Dikoy
  • 01 апреля 2018, 00:42
0
Это УФка. Светит ядовитым синим светом. Гель отверждает.
  • avatar
  • Dikoy
  • 19 февраля 2015, 07:39
0
Ну не знаю… Эпоксидный клей — та же смола, только в мелкой фасовке…
  • avatar
  • Dikoy
  • 17 февраля 2015, 23:03
0
совсем-совсем высокой или не совсем высокой?
Думаю, до 100 спокойно выдержит.
  • avatar
  • Dikoy
  • 17 февраля 2015, 17:07
0
Не обычные, а именно УФ, вроде тех, что на дискотеках применяют чтоб зубы светились. Понятно, что это весьма поверхностный УФ, но таки уф. Такая лампа отверждает за 2-3 минуты новая и по ходу пользования деградирует.
А внутри да, 3 стандартных балласта сберегаек, иногда 555 таймер, если лампа с таймером.
обычная лампа дневного света отверждает лак за час примерно. с потолка. сберегайка белая — минут за 40. поэтому маникюрщицы работают под накалками.
  • avatar
  • Dikoy
  • 17 февраля 2015, 17:05
0
и это тоже. но в щели он проникает. Особенно, если его разогреть лампой накаливания.
  • avatar
  • Dikoy
  • 17 февраля 2015, 17:02
0
да ладно дешевле… ногтевой, это 3 банки 5см диаметром за 9 долларов. ну ладно, белый не годится, но два остальных — вполне.
  • avatar
  • Dikoy
  • 17 февраля 2015, 17:01
0
Любой глянец (журнал) не липнет к гелю. Оргстекло, если глянцевое, тоже.
\кстати, у этих гелей высокая смачиваемость. Если оргстекло натёрто, исцарапано — он заполняет царапины полностью и следа от них не остаётся.
  • avatar
  • Dikoy
  • 17 февраля 2015, 07:27
0
для маникюра продаётся специальная бумага, к кторой гель не липнет. Из неё можно собирать форму, заливать, отверждать и радоваться.
  • avatar
  • Dikoy
  • 17 февраля 2015, 07:18
0
Ногти-с? ))
  • avatar
  • Dikoy
  • 17 февраля 2015, 01:21
0
Можно. Но гель гелю рознь. Я привёл ссылку на тот, что считается у маникюрщиц лучшим из китайских. А так, их и на али много разных. В том числе по отдельности.
  • avatar
  • Dikoy
  • 17 февраля 2015, 01:20
0
В пиках с их софтом не силён, смущает организация cmd[10];
Вы передаёте сначала данные, а потом адрес? Или вы просто cmd[10] с конца читаете?
  • avatar
  • Dikoy
  • 19 ноября 2014, 00:50
0
--т.е. барьером для компилятора, т.е. никаких оптимизацией применяться не будет.
Шо шо?.. Сам вызов или тушка функции?

--volatile там совершенно не нужен.
Не нужен. Но вы сравниваете значение регистра, о 16 битах, а он volatile, нравится вам это или нет.
Тут это уже обсуждалось.

--_с_ volatile переменной будет создан куда неоптимальней,
на 4 такта.

--я несколько месяцев назад поднимал топик на эту тему
Дык это прописные истины. Вот только i++ в функции, которая вызывается из прерывания, IAR убьёт. Как минимум выдаст предупреждение. Даже если i глобальная. И волатайл в счётчике как раз на своём месте.

--а что из этого следует? не понял
Что код писали упыри. Там атмега внутри (иногда адук). И явно внутренние таймеры используются для измерения частоты.
На моём коде таких дрожаний нет.

--в апноте сказано, что «а мы здесь не учли переполнение. сделайте сами».
facepalm… Ну причём тут это то?! Смотрите внимательней.

--я обычно ищу сразу на западных ресурсах, в моем результате:
Я ещё и на испанском ищу, и в вашем результате:
1. повышение разрядности счётчика, очевидные вещи 6. «проблема» одновременности прерывания, а «готовый код» работает через такую хитровывернутую Ж, что впору в музей лагов.
Не, конечно я использую подобный метод по случаю. Например тут я измеряю периоды по прерываниям INT и захваченным в них значениями TCNT. На 50 Гц это работает, даже неплохо. Но это НЕ КАПЧА. Это именно захват таймера в стороннем прерывании, я отдаю себе отчёт что это и чем это чревато при перегрузке кода.
А вот использовать капчу и одновременно работать так же, читая TCNT, это уже идиотизм. А приведённые мной ранее ссылки и апнота атмела тому примеры.
Вы мне покажите, от куда ваша «стандартная простыня», что работает правильно ;)

--вы слишком много уделили времени на конкретные детали своей задачи,
отсутствие привнесённой погрешности при использовании капчи, это не моя задача. Это задача вселенского масштаба!
  • avatar
  • Dikoy
  • 16 января 2013, 20:52
0
Разумеется, проблему можно и не получить. Если большой предделитель, малая загрузка и т.д. Но это мина под задницей. Которая неизвестно когда рванёт.
Да и вообще, раз используется режим захвата, надо его и использовать, а не изобретать хрень с обнулением.
Вам это известно, мне известно. А кому-то может и нет.
  • avatar
  • Dikoy
  • 15 января 2013, 00:45
0
1) Ну да, с приоритетом я ошибся. Смотрел 4-5 таймеры, там они рядом.
2) если что-то можно сделать быстро, зачем это делать медленно? В моём коде переполнением считается переполнение 2 и более. Как результат, мне не нужно проверять регистр, не нужно сравнивать 16-и битные переменные (всё volatile между прочим). У меня это делается ОДНИМ сравнением в 8 битах. Если было одно переполнение или меньше — логику капчи разрулит вычитание. Если было 2 или больше переполнений — значит вышли из берегов. Всё то же самое, но быстрее и прозрачней ИМХО.
3,4,5) я писал тахометр, для него это не частный случай ;) Вот, можете посмотреть на результат работы модуля ADAM-4080. Солидная фирма, стОит под 300 баксов. Подаю частоту с эталонного генератора и вот вам результат: narod.ru/disk/65470482001.87de0ad6fb455ee6c2c7ad6ad999ad5d/rotacion_video.zip.html Показания плавают, и плавают не хило. Хотя частота стоит как влитая. До пятого знака после запятой.
Файлы в *.exe т.к. это флеш видео, упакованное сразу в проигрыватель, а не вирусня ;) Ну как масяня в своё время :)

>я приготовился услышать (увидеть) попытку решить описываемую проблему, которой, как оказалось, просто нет.
Та ви шо! А откройте апноту из статьи и посмотрите, как там сделано. Или вот:
chipenable.ru/index.php/programming-avr/item/51-uchebnyy-kurs-16-razryadnyy-taymer-schetchik-t1-preryvanie-po-sobytiyu-zahvat-prostoy-chastotomer-na-avr.html
avrproject.ru/publ/capture_timer1_avr/1-1-0-24
Все примеры, что мне удалось найти, работают через Ж. Простой стандартной тряпки, вроде вашей, я не нашёл. Свой код сочинил сам, единолично. Если он совпадает с вашим, пусть и частично — гуд. Значит мысли идут в одном направлении :)
А если делать так, как в приведённых примерах, получим то, что на видео. Это и есть та проблема, чтоя решил и поделился. А каждый сам решает, нужно ему это или нет. Халява, она такая.
  • avatar
  • Dikoy
  • 15 января 2013, 00:37
0
Не совсем.
Чтобы фильтр работал корректно, нужно N последовательных выборок. И последовательность тут очень важна.
Если увеличивать разрядность за счёт учёта переполнений, мы получаем ряд неопределённостей, которые я описал ниже.
В любом случае, на моих частотах я получаю 11 бит на ВП и мне нет смысла учитывать переполнения. А если кому надо по другому, то это его проблемы :) Я не стремился дать панацею.
  • avatar
  • Dikoy
  • 11 января 2013, 00:10
0
А теперь посмотрите на мой код и найдите 5 отличий.
Я их назову:
1) вы мониторите TOV1 в теле. Зачем? Приоритет OVF выше, значит если OVF произойдёт до или одновременно с капчей, обработчик уйдёт туда и выполнит инкремент, а если после капчи — то в текущем ISR(TIMER1_CAPT_vect) нас оно не волнует, т.к. к текущей капче отношения не имеет. То есть имеем нехилый набор лишних операторов.
2) Вычисление дельты намного жирнее простого (sample — last_sample) & 0xFFFF и даже вычисления через IF, которое использую я по необходимости. Пусть даже оно учитывает переполнения и расширяет разрядность (от чего только неопределённость, о которой ниже).
3) нет выдачи нуля при обрыве и снижении частоты до заданного уровня. Стрелка просто залипнет.
4) нет контроля переполнения delta. Если датчик оборвут или частота станет слишком низкой, результат вполне может перевалить за 32 бита и получим на выходе бурду.
5) ну и без оного контроля реализовать фильтр невозможно т.к. мы не знаем, уместятся ли N выборок в переменную заданной разрядности, а без этого знания мы опять получаем неопределённость, которая выльется в мину, которая неизвестно когда сработает.
Для домашнего использования пойдёт. Для системы контроля это недопустимо.

В остальном код 1:1 с моим.

А по поводу борьбы — народ возопил, что всё можно решить проще. В процессе обсуждения до некоторых дошло, до некоторых — нет… В любом случае проще никто не написал, ограничились трёпом :)
  • avatar
  • Dikoy
  • 11 января 2013, 00:05
0
Для этого и нужен счётчик переполнений, который у меня есть и работает очень быстро.
И он прокатывает на любом числе переполнений, от 1 до 16. причём 16 ограничено искусственно и выше он просто физически не залезет. И выдаёт при этом стабильный 0, пока сигнал вновь не войдёт в рамки измерений. А как только войдёт, сразу пойдут корректные данные.
Что мне и было надо.

Чтобы всё работало, как хочет социум, должен быть аппаратный старт/сброс таймера по капче, которого в AVR нет.
Тогда да, всё сведётся к
if( !(STATUS_REG & OVF_FLAG)) u16_period = TCNT;
else u16_period = 0;

Но мы живём в жестоком мире. А потому приходится адаптироваться.
  • avatar
  • Dikoy
  • 08 января 2013, 04:37