mantech 53 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Приветствую. Есть одна нетривиальная задача - нужен таймер с разрешением 0.01 сек Посмотрел хитрый блок часов в стм, и понял что не все так просто :crying: Во первых - кварц с частотой 32768 на 100 нацело не делится. Во вторых, счетчик RTC_SSR прибавляется на 1 каждые 1\256 сек, что тоже не то-не се. Вопрос - как-то можно сделать что-то более-менее похожее, исходя из всего этого, или решение только одно - надо где-то искать кварц на 36КГц? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Есть одна нетривиальная задача - нужен таймер с разрешением 0.01 сек Таймеров в STM много. Разрешение - хоть микросекунды. Причем тривиально! Или Вы что-то не договариваете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба ...нужен таймер с разрешением 0.01 сек...искать кварц на 36КГц? я что то не догоняю или.... у Вас камень кварцованный(в правильном раскладе) с частотой (вдумайтесь) 168 милионов раз в секунду. Точность какая при этом у Вас получается? Свои 0,01 Вы сможете смело и достаточно точно получить на любом(практически) таймере поделив всё это хозяйство на нужное число.будет у вас константа смещение на какую нить там сотую миллионную - Вы такую точность даже не выбирете ничем - ни каналами ввода выовода, ни пинами, ни мат обработкой... или??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 3 февраля, 2014 Опубликовано 3 февраля, 2014 (изменено) · Жалоба я что то не догоняю или.... А в курсе, что камень на своих 168мегах.... в выкл. состоянии не работает?? А часы идут от батарейки? ;) Вот и мне нужно, чтоб они шли не только, когда есть питание.. Ясень пень, что на обычном таймере я могу получить любую выдержку, только она будет несинхронна со встроенными часами. ЗЫ. Сейчас почитал даташит повнимательнее - оказывается там регистр синхронного делителя 15 бит и плюс еще асинхронный 7 бит (я раньше думал, что он - это старшая часть синхроного ) Отсюда вопрос - зачем вообще этот асинхронный делитель? Может сделать проще - задать его значение=1 (0 там помоему нельзя), итого получаем на входе синхронного 16384КГц, я так понимаю, и на счетчик миллисекунд будет поступать эта частота, а ее потом уже и делим на соотв. коефф. чтоб получить мс? Изменено 3 февраля, 2014 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба А в курсе, что камень на своих 168мегах.... в выкл. состоянии не работает?? А часы идут от батарейки? ;) Вот и мне нужно, чтоб они шли не только, когда есть питание.. Ясень пень, что на обычном таймере я могу получить любую выдержку, только она будет несинхронна со встроенными часами. Думаю, Вам стоит еще раз аккуратно объяснить чего Вы желаете. Нужны энергонезависимые часы с шагом 0.01 сек? От кварца с частотой 32768Гц не получите, ибо делитель должен быть дробный! Еще вопросы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Думаю, Вам стоит еще раз аккуратно объяснить чего Вы желаете. Нужны энергонезависимые часы с шагом 0.01 сек? От кварца с частотой 32768Гц не получите, ибо делитель должен быть дробный! Еще вопросы? Хорошо, попробую 1) нужны часы, которые идут от батарейки 2) разрешающая способность 0.01 сек (точность +-10мс) Я попробовал так - поставил асинхр. делитель в 0, а синхр в 32767. В рез-те получил тот же 1 Гц на выходе, и декремент регистра миллисек с частотой кварца. рассогласование частоты при делении - 68Гц, т.е. абс. точность получается при частоте 32700Гц, в принципе - сойдет. Правильно-ли я все понял, и если дел-ль=0 это нормально, или так делать нельзя? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Хорошо, попробую 1) нужны часы, которые идут от батарейки 2) разрешающая способность 0.01 сек (точность +-10мс) Я попробовал так - поставил асинхр. делитель в 0, а синхр в 32767. В рез-те получил тот же 1 Гц на выходе, и декремент регистра миллисек с частотой кварца. рассогласование частоты при делении - 68Гц, т.е. абс. точность получается при частоте 32700Гц, в принципе - сойдет. Правильно-ли я все понял, и если дел-ль=0 это нормально, или так делать нельзя? Фраза "When both prescalers are used, it is recommended to configure the asynchronous prescaler to a high value to minimize consumption." из UM говорит, что если используются оба делителя, то рекоментуется в асинхронный заносить бОльшие значения для уменьшения энергопотребления. Надеюсь, на Ваш вопрос ответил. Хотя мне до сих пор не понятно кому "нужны идущие от батарейки часы" с такой чремерной разрешающей способностью и "никакой" точностью? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SyncLair 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба в чём проблема? просыпайтесь каждые 1/256 секунды высчитывайте прошла ли 0.01 алгоритмически и делайте что вам надо, у вас же написано : НЕ ХУЖЕ! а не точно каждые 0.01 сек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба в чём проблема? просыпайтесь каждые 1/256 секунды высчитывайте прошла ли 0.01 алгоритмически и делайте что вам надо, у вас же написано : НЕ ХУЖЕ! а не точно каждые 0.01 сек. И 1/128 будет достаточно. Вариант уж очень прожорливый, хотя об этой стороне вопроса (энергопотребление) автор темы тоже умалчивает. Возможно, автор хочет сделать секундомер с выводрм сотых долей, причем не хочет заниматься "всем этим матаном" по пересчету 1/128 в 0.01. Зачем это надо автор отказывается объяснять. Почему бы не запустить RTC с обычным секундным интервалом и алгоритмически вычислять сотые на основании RTC->SSR? Что за "величины" будут в RTC->TR и RTC->DR и что с ними можно сделать вопрос тоже открытый? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Фраза "When both prescalers are used, it is recommended to configure the asynchronous prescaler to a high value to minimize consumption." из UM говорит, что если используются оба делителя, то рекоментуется в асинхронный заносить бОльшие значения для уменьшения энергопотребления. Странно однако, это я про делитель... А второе - что значит с никакой точностью? Я написал - погрешность не более 0.01 сек, как-то подругому писать? Да, часы должны работать от батарейки, потребление, конечно, чем меньше-тем лучше, высчитывать миллисекунды из 1\128 это как? Можете объяснить? Почему бы не запустить RTC с обычным секундным интервалом и алгоритмически вычислять сотые на основании RTC->SSR? Что за "величины" будут в RTC->TR и RTC->DR и что с ними можно сделать вопрос тоже открытый? Он именно так и работает - с секундным интервалом, иначе сами часы будут считать неправильно, логично? Просто с точки зрения математики - чем большее число делить на 100, тем точнее результат, например 32768 \ 100 получаем 327 Для проверки 327*100 = 32700, т.е. неточность 68Гц. Если делитель сделаем больше , скажем 16, до частоты 2048Гц, то получаем 2048 \ 100 = 20 проверяем 20*100*16 = 32000, т.е. мы "отстаем " уже на 768Гц, разница ощутима? Зачем это надо автор отказывается объяснять. В смысле зачем? Нужны часы для спортивных тренировок. из UM говорит, что если используются оба делителя, то рекоментуется в асинхронный заносить бОльшие значения для уменьшения энергопотребления. Замерил потребление, как было 1.5 мкА, при асинхр. делителе 128(по умолчанию), так и при полностью откл. делителе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба вопрос в том насколько плавает кварц, и насколько он изначально расходиться... из 1/128 сделать 0.01 примерно так 1/128 = 0.0078125 === 0 2/128 = 0.015625 === 0.01 3/128 = 0.0234375 === 0.02 4/128 = 0.03125 === 0.03 причем у вас нет накопления ошибки, погрешность прибора с ценой деления 0.01 по умолчанию +- 0.005, а через 128 отсчетов у вас будет честная 1, и следующий круг без какой либо накопленной погрешности. Но что-то мне говорит что точность кварца в температуре будет сильно хуже.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба вопрос в том насколько плавает кварц, и насколько он изначально расходиться... причем у вас нет накопления ошибки, погрешность прибора с ценой деления 0.01 по умолчанию +- 0.005, а через 128 отсчетов у вас будет честная 1, и следующий круг без какой либо накопленной погрешности. Но что-то мне говорит что точность кварца в температуре будет сильно хуже.... Это все понятно, заказчик не согласен ставить какие-то более качественные кварцы, пусть будет так. А на счет делителя, если на потреблежку от батареи не сильно влияет, больше тут никаких "подводных камней" нет? Если нет - то я так и оставляю, как делал. Все эти деления по точности дают худший результат, плюс округления и пр... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба да можно делить на сколько угодно больше 100 Просто потом из числа насчитанных тактов правильно перевести в 0.01 секунды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Это все понятно, заказчик не согласен ставить какие-то более качественные кварцы, пусть будет так. А на счет делителя, если на потреблежку от батареи не сильно влияет, больше тут никаких "подводных камней" нет? Если нет - то я так и оставляю, как делал. Все эти деления по точности дают худший результат, плюс округления и пр... Для тренеровок сгодится любой часовой кварц. Насчет точности +-10мс было требование. Можно доказать, что "деления и всякие округления" дадут точность не хуже +-4мс. Делайте так ((RTC->SSR * 100) >> 8) - так будут Вам сотые доли секунды с заявленной точностью при минимальном потреблении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 3 февраля, 2014 Опубликовано 3 февраля, 2014 · Жалоба Делайте так ((RTC->SSR * 100) >> 8) Это при синхр. делителе 256? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться