реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Вопрос по датчику, DS18B20
Anjey_N
сообщение Jul 17 2007, 07:48
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Ещё вопрос.
Для того чтобы записать конфигурационный байт нужно подать последовательно такие команды:
- reset;
- skip rom 0xCC;
- write scratchpad 0x4E;
- записать TH;
- записать TL;
- конфигурация.

Так ли это?
А с завода датчики выпускаются с 12-резолюцией?
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 17 2007, 13:22
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Anjey_N @ Jul 17 2007, 06:48) *
Для того чтобы записать конфигурационный байт нужно подать последовательно такие команды:
- reset;
- skip rom 0xCC;
- write scratchpad 0x4E;
- записать TH;
- записать TL;
- конфигурация.
А с завода датчики выпускаются с 12-резолюцией?

Да, всё так, если у вас одно устройство на шине. При подаче питания на датчик устанавливается 12-битное разрешение.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Anjey_N
сообщение Jul 19 2007, 08:07
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Цитата(Anjey_N @ Jul 17 2007, 10:48) *
Ещё вопрос.
Для того чтобы записать конфигурационный байт нужно подать последовательно такие команды:
- reset;
- skip rom 0xCC;
- write scratchpad 0x4E;
- записать TH;
- записать TL;
- конфигурация.

Так ли это?
А с завода датчики выпускаются с 12-резолюцией?


Ещё один вопрос в догонку, скорее по написанию программы.
В файле драйвера DS18B20 (пусть это будет DS18B20.c) я ввожу новую переменную.
Например, flag_znak=0 если температура положительная и flag_znak=1 если температура отрицательная. А опрашивать эту переменную буду в другом файле (допустим main.c).
Вопрос: как определить переменную (char? int? extern?) и в каком файле?
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jul 19 2007, 08:16
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Цитата(Anjey_N @ Jul 19 2007, 11:07) *
Ещё один вопрос в догонку, скорее по написанию программы.
В файле драйвера DS18B20 (пусть это будет DS18B20.c) я ввожу новую переменную.
Например, flag_znak=0 если температура положительная и flag_znak=1 если температура отрицательная. А опрашивать эту переменную буду в другом файле (допустим main.c).
Вопрос: как определить переменную (char? int? extern?) и в каком файле?


1) В файле DS18B20.c определяете переменную:
Код
unsigned char flag_znak;

2) В файле DS18B20.h наряду с прототипами функций работы с термометром должна присутствовать строчка:
Код
extern unsigned char flag_znak;

3) В файле main.c должна присутствовать строчка:
Код
#include "DS18B20.h"
Go to the top of the page
 
+Quote Post
GrayCat
сообщение Jul 19 2007, 10:52
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342



Цитата(ALexx @ Jul 19 2007, 11:16) *
3) В файле main.c должна присутствовать строчка:
Код
#include "DS18B20.h"

Маленькое дополнение: очень желательно, чтобы строчка
Код
#include "DS18B20.h"
присутствовала также и в самом "DS18B20.с", для того чтобы компилятор имел возможность во время компиляции проверить соответствие типов объявленной и реализованной переменных. Иначе, если вы, например, внутри "DS18B20.с" поменяете тип этой переменной с unsigned на signed, но не отразите это в "DS18B20.h", то основная программа (в "main.c") будет по прежнему считать ее unsigned, что чревато крайне трудноуловимыми глюками.


--------------------
Gray©at
Go to the top of the page
 
+Quote Post
Anjey_N
сообщение Jul 19 2007, 18:19
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Цитата(GrayCat @ Jul 19 2007, 13:52) *
Маленькое дополнение: очень желательно, чтобы строчка
Код
#include "DS18B20.h"
присутствовала также и в самом "DS18B20.с", для того чтобы компилятор имел возможность во время компиляции проверить соответствие типов объявленной и реализованной переменных. Иначе, если вы, например, внутри "DS18B20.с" поменяете тип этой переменной с unsigned на signed, но не отразите это в "DS18B20.h", то основная программа (в "main.c") будет по прежнему считать ее unsigned, что чревато крайне трудноуловимыми глюками.


У меня всё заработало!!!! yeah.gif Большое спасибо!!!!!!!
Go to the top of the page
 
+Quote Post
M@T_F@Q
сообщение Jul 19 2007, 19:18
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 25-01-07
Из: Узбекистан
Пользователь №: 24 765



А можно сюда выложить программку, а то я 3 ночь с датчиком разбираюся.
Go to the top of the page
 
+Quote Post
Tcom
сообщение Jul 20 2007, 05:30
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792



Вот здесь пример смотри разбирайся
http://electronix.ru/forum/index.php?showt...10934&st=15
Go to the top of the page
 
+Quote Post
Anjey_N
сообщение Jul 20 2007, 07:25
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Цитата(M@T_F@Q @ Jul 19 2007, 22:18) *
А можно сюда выложить программку, а то я 3 ночь с датчиком разбираюся.


Можно, но попозже, когда со всеми глюками разберусь.
краткие характеристики:
Контроллер ATmega16, кварц на 16 МГц, динамическая индикация, 4-разрядный АЛС с ОА, 1 датчик DS18B20.
Дай ссылку на почтовый ящик, закончу - вышлю.
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jul 20 2007, 07:33
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Цитата(GrayCat @ Jul 19 2007, 13:52) *
Маленькое дополнение: очень желательно, чтобы строчка
Код
#include "DS18B20.h"
присутствовала также и в самом "DS18B20.с", для того чтобы компилятор имел возможность во время компиляции проверить соответствие типов объявленной и реализованной переменных. Иначе, если вы, например, внутри "DS18B20.с" поменяете тип этой переменной с unsigned на signed, но не отразите это в "DS18B20.h", то основная программа (в "main.c") будет по прежнему считать ее unsigned, что чревато крайне трудноуловимыми глюками.


Это само собой. Любой с-файл, сопровождаемый h-файлом должен содержать в себе его объявление.
Но за уточнение спасибо.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jul 20 2007, 08:36
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



а при линковке соответствие типов не проверяется?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Igor26
сообщение Jul 20 2007, 09:26
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(WHALE @ Jul 20 2007, 12:36) *
а при линковке соответствие типов не проверяется?

Это делает компилятор. Линкер занимается другим.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jul 20 2007, 09:31
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Хорошо.Компилятор должен проверять соответствие типов при обьявлении extern типа из другого файла?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
M@T_F@Q
сообщение Jul 20 2007, 21:03
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 25-01-07
Из: Узбекистан
Пользователь №: 24 765



Цитата(Anjey_N @ Jul 20 2007, 12:25) *
Можно, но попозже, когда со всеми глюками разберусь.
краткие характеристики:
Контроллер ATmega16, кварц на 16 МГц, динамическая индикация, 4-разрядный АЛС с ОА, 1 датчик DS18B20.
Дай ссылку на почтовый ящик, закончу - вышлю.

ООооо это было бы вобще классно. Мой емайл roman_1986@xnet.uz.
Заранее спасибо!!!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 20 2007, 21:17
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(WHALE @ Jul 20 2007, 11:36) *
а при линковке соответствие типов не проверяется?
ИАР проверяет. Думаю, что и другие должны. Например, если в одном файле определить unsigned char A; а в другом объявить extern signed long A; то линкер выругается. Компилятор не имеет возможности отлавливать такие ошибки, ибо при компиляции второго файла не имеет информации о содержимом (и даже о существовании) первого.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jul 21 2007, 06:30
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Cпасибо,CV тоже проверяет при линковке и выдает -ошибка линкера несоответсвие типов.
Тогда здесь речь об чем?
Цитата(GrayCat @ Jul 19 2007, 14:52) *
Маленькое дополнение: очень желательно, чтобы строчка
Код
#include "DS18B20.h"
присутствовала также и в самом "DS18B20.с", для того чтобы компилятор имел возможность во время компиляции проверить соответствие типов объявленной и реализованной переменных. Иначе, если вы, например, внутри "DS18B20.с" поменяете тип этой переменной с unsigned на signed, но не отразите это в "DS18B20.h", то основная программа (в "main.c") будет по прежнему считать ее unsigned, что чревато крайне трудноуловимыми глюками.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 21 2007, 07:30
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(WHALE @ Jul 21 2007, 09:30) *
Тогда здесь речь об чем?
Видимо не все линкеры ловят. И даже если ловят, то выдают варнинг, который можно не разобравшись задавить. Вот тогда чудеса и начнутся.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Anjey_N
сообщение Jul 25 2007, 15:37
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Цитата(M@T_F@Q @ Jul 21 2007, 00:03) *
ООооо это было бы вобще классно. Мой емайл roman_1986@xnet.uz.
Заранее спасибо!!!




посмотри почту
Go to the top of the page
 
+Quote Post
GrayCat
сообщение Jul 30 2007, 07:05
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342



Цитата(WHALE @ Jul 21 2007, 09:30) *
Тогда здесь речь об чем?

Линкер способен словить несоответствия размеров переменных. А каким образом они объявлены -- signed, unsigned или вообще структура -- о том ведомо только компилятору.


--------------------
Gray©at
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jul 30 2007, 07:50
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



а вот и нет-signed и unsigned отлавливаются также и именно линкером,по крайней мере в CV.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
GrayCat
сообщение Aug 1 2007, 06:49
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342



Цитата(WHALE @ Jul 30 2007, 10:50) *
а вот и нет-signed и unsigned отлавливаются также и именно линкером,по крайней мере в CV.
Ну, значит счастливых пользователей CV можно поздравить с тем, что в объектник пишется полная информация о типах a14.gif Но не стоит расслабляться: так дела обстоят не у всех. Не вечно же вы будете пользоваться только CV! wink.gif Так что не стоит забывать хорошую манеру прописывать объявление переменных в .h-файле и включать его в .c-файл с определением этой же переменной.


--------------------
Gray©at
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 1 2007, 08:16
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
прописывать объявление переменных в .h-файле и включать его в .c-файл с определением этой же переменной.

iar ругается на такое, типа двойное объявление или что то типа того...


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 1 2007, 08:30
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



СV аналогично.А в чем смысл двойного обьявляния и в хидере и в с-файле?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Igor26
сообщение Aug 1 2007, 08:57
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(WHALE @ Aug 1 2007, 12:30) *
СV аналогично.А в чем смысл двойного обьявляния и в хидере и в с-файле?

В хидере объявляют переменную, если хотят, чтоб её можно было видеть из других файлов. При этом, перед объявлением переменной в хидере, пишут ключевое слово extern. При объявлении этой же переменной в .С-файле это ключевое слово не указывается.
Go to the top of the page
 
+Quote Post
GrayCat
сообщение Aug 1 2007, 17:01
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342



Цитата(GDI @ Aug 1 2007, 11:16) *
iar ругается на такое, типа двойное объявление или что то типа того...

А вот не надо делать двойное объявление wink.gif . А надо различать объявление и выделение памяти.

Файл functions.h:
Код
// ...
extern unsigned char Variable;
// ...

Файл functions.c:
Код
#include "functions.h"
// ...
unsigned char Variable;
// ...

Файл main.c:
Код
#include "functions.h"
// ...
Variable = 1;
  // ...


Так вот в functions.h содержится именно объявление. Просмотрев строку extern unsigned char Variable; компилятор просто "держит в уме", что где-то эта переменная будет, и знает, каким образом с ней обращаться. Включение "functions.h" в main.c не генерирует никакого кода и не выделяет никакой памяти. На это указывает ключевое слово extern.

А вот в functions.c происходит реальное выделение памяти под unsigned char Variable; . Поскольку в данном случае тип переменной согласуется с тем, что было объявлено в "functions.h", то все в порядке.


--------------------
Gray©at
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 2 2007, 06:29
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Цитата(GrayCat @ Aug 1 2007, 10:49) *
Так что не стоит забывать хорошую манеру прописывать объявление переменных в .h-файле и включать его в .c-файл с определением этой же переменной.

доброе время суток. Если я Вас правильно понял, то так можно обьявлять только extern переменые, а не глобальные для одного *.с файла.
Go to the top of the page
 
+Quote Post
Igor26
сообщение Aug 2 2007, 06:33
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(namelos @ Aug 2 2007, 10:29) *
доброе время суток. Если я Вас правильно понял, то так можно обьявлять только extern переменые, а не глобальные для одного *.с файла.

Да.
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 24 2007, 08:35
Сообщение #28


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Доброе время суток всем. Посадил датчик на 50м кабель и подтягивающий резистор 4,7к, но получаю постоянно ошибкуCRC8. Может кто-нибудь подскажет временные задержки delays для нормальной работы. Заранее спасибо.

Сообщение отредактировал namelos - Aug 24 2007, 08:45
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 24 2007, 09:38
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Что значит для нормальной работы? Ставьте такие задержки которые будут у вас работать. Можно еще подтяжку уменьшить, я уменьшал до 1к, но расстояние у меня было 10м


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 24 2007, 09:44
Сообщение #30


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



2 GDI. Поменял pullup соппротивление на 2.2к, но считанные данные проверку на CRC8 не проходят, к сожалению, получаю нули. Буду пробовать подходящие timeslotы. Кстати, большое спасибо за идею параллельного опроса датчиков. a14.gif

Сообщение отредактировал namelos - Aug 24 2007, 09:51
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 24 2007, 09:58
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



А на близком расстянии работает? Питание у датчиков какое паразитное или 3й провод идет? Осциллом не пробовали смотреть что там на датчике происходит?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 24 2007, 10:07
Сообщение #32


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Питание на 3 провода. Эх, осциллографа нет. Поэтому и тыкаюсь в темноте. На близком все тип-топ.
Может кто-нибудь знает, хотя бы примерно, в каком диапазоне timeslotы использовать.

Сообщение отредактировал namelos - Aug 24 2007, 10:15
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 24 2007, 10:55
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



На 10м с подтяжкой 1к у меня работали самые быстрые тайм-слоты 15 и 70 мкс.
Для начала стоит попробовать увеличить в 2-3- раза, хотя я не помню, есть ли там ограничение на время тайм-слотов.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 24 2007, 11:51
Сообщение #34


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Поставил pullup на 1к, заработало со стандартными таймслотами.
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 27 2007, 06:54
Сообщение #35


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Доброе время суток. Извините за глупый вопрос, а какая связь между pullup-сопротивлением и напряжением на входе контроллера? Если можно поподробнее. Почему с уменьшением сопротивления растет напряжение на входе при 0. Заранее спасибо.

Сообщение отредактировал namelos - Aug 27 2007, 06:57
Go to the top of the page
 
+Quote Post
Miron
сообщение Aug 27 2007, 08:30
Сообщение #36


Частый гость
**

Группа: Validating
Сообщений: 149
Регистрация: 11-02-05
Из: Рязань
Пользователь №: 2 574



Цитата(namelos @ Aug 24 2007, 14:07) *
Питание на 3 провода. Эх, осциллографа нет. Поэтому и тыкаюсь в темноте. На близком все тип-топ.
Может кто-нибудь знает, хотя бы примерно, в каком диапазоне timeslotы использовать.

В вашем случае вполне верояно может звенеть сама линия интерфейса
фронты у вас крутые поэтому после информационного импульса за ним
возникает отклик который может быть значительной амплитуды,
осцилографом их видно. Такие вещи особенно проявляются когда
на длинной линии много датчиков висит. Боротся с этим вполне реально
обычно делают драйвер линии который валит фронты до приемлемых
значений. У DS по этому вопросу были рекомендации, эжели ссылку
найду то скину. А из практики делал 30 датчиков на 150 м с драйвером линии
все работало. А вот программно подбирать интервалы не советую
тут раз на раз не приходится, как попадеш к тому же на разных температурах
чуствительность датчика к звону разная на плюсе может и работать а
на минусе загнется.
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Aug 27 2007, 12:39
Сообщение #37


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Цитата(namelos @ Aug 24 2007, 17:51) *
Поставил pullup на 1к, заработало со стандартными таймслотами.

Pullup на 1К ставить нельзя. Ключ в этом датчике терпит 4ма. При повышенной температуре (не знаю точно,какой) Dallas рекомендует не более 3ма. Так что расчетное сопротивление на pullup должно быть не меньше 1,66К.
Go to the top of the page
 
+Quote Post
namelos
сообщение Aug 28 2007, 07:55
Сообщение #38


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Доброе время суток, господа эмбеддеры. Спасибо всем за ответы. Свой вопрос
я задал уважаемому участнегу нашего форума Dima_Ag, на который получил очень исчерпывающий ответ.
С его разрешения, я привожу его ниже.
Цитата
Сейчас я тоже пытаюсь посадить датчик DS18B20 на 50м провод. Для считывания данных использую подтягивающий резистор 1.5к, хотя рекомендуемый 4.7к(больше 1.5к данные считываются с ожибкой). Чем это может грозить?

При большом номинале подтягивающего сопротивления возрастает время переходного процесса, ввиду чего короткие импульсы, которыми передаются "единицы", могут быть слишком "удлинены". Отсюда и ошибки в передаче данных.

Цитата
И еще, извините за глупый вопрос, а какая связь между pullup сопротивлением и напряжением на входе контроллера при нулевом сигнале? Если можно поподробнее.


Связь тут следующая:

в конце даташита можно найти тьакую табличку:
DC ELECTRICAL CHARACTERISTICS
где указано, что Sink Current = 4 мА.

Это означает, что такой ток будет протекать через подтягивающий резистор
в то время, когда термометр "выдаёт" ноль. Чем больше номинал резистора, тем ближе напряжение "нуля" к 0 Вольтам. Если же номинал подтягивающего резистора взять очень маленьким, то протекающий ток в 4 мА может не создать
достаточно "сильного" падения напряжения на этом самом резисторе, следовательно, уровень нуля может быть слишком высок.

Пример: если взять подтягивающий резистор в 500 Ом, питание 5 Вольт,
то ток, протекающий от DS18b20 создаст падение напряжения = 500*0.004 = 2 В, таким образом, уровень "нуля" на входе микроконтроллера будет 5В - 2В =3 В! , что, естественно, за "ноль" не воспримется.
........
a14.gif
И еще неплохая ссылка на форум по этой теме.
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Aug 28 2007, 08:36
Сообщение #39


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(namelos @ Aug 28 2007, 11:55) *
в конце даташита можно найти тьакую табличку:
DC ELECTRICAL CHARACTERISTICS
где указано, что Sink Current = 4 мА.

Пример: если взять подтягивающий резистор в 500 Ом, питание 5 Вольт,
то ток, протекающий от DS18b20 создаст падение напряжения = 500*0.004 = 2 В


Там что, в термометре, источник тока на 4 mA или всё-таки ключ? Если ключ (ИМХО так), то 4 mA - это его максимальный ток, при большем токе он сгорит/нагреет термометр, но напряжение нуля будет равно его напряжению насыщения.
Если источник тока, то объясните мне зачем такой изврат.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 28 2007, 11:33
Сообщение #40


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Maik-vs @ Aug 28 2007, 11:36) *
Если ключ (ИМХО так), то 4 mA - это его максимальный ток, при большем токе он сгорит/нагреет термометр, но напряжение нуля будет равно его напряжению насыщения.
Скорее всего в качестве ключа там стоит полевой транзистор (что видно по картинке 10 в даташите). А полевой транзистор не имеет такого параметра как напряжение насыщения, вместо этого он имеет сопротивление канала в открытом состоянии (Rds-on). На той же картинке оно указано - 100 Ом. Ну а поскольку оно сопротивление, то вместе с сопротивлением подтяжки образуется делитель, и чем меньше сопротивление подтяжки, тем выше напряжение с выхода делителя. И при определенном сопротивлении подтяжки напряжение оказывается выше напряжения нуля. То же и на стороне контроллера. И естественно, мощность, выделяющаяся на сопротивлении открытого канала, приводит к разогреву термометра - это вы правильно заметили.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 28 2007, 13:08
Сообщение #41


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



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


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 04:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01779 секунд с 7
ELECTRONIX ©2004-2016