• Positional/physical addressing

    From Don Y@21:1/5 to All on Mon Jun 23 16:04:49 2025
    I have a large group (hundreds) of switches and displays.
    Their state needs to be determined/updated rather slowly
    (a few hertz). Each has local smarts so it can retain
    some state information and processing capability.

    Their physical arrangement varies from one installation to
    the next. So, there is no economy of scale available by
    "settling" on a specific configuration or physical arrangement.

    I would like to be able to address them (the entire *set*) -- and
    pass data to/fro -- with a small, fixed number of conductors /having
    built them all identically/. The amount of data exchanged being
    traded off vs. update rate for a given interface bandwidth.

    The obvious "one wire" scheme would have a gazinta and cumzouta
    for each device so the device could modify a serial bit stream
    to account for its "position" in that stream.

    I can pipeline processing between devices so the overall access
    rate remains high (though latency obviously suffers).

    But, a single device failure renders all downwind devices
    inaccessible (or, possibly ALL devices, depending on implementation)

    I'm looking at a two wire solution that piggybacks the data
    stream on power and ground (those "two wires"). But, it
    adds complexity to the devices (I want to keep them REALLY
    small and dirt cheap)

    Any existing schemes that allow this without the failure mode cited?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Martin Rid@21:1/5 to Don Y on Tue Jun 24 12:18:32 2025
    Don Y <blockedofcourse@foo.invalid> Wrote in message:r
    I have a large group (hundreds) of switches and displays.Their state needs to be determined/updated rather slowly(a few hertz). Each has local smarts so it can retainsome state information and processing capability.Their physical arrangement varies
    from one installation tothe next. So, there is no economy of scale available by"settling" on a specific configuration or physical arrangement.I would like to be able to address them (the entire *set*) -- andpass data to/fro -- with a small, fixed number
    of conductors /havingbuilt them all identically/. The amount of data exchanged beingtraded off vs. update rate for a given interface bandwidth.The obvious "one wire" scheme would have a gazinta and cumzoutafor each device so the device could modify a
    serial bit streamto account for its "position" in that stream.I can pipeline processing between devices so the overall accessrate remains high (though latency obviously suffers).But, a single device failure renders all downwind devicesinaccessible (or,
    possibly ALL devices, depending on implementation)I'm looking at a two wire solution that piggybacks the datastream on power and ground (those "two wires"). But, itadds complexity to the devices (I want to keep them REALLYsmall and dirt cheap)Any
    existing schemes that allow this without the failure mode cited?

    CAN network?

    --


    ----Android NewsGroup Reader---- https://piaohong.s3-us-west-2.amazonaws.com/usenet/index.html

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Martin Rid on Tue Jun 24 09:49:26 2025
    On 6/24/2025 9:18 AM, Martin Rid wrote:
    CAN network?

    Each CAN node either needs a unique address to which messages can be
    directed; *or*, to KNOW to listen for particular BROADCAST messages.

    So, you either send a message to node 5 to do something
    OR, you send a message about that something and expect
    that node to know that *it* should process that message.

    If all of the nodes are *identical* (hardware and software),
    there is nothing to distinguish one device from any other.

    If you require an "address"/ID to be programmed into the device
    to "make it distinguishable from its neighbors", then you've
    added a labor step and a configuration management activity
    (how do you know that you don't have two 5's? how do you know
    that the device in your left hand is 5 and your right hand is 23?)

    Ideally, you just want the user to reach into a bag of identical
    parts and plug them in without concern for which goes where -- and
    have the system sort all of that out FOR the user.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Don Y on Tue Jun 24 10:05:06 2025
    On 6/24/2025 9:49 AM, Don Y wrote:
    On 6/24/2025 9:18 AM, Martin Rid wrote:
    CAN network?

    Each CAN node either needs a unique address to which messages can be directed;  *or*, to KNOW to listen for particular BROADCAST messages.

    So, you either send a message to node 5 to do something
    OR, you send a message about that something and expect
    that node to know that *it* should process that message.

    If all of the nodes are *identical* (hardware and software),
    there is nothing to distinguish one device from any other.

    By way of example, in the 70's, we would do "poor man's networking"
    by daisy-chaining IDENTICAL devices with serial ports:

    HOST---->[]----->[]---->[]----->[]

    (each set of brackets represents a device with its serial input
    on the left side and output on the right)

    If I pass a message (from the host) of the form "1xxxxxx", the
    first device receives the message, notices that it begins with
    a '1' and assumes it is meant for it; the message is absorbed
    by that device.

    If the message is of the form "2xxxxxxx", the first device receives
    the message, notes that it does NOT begin with a '1' and, therefore,
    is not intended for it's use. It "decrements" the first character
    ('2') and passes along the message payload ("xxxxxx") with this
    new "address" -- "1xxxxxxxx".

    The SECOND device sees this message, notes that the first character
    is a '1' and assumes it is meant for it; the message is absorbed by
    this SECOND device.

    [There are other equivalent schemes]

    The point is, ALL of the devices are identical, run identical
    software, etc. Their physical position in the chain determines
    their "address".

    Note that the HOST can begin sending the next message immediately;
    devices have stored (temporary) copies of earlier messages so the
    communication link need not be left idle while earlier messages
    percolate down the chain.

    The problem with this approach is that any device failure renders
    inoperative everything downstream!

    [This approach also introduces latency proportional to the
    "distance" (number of hops) from the HOST. But, there are
    ways around that.]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeroen Belleman@21:1/5 to Don Y on Tue Jun 24 20:18:36 2025
    On 6/24/25 19:05, Don Y wrote:
    On 6/24/2025 9:49 AM, Don Y wrote:
    On 6/24/2025 9:18 AM, Martin Rid wrote:
    CAN network?

    Each CAN node either needs a unique address to which messages can be
    directed;  *or*, to KNOW to listen for particular BROADCAST messages.

    So, you either send a message to node 5 to do something
    OR, you send a message about that something and expect
    that node to know that *it* should process that message.

    If all of the nodes are *identical* (hardware and software),
    there is nothing to distinguish one device from any other.

    By way of example, in the 70's, we would do "poor man's networking"
    by daisy-chaining IDENTICAL devices with serial ports:

    HOST---->[]----->[]---->[]----->[]

    (each set of brackets represents a device with its serial input
    on the left side and output on the right)

    If I pass a message (from the host) of the form "1xxxxxx", the
    first device receives the message, notices that it begins with
    a '1' and assumes it is meant for it; the message is absorbed
    by that device.

    WS2812 LED chips do something like that. The first chip in the chain
    absorbs the first three bytes and passes on all that come after, and
    so on down the chain. Wait 50 us and the first chip in the chain is
    ready again to intercept its three bytes.

    It's common for driving LED strips.

    Jeroen Belleman

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Don Y on Tue Jun 24 14:36:09 2025
    On 6/24/2025 10:05 AM, Don Y wrote:
    On 6/24/2025 9:49 AM, Don Y wrote:
    On 6/24/2025 9:18 AM, Martin Rid wrote:
    CAN network?

    Each CAN node either needs a unique address to which messages can be
    directed;  *or*, to KNOW to listen for particular BROADCAST messages.

    So, you either send a message to node 5 to do something
    OR, you send a message about that something and expect
    that node to know that *it* should process that message.

    If all of the nodes are *identical* (hardware and software),
    there is nothing to distinguish one device from any other.

    By way of example, in the 70's, we would do "poor man's networking"
    by daisy-chaining IDENTICAL devices with serial ports:

    HOST---->[]----->[]---->[]----->[]

    (each set of brackets represents a device with its serial input
    on the left side and output on the right)

    The point is, ALL of the devices are identical, run identical
    software, etc.  Their physical position in the chain determines
    their "address".

    To pick nits, the communications stack needs to be identical.
    I.e., from the network's point-of-view, all devices look the
    same. But, the application layer can be completely different.

    Typically, *a* HOST is used to perform network discovery and
    manage the configuration. It can distribute any necessary
    information to the individual nodes after it has sorted out
    what's attached.

    E.g., "4Thou art number four" would effectively tell the 4th device
    that it is the "four"-th device. It could query the device type of
    4 -- along with the other nodes -- and convey this information to
    those nodes. E.g., "1Number one, be aware that number four controls
    the air pressure in the process vessel", "2Number two, be aware that
    number one controls the temperature of the inlet air", etc.

    Note, also, that the devices can return results to the HOST
    (imagine the serial out of the last device being routed back
    to the serial in of the host -- through the same cable*S* that
    carried the packets down to that last device).

    And, with such a loop in place (and the HOST participating like
    the other devices), device N can send a message to device 3
    as well as expect a reply back.

    Also, the application decides how to best utilize the bandwidth
    available. E.g., HOST can just keep sending messages to device
    #6 without ever bothering to talk with any of the other devices.

    Finally, the content of the messages can be whatever the
    application deems appropriate. E.g., I could say "6ON", "6OFF",
    "6ON", "6OFF"... Or, "6BLINK"; the devices determine how they
    will respond to specific messages (commands). So, I can trade
    bandwidth for local processing, as needed.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Liz Tuddenham on Wed Jun 25 02:14:28 2025
    On 6/25/2025 1:52 AM, Liz Tuddenham wrote:
    Don Y <blockedofcourse@foo.invalid> wrote:

    I have a large group (hundreds) of switches and displays.
    Their state needs to be determined/updated rather slowly
    (a few hertz). Each has local smarts so it can retain
    some state information and processing capability.

    Their physical arrangement varies from one installation to
    the next. So, there is no economy of scale available by
    "settling" on a specific configuration or physical arrangement.

    I would like to be able to address them (the entire *set*) -- and
    pass data to/fro -- with a small, fixed number of conductors /having
    built them all identically/. The amount of data exchanged being
    traded off vs. update rate for a given interface bandwidth.

    The obvious "one wire" scheme would have a gazinta and cumzouta
    for each device so the device could modify a serial bit stream
    to account for its "position" in that stream.

    I can pipeline processing between devices so the overall access
    rate remains high (though latency obviously suffers).

    But, a single device failure renders all downwind devices
    inaccessible (or, possibly ALL devices, depending on implementation)

    I'm looking at a two wire solution that piggybacks the data
    stream on power and ground (those "two wires"). But, it
    adds complexity to the devices (I want to keep them REALLY
    small and dirt cheap)

    Any existing schemes that allow this without the failure mode cited?

    Philips I2c ?

    Again, the devices would need unique addresses to be individually
    addressable. If you want them to be *identical*, then this
    contraindicates unique addresses.

    Imagine buying ethernet adapters where they were all truly identical.
    I.e., each had the exact same MAC address! How could you use them
    (without resorting to a star topology that assigned meaning to
    each arm of the star)?

    There have been numerous "hacks" to allow identical devices to
    coexist and remain individually addressable. But, all rely on
    making the "uniqueness" part of some external interconnect.

    E.g., a trick I use for addressing plug-in modules is to
    run, for example, two "select lines" to each "slot".
    The module will respond if it sees both lines "low"
    (for example -- or, some other CONSISTENT combination).

    I run the two select OUTPUTS (from controller) to the first
    slot. Then, invert one of them and swap it with the other
    when running it to the next slot. Then, repeat the process
    again. And again.

    This results in each slot seeing (for example, invert lsb then swap):

    Controller 1 2 3 4
    00 00 10 11 01
    01 01 00 10 11
    10 10 11 01 00
    11 11 01 00 10

    [assuming I haven't f*cked things up in my head while typing this]

    You can see that only one slot ends up with the necessary "00"
    to enable selection.

    But, this requires "logic" in the interconnect fabric. My goal
    is just to "run wires" between devices and let the devices sort
    it all out.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Liz Tuddenham@21:1/5 to Don Y on Wed Jun 25 09:52:30 2025
    Don Y <blockedofcourse@foo.invalid> wrote:

    I have a large group (hundreds) of switches and displays.
    Their state needs to be determined/updated rather slowly
    (a few hertz). Each has local smarts so it can retain
    some state information and processing capability.

    Their physical arrangement varies from one installation to
    the next. So, there is no economy of scale available by
    "settling" on a specific configuration or physical arrangement.

    I would like to be able to address them (the entire *set*) -- and
    pass data to/fro -- with a small, fixed number of conductors /having
    built them all identically/. The amount of data exchanged being
    traded off vs. update rate for a given interface bandwidth.

    The obvious "one wire" scheme would have a gazinta and cumzouta
    for each device so the device could modify a serial bit stream
    to account for its "position" in that stream.

    I can pipeline processing between devices so the overall access
    rate remains high (though latency obviously suffers).

    But, a single device failure renders all downwind devices
    inaccessible (or, possibly ALL devices, depending on implementation)

    I'm looking at a two wire solution that piggybacks the data
    stream on power and ground (those "two wires"). But, it
    adds complexity to the devices (I want to keep them REALLY
    small and dirt cheap)

    Any existing schemes that allow this without the failure mode cited?

    Philips I2c ?

    --
    ~ Liz Tuddenham ~
    (Remove the ".invalid"s and add ".co.uk" to reply)
    www.poppyrecords.co.uk

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Liz Tuddenham@21:1/5 to Don Y on Wed Jun 25 11:14:49 2025
    Don Y <blockedofcourse@foo.invalid> wrote:

    [...]
    My goal
    is just to "run wires" between devices and let the devices sort
    it all out.

    I must admit this problem is a long way outside my comfort zone, but if
    we postulate that all the devices are truly identical then the contoller
    has no way of initially setting up the system. If it sends out a
    request for a response, all the devices will respond virtually
    simultaneously and there will be no way of sorting out the resulting
    'pile-up'

    Even if the controller is clever enough to detect the nearest device on
    the line, because its response arrives first, it has no way of telling
    that device to assume a particular identity because the same identity
    command will be picked up by all the other devices too. The problem
    isn't one of which system to use, but whether an overall strategy can be developed to solve a problem that appears to be logically insoluble.

    Having said that, there is one feature that could be used to distinguish between the devices before any address allocation has taken place, they
    are all different distances from the controller.

    If the controller sends out a pulse and every device responds
    instantaneously, the first response received back can trigger a second
    pulse from the controller. The first device on the line will receive
    the second pulse after a time which corresponds to twice its distance
    from the controller and this can generate a number which the device
    stores. The controller polls through the numbers sequentially from zero
    until the first device responds, the controller now tells the first
    device to shut up and repeats the entire sequence so that the second
    device is now the first one to respond.

    This is repeated until each device along the line has a unique number
    and has been muted.. The controller sends out a command to re-activate
    all the devices and polls through the numbers again, listening for each
    device to respond individually. When a device responds it is allocated
    a proper address and the network is gradually set up in this manner.

    --
    ~ Liz Tuddenham ~
    (Remove the ".invalid"s and add ".co.uk" to reply)
    www.poppyrecords.co.uk

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Liz Tuddenham on Wed Jun 25 10:04:58 2025
    On 6/25/2025 3:14 AM, Liz Tuddenham wrote:
    Don Y <blockedofcourse@foo.invalid> wrote:

    [...]
    My goal
    is just to "run wires" between devices and let the devices sort
    it all out.

    I must admit this problem is a long way outside my comfort zone, but if
    we postulate that all the devices are truly identical then the contoller
    has no way of initially setting up the system. If it sends out a
    request for a response, all the devices will respond virtually simultaneously and there will be no way of sorting out the resulting 'pile-up'

    That assumes each device sits on a "bus" AND that there is no other
    information available /to the device/ from the interconnect wiring.

    E.g., if each device DID sit on a "bus", but a second "pin" uniquely
    available to each device/socket/slot had a serial memory connected
    ad the memory had a unique serial number within, the device could
    query the serial number and use that information to make itself
    "unique" wrt the other devices watching that same bus.

    The controller can then "poll" the identifier address space, one
    bit at a time. I.e., "Anyone out there with an address having
    the first bit being a '0', please respond"; "Anyone with a 0 followed
    by another '0'?", etc.

    Note that the discovery phase need only happen once (or, infrequently). Thereafter, the controller knows which identifiers are in use and
    what they connect with (assuming the application layers in each are
    different)

    Even if the controller is clever enough to detect the nearest device on
    the line, because its response arrives first, it has no way of telling
    that device to assume a particular identity because the same identity
    command will be picked up by all the other devices too. The problem
    isn't one of which system to use, but whether an overall strategy can be developed to solve a problem that appears to be logically insoluble.

    You have to challenge assumptions. E.g., the original solution I proposed required a two-pin connector for each device: one wired to the "previous" device "socket" and the other to the "next" device socket. The connection
    to the previous feeding the serial input of a deserializer (UART Rx channel)
    on the device; the connection to the next being fed BY the serial output
    of a serializer (UART Tx channel) on the device.

    The flaw with this is that the removal of a device renders all downstream devices inaccessible. (Likewise, the failure of a device!)

    Having said that, there is one feature that could be used to distinguish between the devices before any address allocation has taken place, they
    are all different distances from the controller.

    If the controller sends out a pulse and every device responds instantaneously, the first response received back can trigger a second
    pulse from the controller. The first device on the line will receive
    the second pulse after a time which corresponds to twice its distance
    from the controller and this can generate a number which the device
    stores. The controller polls through the numbers sequentially from zero until the first device responds, the controller now tells the first
    device to shut up and repeats the entire sequence so that the second
    device is now the first one to respond.

    This is too "high tech". You're effectively trying to build a TDR into
    each device. Recall, I want these to be dirt cheap because I use so many of them in a system.

    This is repeated until each device along the line has a unique number
    and has been muted.. The controller sends out a command to re-activate
    all the devices and polls through the numbers again, listening for each device to respond individually. When a device responds it is allocated
    a proper address and the network is gradually set up in this manner.


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ian@21:1/5 to Jeroen Belleman on Wed Jun 25 17:30:23 2025
    On 2025-06-24, Jeroen Belleman <jeroen@nospam.please> wrote:
    WS2812 LED chips do something like that. The first chip in the chain
    absorbs the first three bytes and passes on all that come after, and
    so on down the chain. Wait 50 us and the first chip in the chain is
    ready again to intercept its three bytes.

    That's not quite how they work. The whole chain is one big shift register,
    (24 bits per device), with 1's and zero's being shifted along as broad
    or narrow pulses. When the pulses stop for a while*, the 24 bits sitting
    in the "shift register" are latched into the "DAC register" and the
    colour changes.

    I think I saw that there was some variant of the WS2812 that went into
    a bypass mode on failure, to avoid breaking all that follow. Exactly what counted as failure wasn't clear.

    * An intersting / irritating bug had the firmware not waiting long enough
    (= at all) between sending updates, so although the string was buisily
    clocking data through it, nothing was happening on the lights. Getting the
    bit count wrong can produce some pretty patterns, if you like migraines.


    --
    Ian

    "Tamahome!!!" - "Miaka!!!"

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Ian on Wed Jun 25 10:43:59 2025
    On 6/25/2025 10:30 AM, Ian wrote:
    On 2025-06-24, Jeroen Belleman <jeroen@nospam.please> wrote:
    WS2812 LED chips do something like that. The first chip in the chain
    absorbs the first three bytes and passes on all that come after, and
    so on down the chain. Wait 50 us and the first chip in the chain is
    ready again to intercept its three bytes.

    That's not quite how they work. The whole chain is one big shift register, (24 bits per device), with 1's and zero's being shifted along as broad
    or narrow pulses. When the pulses stop for a while*, the 24 bits sitting
    in the "shift register" are latched into the "DAC register" and the
    colour changes.

    And, you (the controller) have to send the entire bit pattern; you can't "address" the 47th device without also having sent the data for the
    preceding 46.

    Nor can those devices talk to each other (even if they had something to
    say).

    The UART "trick" makes the fabric more capable with the biggest
    (operating) downside being non-constant latency.

    I think I saw that there was some variant of the WS2812 that went into
    a bypass mode on failure, to avoid breaking all that follow. Exactly what counted as failure wasn't clear.

    Yes. It's possible to create a bypass much like removing a device
    from a fiber optic "tap" and letting the optical switch act to bypass
    its removal.

    * An intersting / irritating bug had the firmware not waiting long enough
    (= at all) between sending updates, so although the string was buisily clocking data through it, nothing was happening on the lights. Getting the bit count wrong can produce some pretty patterns, if you like migraines.

    It is actually amusing that this even works, at all (given there are no semi-precise timing references in the technology!)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ian@21:1/5 to Don Y on Wed Jun 25 17:40:38 2025
    On 2025-06-23, Don Y <blockedofcourse@foo.invalid> wrote:
    I have a large group (hundreds) of switches and displays.
    Their state needs to be determined/updated rather slowly
    (a few hertz). Each has local smarts so it can retain
    some state information and processing capability.

    Their physical arrangement varies from one installation to
    the next. So, there is no economy of scale available by
    "settling" on a specific configuration or physical arrangement.

    I would like to be able to address them (the entire *set*) -- and
    pass data to/fro -- with a small, fixed number of conductors /having
    built them all identically/. The amount of data exchanged being
    traded off vs. update rate for a given interface bandwidth.

    The obvious "one wire" scheme would have a gazinta and cumzouta
    for each device so the device could modify a serial bit stream
    to account for its "position" in that stream.

    I can pipeline processing between devices so the overall access
    rate remains high (though latency obviously suffers).

    But, a single device failure renders all downwind devices
    inaccessible (or, possibly ALL devices, depending on implementation)

    I'm looking at a two wire solution that piggybacks the data
    stream on power and ground (those "two wires"). But, it
    adds complexity to the devices (I want to keep them REALLY
    small and dirt cheap)

    Any existing schemes that allow this without the failure mode cited?

    A thought...

    If you have a chain, you get the "downstream failure" issue.

    If you have a bus, each device nees an address.

    How about having both. Use the chain to assign addresses at power-up
    or whenever, then use the bus for real communication. If the devices
    have some NV storage, the address assignment can be a 1-off, so the
    whole chain only needs to work "once" (assuming a dead device
    just keeps quiet and doesn't kill the bus).


    ------ ----- ----- ----- -----
    | | | | | | | | |
    ctrlr |--------->| Dev |-->| Dev |-->| Dev |-->| Dev |-----> Chain
    | | | | | | | | |
    | ----- ----- ----- -----
    | ^ ^ ^ ^
    | | | | |
    | v v v v
    |<---------------------------------------------------> Bus
    |
    ------

    --
    Ian

    "Tamahome!!!" - "Miaka!!!"

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From john larkin@21:1/5 to blockedofcourse@foo.invalid on Wed Jun 25 11:25:36 2025
    On Mon, 23 Jun 2025 16:04:49 -0700, Don Y
    <blockedofcourse@foo.invalid> wrote:

    I have a large group (hundreds) of switches and displays.
    Their state needs to be determined/updated rather slowly
    (a few hertz). Each has local smarts so it can retain
    some state information and processing capability.

    Their physical arrangement varies from one installation to
    the next. So, there is no economy of scale available by
    "settling" on a specific configuration or physical arrangement.

    I would like to be able to address them (the entire *set*) -- and
    pass data to/fro -- with a small, fixed number of conductors /having
    built them all identically/. The amount of data exchanged being
    traded off vs. update rate for a given interface bandwidth.

    The obvious "one wire" scheme would have a gazinta and cumzouta
    for each device so the device could modify a serial bit stream
    to account for its "position" in that stream.

    I can pipeline processing between devices so the overall access
    rate remains high (though latency obviously suffers).

    But, a single device failure renders all downwind devices
    inaccessible (or, possibly ALL devices, depending on implementation)

    I'm looking at a two wire solution that piggybacks the data
    stream on power and ground (those "two wires"). But, it
    adds complexity to the devices (I want to keep them REALLY
    small and dirt cheap)

    Any existing schemes that allow this without the failure mode cited?

    Sounds like Ethernet might work.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Ian on Wed Jun 25 12:41:04 2025
    On 6/25/2025 10:40 AM, Ian wrote:
    On 2025-06-23, Don Y <blockedofcourse@foo.invalid> wrote:
    A thought...

    If you have a chain, you get the "downstream failure" issue.

    Yes. But (reading ahead), note that this can also manifest as a
    failure during the configuration phase.

    If you have a bus, each device nees an address.

    And, each device can "jam" the bus -- another failure mode.

    How about having both. Use the chain to assign addresses at power-up
    or whenever, then use the bus for real communication. If the devices

    I had considered this -- and a "bypass" that effectively shorted
    the "input" to the "output" thereby turning it into a bus
    as it also allowed the "failed" device to remove itself.
    E.g., design a simple switch controlled by a watchdog mechanism
    that closes the switch when the device appears to be malfunctioning,
    thereby removing it from the chain.

    Of course, you still have to ensure physical removal of the device
    effects the same change!

    have some NV storage, the address assignment can be a 1-off, so the

    I control power to the "display" so can always cycle power and reinitiate
    a discovery phase. I.e., there is no need for a NV store. "Discovery"
    can be designed to ensure there are no duplicate addresses created.

    whole chain only needs to work "once" (assuming a dead device
    just keeps quiet and doesn't kill the bus).

    The last is the assumption that has to be examined: What are
    the *likely* failures and how will they manifest?

    ------ ----- ----- ----- -----
    | | | | | | | | |
    ctrlr |--------->| Dev |-->| Dev |-->| Dev |-->| Dev |-----> Chain
    | | | | | | | | |
    | ----- ----- ----- -----
    | ^ ^ ^ ^
    | | | | |
    | v v v v
    |<---------------------------------------------------> Bus
    |
    ------

    ------ ----- ----- ----- -----
    | | | | | | | | |
    ctrlr |-------+->| Dev |-+->| Dev |-+->| Dev |-+->| Dev |--+---> Chain
    | | | | | | | | | | | | | |
    | | ----- | ----- | ----- | ----- |
    | | | | | |
    | +----/ ----+-----/ ---+-----/ ---+-----/ ----+ Bus
    |
    | Bypass "switches", one per device


    I am increasingly convinced that I need to just see if I can
    find a (dirt cheap) MCU with built in (factory) serial number
    and incrementally poll for S/Ns during network discovery.
    Having the *factory* (manufacturer) guarantee the uniqueness
    of these identifiers means I'd never have to worry about
    duplicates or assigning identifiers, etc.

    I'd still have to address likely failures that could compromise
    this shared bus as it would render the entire mechanism useless.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Dennis@21:1/5 to Don Y on Wed Jun 25 15:35:28 2025
    On 6/25/25 14:41, Don Y wrote:


    I am increasingly convinced that I need to just see if I can
    find a (dirt cheap) MCU with built in (factory) serial number
    and incrementally poll for S/Ns during network discovery.
    Having the *factory* (manufacturer) guarantee the uniqueness
    of these identifiers means I'd never have to worry about
    duplicates or assigning identifiers, etc.


    Like the one wire DS2401 digital serial number?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeroen Belleman@21:1/5 to Ian on Wed Jun 25 23:29:08 2025
    On 6/25/25 19:30, Ian wrote:
    On 2025-06-24, Jeroen Belleman <jeroen@nospam.please> wrote:
    WS2812 LED chips do something like that. The first chip in the chain
    absorbs the first three bytes and passes on all that come after, and
    so on down the chain. Wait 50 us and the first chip in the chain is
    ready again to intercept its three bytes.

    That's not quite how they work. The whole chain is one big shift register, (24 bits per device), with 1's and zero's being shifted along as broad
    or narrow pulses. When the pulses stop for a while*, the 24 bits sitting
    in the "shift register" are latched into the "DAC register" and the
    colour changes.

    Read the datasheet.

    Jeroen Belleman

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Dennis on Wed Jun 25 14:53:56 2025
    On 6/25/2025 1:35 PM, Dennis wrote:
    On 6/25/25 14:41, Don Y wrote:


    I am increasingly convinced that I need to just see if I can
    find a (dirt cheap) MCU with built in (factory) serial number
    and incrementally poll for S/Ns during network discovery.
    Having the *factory* (manufacturer) guarantee the uniqueness
    of these identifiers means I'd never have to worry about
    duplicates or assigning identifiers, etc.

    Like the one wire DS2401 digital serial number?

    Yes, but that's an additional component. These need to be *really*
    small. No larger than a ~.38 calibre shell. Ideally, similar to an
    old "data light" indicator. The size of a braille cell is probably
    the smallest that is practical (though obviously smaller size features
    can be recognized)

    Imagine how large a few hundred, individually identifiable, would be.
    Then, a tenfold increase.

    You can "zoom" a visual display to expose more detail but not a tactile/mechanical one.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Liz Tuddenham@21:1/5 to Don Y on Thu Jun 26 09:59:58 2025
    Don Y <blockedofcourse@foo.invalid> wrote:


    If the controller sends out a pulse and every device responds instantaneously, the first response received back can trigger a second pulse from the controller. The first device on the line will receive
    the second pulse after a time which corresponds to twice its distance
    from the controller and this can generate a number which the device
    stores. The controller polls through the numbers sequentially from zero until the first device responds, the controller now tells the first
    device to shut up and repeats the entire sequence so that the second
    device is now the first one to respond.

    This is too "high tech". You're effectively trying to build a TDR into
    each device. Recall, I want these to be dirt cheap because I use so many of them in a system.

    Actually the individual devices just need to store the time between two
    clear digital pulses as a number. If the devices are never closer than
    one yard apart, a 300 Mc/s clock speed will be sufficient to distinguish between them. (The twin identification pulses will be spaced by double
    the path length.)

    That programs each device with an unique address and the rest can be
    done with normal digital handshaking and read/write. It is a way of
    overcoming the 'identicality' of the devices so you don't have to
    allocate individual serial numbers to them during manufacture, which
    could reduce the cost if a lot have to be made.

    Then they can all be strung out along a two-wire bus (send and return)
    to allow individual devices to be removed or changed without a lot of
    re-wiring or bridging connectors, so installation and maintenance costs
    are reduced too..


    --
    ~ Liz Tuddenham ~
    (Remove the ".invalid"s and add ".co.uk" to reply)
    www.poppyrecords.co.uk

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Liz Tuddenham on Thu Jun 26 02:46:13 2025
    On 6/26/2025 1:59 AM, Liz Tuddenham wrote:
    This is too "high tech". You're effectively trying to build a TDR into
    each device. Recall, I want these to be dirt cheap because I use so many of >> them in a system.

    Actually the individual devices just need to store the time between two
    clear digital pulses as a number. If the devices are never closer than
    one yard apart, a 300 Mc/s clock speed will be sufficient to distinguish between them. (The twin identification pulses will be spaced by double
    the path length.)

    Sorry, this is a *display*. Even as oversized as it is (a few
    square feet), it is quite possible that devices will be immediately
    adjacent -- a fraction of an inch apart.

    That programs each device with an unique address and the rest can be
    done with normal digital handshaking and read/write. It is a way of overcoming the 'identicality' of the devices so you don't have to
    allocate individual serial numbers to them during manufacture, which
    could reduce the cost if a lot have to be made.

    That's the goal. Having to "program" a unique serial number
    is an added labor step and tracking issue.

    If, OTOH, the manufacturer of a component (e.g., the Dallas serial
    number chip that Dennis mentioned -- or, the MCU itself!) could
    make that guarantee, then there would be no need to track
    which S/Ns have been assigned, to date.

    Then they can all be strung out along a two-wire bus (send and return)
    to allow individual devices to be removed or changed without a lot of re-wiring or bridging connectors, so installation and maintenance costs
    are reduced too..

    The goal is for the end user to be able to change out these devices
    (or, install them) just like replacing light bulbs. You don't want
    to have to dispatch paid staff to replace an item that costs pennies!

    The semiconductor components are unlikely to need replacement.
    But, there are mechanisms involved to provide the haptic feedback.
    How long those are likely to remain viable in extended service
    (decades) is something with which I wouldn't want to gamble.

    [It's relatively easy making devices that have short lifespans
    or can be "returned to the place of purchase". A lot harder
    to address things like the physical plant in a residence, etc.]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Liz Tuddenham@21:1/5 to Don Y on Thu Jun 26 17:53:55 2025
    Don Y <blockedofcourse@foo.invalid> wrote:

    On 6/26/2025 1:59 AM, Liz Tuddenham wrote:
    This is too "high tech". You're effectively trying to build a TDR into
    each device. Recall, I want these to be dirt cheap because I use so
    many of them in a system.

    Actually the individual devices just need to store the time between two clear digital pulses as a number. If the devices are never closer than
    one yard apart, a 300 Mc/s clock speed will be sufficient to distinguish between them. (The twin identification pulses will be spaced by double
    the path length.)

    Sorry, this is a *display*. Even as oversized as it is (a few
    square feet), it is quite possible that devices will be immediately
    adjacent -- a fraction of an inch apart.

    I hadn't realised they were that close together. Obviously my
    suggestion fir timing is a non-starter.


    --
    ~ Liz Tuddenham ~
    (Remove the ".invalid"s and add ".co.uk" to reply)
    www.poppyrecords.co.uk

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From bitrex@21:1/5 to Don Y on Thu Jun 26 15:58:14 2025
    On 6/25/2025 1:04 PM, Don Y wrote:

    This is too "high tech".  You're effectively trying to build a TDR into
    each device.  Recall, I want these to be dirt cheap because I use so
    many of
    them in a system.

    You could tile 'em. A local bus north west south and east with the main
    IO bus on the perimeter.

    Send outputs towards the edge using a greedy algorithm that only needs
    local state and if a tile has failed then route around it.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to bitrex on Thu Jun 26 13:50:37 2025
    On 6/26/2025 12:58 PM, bitrex wrote:
    On 6/25/2025 1:04 PM, Don Y wrote:

    This is too "high tech".  You're effectively trying to build a TDR into
    each device.  Recall, I want these to be dirt cheap because I use so many of
    them in a system.

    You could tile 'em. A local bus north west south and east with the main IO bus
    on the perimeter.

    Send outputs towards the edge using a greedy algorithm that only needs local state and if a tile has failed then route around it.

    But that requires a fair number of interconnects between devices (tiles).
    And, likely a more complex (larger/costlier) implementation.

    If I could guarantee (by design) that a failure looks like an
    "absent" device, then things get considerably easier (as you
    have to deal with the possibility of absences, regardless)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Don Y@21:1/5 to Liz Tuddenham on Thu Jun 26 13:48:01 2025
    On 6/26/2025 9:53 AM, Liz Tuddenham wrote:
    Don Y <blockedofcourse@foo.invalid> wrote:

    On 6/26/2025 1:59 AM, Liz Tuddenham wrote:
    This is too "high tech". You're effectively trying to build a TDR into >>>> each device. Recall, I want these to be dirt cheap because I use so
    many of them in a system.

    Actually the individual devices just need to store the time between two
    clear digital pulses as a number. If the devices are never closer than
    one yard apart, a 300 Mc/s clock speed will be sufficient to distinguish >>> between them. (The twin identification pulses will be spaced by double
    the path length.)

    Sorry, this is a *display*. Even as oversized as it is (a few
    square feet), it is quite possible that devices will be immediately
    adjacent -- a fraction of an inch apart.

    I hadn't realised they were that close together. Obviously my
    suggestion fir timing is a non-starter.

    There are a *lot* of them (hundreds). So, I have to try to
    pack them as densely as possible.

    The best analogy would be the "activity indicators" on
    network switches; they exist so you can visually identify
    ports that are active, inactive, failed, etc. A simple
    glance is usually enough to spot anomalies.

    Now, add to that, being able to make this determination
    with your eyes closed.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)