DMX protocol…
# 1:break + 1:start + 512:channel
python:
import serial
class DMX512:
def __init__(self, port):
self.serial = serial.Serial(
port=port,
baudrate=250000,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_TWO,
timeout=0
)
self.data=[0]*513 # 513 bytes = 1:start + 512:channel
def setChannel(self, chan, intensity):
self.data[chan] = intensity
def setAll(self,col):
for i in range(1, 513):
self.data[i] = col
def update(self):
# break use or serial.send_break or serial.break_condition
self.serial.send_break(0.0001) # 100us but not precise on different OSs
# 513 bytes = 1:start + 512:channel
self.serial.write(bytes(self.data))
dmx = DMX512( 'COM3' )
dmx.setAll(255)
dmx.update()
stm8s:
====BREAK====:
UART3_Init(
(u32)45500,
UART3_WORDLENGTH_9D,
UART3_STOPBITS_1,
UART3_PARITY_NO,
UART3_MODE_TXRX_ENABLE
);
UART3_SendData9( 0x0100 | 0x00 );
====TX/RX====:
UART3_Init(
(u32)250000,
UART3_WORDLENGTH_9D,
UART3_STOPBITS_1,
UART3_PARITY_NO,
UART3_MODE_TXRX_ENABLE
);
UART3_SendData9( 0x0100 | data ); /// 513 BYTES
====rx====:
u8 dmx_buffer[513];
u16 dmx_buffer_idx;
BOOL DMX_FLAG = FALSE;
BOOL SC_FLAG = FALSE;
void UART3_RX_IRQHandler( void )
{
BOOL BREAK_FLAG = FALSE;
u8 rx = 0;
/// DMX512 = 1:break + 1:start + 512:data
if(UART3_GetITStatus(UART3_IT_RXNE )!= RESET)
{
BREAK_FLAG = UART3_ReceiveData9()>>8;
rx = UART3_ReceiveData8();
if(BREAK_FLAG == FALSE) /// 1:break
{
if(rx == 0x00)
{
SC_FLAG = TRUE;
return ;
}
}
if((BREAK_FLAG == TRUE)&&(SC_FLAG == TRUE)) /// 1:start
{
SC_FLAG = FALSE;
if(rx == 0x00)
{
DMX_FLAG = TRUE;
dmx_buffer_idx = 1; /// fill buff start from idx=1
return;
}
}
if((BREAK_FLAG == TRUE)&&(DMX_FLAG == TRUE)) /// 512:data
{
if( dmx_buffer_idx < sizeof(dmx_buffer) )
{
dmx_buffer[dmx_buffer_idx] = rx;
dmx_buffer_idx++;
}
}
}
}
訂閱:
張貼留言 (Atom)
更高效處理 micro second 的方式
更高效處理 micro second 的方式… 以 STM32 為例… __IO unsigned long sys_tick = 0; void SysTick_Handler(void) { HAL_IncTick(); sys_tick += (SysTi...
-
rails blog -d mysql 建立一個名為 blog 的網站app,使用 mysql cd blog 進去 gen 好的網站 config/database.yml 編輯資料庫設定 rake db:create 自動建立資料庫 ruby script/generate ...
-
https://github.com/ljean/modbus-tk/ install pip… sudo apt-get install python-pip install... download modbus_tk-x.x.x.tar.gz tar zxvf...
-
DMX protocol… # 1:break + 1:start + 512:channel python: import serial class DMX512: def __init__(self, port): self.seria...
沒有留言:
張貼留言