DALI Slave no responde a una dirección corta

1

Estoy creando DALI Master personalizado desde cero. El problema es que, no importa lo que haga, ninguno de los dispositivos responde a un direccionamiento corto.

Empecemos por el principio.

  • Después de conectar un solo dispositivo al bus DALI, funciona como se espera para todos los comandos si se usa el direccionamiento BROADCAST (primer byte igual a 0xFF). La transmisión es confiable en ambos sentidos, incluidos los comandos de "arco directo", "apagado" y "estado de consulta". Como era de esperar, el dispositivo responde con el dec 64 para "estado de consulta", lo que significa que no se establece una dirección corta.
  • En el siguiente paso intenté realizar una secuencia de búsqueda binaria para asignar una dirección corta al dispositivo:
    • Se envía el comando de inicialización (x2) - 0b10100101 0b00000000
    • Se envían comandos aleatorios (x2) - 0b10100111 0b00000000
    • Se realiza una búsqueda binaria, el dispositivo se detecta como se esperaba.
    • Se envía la dirección corta del programa (x1) 0b10110111 0b00000001 (para establecer la dirección corta 0)
    • Verificar que la dirección corta devuelve 'SÍ', la dirección corta de la consulta devuelve 0b00000001. Funciona como el encanto.
    • Se envía el comando de finalización (x1) - 0b10100001 0b00000000
  • Después de intentar ejecutar cualquier comando con una dirección corta (por ejemplo, consultar el estado) utilizando 0b00000001, el dispositivo 0b10010000 no responde.
  • Lo que es aún más interesante, si se usa la transmisión nuevamente, el dispositivo responde al estado de "consulta" con el estado 0, lo que significa que la dirección corta está establecida ...
  • Lo que es más interesante de nuevo, enviar este comando a todas las direcciones cortas no responde a ninguna de ellas.

Ya probé 2 esclavos DALI diferentes de diferentes fabricantes, ambos con exactamente el mismo resultado.

    
pregunta peku33

1 respuesta

0

Al final encontré una solución yo mismo.

Se produjo un error en el procedimiento de generación de bits de inicio.

// 0 ... 0 bits - 0 ... 1 menchester bits - start bits
if(MenchesterBitIndex <= 2)
    return true != MenchesterInverted;

El <= en lugar de < hizo que se generaran 3 bits como bits de inicio. Para todos los comandos que comienzan con el bit 1 , esto no hizo ninguna diferencia, por lo que toda la secuencia de direccionamiento estuvo bien. Para el direccionamiento corto normal, el primer bit fue 0 , lo que generó un código Menchester no válido.

    
respondido por el peku33

Lea otras preguntas en las etiquetas