Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 7, 2014 00:17:08

Paranoia_Agent
Зарегистрирован: 2014-06-25
Сообщения: 75
Репутация: +  5  -
Профиль   Отправить e-mail  

Python и DMX

Здравствуйте.
Вопрос такой: как с помощью питона передавать сигналы по протоколу DMX-512?
Можно написать просто:

import serial
ser=serial.Serial('/dev/ttyUSB0',baudrate=250000)

и передавать каналы:

byte=127
ser.write(chr(254)+chr(byte))

но как передать импульс Break, который должен длиться минимум 88 мкс?

PS: Краткое описание протокола:
- при отсутствии передачи в линии стоит “1”
- скорость передачи 250 кбит/сек (4 мкс на бит)
- сначала передается Break, длительностью минимум 88 мкс (11 бит)
- далее идет положительный импульс MaB не менее 8 мкс (2 бита)
- затем по кругу для каждого канала (512 раз):
- идет стартовый бит (“0”)
- байт данных (8 бит)
- стоповые биты: две “1” (2 бита)

Пример:
00000000000 11 … 0 10101010 11 … 0 01010101 11 …
Break MaB Старт Значение Стоп Старт Значение Стоп
, где “…” - любое количество единичек

Офлайн

#2 Сен. 7, 2014 01:34:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Python и DMX

Paranoia_Agent
но как передать импульс Break, который должен длиться минимум 88 мкс?

help(serial.Serial.sendBreak)



Офлайн

#3 Сен. 7, 2014 16:21:56

Paranoia_Agent
Зарегистрирован: 2014-06-25
Сообщения: 75
Репутация: +  5  -
Профиль   Отправить e-mail  

Python и DMX

Что-то все равно не работает, ошибок нет, но лампочка не реагирует
Код:

import serial
def DMXwrite(data):
    ser.sendBreak(0.0001)
    pack=''
    for x in data:
        pack=pack+chr(254)+chr(x)
    ser.write(pack)
ser=serial.Serial('/dev/ttyUSB0',baudrate=250000)
LED=[0b11111111,0b11111111,0b11111111,0b11111111]
DMXwrite(LED)

Кто-нибудь знает как можно передавать значения по DMX?

PS: что-то я ступил, есть же стоповые биты, но все равно не работает:

import serial
import time
def DMXwrite(data):
    pack=''
    for x in data:
        pack=pack+chr(x)
    ser.sendBreak(0.0001)
    time.sleep(0.00001)
    ser.write(pack)
    return(data)
ser=serial.Serial('/dev/ttyUSB0',baudrate=250000,bytesize=8,parity='N',stopbits=2)
LED=[0b11111111,0b11111111,0b11111111,0b11111111]
DMXwrite(LED)

Отредактировано Paranoia_Agent (Сен. 7, 2014 16:54:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version