2021年9月9日 星期四

RDM DISCOVERY_COMMAND use Recursive Method

void DiscoveryAll( void ) {     /// unmute all devices : RDM_UnMute()     /// implement DISCOVERY_COMMAND:DISC_UNMUTE    RDM_UnMute( 0xFFFFFFFFFFFF ); 

    /// discovery full range      Discovery( 0, 0xFFFFFFFFFFFE );           }

void Discovery( long long low, long long high ) {     unsigned char res;

    while(1)     {         /// try to discover devices : RDM_Discovery()         /// implement DISCOVERY_COMMAND:DISC_UNIQUE_BRANCH        res = RDM_Discovery( low, high ); 

        if( res == TARGET_IDENTIFIED )    /// target identified                {             /// mute identified target : RDM_Mute()             /// implement DISCOVERY_COMMAND:DISC_MUTE            RDM_Mute(target);                continue;    /// repeat         } else if( res == DETECT_COLLISIONS )    /// detect collisions        {            Discovery( low, (low+high)/2 );    /// discovery low bound            Discovery( (low+high)/2+1, high );    /// discovery high bound        }

        return;    /// finish     } }

2020年3月10日 星期二

Raspberry Pi 3 Static IP, WIFI and Ethernet


sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="XXX"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
psk="XXXXX"
}

sudo nano /etc/network/interfaces
iface eth0 inet manual 
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

sudo nano /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.1.111/24
static routers=192.168.1.1
static domain_name+servers=8.8.8.8 
interface wlan0
static ip_address=192.168.1.222
static routers=192.168.1.1
static domain_name_servers=8.8.8.8

2020年2月17日 星期一

DMX512 protocol

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++;
            }
        }
    }
}

2019年7月18日 星期四

Bluepy Scanner disconnects exist connections

解決 blueby 每次 scan 就會中斷先前連線的問題

困擾了很久
試過各種寫法 thread / lock / wait / pause / sleep 都無效

結果很簡單,只要 scan 時增加 passive=True 就好了

            scanner = Scanner().withDelegate(ScanDelegate())
            devices = scanner.scan(1.0, passive=True)

2019年7月16日 星期二

Raspberry pi 同時使用 藍牙及 UART

sudo raspi-config
Interface > Serial > No

sudo nano /boot/config.txt
新增底下三行
core_freq=250
dtoverlay=pi3-miniuart-bt
enable_uart=1

注意此時 uart 是使用系統時脈產生 baud rate,不能太快

2019年7月15日 星期一

RPI Hash-sum mismatch on apt-get

apt-get update 出現問題

嚐試使用低下方式解決…

sudo rm /var/lib/apt/lists/* -vf

sudo apt-get update

2019年7月9日 星期二

NXP S9KEAZN64 Disable NMI


陷阱題:

KE 系列 MCU,PTB4 腳在 reset 後預設會使用 NMI 功能
導致無法當一般 GPIO 使用
因此要 Disable 掉
不然會 d 到天荒地老

在 system_SKEAZN642.c 中 void SystemInit (void) 函式 增加一行…
SIM->SOPT &= ~SIM_SOPT_NMIE_MASK;                //禁用NMI

VirtualBox 空間減肥

sdelete64 -z c: VBoxManage  modifymedium  disk  "/Users/fellow/VirtualBox VMs/Win10/Win10.vdi"  --compact *.vdi 路徑可以在 VirtualBox 儲...