Микроконтроллеры | Ликбез по программированию PIC |
|
---|---|---|
Пишешь-пишешь ТЗ, пишешь-пишешь, а его оказывается даже не читают! В ТЗ же черным по белому написано, цитирую: 6. Входной сигнал: импульсная последовательность положительной полярности уровня ТТЛ и скважностью 0,1. В дальнейшем была устранена опИска про скважность: скважность равна не 0,1, а 10. А тут опять вдруг вылезает синусоида. А насчет помех: например сигнал идет с индуктивного датчика, выдающего импульсы положительной полярности амплитудой ок. 50 вольт, по витой экранированной паре прямо на плату устройства, где они формируются при помощи диодного формирователя и ограничителя до уровня ТТЛ. Формирователь-ограничитель установлен непосредственно на входе м/к. Частота повторения импульсов - 25Гц. В таких условиях никаких внешних помех на входе м/к не будет. Вполне реальный случай. Поэтому и предложено помехами пренебречь. |
|
|
Splav56: черным по белому написано Я, конечно, дико извиняюсь. Нарисовал так для наглядности. Скважность 10 на рисунке смотрелась бы некрасиво. Техзадание читал многократно. Мы же его ещё не утвердили окончательно. Обещаю в дальнейшем исправиться! Продолжаю анализировать работу девайса. Пока рассматриваю один вход для упрощения. Помеху пока тоже не рассматриваю. В момент А уровень на входе изменился с 0 на 1. Происходит прерывание по этому изменению. В обработчике мы выясняем, что прерывание произошло именно по этому входу (забегаю вперёд). Это делается путём сравнения сохраненных предыдущих значений уровней на входах с текущими. В результате этих преобразований получаем в регистре RESULT число импульсов за временной интервал от фронта до фронта, а в регистре TMRTEMP - новое значение таймера, которое было считано из регистра TMR. Считывать из самого регистра TMR следует лишь единожды! В момент В уровень на входе изменился с 1 на 0. Происходит прерывание по этому изменению. Опять же выясняем, что именно по этому входу. На входе лог.0, значит - спад. Тут вроде как делать ничего не нужно. В момент С действуем точно так, как в момент А. Прошу анализировать мои предложения и критиковать. А я пока ещё подумаю... |
|
|
Splav56, вы не против того, как я "испохабил" ваше ТЗ? |
|
|
Извините, что встреваю. |
|
|
А если в каждом прерывании не проделывать математических операций TMR - TMRTEMP, а предусмотреть регистр - счетчик количества обнулений таймера и счетчик количества прерываний настроенный, например на 8. После 8-и прерываний проделываем "математику", а в регистре - счетчике количества обнулений таймера окажется старший байт искомого числа имппульсов за 8 периодов. Останется сделать циклический сдвиг и "готов" усредненный результат? А если в первом прерывании обнулять TMR, то совсем просто получается. После 8 периодов (прерываний) в TMR будет "в чистом виде" младший байт искомого числа импульсов. |
|
|
Zandy: Splav56, вы не против того, как я "испохабил" ваше ТЗ? Сами ж разрешили. Не против, т.к. я эти изменения даже не видел. picmaniac: Прошу анализировать мои предложения и критиковать. Особых замечаний нет. Единственный вопрос может возникнуть при многоканальной работе в случае синфазности сигналов. Тогда понадобятся приоритеты. AHTOXA: Извините, что встреваю. Да встревайте на здоровье! |
|
|
Zandy: А если в каждом прерывании не проделывать математических операций TMR - TMRTEMP, а предусмотреть регистр - счетчик количества обнулений таймера и счетчик количества прерываний настроенный, например на 8. После 8-и прерываний проделываем "математику", а в регистре - счетчике количества обнулений таймера окажется старший байт искомого числа имппульсов за 8 периодов. Останется сделать циклический сдвиг и "готов" усредненный результат? Это будет правильным только в том случае, если таймер считает от 0 до FF, без перезагрузки. Если это устраивает, то можно и так. |
|
|
Zandy: а предусмотреть регистр - счетчик количества обнулений таймера и счетчик количества прерываний настроенный, например на 8. После 8-и прерываний проделываем "математику", а в регистре - счетчике количества обнулений таймера окажется старший байт искомого числа имппульсов за 8 периодов. Что-то не въехал, поподробнее пож-ста. Почему 8 прерываний (прерывания по изменению уровня на входе происходят как по фронту, так и по спаду), это будет соответствовать трем с половиной периодам. А как учесть то, что в момент восьмого прерывания в таймере будет остаток, зависящий от частоты входного сигнала. А это снизит точность измерения. Или я чего-то не понял. |
|
|
Splav56: (прерывания по изменению уровня на входе происходят как по фронту, так и по спаду) |
|
|
Zandy: Что значит "без перезагрузки" Если Вы, для изменения периода таймерных прерываний, не заносите в начале прерывания в TMR какое-нибудь значение, отличное от 0. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2025 |