Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > CyberWrt

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.06.2014, 11:23   #1
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию CyberWrt модуль "1-Wire"

Набор функций для работы по протоколу 1-Wire.

Зависимости: coreutils-sleep.

Архив содержит shell скрипт, который позволяет обмениваться данными с 1-Wire устройствами при помощи uart. Описание методики такой работы можно найти по ссылке [1].

Настройка /dev/ttyATH0:
Цитата:
Нашел универсальное решение (это касается последних ревизий, начиная с r36992).

1. Пишем в консоли или забиваем в rc.local одну команду:
Цитата:
echo 0 > /proc/sys/kernel/printk
(действие будет моментальное)

Если мы хотим, чтобы "транслирование лога в консоль" отключилась чуть раньше, то вместо вышеописанного, можно воспользоватся файлом /etc/sysctl.conf, добавив в него следующую строку :
Цитата:
kernel.printk = 0 4 1 7
(вступит в действие после перезагрузки)

Отключение затрагивает только консоль взаимодействующую с физическим портом (первое значение из 4х цифр), т.е. dmsg будет работать как положено. Подробнее...

2. Теперь необходимо отключить запрос консоли через UART (обычно, когда нажимаем Enter в UART консоли - открывается консоль роутера), чтобы отключить эту функцию, необходимо в /etc/inittab, закомментировать последнюю строку :
Цитата:
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
#::askconsole:/bin/ash --login
(вступит в действие после перезагрузки)

Удачи!
Функция Reset
Код:
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
Код:
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
Код:
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
}
Внимание. Будьте аккуратны с устройствами, которые могут переключать интерфейс. Например, DS1821, который может переходить в режим термостата и обратно. Вы можете ввести его в режим термостата, а вот обратное сделать не просто. Чтобы случайно не использовать такие возможности не экспериментируйте с произвольными посылками, их вариантами, а следуйте документации на прибор.

Литература:

1. Using a UART to Implement a 1-Wire Bus Master (pdf).
Миниатюры
Нажмите на изображение для увеличения
Название: 2014-06-13 15-13-04 1-Wire – Yandex.png
Просмотров: 354
Размер:	31.9 Кб
ID:	1766  
Вложения
Тип файла: zip onewire-0.1.5277.25411.zip (27.6 Кб, 195 просмотров)
__________________
Россия навсегда!

Последний раз редактировалось uni; 14.06.2014 в 04:54.
uni вне форума   Ответить с цитированием
Старый 14.06.2014, 02:50   #2
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: CyberWrt модуль "1-Wire"

Скрипт проверялся в работе со встроенным портом /dev/ttyATH0 (с отключённым выводом).

Хотел попробовать на usb-com переходнике TU-S9 (PL2303) со схемой ниже. Питание есть, а вот ответа нет, хотя с обычным COM портом эта схема работает, но с программой под Windows.
Изображения
 
__________________
Россия навсегда!

Последний раз редактировалось uni; 14.06.2014 в 02:55.
uni вне форума   Ответить с цитированием
Старый 14.06.2014, 12:37   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: CyberWrt модуль "1-Wire"

Данная схема для UART не подойдет
А если попробовать замкнуть RX с TX и питание взять с роутера?
Admin вне форума   Ответить с цитированием
Старый 14.06.2014, 12:53   #4
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: CyberWrt модуль "1-Wire"

Эта схема для уровней в RS-232. Для uart'а я использовал один резистор всего. У меня где-то был набор вариантов схем для uart'а, но найти не могу. По памяти один вспомнил: GND-GND, VCC-VCC, TX-1-Wire и сигнал с TX подаём на RX через резистор 2к7. Я использовал первый попавшийся резистор 2к2.
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 14.06.2014, 13:08   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: CyberWrt модуль "1-Wire"

Цитата:
GND-GND, VCC-VCC, TX-1-Wire и сигнал с TX подаём на RX через резистор 2к7. Я использовал первый попавшийся резистор 2к2.
Не заработал?
Admin вне форума   Ответить с цитированием
Старый 14.06.2014, 13:15   #6
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: CyberWrt модуль "1-Wire"

Для встроенного uart'а заработал конечно. Эту схему я на avr использовал, чтобы другим 1-Wire устройством управлять (цифровым резистором). В первом посте я привёл отклик от DS1821, который был подключён к /dev/ttyATH0.

А вот почему через USB-RS232 адаптер + схема не работает это надо с осциллографом выяснять. Хотел было начать выяснять, да случайно загнал оба своих подопытных DS1821 в режим термостата. Их сейчас не просто обратно вернуть. Других деталек под рукой сейчас нет.

Если бы можно было скриптами работать, то никакого digitemp уже не нужно было бы.
__________________
Россия навсегда!

Последний раз редактировалось uni; 14.06.2014 в 13:17.
uni вне форума   Ответить с цитированием
Старый 16.06.2014, 00:43   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: CyberWrt модуль "1-Wire"

Модуль уже можно выложить в папку тест?
Admin вне форума   Ответить с цитированием
Старый 16.06.2014, 05:38   #8
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: CyberWrt модуль "1-Wire"

Да, можно. Он в принципе достаточно самостоятельный. Проблему с использованием /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.
uni вне форума   Ответить с цитированием
Старый 16.06.2014, 19:12   #9
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: CyberWrt модуль "1-Wire"

Цитата:
Да, можно. Он в принципе достаточно самостоятельный.
Выложил
Цитата:
Хотелось бы, чтобы кто-нибудь попробовал модуль на переходнике usb-uart по описанной выше схеме.
Завтра постараюсь взять для тестов USB-UART
Admin вне форума   Ответить с цитированием
Старый 16.06.2014, 19:48   #10
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: CyberWrt модуль "1-Wire"

Спасибо. Я забыл включить файл 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);
Нужно вставить скрипт в текстовое поле и нажать "Сохранить". Файл func.txt будет содержать закодированную версию текста скрипта.

Если к порту ничего не подключено, то лог консоли будет такой:
Код:
[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.
uni вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 12:46. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика