![]() |
|
![]() |
#1 | |
Senior Member
|
![]()
Набор функций для работы по протоколу 1-Wire.
Зависимости: coreutils-sleep. Архив содержит shell скрипт, который позволяет обмениваться данными с 1-Wire устройствами при помощи uart. Описание методики такой работы можно найти по ссылке [1]. Настройка /dev/ttyATH0: Цитата:
Код:
Reset() { # Сброс параметров. stty -F $tty 4:0:18b2:0:0:0:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 # Настройка. stty -F $tty raw 9600 cs8 # A single slave device running at minimum internal timing will change the response to 0xE0. printf "\xF0" > $tty echo "( => ) 0xF0" dd if=$tty of=ans.dat count=1 2> /dev/null echo -e "( <= ) `hexdump -ve '/1 "0x%02X"' ans.dat`" } Код:
WriteByte() { # Настройка. stty -F $tty raw 115200 cs8 n=$1 s="" for i in `seq 8`; do b="\xFF" if [[ $(( $n & 1 )) = 0 ]] ; then b="\x00" ; fi s=$s$b n=$(( $n / 2 )) done printf $s > $tty # Очищаем приёмный буфер. ( dd if=$tty of=ans.dat count=8 2> /dev/null ) & /usr/bin/sleep 10e-3; kill $! } Код:
ReadByte() { # Настройка. stty -F $tty raw 115200 cs8 r=0 s="" for i in `seq 0 7`; do printf "\xFF" > $tty dd if=$tty of=ans.dat count=1 2> /dev/null n=$(( 2 ** $i )) b="0" if [[ `hexdump -ve '/1 "%02X"' ans.dat` = FF ]]; then r=$(( $r + $n )) b="1" fi s=$b$s done echo "0b$s ($r)" return $r } Литература: 1. Using a UART to Implement a 1-Wire Bus Master (pdf).
__________________
Россия навсегда! Последний раз редактировалось uni; 14.06.2014 в 04:54. |
|
![]() |
![]() |
![]() |
#2 |
Senior Member
|
![]()
Скрипт проверялся в работе со встроенным портом /dev/ttyATH0 (с отключённым выводом).
Хотел попробовать на usb-com переходнике TU-S9 (PL2303) со схемой ниже. Питание есть, а вот ответа нет, хотя с обычным COM портом эта схема работает, но с программой под Windows.
__________________
Россия навсегда! Последний раз редактировалось uni; 14.06.2014 в 02:55. |
![]() |
![]() |
![]() |
#3 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Данная схема для UART не подойдет
А если попробовать замкнуть RX с TX и питание взять с роутера? |
![]() |
![]() |
![]() |
#4 |
Senior Member
|
![]()
Эта схема для уровней в RS-232. Для uart'а я использовал один резистор всего. У меня где-то был набор вариантов схем для uart'а, но найти не могу. По памяти один вспомнил: GND-GND, VCC-VCC, TX-1-Wire и сигнал с TX подаём на RX через резистор 2к7. Я использовал первый попавшийся резистор 2к2.
__________________
Россия навсегда! |
![]() |
![]() |
![]() |
#5 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
|
![]()
Для встроенного uart'а заработал конечно. Эту схему я на avr использовал, чтобы другим 1-Wire устройством управлять (цифровым резистором). В первом посте я привёл отклик от DS1821, который был подключён к /dev/ttyATH0.
А вот почему через USB-RS232 адаптер + схема не работает это надо с осциллографом выяснять. Хотел было начать выяснять, да случайно загнал оба своих подопытных DS1821 в режим термостата. Их сейчас не просто обратно вернуть. Других деталек под рукой сейчас нет. Если бы можно было скриптами работать, то никакого digitemp уже не нужно было бы.
__________________
Россия навсегда! Последний раз редактировалось uni; 14.06.2014 в 13:17. |
![]() |
![]() |
![]() |
#7 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Модуль уже можно выложить в папку тест?
|
![]() |
![]() |
![]() |
#8 |
Senior Member
|
![]()
Да, можно. Он в принципе достаточно самостоятельный. Проблему с использованием /ttyUSBx временно отложил. Для этого нужно целый лабораторный стенд собирать. У меня после экспериментов с /ttyATH0 почему-то глючить роутер стал. Слетели настройки сети. Очень странно. В общем, когда зацикливаю передачу байта в порт при помощи простого цикла в shell-скрипте, то начинаются какие-то странности, а иначе мне никак не проверить осциллографом качество посылки (схемы).
Хотелось бы, чтобы кто-нибудь попробовал модуль на переходнике usb-uart по описанной выше схеме. GND-GND, VCC-VCC, TX-1-Wire и сигнал с TX подаём на RX через резистор 2к7. Я использовал первый попавшийся резистор 2к2. C usb-rs232 (usb-com) я постараюсь позже разобраться в чём там может быть дело. Но паять с ним всё равно придётся. Если не схему на транзисторах, то какой-то преобразователь уровней всё равно нужен. Может быть в нём и дело. Есть ещё вариант использовать usb-uart переходники, собранные на avr и работающие на usb 1.1. Правда их нужно подключать только через дополнительный usb-hub. Тогда появляется порт /dev/ttyACM0. Там буквально 7 деталек, включая usb-разъём. Можно на коленке собрать, но программатор нужен, чтобы прошивку залить.
__________________
Россия навсегда! Последний раз редактировалось uni; 16.06.2014 в 05:43. |
![]() |
![]() |
![]() |
#9 | ||
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#10 |
Senior Member
|
![]()
Спасибо. Я забыл включить файл func.txt со скриптом.
Код:
oneWire.OnFailure = function( task, error ) { document.getElementById( 'console' ).value += 'Ошибка: ' + error + '\n'; } oneWire.OnSuccess = function( task ) { var bytes = task.data; var s = ''; for ( var b in bytes ) s += '0x' + bytes[b].toString(16).toUpperCase() + ' '; document.getElementById( 'console' ).value += '[' + task.name.toUpperCase() + '] ' + s + '\n'; } oneWire.Serial = { Name: '/dev/ttyATH0', Timeout: 100 }; oneWire.Reset() oneWire.Write( [0xAA] ); oneWire.Read(1); Если к порту ничего не подключено, то лог консоли будет такой: Код:
[RESET] [WRITE] 0xAA [READ] 0x0 Код:
2014.06.16 19:53:08 [INFO:5784] ( => ) 0xF0 2014.06.16 19:53:08 [INFO:5784] ( <= ) 2014.06.16 19:53:09 [INFO:5829] ( => ) 170 2014.06.16 19:53:10 [INFO:5885] ( <= ) 0
__________________
Россия навсегда! Последний раз редактировалось uni; 16.06.2014 в 19:57. |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|