Форум РадиоКот https://radiokot.ru/forum/ |
|
PIC12F675 и DS18S20 https://radiokot.ru/forum/viewtopic.php?f=58&t=137475 |
Страница 1 из 3 |
Автор: | Kuzia [ Пн окт 31, 2016 21:23:49 ] | ||
Заголовок сообщения: | PIC12F675 и DS18S20 | ||
Проектирую в Proteus устройство на PIC12F675, которое работает с датчиком температуры DS18S20. Во вложении проект Proteus с частью программы которая отвечает за обмен данных между МК и датчиком. Проект компилируется без ошибок, однако при пошаговой отработке видно, что МК принимает некорректные биты от датчика. После выполнения подпрограммы Read в регистр W записывается FF (все единицы) при любой температуре. Не могу понять в чем дело. Прошу помощи у знающих. PS. Подпрограммы по обмену данных МК-датчик брал из другого проекта (под pic16f628). Внес только некоторые изменения.
|
Автор: | Zhuk72 [ Пн окт 31, 2016 22:00:10 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Из того, что заметил сходу. Для чего все эти маневры с регистрами прерываний, если сами прерывания не используются? Далее: Код: bcf datchik ;Единичный импульс call Delay500 ;Задержка 500мкс. bsf datchik ;Единичный импульс movlw TRISIO_IN Banksel TRISIO ; iorwf TRISIO,F ; Если по истечении паузы датчик уведет шину в ноль, когда вы даете bsf datchik, до переключения на вход ПИК имеет шансы подпалить порт. Дальше не смотрел. Спать, спать, спать... P.S. И вообще загляните в раздел Периферия, тема про эти датчики запинена. Там много полезного. Alex, например, на последних страницах объясняет куда что подавать. |
Автор: | Kuzia [ Пн окт 31, 2016 22:21:21 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Zhuk72 писал(а): Из того, что заметил сходу. Для чего все эти маневры с регистрами прерываний, если сами прерывания не используются? Далее: Код: bcf datchik ;Единичный импульс call Delay500 ;Задержка 500мкс. bsf datchik ;Единичный импульс movlw TRISIO_IN Banksel TRISIO ; iorwf TRISIO,F ; Если по истечении паузы датчик уведет шину в ноль, когда вы даете bsf datchik, до переключения на вход ПИК имеет шансы подпалить порт. Дальше не смотрел. Спать, спать, спать... P.S. И вообще загляните в раздел Периферия, тема про эти датчики запинена. Там много полезного. Alex, например, на последних страницах объясняет куда что подавать. bcf datchik ;Единичный импульс call Delay500 ;Задержка 500мкс. bsf datchik ;Единичный импульс Такая последовательность была изначально в другом (рабочем) проекте. Я так понял это для того чтобы шину побыстрее подтянуть к 1. А там до перевода порта на вход всего три команды. За это время, судя по мануалу, датчик не должен подтянуть шину к 0. Ну и при моделировании Сброс отрабатывается правильно (датчик отвечает), а что делать с ПП Read не пойму. Может датчик не видит команд которые проходят через ПП Write. Ну и не могу найти раздел Периферия. ![]() |
Автор: | -=Vovka=- [ Пн окт 31, 2016 22:36:44 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Kuzia писал(а): Я так понял это для того чтобы шину побыстрее подтянуть к 1 это лишнее и опасно |
Автор: | Zhuk72 [ Вт ноя 01, 2016 06:18:28 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Сперва возвращайте пин на вход, а потом уже и bsf не нужен. Просто добавьте movf GPIO,f во всех участках, где переходите с выхода на вход. Переключили на выход, выдали на пин 0, пауза, переключили на вход, считали порт. Симуляция не покажет вам, как сгорает порт. Об этом вы должны позаботиться сами. Периферия. |
Автор: | BOB51 [ Вт ноя 01, 2016 06:56:35 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Kuzia Просмотри (в смысле обработчика протокола обмена с датчиком) вот от этого исходник viewtopic.php?p=2593182#p2593182 (пик629=пик675 по лапкам за исключением отсутствия АЦП). Правда конечная обработка блокнота для ds18B20 отличается от таковой для ds18S20 по причине несколько иной порядковости размещения данных... ![]() |
Автор: | Аlex [ Вт ноя 01, 2016 08:00:17 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Гляньте ещё сюда - http://forum.chipmk.ru/index.php/topic/ ... t__p__1543 Может чего интересного найдёте. Добавлено after 11 minutes 29 seconds: Цитата: датчик не должен подтянуть шину к 0 Датчик вообще никому ничего не должен, он имеет право притянуть линию к нулю, если посчитает нужным. По этому, во избежании всяческих коллизий ни линии, лог. единицу осуществляют с помощью подтягивающего сопротивления, переводя вывод устройства в высокоимпедансное состояние. Просто возьмите это за правило.Интерфейс 1-Wire - не исключение. Существуют ещё интерфейсы, работающие по такому принципу. |
Автор: | Kuzia [ Вт ноя 01, 2016 19:37:54 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Аlex писал(а): Гляньте ещё сюда - http://forum.chipmk.ru/index.php/topic/ ... t__p__1543 Может чего интересного найдёте. Добавлено after 11 minutes 29 seconds: Цитата: датчик не должен подтянуть шину к 0 Датчик вообще никому ничего не должен, он имеет право притянуть линию к нулю, если посчитает нужным. По этому, во избежании всяческих коллизий ни линии, лог. единицу осуществляют с помощью подтягивающего сопротивления, переводя вывод устройства в высокоимпедансное состояние. Просто возьмите это за правило.Интерфейс 1-Wire - не исключение. Существуют ещё интерфейсы, работающие по такому принципу. Благодарю за теорию. Я это, вроде, понимаю. Однако не работает в симуляторе. ![]() |
Автор: | Zhuk72 [ Вт ноя 01, 2016 20:15:13 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
А вы уверены, что отправка работает корректно? Запустите симуляцию с точкой останова после call Delay_800 (на сбросе датчика). Посмотрите регистры DS. Какое значение в ячейках температуры? |
Автор: | Kuzia [ Чт ноя 03, 2016 11:23:48 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Да, точно, Write (передача датчику) не корректно работает. Теперь появился другой вопрос: порт GP5 не переводится в высокий уровень при переключении порта на вход (в регистре GPIO остается 0). Хотя на входе порта стоит подтягивающий к питанию резистор. В регистр INTCON внесен 0X07. Порт (GPIO5) - без АЦП. В чем может быть дело? |
Автор: | Zhuk72 [ Чт ноя 03, 2016 12:12:29 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
INTCON вообще-то регистр прерывания, которое у вас не используется. Раз уж его 7-й бит в нуле, то остальные уже роли не играют. Если после перевода на вход порт остается синим, значит датчик удерживает его в 0. После настройки на вход movf GPIO,f делаете? Хотя это на состояние пина не влияет, а только на корректность его чтения контроллером. |
Автор: | Kuzia [ Чт ноя 03, 2016 12:49:34 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Zhuk72 писал(а): INTCON вообще-то регистр прерывания, которое у вас не используется. Раз уж его 7-й бит в нуле, то остальные уже роли не играют. Если после перевода на вход порт остается синим, значит датчик удерживает его в 0. После настройки на вход movf GPIO,f делаете? Хотя это на состояние пина не влияет, а только на корректность его чтения контроллером. Очень Вам признателен. Второй раз подряд мне помогаете. Точно добавил movf GPIO,f и получилось как надо. Не верно написал (на форуме) не INTCON а CMCON. |
Автор: | Zhuk72 [ Чт ноя 03, 2016 13:00:49 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Добавьте эту команду во все процедуры, где производите перевод пина с выхода на вход. ![]() |
Автор: | otest [ Чт ноя 03, 2016 13:41:53 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Цитата: не INTCON а CMCON. и со 2-ого раза не угадал. |
Автор: | Kuzia [ Чт ноя 03, 2016 16:07:11 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Приемо-передача работат. Однако, еще пришлось поставить резистор в разрыв между портом МК и датчиком с подтягивающим резистором. Насколько я правильно понимаю это значит что в каком-то из компонентов имеется превышение по току? Как это проще всего выявить? |
Автор: | shindax [ Чт ноя 03, 2016 16:56:31 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Kuzia писал(а): Приемо-передача работат... Откуда эта уверенность?Kuzia писал(а): Однако, еще пришлось поставить резистор в разрыв между портом МК и датчиком с подтягивающим резистором... Исходя из чего Вы решили, что это и есть решение?Kuzia писал(а): Насколько я правильно понимаю это значит что в каком-то из компонентов имеется превышение по току? Как это проще всего выявить? Ни хрена Вы не понимаете. Никак не выявить. Ну или у всех компонентов поспрашивайте... Или в тепловизор поглядите. Поколение Пепси и Ардуино, мля...Думать нужно до, этого Вашего рукоблудия. После, тоже нужно думать, но это-же так скучно... Нарушаете правила форума. п 2-3. предупреждение. FAKIR. |
Автор: | Kuzia [ Чт ноя 03, 2016 19:09:12 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Видимо не с током связано. Протеус выбивает ошибку: Logic contention detected on net #00001. Отследил по времени: ошибку выбивает после (или вовремя) подачи МК-ом на порт 1, вовремя отправки датчику бита (лог 1). В чем может быть дело? Добавлено after 45 minutes 51 second: Все, разобрался! Всем спасибо и даже тем кто дерзил. Немного увеличил временной интервал удерживания высокого уровня. Не смотря на то что все интервалы общения с датчиком вписывались в диапазон по мануалу - не работало. |
Автор: | Kuzia [ Сб ноя 05, 2016 10:55:53 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Появился очередной вопрос ![]() При переключении порта на выход его состояние меняется на низкий уровень (синий квадратик), хотя в GPIO записана 1, линия подтянута к питанию через резистор. Пробовал ставить switch в разрыв и разрывать цепь датчика и МК, оставляя датчик подтянутым через рез к питанию, в момент прохода рабочей точки команд перевода порта на выход - и МК и датчик в этот момент имеют высокий уровень. Как так получается? |
Автор: | Аlex [ Вс ноя 06, 2016 10:20:26 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Пойдём по второму кругу ? Хорошо ![]() Зачем Вы пытаетесь вывести лог. единицу с вывода МК, если она уже существует с помощью подтягивающего сопротивления ? Не нужно этого делать. Вывод МК переводить на выход нужно только для реализации лог. нуля ! Ну что тут может быть непонятного, объясните ? ![]() Уже неоднократно Вам это было сказано, при том, что Вы ответили "я понимаю это всё". Но дальше упорно продолжаете совершать ошибки. |
Автор: | Kuzia [ Вс ноя 06, 2016 21:40:46 ] |
Заголовок сообщения: | Re: PIC12F675 и DS18S20 |
Цитата: Зачем Вы пытаетесь вывести лог. единицу с вывода МК Я не пытаюсь вывести единицу с вывода МК! Низкий уровень сам там появляется при переводе порта на выход. Низкий уровень мне нужно сделать через пару команд.Цитата: если она уже существует с помощью подтягивающего сопротивления Нет, ее как не странно, там нет (об этом я написал - "синий квадратик") Цитата: Вывод МК переводить на выход нужно только для реализации лог. нуля ! Мне это и нужно, только через пару команд. А так приходится пересчитывать временные интервалы для корректной приемо-передачи. Все-таки дело в глюках Протеуса. Хотя до этого проекта ни с одним МК, которым я работал, не было ни единого бага в этом замечательном симуляторе. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |