Russian Qt Forum
Июнь 15, 2024, 21:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: RS232 to I2C ?  (Прочитано 31289 раз)
Ubuntu_linux
Гость
« : Февраль 09, 2011, 23:16 »

Что-то я задолбался....
Хочу прикрутить к COM порту (RS232) цифровой термометр LM75 который видает данные по протоколу I2C.
Как ето сделать.

Для роботы c COM  использую QSerialDevice http://gitorious.org/qserialdevice/qserialdevice/archive-tarball/master

А как преобразовать в I2C ?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Февраль 10, 2011, 06:37 »

>>А как преобразовать в I2C ?
через адаптер и не слишком простой по конструкции.

Лучше использовать термометры работающие по 1-Wire (например, ф.Dallas), там адаптер RS-232 - 1-Wire простейший.
(могу дома поискать схему адаптера и програмку для чтения данных с термометра)
Записан

Юра.
Ubuntu_linux
Гость
« Ответ #2 : Февраль 10, 2011, 11:56 »

>>А как преобразовать в I2C ?
через адаптер и не слишком простой по конструкции.

Лучше использовать термометры работающие по 1-Wire (например, ф.Dallas), там адаптер RS-232 - 1-Wire простейший.
(могу дома поискать схему адаптера и програмку для чтения данных с термометра)
Да, пожалуйста.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Февраль 12, 2011, 23:24 »

Вот ZIP-архив, там html-ное описание (со схемой адаптера), исходники программ (на дельфях вроде) и скомпилированные программки.

П.С.
где взял уже не помню, но точно на просторах интернета.
Записан

Юра.
Ubuntu_linux
Гость
« Ответ #4 : Февраль 12, 2011, 23:59 »

Спасибо. Сейчас в нас отрубился свет, непогода.... Так что сижу с мобилки. Но до этого мне удалось заставить моргать светодиоди, подключеные прям к  ком порту.
Записан
Ubuntu_linux
Гость
« Ответ #5 : Февраль 14, 2011, 00:01 »

Так, там используются два API  винди для преобразования  стандартов I2C -> RS232. А мне надо кросплатформенний вариант.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Февраль 14, 2011, 13:20 »

Изучи код, он не сложный.
Весь обмен по 1Wire осуществляется так:
Сигнал "Reset", затем побитная передача команды в устройство, затем побитный ответ устройства.

идея преобразования там простая:
Один бит информации по 1Wire передаётся одним байтом UARTа при определённой скорости. Выставив только один бит в единичку по UARTу, сигнал становится эквивалентен одному биту 1Wire. Это собственно замысел фирмы Даллас (обеспечить простую аппаратную поддержку их интерфейса.

Сигнал "Reset" очень длинный по сравнению с обычным битом 1Wire, для этого этот сигнал передают при меньшей скорости UARTа, чем все оставшиеся биты.
Записан

Юра.
Ubuntu_linux
Гость
« Ответ #7 : Февраль 14, 2011, 14:02 »

http://www.youtube.com/watch?v=HLOx1LVVhH0
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Февраль 14, 2011, 14:58 »

к чему эта ссыль?
Записан

Юра.
Ubuntu_linux
Гость
« Ответ #9 : Февраль 14, 2011, 16:16 »

моя робота с ком портом.
Записан
Ubuntu_linux
Гость
« Ответ #10 : Февраль 15, 2011, 21:41 »

Изучи код, он не сложный.
Весь обмен по 1Wire осуществляется так:
Сигнал "Reset", затем побитная передача команды в устройство, затем побитный ответ устройства.

идея преобразования там простая:
Один бит информации по 1Wire передаётся одним байтом UARTа при определённой скорости. Выставив только один бит в единичку по UARTу, сигнал становится эквивалентен одному биту 1Wire. Это собственно замысел фирмы Даллас (обеспечить простую аппаратную поддержку их интерфейса.

Сигнал "Reset" очень длинный по сравнению с обычным битом 1Wire, для этого этот сигнал передают при меньшей скорости UARTа, чем все оставшиеся биты.
Спасибо, чуток прояснилась ситуация. Но все равно не до конца понятно..... там исходники на делфи  Грустный
Записан
Ubuntu_linux
Гость
« Ответ #11 : Февраль 17, 2011, 00:29 »

Почитал, тут даташитов, посмотрел как делают на МК, и сделал вывод, что надо реализовать следующие  основные функции:

аналогичные таким:
unsigned char w1_init(void);
unsigned char w1_read(void);
unsigned char w1_write(unsigned char data);
unsigned char w1_search(unsigned char cmd,void *p);

DS18B20 [rus] http://invent-systems.narod.ru/DS18B20.htm

Вот нащупал алгоритм поиска всех устройств на шине. http://www.maxim-ic.com/app-notes/index.mvp/id/187
UART to 1-Wire concept http://pdfserv.maxim-ic.com/en/an/AN74.pdf


Цитировать
UART attachments
There are two ways to create 1-Wire communication through a UART. The traditional way uses the timing capabilities of the UART
directly, but has to invest one character to generate one time slot or the reset-/presence-detect sequence. This concept is
described in application note 214, "Using a UART to Implement a 1-Wire Bus Master." Although efficient under operating systems
such as DOS, modern operating systems make the access to UART registers quite inefficient. For this reason, this type of UART
attachment is no longer popular for 1-Wire applications.
The new UART attachment uses a special protocol converter chip, the DS2480B, to generate 1-Wire communication. This device
increases the efficiency (one character for 8 time slots) and allows 1-Wire overdrive speed. This type of interface is discussed in
category 4, Serial Interface Protocol Conversions, of application note 4206 (see above). If properly configured (see application note
4104, "Understanding and Configuring the 1-Wire Timing of the DS2480B"), the DS2480B can drive more than 30 slaves in
standard speed and at least nine in overdrive speed. The DS2480B is the only integrated 1-Wire master that can program EPROM
devices.

serial port to 1-Wire http://asan.gaw.ru/pdf/Dallas_Sem/1-Wire/DS2480B.pdf

Только не понятно, как бить если на шине несколько девайсов. Может кто-то  подсказать?
« Последнее редактирование: Февраль 17, 2011, 01:39 от Ubuntu_linux » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #12 : Февраль 17, 2011, 09:46 »

>>Только не понятно, как бить если на шине несколько девайсов. Может кто-то  подсказать?
Очень просто.
идея 1Wire - есть резистор подтяжки к питанию. нам остаётся только коротить линию связи на землю, тем самым формируя сигнал. Другими словами замыкание линии на землю - не криминал.

В каждом устройстве есть ID, его считывают в первой фазе обмена. Если устройств несколько, то отвечать они начнут хором. тогда мастер шины (например, компьютер) услышит только то устройство у которого больше нулей (в двоичном коде). В протоколе обмена 1Wire предусмотрена команда "Устройство №*** помолчи".

итак мастер считывает ID (услышит только тот, который больше нулей содержит), затем говорит этому устройству "помолчи" и опять запрашивает ID, первое молчит, остальные отвечают. Опять услышит только тот ID, который больше нулей содержит (из числа оставшихся). Затем ему говорит "помолчи" и т.д. пока на запрос ID никто не ответит.

Теперь список устройств в сети есть и можно к каждому индивидуально обращаться.
Записан

Юра.
Ubuntu_linux
Гость
« Ответ #13 : Февраль 17, 2011, 11:57 »

О, точно. Улыбающийся

Я так понял, что надо,при обмене инфой, послать адрес девайса, а потом команду "дай температуру" ?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #14 : Февраль 17, 2011, 14:57 »

>>а потом команду "дай температуру" ?
точно не помню. Но обычно в устройствах 1Wire используют термины - "Читать регистр/память" по такому-то адресу.
А в документации по конкретному устройству расписано по каким закромам разложены данные и в каком формате.
Записан

Юра.
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.