Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 2«12
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » помогите с ds18s20 (Не работает на длинном кабеле)
помогите с ds18s20
serfo0185 Дата: Пн, 16.03.2015, 14:41  |                                                                                                                Сообщение # 16
Группа: Пользователи
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 27.01.2015

Статус: Offline

С кабелем разобрался (взял экранированную витую пару и на обоих концах подтягивающие сопротивления по 5 к) теперь возник вопрос по программе, как написать опрос n -датчиков на разных портах МК. Если писать опрос температуры для каждого порта, то не хватает памяти программ (максимум хватило на 8  датчиков).
 
например
Symbol A = PORTC.3
......
OWrite А, 1, [$CC, $44]  
........ 
опрос датчика на 4 порту С, а как сделать что бы перебирать порты .
хотелось бы сделать 1 подпрограмму запроса температуры .
и в зависимости от выбора датчика выбирать тот или иной порт для использования в качестве опроса температуры.
И вообще возможно ли это?
ЯНДЕКС Дата: 16.03.2015
MiXaS Дата: Вт, 17.03.2015, 10:29  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата serfo0185 ()
И вообще возможно ли это?
Конечно возможно! Там меняется немного логика работы. Вы делаете общий запрос, а нужно обращаться непосредственно к датчику по ID. Вот Вам несколько ссылок, разберайтесь.

http://www.picbasic.ru/forum/5-1260-1

http://www.picbasic.ru/publ/avtomobilnyj_pomoshnik/2-1-0-145
Прикрепления: Dallas_1-Wire_P.mht(176Kb)
serfo0185 Дата: Вт, 17.03.2015, 13:01  |                                                                                                                Сообщение # 18
Группа: Пользователи
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 27.01.2015

Статус: Offline

Это как я понял на одном порту цеплять несколько датчиков.
мне хотелось бы на каждый порт по одному датчику и  в строке OWrite PORTC.2, 1, [$CC, $44] менять порт в подпрограмме.
MiXaS Дата: Ср, 18.03.2015, 15:04  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Тогда вообще не вижу трудностей! Если с одним разобрались, то сделайте процедуру (метку), где Ваш код с опросом датчика, но просто меняйте ноги. И в зависимости какая нога, присваивайте полученные данные соответствующей переменной. Но я еще такого не видел.
serfo0185 Дата: Ср, 18.03.2015, 20:42  |                                                                                                                Сообщение # 20
Группа: Пользователи
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 27.01.2015

Статус: Offline

 
Цитата
Тогда вообще не вижу трудностей! Если с одним разобрались, то сделайте процедуру (метку), где Ваш код с опросом датчика, но просто меняйте ноги. И в зависимости какая нога, присваивайте полученные данные соответствующей переменной. Но я еще такого не видел.
Как раз в этом и проблема. не могу переменной присвоить порт (чтобы их перебирать ),  присваивается только значение  или 0 или 1 . присваивал каждому порту имя (symbol A = portc.1  и тд) и с помощью команды LookUpL i, [A, "A", B, "B"  и тд. ] присваивал переменной  itemp
...... 
OWrite itemp, 1, [$CC, $44]   
........   
и ничего не выходило.
MiXaS Дата: Ср, 18.03.2015, 21:19  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Может Вы код предоставите? 

А вообще значение переменой присваивается элементарно: пременна = портв или переменная = портв.0. Еще если Вы присваиваете переменной значение portc.1, тогда все правильно, Ваша переменная будет или 1 или 0, так как третьего не дано. А вот если переменная = portc, тогда значение переменной может быть от 0 до 255. Думаю Вам следует сначало разобраться с портами, как они конфигурятся, что можно с ними делать, а потом уже в дебри лезть, типа даласа
serfo0185 Дата: Чт, 19.03.2015, 18:27  |                                                                                                                Сообщение # 22
Группа: Пользователи
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 27.01.2015

Статус: Offline

Вот мой код. Но так не работает.


Сообщение отредактировал serfo0185 - Чт, 19.03.2015, 18:29
MiXaS Дата: Чт, 19.03.2015, 21:16  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

serfo0185,  Вы читали как работает команда lookup?  Так работать и не будет! А где настройка портов? Lookup вообще не нужно!
Попробуйте перед каждым опросом переменной itemp=протв.0 нужный порт.
serfo0185 Дата: Пт, 20.03.2015, 09:34  |                                                                                                                Сообщение # 24
Группа: Пользователи
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 27.01.2015

Статус: Offline

Еще пробовал вот так. тоже значение температуры пишет 0 градусов.

Сообщение отредактировал serfo0185 - Пт, 20.03.2015, 12:07
ivan_fd Дата: Пт, 20.03.2015, 10:44  |                                                                                                                Сообщение # 25
Группа: Модераторы
Ранг:  Специалист
Сообщений: 915
Репутация: 54   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Вот так нужно.

Symbol A = PORTB.0 

If i = 1 Then itemp = A

Да и самой процедурой опроса датчиков у Вас бардак.


Меня все время преследуют умные мысли...но я быстрее!!!
serfo0185 Дата: Пт, 20.03.2015, 12:09  |                                                                                                                Сообщение # 26
Группа: Пользователи
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 27.01.2015

Статус: Offline

Все
Цитата
Вот так нужно. 

Symbol A = PORTB.0  

If i = 1 Then itemp = A
 
Спасибо. Понял. Я так и думал,  только не правильно вызывал через lookup (в предыдущем примере)
736852 Дата: Пт, 20.03.2015, 17:25  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Новенький
Сообщений: 13
Репутация: 0   ±
Замечания:   ±
На сайте с 08.06.2014

Статус: Offline

как то и я заморочился этим датчиком,но и у меня он отказывался работать если длинна кабеля была чуть более метра не говоря уже от трех,пяти метрах. Вышел из положения очень интересным способом. У меня много датчиков температуры от автомобильных сигналок. Ну типа простой резистивный датчик так я его оцифровал с помощью ds18s20. составил таблицу зависимости температуры от сопротивления и забыл про всякие там помехи получилось довольно сносно.

Добавлено (20.03.2015, 17:25)
---------------------------------------------
написал программку опустил два датчика в емкость с водой и заморозил.а потом потихоньку отогревал и нагрел эту емкость. И в микроконтроллере у меня получилась таблица зависимости температуры от сопротивления. Теперь использую эту таблицу. А датчиков от сигналок у меня мешок )))

MiXaS Дата: Пт, 20.03.2015, 20:19  |                                                                                                                Сообщение # 28
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Ds18s(b)20 работает отлично! Даже не оригинальные прекрасносебя ведут. Пишите правильно код и самое главное читайте мануал на любую переферию! И тогда успех гарантирован
serfo0185 Дата: Пн, 23.03.2015, 09:05  |                                                                                                                Сообщение # 29
Группа: Пользователи
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 27.01.2015

Статус: Offline


Цитата
Вот так нужно.  

Symbol A = PORTB.0   

If i = 1 Then itemp = A
  Попробовал так не работает выдает температуру 0 . как я  понял ничего не получится .

Сообщение отредактировал serfo0185 - Пн, 23.03.2015, 09:52
Форум Picbasic.ru » Программирование МК » Proton PicBasic » помогите с ds18s20 (Не работает на длинном кабеле)
Страница 2 из 2«12
Поиск: