Найти - Пользователи
Полная версия: Python и DMX
Начало » Python для новичков » Python и DMX
1
Paranoia_Agent
Здравствуйте.
Вопрос такой: как с помощью питона передавать сигналы по протоколу 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 Старт Значение Стоп Старт Значение Стоп
, где “…” - любое количество единичек
py.user.next
Paranoia_Agent
но как передать импульс Break, который должен длиться минимум 88 мкс?

help(serial.Serial.sendBreak)
Paranoia_Agent
Что-то все равно не работает, ошибок нет, но лампочка не реагирует
Код:

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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB