Бесконтактный тахометр
|
|
ADMIN |
Дата: Пт, 28.02.2014, 07:39 | Сообщение # 1 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Есть такая статья - Тахометр на PIC микроконтроллере. Так вот, там были вопросы по исходнику. В общем, написал на протоне, обновил архив. Схема в протеусе. Пользуйтесь.
|
|
|
|
dimitriy-bc |
Дата: Сб, 01.03.2014, 15:07 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
ADMIN, здравствуйте. Я только начал осваивать символьные ЖКИ и периодически эти индикаторы пишут, что им вздумается. Привести их в чувство получается только отключением питания. У меня такой вопрос. Если индикатор обесточивать по Вашему принципу с какой-то периодичностью, то какую задержку необходимо делать от подачи питания на индикатор и передачи на него информации, и насколько вредно для них такой режим работы. Спасибо!
|
|
|
|
MiXaS |
Дата: Сб, 01.03.2014, 22:53 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Очень странный случий. Предоставьте код и схему соединения, можно только дисплея. Есть кое-какие подозрения. Частенько наши форумчане ставят 500мс задержки перед началом основного кода, для инициализации жки. Я обычно либо забываю об этом либо код критичен к задержкам. Приэтом никогда не пишу задержек и все работает стабильно. Да, и еще. пришлите фото клюков жки. Если весь дисплей кривит, одна проблема, если какие-то символы, другая.
|
|
|
|
dimitriy-bc |
Дата: Вс, 02.03.2014, 00:43 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
MiXaS, здравствуйте. Для меня это к сожалению не странный. а повторяющейся случай. Да и похожие жалобы приходилось слышать и о других изделиях. В основном, по моим наблюдениям, это происходит при работе соленоидов (реле, пускатели...). Ну в общем при электромагнитном всплеске. МК при этом работает стабильно, а ЖКИ глючит. Все, что есть по последнему проекту прилагаю. Это парогенератор.
|
|
|
|
anatol |
Дата: Вс, 02.03.2014, 01:00 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Цитата dimitriy-bc ( ) не странный. а повторяющейся случай Если сбои происходят от помех, то лучше всего их устранить. Правда порой это лень делать, особенно если устройство не критично или программа не отлажена. Тогда можно просто проводить инициализацию ЖКИ перед каждым выводом инфы. Но, боюсь, проблема скорее в другом - в использовании разных портов для работы с индикатором, при этом порты используются и для другого. И, как правило, возникает ситуация при неизвестной инфформации на шине данных происходит стробирование и разрежение записи в индикатор. Причина - кто помнит про Ч-М-З (чтение-модификация-запись). Обычно просто - получил нужное и скорее в порт, используя один-два разряда. А какое состояни порта было до этого - ну кого это волнует. Удачи.
|
|
|
|
dimitriy-bc |
Дата: Вс, 02.03.2014, 01:09 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Цитата anatol ( ) ну кого это волнует. Удачи. Не добрый Вы какой-то, ну прямо таки злой .
Если я Вас правильно понял, исключаем помехозащищенность, то для корректной работы индикатора, в ПРОТОНЕ, порт должен работать только на индикатор?
Сообщение отредактировал
dimitriy-bc - Вс, 02.03.2014, 01:31
|
|
|
|
MiXaS |
Дата: Вс, 02.03.2014, 11:45 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Обратите внимание в своем коде на настройку портов С и D. RS и EN это выходы из контроллера! Тоже самое и с портом Д. TRISХ = %00000000 - ВЕСЬ НА выход. TRISХ = %11111111 - ВЕСЬ НА вход. 0 (output) = выход, 1 (input) - вход.
Также у вас включена собака, я глубоко с кодом не разбирался, но может она там не нужна???
Цитата dimitriy-bc ( ) В основном, по моим наблюдениям, это происходит при работе соленоидов (реле, пускатели...)
Учитывая Вашу закономерность, смею предположить,что сбой происходит не из-за электроМАГНИТНОЙ составляющей, т.к. соленоид не может физически развить такую мощность, чтобы с ума сошел жки, а высоко вольтные, но в тоже время очень короткие во времени (скорее всего еще и с обратным знаком) импульсы при переходных процессах.
Предложу несколько способов для устранения этого недуга. Желательно использовать комплекс мер.
1. Устранить программные недочеты: Настроить порты. Т.к. портД мультиплецирован с параллельным портом, то нужно произвести соответствующие настройки. 2. Устранить помехи в электрической цепи: если Вы коммутируете реле, катушка которого управляется постоянным током через транзистор, необходимо поставить диод параллельно катушке, но в обратном направлении (посмотрите схемы в сети), (менее важное, но может пригодиться) поставить неполярный конденсатор параллельно катушке емкостью 0.1 - 0.5 мкф. Если Вы управляете солиноидом или магнитным пускателем на ~ токе, рекомендую сделать гальваническую развязку, например, на оптроне. 3. Отфильтровать питание жки: прямо на самом жки установить 2 конденсатора по питанию. 1 = 0.1 мкф, 2 = 10-47 мкф. Второй конденсатор ставится в том случае, если длина шины от жки до мк более 0.3м(данные взял из своего личного опыта, методом проб и ошибок).
Вроде бы все. Я стараюсь ставить жки на портб, при этом оставляя внешнее прерывание свободным. Мне кажется так проще, потому что этот порт мультиплецирован только с шиной программирования. Но в этом тоже есть свой минус. Когда мк запаян (smd) и жки тоже запаян, а нужно залить новую версию прошивки, тут начинается все самое интересное....
Желаю успехов!Добавлено (02.03.2014, 11:45) --------------------------------------------- Интересно Ваш компилятор не ругается на это выражение: GoTo main: ?
|
|
|
|
anatol |
Дата: Вс, 02.03.2014, 11:47 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
dimitriy-bc, для начала надо быть внимательным. Я скачал вашу прогу и глянул краем глаза. К сожалению Протеус не установлен пока. Но что бросилось в глаза: Код Declare LCD_DTPort = [b]PORTD Declare LCD_DTPin = PORTD.4 Declare LCD_RSPin = PORTC.6 Declare LCD_ENPin = PORTC.7 Declare LCD_Interface = 4 ........
[b]TRISD = %11110011
...... ВХОДЫ .... Symbol PROG_STACK_INC = [b]PORTD.0 ' ВЫБОР ПРОГРАММИРУЕМОЙ ЦИФРЫ Symbol PROG_STACK_NUMERAL = [b]PORTD.1 ' ИЗМЕНЕНИЕ ПРОГРАММИРУЕМОЙ ЦИФРЫ .......... ВЫХОДЫ Symbol OUT_PUMP = [b]PORTD.3 ......... Что будет делать компилятор, если не плеваться и, в лучшем случае, замолотит по умолчанию. И "помехи" от соленоидов ли виноваты? А может кусок программы перед срабатыванием соленоидов? Почему я предложил на индикатор пускать только один порт? Это с целью не отслеживать состояние порта перед изменением. К примеру. На PORTD.4 у вас висит ключ реле, управляется "1". А на PORTD.0 светодиод индикатор "Вкл". и выход уже "1". Состояние порта к примеру %00000001. Надо включить реле, берем число %00010000 и записываем в порт. Как результат надпись "Вкл" гаснет, а реле включается. Помеха? Нет. А работать надо так, читаем порт %00000001 делаем "или" с %00010000 и записываем в порт %00010001. В Протоне можно указывать просто на изменение конкретного разряда порта, тогда приведенное выше выполняется. А так компилятор даже зачатками телепатии не обладает.
|
|
|
|
MiXaS |
Дата: Вс, 02.03.2014, 12:16 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Цитата anatol ( ) На PORTD.4 у вас висит ключ реле, управляется "1". А на PORTD.0 светодиод индикатор "Вкл". и выход уже "1". Состояние порта к примеру %00000001. Надо включить реле, берем число %00010000 и записываем в порт. Как результат надпись "Вкл" гаснет, а реле включается. Помеха? Нет. А работать надо так, читаем порт %00000001 делаем "или" с %00010000 и записываем в порт %00010001.
Такие фокусы есть: PORTB = 0 PORTC = 0 PORTD = 0 PORTE = 0
Я тоже подозреваю, что скорее всего код с приключениями, + настройки портов не допилины.
|
|
|
|
dimitriy-bc |
Дата: Вс, 02.03.2014, 13:46 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Цитата MiXaS ( ) Интересно Ваш компилятор не ругается на это выражение: GoTo main: ? На двоеточие компилятор не ругался.
Цитата MiXaS ( ) Такие фокусы есть: PORTB = 0 PORTC = 0 PORTD = 0 PORTE = 0 Здесь не совсем понятно, что Вам не понравилось.
Цитата anatol ( ) В Протоне можно указывать просто на изменение конкретного разряда порта, тогда приведенное выше выполняется. Т.е. если не менять назначения выходов входов МК, а указывать конкретно PORTD.2 = 1, то компилятору будет понятнее?
Сообщение отредактировал
dimitriy-bc - Вс, 02.03.2014, 13:48
|
|
|
|
MiXaS |
Дата: Вс, 02.03.2014, 14:49 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Цитата dimitriy-bc ( ) Т.е. если не менять назначения выходов входов МК, а указывать конкретно PORTD.2 = 1, то компилятору будет понятнее?
Разницы нету. У вас на порту D.4 - d7 подключена шина данных для жки. На остальном висит другая переферия, портс тоже задействован под переферию. а 2 ВЫХОДА предназначены под жки. Когда вы сбрасываете порт полностью, вы можете потерять данные.
Хочу обратить ваше внимание на Цитата MiXaS ( ) Обратите внимание в своем коде на настройку портов С и D. RS и EN это выходы из контроллера! Тоже самое и с портом Д. TRISХ = %00000000 - ВЕСЬ НА выход. TRISХ = %11111111 - ВЕСЬ НА вход. 0 (output) = выход, 1 (input) - вход. Также у вас включена собака, я глубоко с кодом не разбирался, но может она там не нужна???
|
|
|
|
anatol |
Дата: Вс, 02.03.2014, 20:22 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Цитата dimitriy-bc ( ) Т.е. если не менять назначения выходов входов МК, а указывать конкретно PORTD.2 = 1, то компилятору будет понятнее? Как я писал выше в этом случае компилятор делает подобным образомКод читаем порт %00000001 делаем "или" с %00010000 и записываем в порт %00010001. Отследи пошагово код в листинге или симуляторе.
|
|
|
|
dimitriy-bc |
Дата: Вс, 02.03.2014, 23:18 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
MiXaS, anatol, спасибо за помощь. Сделаю вид, что почти все понял . Особо времени симулировать нету, как обычно все нужно было вчера, а программист я так себе. Для упрощения, ЖКИ прицеплю на порт D и этот порт больше ни за что не отвечает. Да и честно говоря голова плохо соображает с последними событиями в УКРАИНЕ. Еще раз всем спасибо. После на яме отпишусь.
|
|
|
|
MiXaS |
Дата: Пн, 03.03.2014, 01:17 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Не забудьте трисы поставить на выход для жки
|
|
|
|
ADMIN |
Дата: Пн, 03.03.2014, 03:45 | Сообщение # 15 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я, как-то было, использовал одновременно portb.4-7 как шину данных жки и как входы для кнопок. Все прекрасно работало. Но, к сожалению, не помню, что это за девайс был. Если найду, покажу. Да в принципе, написать можно заново.
|
|
|
|