термометр на pic16f628a и ds18b20
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
термометр на pic16f628a и ds18b20
Все перепробовал с прерываниями от tmr0 и tmr2 ничего не помогает. Программа уже составлена в нее добавлены все функции (индикация,преобразование чисел для индикации, работа с ds18b20),если убираю прерывание на индикации появляются замеры температуры (приходится зацикливать подпрограмму индикации, чтобы увидеть работоспособность программы), но добавляю прерывание от tmr0 на 3мс(думаю что этой выдержки достаточно для 3х значной динамической индикации)и мк не выводит данные и не обменивается данными с датчиком - шина мертвая, такое ощущение,что он зациклился, но как не пойму, без прерывания все работает. Отправляю два файла один с прерываниями(нерабочий),другой без (рабочий). Подскажите может где кроется ошибка ?
- Вложения
-
- ds18b20_no_int.ASM
- (15.49 КБ) 829 скачиваний
-
- ds18b20_int.asm
- (17.35 КБ) 448 скачиваний
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: термометр на pic16f628a и ds18b20
Отладочные средства Вам в помощь. Хотя бы тот же протеус. Пошагайте по программе и найдёте где ошибка.
Re: термометр на pic16f628a и ds18b20
При входе в прерывание желательно его запрещать на время обработки. Обработку лучше делать вне тела прерывания или расчитывать время обработки, что бы не произошло повторное прерывание.
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2359
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: термометр на pic16f628a и ds18b20
Проще просто не запускать опрос, пока обработка не завершена.
ICQ нет, и, в ближайшее время, не будет.
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
Re: термометр на pic16f628a и ds18b20
В протеусе все работает, в железе нет, поэтому отследить ошибку невозможно, и в протеус некоректно идет инициализация датчика, когда в железе датчик отзывается и отлично работает.
В теле прерывания находится всего лишь вывод данных на динамическую индикацию которая исполняется за 56мкс, когда само прерывание срабатывает за 3мс, поэтому повторный вызов исключен.
Стоить мне вставить прерывание в программный код, и мк становится "мертвым" ни цифр ни обмена данными с датчиком. Я уже не знаю что и думать?
В теле прерывания находится всего лишь вывод данных на динамическую индикацию которая исполняется за 56мкс, когда само прерывание срабатывает за 3мс, поэтому повторный вызов исключен.
Стоить мне вставить прерывание в программный код, и мк становится "мертвым" ни цифр ни обмена данными с датчиком. Я уже не знаю что и думать?
- Реклама
Re: термометр на pic16f628a и ds18b20
Выкладывай весь проект MPLAB ,PROTEUS.
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
Re: термометр на pic16f628a и ds18b20
выкладываю более старый проект, здесь динамическая индикация работает от tmr2. В протеусе работает, в железе нет.
- Вложения
-
- DS18B20 INI_WR.ASM
- (18.59 КБ) 572 скачивания
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
Re: термометр на pic16f628a и ds18b20
Понял идею, проект добавлен, гляньте и найлите возможную проблему, заранее благодарю.
- Вложения
-
- ds18b20.rar
- (61.01 КБ) 282 скачивания
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: термометр на pic16f628a и ds18b20
А в железе как себя ведёт ? Непонятно, что означает "не работает".
Кстати, железо по Вашей схеме можно проверить этой прошивкой - http://eldigi.ru/site/term/13.php , только кварц приляпать навесу, можно без ёмкостей.
Кстати, железо по Вашей схеме можно проверить этой прошивкой - http://eldigi.ru/site/term/13.php , только кварц приляпать навесу, можно без ёмкостей.
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
Re: термометр на pic16f628a и ds18b20
Пишу несколько вариантов поведения в железе: 1) Убираю из программного кода софт работы с датчиком, прерывание оставляю. МК запускается и выполняет корректно написаннный код. 2) Убираю из программного кода прерывания, зацикливаю индикацию в теле прогаммы. МК запускается и отображает температуру (замер температуре осуществляется только при подаче питания). 3) Оставляю прерывание и софт работы с датчиком. МК ничего не отображает, на пине отсуствует обмен данными с датчиком, такое ощущени как будто отуствует тактирование от внутреннего генератора - МК "мертвый".
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
Re: термометр на pic16f628a и ds18b20
Насчет варианта с кварцом отпишусь попозже, на данный момент не располагаю возможность его приобрести, но идея мне пондравилась!!!
НАРУШЕНИЕ п 2.2
Правила форума 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".
НАРУШЕНИЕ п 2.2
Правила форума 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".
Последний раз редактировалось AlekseyEnergo Пн ноя 25, 2013 13:45:35, всего редактировалось 1 раз.
Причина: .
Причина: .
Re: термометр на pic16f628a и ds18b20
Предупреждал , что нужно внимателней с прерываниями. До 1-го прерывания программа не успевает даже обменяться с датчиком. Запрети прерывания на время обработки датчика.
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
Re: термометр на pic16f628a и ds18b20
Запрет прерывания я использовал в программном коде, выше кстати выложен проект. Даже если бы он ушел в прерывание без опроса датчика, тогда на индмкации должны выводиться нули? Но этого же не происходит на дисплее ничего не происходит.
Re: термометр на pic16f628a и ds18b20
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
Только не понимаю смысл его в этом месте.
Складывается впечатление , что я прошу совета.
Запрет прерывания я вижу
BCF INTCON, GIE
MOVF HUNS, W
MOVWF HUNS_ISR
MOVF TENS, W
MOVWF TENS_ISR
MOVF ONES, W
MOVWF ONES_ISR
BSF INTCON, GIE
Только не понимаю смысл его в этом месте.
Складывается впечатление , что я прошу совета.
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
Re: термометр на pic16f628a и ds18b20
в эти регистры заносятся данные для индикации, после конвертирования бинарного числа замеров температуры в двоично десятичный код, поэтому можно себе представить как будут высвечиваться данные, если прерывание произойдет во время копирования данных. По моим подсчетам прерывание составляет не менее 1мс (симулировал в mplab).
Да я забыл сказать что использовал материалы с сайта http://www.rlocman.ru/shem/schematics.html?di=92581, единствено что изменил в коде - это работа с индикацией(так как я не использовал транзисторные ключи) и подчистил данные связанные с выводом десятичного значения температуры. Но пока я не вижу ясного ответа на свои вопросы?
Да я забыл сказать что использовал материалы с сайта http://www.rlocman.ru/shem/schematics.html?di=92581, единствено что изменил в коде - это работа с индикацией(так как я не использовал транзисторные ключи) и подчистил данные связанные с выводом десятичного значения температуры. Но пока я не вижу ясного ответа на свои вопросы?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: термометр на pic16f628a и ds18b20
Вот ещё проект под Вашу схему, там использован внутренний осцилятор, попробуйте его залить в свой МК для проверки железа. Архив с примером в конце сообщения.
Re: термометр на pic16f628a и ds18b20
Удивляюсь твоей упёртости. Вот скрин .
-
VITRIX1983
- Родился
- Сообщения: 12
- Зарегистрирован: Вс ноя 24, 2013 15:00:09
Re: термометр на pic16f628a и ds18b20
Cлучайно наткнулся на статью В. Тимофеева "как правильно оформлять программы на ассемблере для pic - контролеров" . Мне пришлось перелопатить код, изменил подпрограмму вывода данных на индикацию, убрал из прерывания таблицу констант вывода данных на дисплей и поместил ее в другом блоке программ. Все отлично работает. Тут проблема вероятнее всего была спрятана в счетчике команд. Правда прошивка в протеусе не работает, в железе наоборот. я прилагаю исправный код на асме может кому-нибудь это пригодится, там есть готовые функции работы с датчиком ds18b20 и 3х значным семисигментником от прерывния по TMR0.
Otset я смотрю на эти скрины и не могу понять, что ты хочешь мне показать, если хочешь показать время срабатывания прерывания от таймера зайди в начало обработчика прерывания и поставь point запусти проект и посмотри на stopwatch и ты увидешь время в 3 мс, в принципе можещь сам посчитать, коэффициент предделителя tmr0 равен 32, время цикала 1 мкс, в таймер загружается число 160, отсюда следует время прерывания = 1мкс х 32 х (256 - 160) = 3072мкс. Всем спасибо за помощь. До связи!!!
Otset я смотрю на эти скрины и не могу понять, что ты хочешь мне показать, если хочешь показать время срабатывания прерывания от таймера зайди в начало обработчика прерывания и поставь point запусти проект и посмотри на stopwatch и ты увидешь время в 3 мс, в принципе можещь сам посчитать, коэффициент предделителя tmr0 равен 32, время цикала 1 мкс, в таймер загружается число 160, отсюда следует время прерывания = 1мкс х 32 х (256 - 160) = 3072мкс. Всем спасибо за помощь. До связи!!!
- Вложения
-
- ds18b20.rar
- (4.51 КБ) 338 скачиваний
Re: термометр на pic16f628a и ds18b20
Я об этом писал в 1-ом своём сообщении. От тебя кроме возражений ничего не последовало.убрал из прерывания таблицу констант вывода данных на дисплей
Учи матчасть. В плену бъют сильно.я смотрю на эти скрины и не могу понять
Мне это и на х... не надо. Я тебе выложил скрины.запусти проект и посмотри на stopwatch и ты увидешь время в 3 мс, в принципе можещь сам посчитать


