Например TDA7294

Форум РадиоКот • Просмотр темы - Всё по DS18(B/S)20.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср ноя 26, 2025 07:56:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1164 ]     ... , , , 42, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 18:56:26 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
Может это уже не совсем по теме, но проблема такая. Значит я реализовал все процедуры общения с датчиком, обработки циферок. Все прекрасно, все работает в основном цикле, до тех пор пока не включаю прерывания...
Включаю прерывания по таймеру через 30мс примерно и у меня пропадает presence. То есть я сделал вывод сообщения DS18B20 ERROR! И вот оно постоянно горит, когда прерывания разрешены. При этом в процедуре Wire1_Reset на время ее выполнения прерывания отключены и соответственно проблем с таймингом быть не должно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 18:57:31 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1065
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19929
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Код говно.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 18:59:35 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
Очень поучительно :roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 19:11:28 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7316
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Увы, но это действительно так. На время выполнения слота чтения/записи запрещайте прерывание. Или используйте аппаратные ресурсы. У далласа есть аппнота как выполнять работу используя UART. Можно использовать таймеры с capture/compare. И обойтись без ногодрыга. Вариант использования специальной микры-преобразователя интерфейса в 1-wire (такие у далласа тоже есть) - не рассматривается.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 19:21:10 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
Да понятно, что в коде проблема. Просто, если ничего на ум не приходит, то лучше вообще ничего не отвечать, чем
Gudd-Head писал(а):
Код говно.

Прерывания как раз таки запрещаю.
UARTа нет. Таймер с CCP один и он еще пригодится наверно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 19:42:07 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4591
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Dmitriy Karpov писал(а):
если ничего на ум не приходит, то лучше вообще ничего не отвечать
Ну во-первых, отвечать то, собссно, и не на что. Вопроса то не было.
Или Вы просто поделились своей проблемой ? Тогда сочувствую, что тут ещё сказать... :dont_know:
НУ а если Вы от нас хотите услышать причину этой проблемы, то, стопиццотый раз скажу, - не туда попали - это не форум экстрасенсов и по симптомам тут не предсказывают.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 21:58:25 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
Аlex писал(а):
это не форум экстрасенсов и по симптомам тут не предсказывают.

Код процедур я уже приводил на предыдущей странице. Они с тех пор не изменились.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 22:11:26 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7316
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
а где код подпрограммы pause_64us ? С другой стороны... не очень правильный способ ловить presence pulse делая задержку 64мкс. при крайних значениях 15 и 60 мкс этот импульс может закончиться через 75 мкс. может вы его пропускаете?

хотя я делал также:
Спойлер
Код:
; Сброс линии 1-wire возвращает флаг present если в порядке. Если флага нет, то
; код ошибки в t_ecode
ResetIButton:
   bcf   present
   movlw   1
   movwf   t_ecode      ; Ошибка npr1   - нет presence pulse
   bcf   touchmem
   bsf   status, rp0   ; Страница 1
   bcf   touchout   ; |
   movlw   480/3      ; | 480 мкс задеpжка
   movwf   delay      ; |
   decfsz   delay      ; |
   goto   $-1      ; |
   bcf   intcon, GIE   ; | intcon есть во всех страницах
   bsf   touchout   ; V
   bcf   status, rp0   ; -
;
   movlw   60/3
   movwf   delay
   decfsz   delay
   goto   $-1
;
   btfss   touchmem   ; 1 2
   bsf   present      ; 2
   bsf   intcon, GIE
   btfss   present      ; Нет presence pulse
   return
;
   movlw   2
   movwf   t_ecode      ; Ошибка npr2   - линия удерживается в '0' - к.з.
   movlw   240/5      ; 480 мкс задеpжка
   movwf   delay
   btfsc   touchmem   ; 1 2
   goto   waitPDH
   decfsz   delay      ; 3
   goto   $-3      ; 4 5
;
   bcf   present      ; Это не импульс, а КЗ
   return
;
waitPDH:
;   btfss   touchmem   ; ожидаем снятия сигнала presence
;   goto   waitPDH
   movlw   480/3      ; 480 мкс задеpжка
   movwf   delay
   decfsz   delay      ; 1
   goto   $-1      ; 2 3
   return


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 22:27:47 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4591
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Dmitriy Karpov писал(а):
Код процедур я уже приводил на предыдущей странице. Они с тех пор не изменились.
Процедуры - мало. Вы же что-то добавляли в программу, причём эти добавления и не работают.
Dmitriy Karpov писал(а):
То есть я сделал вывод сообщения DS18B20 ERROR! И вот оно постоянно горит, когда прерывания разрешены
Может проблема тут зарыта.
Ибо, если Вы в каком то месте отключаете прерывания, то это место никак не может не работать при их наличии. Что логично...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 22:30:19 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
uldemir писал(а):
а где код подпрограммы pause_64us?

Ну сказал же там все проверено Stopwatch ем 100 раз. Все как часы. Не вижу смысла приводить. Ну может еще +2мкс на исполнение команды call
uldemir писал(а):
при крайних значениях 15 и 60 мкс этот импульс может закончиться через 75 мкс

Изображение
Изображение
Вроде все так :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 22:38:30 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4591
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Кстати, я на импульс ресета никогда не запрещаю прерывания, просто повторяю его несколько раз, через определённый промежуток времени, в случае отсутствия ответа от датчика.
Может это и не правильно, но вроде проблем не было никогда... :dont_know:


Добавлено:_________________
А, не, вру. Сейчас посмотрел последние проекты - делаю запрет после задержки в 500 мкс. , до отпускания линии. Таким образом, из-за выпада прерывания, может продлиться только импульс сброса, что не так страшно.


Последний раз редактировалось Аlex Ср сен 02, 2015 22:47:53, всего редактировалось 2 раз(а).
-


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 23:14:02 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
Аlex писал(а):
Вы же что-то добавляли в программу, причём эти добавления и не работают.

Все что я добавил, а это вывод всяких надписей на дисплей, проверка датчиков и т. п. Это все отлажено и прекрасно работает до тех пор пока в программе не задействуются прерывания.

Смысл там вот в чем: есть 2 параллельные задачи. 1-я связана с датчиком, обработкой данных от него, выводом на дисплей, управлением нагрузками. 2-я: Есть матричная клава. По нажатию на разные кнопки должен генериться сигнал типа медленного шима в течение определенного времени.
Ну так вот 1-ю задачу я реализовал в основном цикле. 2-ю повесил на прерывания. Прерывания по смене уровня на все кнопки не хватило, поэтому я просто завожу таймер на 30мс, сканирую клаву и потом этот же таймер формирует сигнал.
Соответственно сейчас я эти задачи состыковал и у меня перестала видеться DSка. А так по отдельности все работает. Причина совершенно непонятна, потому как в критичных ко времени моментах (передача по 1-wire) прерывания отключаются.

В подпрограмму DS18B20_ERROR мк уходит, когда он не получает presence от датчика (на любом этапе общения с датчиком). В этой подпрограмме выводится сообщение на дисплей и начинается циклическая отправка ресет пульсов до тех пор пока этот presence не будет получен. При получении presence, уходит на метку сброса.

Установлено, что он этот presence вообще никогда не получает при включенных прерываниях. Я в недоумении :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 23:43:16 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4591
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Выложите сюда ещё раз всю функцию ресета.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 23:48:52 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
Вот все функции для 1-wire в текущем виде
Спойлер
Код:
;******************* Подпрограммы шины 1-Wire ************************************************************

Wire1_Reset
         bcf      INTCON, GIE         ; запрещаем прерывания
         call   Wire1_0
         call   pause_505us
         call   Wire1_Z
         call   pause_64us
         btfss   PORTC, RC2
         bsf      flags, presence
         btfsc   PORTC, RC2
         bcf      flags, presence
         call   pause_499us
         bsf      INTCON, GIE         ; разрещаем прерывания
         return

Wire1_Send_byte                     ; отправка байта
         movlw   .8               ; байт должен лежать в W1B
         movwf   count
         bcf      INTCON, GIE         ; запрещаем прерывания
r1         rrf      W1B      
         call   Wire1_0
         btfsc   STATUS, C
         call   Wire1_Z
         call   pause_64us
         call   Wire1_Z
         decfsz   count
         goto   r1
         bsf      INTCON, GIE         ; разрещаем прерывания
         return

Wire1_Recieve_byte                  ; приём байта
         movlw   .8               ; байт будет лежать в W1B
         movwf   count
         bcf      INTCON, GIE         ; запрещаем прерывания
r2         call   Wire1_0
         call   Wire1_Z
         btfss   PORTC, RC2
         bcf      STATUS, C
         btfsc   PORTC, RC2
         bsf      STATUS, C
         rrf      W1B
         call   pause_64us
         decfsz   count
         goto   r2
         bsf      INTCON, GIE         ; разрещаем прерывания
         return

Wire1_0      
         banksel   TRISC
         bcf      TRISC, RC2
         banksel   PORTC
         return

Wire1_Z      
         banksel   TRISC
         bsf      TRISC, RC2
         banksel   PORTC
         return



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Ср сен 02, 2015 23:53:33 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4591
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Код:
Wire1_0     
         banksel   TRISC
         bcf      TRISC, RC2
         banksel   PORTC
         return
Попрбуйте так:
Код:
Wire1_0     
         banksel   TRISC
         bcf      TRISC, RC2
         banksel   PORTC
         bcf      PORTC, RC2
         return
И всё заработает :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Чт сен 03, 2015 00:05:23 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
Там при инициализации порта уже было
Код:
clrf PORTC

И больше оно не меняется никогда.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Чт сен 03, 2015 00:27:23 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
На всякий случай попробовал... Помогло :shock: DS18B20 ERROR! пропало.
Где-то я этот нолик затирал значит все-таки.
Но работает все как-то очень глючно. Надписи не сразу появляются, мерцают. Такое ощущение, что прерывания еще где-то мешают.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Чт сен 03, 2015 08:12:07 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4591
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Dmitriy Karpov писал(а):
И больше оно не меняется никогда.
Меняется. Вы просто плохо знаете структуру МК, для которого пишите программу.
Ошибка была очевидной.
И мешали всему далеко не прерывания, а код, находящийся в прерывании. Рубь за сто даю, там идёт работа с тем же портом (PORTC, по всей видимости), что и с 1-Wire.

Dmitriy Karpov писал(а):
На всякий случай попробовал...
Странное какое-то недоверие к тем, к кому идёте за помощью :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Чт сен 03, 2015 13:26:35 
Встал на лапы
Аватар пользователя

Карма: -3
Рейтинг сообщений: 2
Зарегистрирован: Сб апр 21, 2012 01:32:34
Сообщений: 89
Откуда: Москва
Рейтинг сообщения: 0
Аlex писал(а):
Рубь за сто даю, там идёт работа с тем же портом (PORTC, по всей видимости), что и с 1-Wire.

Идет, конечно. Не выделять же целый порт ради датчика :) Только вот идет она побитно. Т. е. нет команд типа
Код:
movlw ....
movwf PORTC
; или
rrf PORTC

которые могли бы задвинуть 1 в этот бит. И в MPLab SIM в момент исполнения этой процедуры в RC2 был 0. Так что я не знаю что это за особенности архитектуры такие :dont_know:
Но главное, что заработало. Спасибо :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Всё по DS18(B/S)20.
СообщениеДобавлено: Пт сен 04, 2015 09:57:37 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4591
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Dmitriy Karpov писал(а):
Так что я не знаю что это за особенности архитектуры такие :dont_know:
Стыдно, товарищ, не знать то, с чем работаешь :)
Странно, но я думал, что Вы после этого попытаетесь разобраться в чём проблема, поискав документацию, а не сведёте все на "работает, да и ладно". Т.к. незнание таких вещей потом снова приведёт к непонятным "глюкам" и, соответственно, вопросам "почему не работает ?".
Читайте - http://www.microchip.ru/lit/?mid=1x0
Конкретно по портам - http://www.microchip.ru/files/d-sheets-rus/pic16_9.pdf Вы не поверите, но там даже Ваш случай описан :)
Читать надо доку, а не лениться и стараться всё побыстрее сделать ...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1164 ]     ... , , , 42, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y