Например TDA7294

Форум РадиоКот :: Просмотр темы - PIC12F675 и DS18S20
Форум РадиоКот
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). Внес только некоторые изменения.

Вложения:
Project.rar [77.46 KiB]
Скачиваний: 225

Автор:  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.
Ну и не могу найти раздел Периферия. :dont_know:

Автор:  -=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 по причине несколько иной порядковости размещения данных...
:roll:

Автор:  А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

Добавьте эту команду во все процедуры, где производите перевод пина с выхода на вход.
:beer:

Автор:  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

Пойдём по второму кругу ? Хорошо :)
Зачем Вы пытаетесь вывести лог. единицу с вывода МК, если она уже существует с помощью подтягивающего сопротивления ? Не нужно этого делать. Вывод МК переводить на выход нужно только для реализации лог. нуля !
Ну что тут может быть непонятного, объясните ? :dont_know:
Уже неоднократно Вам это было сказано, при том, что Вы ответили "я понимаю это всё". Но дальше упорно продолжаете совершать ошибки.

Автор:  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/