Страница 1 из 1

термометр на pic16f628a и ds18b20

Добавлено: Вс ноя 24, 2013 15:11:53
VITRIX1983
Все перепробовал с прерываниями от tmr0 и tmr2 ничего не помогает. Программа уже составлена в нее добавлены все функции (индикация,преобразование чисел для индикации, работа с ds18b20),если убираю прерывание на индикации появляются замеры температуры (приходится зацикливать подпрограмму индикации, чтобы увидеть работоспособность программы), но добавляю прерывание от tmr0 на 3мс(думаю что этой выдержки достаточно для 3х значной динамической индикации)и мк не выводит данные и не обменивается данными с датчиком - шина мертвая, такое ощущение,что он зациклился, но как не пойму, без прерывания все работает. Отправляю два файла один с прерываниями(нерабочий),другой без (рабочий). Подскажите может где кроется ошибка ?

Re: термометр на pic16f628a и ds18b20

Добавлено: Вс ноя 24, 2013 15:38:29
Аlex
Отладочные средства Вам в помощь. Хотя бы тот же протеус. Пошагайте по программе и найдёте где ошибка.

Re: термометр на pic16f628a и ds18b20

Добавлено: Вс ноя 24, 2013 16:22:46
otest
При входе в прерывание желательно его запрещать на время обработки. Обработку лучше делать вне тела прерывания или расчитывать время обработки, что бы не произошло повторное прерывание.

Re: термометр на pic16f628a и ds18b20

Добавлено: Вс ноя 24, 2013 16:48:38
Dmitry Dubrovenko
Проще просто не запускать опрос, пока обработка не завершена.

Re: термометр на pic16f628a и ds18b20

Добавлено: Вс ноя 24, 2013 19:14:54
VITRIX1983
В протеусе все работает, в железе нет, поэтому отследить ошибку невозможно, и в протеус некоректно идет инициализация датчика, когда в железе датчик отзывается и отлично работает.
В теле прерывания находится всего лишь вывод данных на динамическую индикацию которая исполняется за 56мкс, когда само прерывание срабатывает за 3мс, поэтому повторный вызов исключен.
Стоить мне вставить прерывание в программный код, и мк становится "мертвым" ни цифр ни обмена данными с датчиком. Я уже не знаю что и думать?

Re: термометр на pic16f628a и ds18b20

Добавлено: Вс ноя 24, 2013 20:07:19
otest
Выкладывай весь проект MPLAB ,PROTEUS.

Re: термометр на pic16f628a и ds18b20

Добавлено: Вс ноя 24, 2013 23:57:15
VITRIX1983
выкладываю более старый проект, здесь динамическая индикация работает от tmr2. В протеусе работает, в железе нет.

Re: термометр на pic16f628a и ds18b20

Добавлено: Пн ноя 25, 2013 02:43:24
VITRIX1983
Понял идею, проект добавлен, гляньте и найлите возможную проблему, заранее благодарю.

Re: термометр на pic16f628a и ds18b20

Добавлено: Пн ноя 25, 2013 10:24:07
Аlex
А в железе как себя ведёт ? Непонятно, что означает "не работает".
Кстати, железо по Вашей схеме можно проверить этой прошивкой - http://eldigi.ru/site/term/13.php , только кварц приляпать навесу, можно без ёмкостей.

Re: термометр на pic16f628a и ds18b20

Добавлено: Пн ноя 25, 2013 11:04:02
VITRIX1983
Пишу несколько вариантов поведения в железе: 1) Убираю из программного кода софт работы с датчиком, прерывание оставляю. МК запускается и выполняет корректно написаннный код. 2) Убираю из программного кода прерывания, зацикливаю индикацию в теле прогаммы. МК запускается и отображает температуру (замер температуре осуществляется только при подаче питания). 3) Оставляю прерывание и софт работы с датчиком. МК ничего не отображает, на пине отсуствует обмен данными с датчиком, такое ощущени как будто отуствует тактирование от внутреннего генератора - МК "мертвый".

Re: термометр на pic16f628a и ds18b20

Добавлено: Пн ноя 25, 2013 11:07:09
VITRIX1983
Насчет варианта с кварцом отпишусь попозже, на данный момент не располагаю возможность его приобрести, но идея мне пондравилась!!!

НАРУШЕНИЕ п 2.2
Правила форума 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".

Re: термометр на pic16f628a и ds18b20

Добавлено: Пн ноя 25, 2013 11:56:28
otest
Предупреждал , что нужно внимателней с прерываниями. До 1-го прерывания программа не успевает даже обменяться с датчиком. Запрети прерывания на время обработки датчика.

Re: термометр на pic16f628a и ds18b20

Добавлено: Пн ноя 25, 2013 18:41:22
VITRIX1983
Запрет прерывания я использовал в программном коде, выше кстати выложен проект. Даже если бы он ушел в прерывание без опроса датчика, тогда на индмкации должны выводиться нули? Но этого же не происходит на дисплее ничего не происходит.

Re: термометр на pic16f628a и ds18b20

Добавлено: Пн ноя 25, 2013 20:22:58
otest
0,2мсек мало для засветки индикатора.
Запрет прерывания я вижу
BCF INTCON, GIE
MOVF HUNS, W
MOVWF HUNS_ISR
MOVF TENS, W
MOVWF TENS_ISR
MOVF ONES, W
MOVWF ONES_ISR
BSF INTCON, GIE
Только не понимаю смысл его в этом месте.
Складывается впечатление , что я прошу совета.

Re: термометр на pic16f628a и ds18b20

Добавлено: Пн ноя 25, 2013 23:40:07
VITRIX1983
в эти регистры заносятся данные для индикации, после конвертирования бинарного числа замеров температуры в двоично десятичный код, поэтому можно себе представить как будут высвечиваться данные, если прерывание произойдет во время копирования данных. По моим подсчетам прерывание составляет не менее 1мс (симулировал в mplab).
Да я забыл сказать что использовал материалы с сайта http://www.rlocman.ru/shem/schematics.html?di=92581, единствено что изменил в коде - это работа с индикацией(так как я не использовал транзисторные ключи) и подчистил данные связанные с выводом десятичного значения температуры. Но пока я не вижу ясного ответа на свои вопросы?

Re: термометр на pic16f628a и ds18b20

Добавлено: Вт ноя 26, 2013 00:00:47
Аlex
Вот ещё проект под Вашу схему, там использован внутренний осцилятор, попробуйте его залить в свой МК для проверки железа. Архив с примером в конце сообщения.

Re: термометр на pic16f628a и ds18b20

Добавлено: Вт ноя 26, 2013 08:10:23
otest
Удивляюсь твоей упёртости. Вот скрин .

Re: термометр на pic16f628a и ds18b20

Добавлено: Ср ноя 27, 2013 03:48:18
VITRIX1983
Cлучайно наткнулся на статью В. Тимофеева "как правильно оформлять программы на ассемблере для pic - контролеров" . Мне пришлось перелопатить код, изменил подпрограмму вывода данных на индикацию, убрал из прерывания таблицу констант вывода данных на дисплей и поместил ее в другом блоке программ. Все отлично работает. Тут проблема вероятнее всего была спрятана в счетчике команд. Правда прошивка в протеусе не работает, в железе наоборот. я прилагаю исправный код на асме может кому-нибудь это пригодится, там есть готовые функции работы с датчиком ds18b20 и 3х значным семисигментником от прерывния по TMR0.
Otset я смотрю на эти скрины и не могу понять, что ты хочешь мне показать, если хочешь показать время срабатывания прерывания от таймера зайди в начало обработчика прерывания и поставь point запусти проект и посмотри на stopwatch и ты увидешь время в 3 мс, в принципе можещь сам посчитать, коэффициент предделителя tmr0 равен 32, время цикала 1 мкс, в таймер загружается число 160, отсюда следует время прерывания = 1мкс х 32 х (256 - 160) = 3072мкс. Всем спасибо за помощь. До связи!!!

Re: термометр на pic16f628a и ds18b20

Добавлено: Ср ноя 27, 2013 10:28:19
otest
убрал из прерывания таблицу констант вывода данных на дисплей
Я об этом писал в 1-ом своём сообщении. От тебя кроме возражений ничего не последовало.
я смотрю на эти скрины и не могу понять
Учи матчасть. В плену бъют сильно. :)))
запусти проект и посмотри на stopwatch и ты увидешь время в 3 мс, в принципе можещь сам посчитать
Мне это и на х... не надо. Я тебе выложил скрины.