PIC12f508 Инвертирование сигналов

Поклонники продукции Microchip Technology Inc тусуются тут.
rusman159
Открыл глаза
Сообщения: 57
Зарегистрирован: Пт дек 09, 2011 18:31:13

Re: PIC12f508 Инвертирование сигналов

Сообщение rusman159 »

В 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: Выбор коэф.деления ПД
Нужно включать делитель?
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение RoboC »

С максимальным делителем таймер переполнится за 1/15с . Забудьте в про таймер в этом мк в отношении к вашей задаче.
Разберитесь с алгоритмами предложными мной и описанным Martian.
За вас код никто не напишет, но вас поправят и подскажут.
Вы движетесь , пока, не туда.
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
rusman159
Открыл глаза
Сообщения: 57
Зарегистрирован: Пт дек 09, 2011 18:31:13

Re: PIC12f508 Инвертирование сигналов

Сообщение rusman159 »

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

В алгоритме мартина не совсем понял про сдвиг 1 влево.
Позавчера проводил эксперименты с функцией __Delay, при ее работе контроллер стоит на месте, ждет.
Для теста заменил ее на цикл for где просто было N=N+1; и проверка нажатия кнопки, по замерам осциллографом 12500 сложений=500ms, 250 сложений=10ms.
Была идея по приходу импульса запускать цикл for, по второму приходу останавливаем, таким образом будет известно время ( количество сложений) между импульсами, но возникла проблема, нужно же параллельно запускать еще один цикл по приходу импульса на вход, который будет равен прошлое время минус 15ms к примеру, и он будет включать выход.
Но параллельно два цикла работать не смогут, либо нужен цикл внутри цикла. :cry:

Добавлено after 23 minutes 56 seconds:
Набросал блок схему, она не совсем полная, тут скажем так на один цикл работы, далее все по кругу
Изображение
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение veso74 »

Измерение временных характеристик сигналов одним таймером (и у которого нет interrupt при преполнения) - это своего рода "мазохизм" :П.
Вариант: с помощью имеющегося таймера организовать "временное окно", в течение которого будете "замерять" входной сигнал. Но без interrupt в таймере метод опять полный беспорядок. Приходится постоянно "проверять", сколько времени прошло от предыдущего события или предыдущего сброса. С задержкой на чтение и вычитанием сравнения - метод снова бессмысленен. И это должно быть помещено в 25 байт SRAM :). Поменяйте МК на такой, у которого два таймера. Один: для отчета о времени, другой: для состояния входного сигнала – передний/задний фронт. А после анализа времени запускайте/останавливайте другие выходы по мере необходимости. (частично пользуюсь переводчиком)
rusman159
Открыл глаза
Сообщения: 57
Зарегистрирован: Пт дек 09, 2011 18:31:13

Re: PIC12f508 Инвертирование сигналов

Сообщение rusman159 »

Думал на вариантом 12f629, там больше функционал, но оригинальный вариант вроде работает на 12c(f)508 ( но это не точно) , поэтому изначально и пал на него выбор
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: PIC12f508 Инвертирование сигналов

Сообщение OKF »

Для таких задач, зачастую, даже таймер не нужен.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение RoboC »

veso74 писал(а):Вариант: с помощью имеющегося таймера организовать "временное окно", в течение которого будете "замерять" входной сигнал.
Не путайте человека
СпойлерИзображение
Поменяйте МК на такой, у которого два таймера.
Ага, на stm32 :facepalm: (сарказм)
Вложения
прерывание таймера 2.png
(72.12 КБ) 472 скачивания
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение Martian »

[uquote="rusman159",url="/forum/viewtopic.php?p=4637240#p4637240"]не совсем понял про сдвиг 1 влево.[/uquote] Я написал влево? :shock: прошу прощения, этот от бессонницы. Вправо, конечно же. Эквивалент делению на два.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение RoboC »

Если вы подаете на вход постоянно 1 , что у вас с выходом твориться?
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
rusman159
Открыл глаза
Сообщения: 57
Зарегистрирован: Пт дек 09, 2011 18:31:13

Re: PIC12f508 Инвертирование сигналов

Сообщение rusman159 »

Если 1 на входе постоянная, то просто срабатывает выход на 760ms и всё.
(на фото а начале)
Изображение

Мартин, извиняюсь, я ошибся, у Вас и было указано сдвиг вправо (немного непривычная формулировка для меня, поэтому уточнил) деление на 2 звучит проще :)))

Но в итоге так и остается необходимость измерения времени между импульсами на входе, для вычисления времени включения входа.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение Martian »

не, было влево, я после Вашего замечания исправил.
rusman159
Открыл глаза
Сообщения: 57
Зарегистрирован: Пт дек 09, 2011 18:31:13

Re: PIC12f508 Инвертирование сигналов

Сообщение rusman159 »

[uquote="Martian",url="/forum/viewtopic.php?p=4637146#p4637146"]по приходу импульса:
значение счётчика сохранить в переменную N со сдвигом вправо на 1 (делим на 2)
сбросить счётчик
инвертировать выход
запустить цикл до N.[/uquote]

Но тогда выход будет включен все время до прихода нового импульса, разве нет? Задача именно включить выход немного заранее ( 10-30ms) перед новым импульсом
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение Martian »

необходимость вычисления времени между двумя импульсами будет всегда, либо придётся строить невероятно огромную и вряд ли здесь нужную систему сбора статистики и прогнозирования, которая может оказать совершенно недостоверной, если изменения абсолютно случайны.
Так что, выход всегда будет отставать от входа на один период.

Добавлено after 3 minutes 6 seconds:
[uquote="rusman159",url="/forum/viewtopic.php?p=4637373#p4637373"]Но тогда выход будет включен все время до прихода нового импульса, разве нет? Задача именно включить выход немного заранее ( 10-30ms) перед новым импульсом[/uquote] Это возможно только при постоянной частоте на входе. Если постоянна - то тогда измеряем первые несколько периодов, убеждаемся, что она постоянна, ну и дальше каждый импульс запускает счётчик, равный длительности минус 10-30 мс, и проверяет эти 10-30 мс на следующем импульсе.
И это всё можно без таймера, просто инкрементировать переменные и знать, сколько времени это занимает.
А на графике мне показалось /2
rusman159
Открыл глаза
Сообщения: 57
Зарегистрирован: Пт дек 09, 2011 18:31:13

Re: PIC12f508 Инвертирование сигналов

Сообщение rusman159 »

Завтра сделаю например от 0 до 5-10гц как происходит корректировка времени выхода
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение Martian »

ну, в зависимости от направления, скорости и диапазона изменения частоты, при таком простом алгоритме, будет ситуация, когда выходной импульс совпадёт со входным, и то, если это заставить его делать, иначе он будет позже. Либо писать какой-то анализ, что если два раза частота изменилась на какую-то дельту, примерно равную, то предполагать, что и в третий раз будет. Это очень запарно, на мой взгляд и меняет время вычислений непрогнозируемо, придётся использовать таймер.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: PIC12f508 Инвертирование сигналов

Сообщение BOB51 »

Я вот не пойму... А зачем по сути повторителю импульсов временные характеристики измерять - то?
Похоже rusman159 перемудрил с задачей.
Для начала словами описать "чего хочется" да ручками график желаемого нарисовать.
А там и прояснится...
Интервалы времени не только таймером обеспечиваются.
Вопрос "предсказания" ожидаемого входного сигнала можно решать только при заранее заданном диапазоне входных параметров - иначе для столь простого МК это не имеет решения.
Да и программу для такой "букашки" лучше под ассемблером делать.
:dont_know:
rusman159
Открыл глаза
Сообщения: 57
Зарегистрирован: Пт дек 09, 2011 18:31:13

Re: PIC12f508 Инвертирование сигналов

Сообщение rusman159 »

Задача простая, мк должен обеспечивать минимально короткий импульс на выходе при поступлении сигнала на вход.
И стремится при стабильной частоте к минимальному времени работы выхода, около 10ms.
При этом включение выхода должно быть еще до поступления сигнала на вход.

Вот осциллограммы с исходника из поста выше
Скорее всего мк ориентируется по времени между двумя прошлыми импульсами и исходя из этого времени заранее включает выход, чтобы на момент поступления сигнала на вход время работы выхода составило около 10мс ( в идеале), завтра сделаю замер, есть ли зависимость времени выхода от частоты.

Тут я вручную жал на кнопку, поэтому периоды разные, но мк +- подгоняет работы выхода под нужный интервал.
Изображение Изображение
Вот пример работы при стабильной частоте 25hz, частота может плавно меняться от 0 до 300hz и обратно
Изображение
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение Martian »

ну, понятие "плавно" не очень информативно... нужно описывать скорость изменения математически, если это вообще возможно.
Аватара пользователя
RoboC
Мудрый кот
Сообщения: 1795
Зарегистрирован: Ср апр 04, 2012 09:55:53
Откуда: Северодонецк
Контактная информация:

Re: PIC12f508 Инвертирование сигналов

Сообщение RoboC »

Изображение
В середине видно , что никаких там предсказаний и 10мс нет.
Скорее всего ПИД. Регулирующий импульс макс 760мс мин 0
ПЕресчет ПИД либо по таймеру и/или по ниспадающему фронту.
повторю вопрос при постоянной 1 на входе на выходе сигнал переодический или единичный?
Если единичный, то только по фронту, переодический = фронт+ таймер.
На фото видно и колебания и перерегулирование.
У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: PIC12f508 Инвертирование сигналов

Сообщение BOB51 »

Задачка предсказания для датчика положения ленты относительно нагревательных ножей фасовочного автомата?
Штука весьма неблагодарная и самим МК ничего особо не меняющая, если механика уже свой срок отработала...
8)
Ответить

Вернуться в «PIC»