В PIC12f508 TMR0 с этим справится? Пытаюсь разобраться в настройке и запуске таймера на pic12f508 Из мануала Режим Таймера выбирается сбросом бита T0CS (OPTION 5). В режиме таймера, модуль Timer0 инкременируется каждый машинный цикл (без ПД). После записи в регистр TMR0 его инкрементация задерживается на следующие два цикла (Рис 6-2 и Рис. 6-3). Подробное описание смотреть в руководстве по PIC16C8X. Пользователь может это использовать, для записи и коррекции значения регистра. Режим счетчика выбирается установкой бита T0CS (OPTION < 5 >). В этом режиме, Timer0 инкременируется по фронту или спаду входного сигнала на выводе T0CKI. Бит T0SE (OPTION < 4 >) определяет фронт переключения. Установка бита T0SE вызывает инкремент ТС по спаду входного сигнала.
РЕГИСТР OPTION Bit5: T0CS: Timer0 выбор источника тактирования 1 = С внешнего вывода GP2 / T0CKI, 0 = Внутренняя частота, Fosc/4 Bit4: T0SE: выбор фронта переключения Timer0 1 = Инкремент при переходе с “1”на “0” на выводе T0CKI,, 0 = Инкремент при переходе с “0”на “1” на выводе T0CKI Импульсы нужно подавать только на ногу T0CKI или можно на любую другую GP0, 1, и тд? Bit3: PSA: Бит назначения предварительного делителя (ПД) 1 = Предварительный делитель включен после WDT 0 = Предварительный делитель включен перед Timer0 Bit2-0: PS2-PS0: Выбор коэф.деления ПД Нужно включать делитель?
С максимальным делителем таймер переполнится за 1/15с . Забудьте в про таймер в этом мк в отношении к вашей задаче. Разберитесь с алгоритмами предложными мной и описанным Martian. За вас код никто не напишет, но вас поправят и подскажут. Вы движетесь , пока, не туда.
_________________ У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Я для себя понимаю примерный алгоритм работы, но по идее нужен отдельно таймер либо отдельный независимый процесс, который будет считать время между импульсами, и отдельно кусок программы на всё остальное. Код естественно буду пробовать писать самостоятельно.
В алгоритме мартина не совсем понял про сдвиг 1 влево. Позавчера проводил эксперименты с функцией __Delay, при ее работе контроллер стоит на месте, ждет. Для теста заменил ее на цикл for где просто было N=N+1; и проверка нажатия кнопки, по замерам осциллографом 12500 сложений=500ms, 250 сложений=10ms. Была идея по приходу импульса запускать цикл for, по второму приходу останавливаем, таким образом будет известно время ( количество сложений) между импульсами, но возникла проблема, нужно же параллельно запускать еще один цикл по приходу импульса на вход, который будет равен прошлое время минус 15ms к примеру, и он будет включать выход. Но параллельно два цикла работать не смогут, либо нужен цикл внутри цикла.
Добавлено after 23 minutes 56 seconds: Набросал блок схему, она не совсем полная, тут скажем так на один цикл работы, далее все по кругу
Измерение временных характеристик сигналов одним таймером (и у которого нет interrupt при преполнения) - это своего рода "мазохизм" :П. Вариант: с помощью имеющегося таймера организовать "временное окно", в течение которого будете "замерять" входной сигнал. Но без interrupt в таймере метод опять полный беспорядок. Приходится постоянно "проверять", сколько времени прошло от предыдущего события или предыдущего сброса. С задержкой на чтение и вычитанием сравнения - метод снова бессмысленен. И это должно быть помещено в 25 байт SRAM . Поменяйте МК на такой, у которого два таймера. Один: для отчета о времени, другой: для состояния входного сигнала – передний/задний фронт. А после анализа времени запускайте/останавливайте другие выходы по мере необходимости. (частично пользуюсь переводчиком)
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
Думал на вариантом 12f629, там больше функционал, но оригинальный вариант вроде работает на 12c(f)508 ( но это не точно) , поэтому изначально и пал на него выбор
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
по приходу импульса: значение счётчика сохранить в переменную N со сдвигом вправо на 1 (делим на 2) сбросить счётчик инвертировать выход запустить цикл до N.
Но тогда выход будет включен все время до прихода нового импульса, разве нет? Задача именно включить выход немного заранее ( 10-30ms) перед новым импульсом
необходимость вычисления времени между двумя импульсами будет всегда, либо придётся строить невероятно огромную и вряд ли здесь нужную систему сбора статистики и прогнозирования, которая может оказать совершенно недостоверной, если изменения абсолютно случайны. Так что, выход всегда будет отставать от входа на один период.
Но тогда выход будет включен все время до прихода нового импульса, разве нет? Задача именно включить выход немного заранее ( 10-30ms) перед новым импульсом
Это возможно только при постоянной частоте на входе. Если постоянна - то тогда измеряем первые несколько периодов, убеждаемся, что она постоянна, ну и дальше каждый импульс запускает счётчик, равный длительности минус 10-30 мс, и проверяет эти 10-30 мс на следующем импульсе. И это всё можно без таймера, просто инкрементировать переменные и знать, сколько времени это занимает. А на графике мне показалось /2
ну, в зависимости от направления, скорости и диапазона изменения частоты, при таком простом алгоритме, будет ситуация, когда выходной импульс совпадёт со входным, и то, если это заставить его делать, иначе он будет позже. Либо писать какой-то анализ, что если два раза частота изменилась на какую-то дельту, примерно равную, то предполагать, что и в третий раз будет. Это очень запарно, на мой взгляд и меняет время вычислений непрогнозируемо, придётся использовать таймер.
Я вот не пойму... А зачем по сути повторителю импульсов временные характеристики измерять - то? Похоже rusman159 перемудрил с задачей. Для начала словами описать "чего хочется" да ручками график желаемого нарисовать. А там и прояснится... Интервалы времени не только таймером обеспечиваются. Вопрос "предсказания" ожидаемого входного сигнала можно решать только при заранее заданном диапазоне входных параметров - иначе для столь простого МК это не имеет решения. Да и программу для такой "букашки" лучше под ассемблером делать.
Задача простая, мк должен обеспечивать минимально короткий импульс на выходе при поступлении сигнала на вход. И стремится при стабильной частоте к минимальному времени работы выхода, около 10ms. При этом включение выхода должно быть еще до поступления сигнала на вход.
Вот осциллограммы с исходника из поста выше Скорее всего мк ориентируется по времени между двумя прошлыми импульсами и исходя из этого времени заранее включает выход, чтобы на момент поступления сигнала на вход время работы выхода составило около 10мс ( в идеале), завтра сделаю замер, есть ли зависимость времени выхода от частоты.
Тут я вручную жал на кнопку, поэтому периоды разные, но мк +- подгоняет работы выхода под нужный интервал. Вот пример работы при стабильной частоте 25hz, частота может плавно меняться от 0 до 300hz и обратно
В середине видно , что никаких там предсказаний и 10мс нет. Скорее всего ПИД. Регулирующий импульс макс 760мс мин 0 ПЕресчет ПИД либо по таймеру и/или по ниспадающему фронту. повторю вопрос при постоянной 1 на входе на выходе сигнал переодический или единичный? Если единичный, то только по фронту, переодический = фронт+ таймер. На фото видно и колебания и перерегулирование.
_________________ У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Задачка предсказания для датчика положения ленты относительно нагревательных ножей фасовочного автомата? Штука весьма неблагодарная и самим МК ничего особо не меняющая, если механика уже свой срок отработала...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения