Skip to content

Everything we found out about these signs and Arduino code to drive them

Notifications You must be signed in to change notification settings

ConnectedHumber/Bus-Terminal-Signs

Repository files navigation

Bus-Terminal-Signs

See blog post: https://blog.alifeee.co.uk/hull-bus-sign/

  1. Hardware details
  2. Software details
  3. Setup
    1. The parts involved
      1. Daisy-chaining
    2. Solder wires to ribbon cable
      1. Pin designation
    3. Connect the sign to an Arduino
      1. Breadboard
      2. Other setup images
    4. Program Arduino with code
    5. Next steps
  4. If it doesn't work
    1. The display doesn't display anything
    2. The display flashes pixels randomly
    3. Something else

Everything we found out about these signs and Arduino code to drive them.

Picture of bus sign and setup

Hardware details

Software details

Setup

If you have access to a sign, you should be able to set it up to display text with just an Arduino, a power supply, and some soldering.

The parts involved

This is a list of components involved with the signs, as well as terms for parts together (unit/display/etc).

Common name Part number (& datasheet) Description
Unit N/A The whole thing.
LED Panel unknown A single panel of 24 x 9 LEDs.
Display N/A All the panels together, 8 x 2.
Display Row N/A One row of 8 LED Panels.
Panel PCB unknown The PCBs that the panels are attached to. On the unit, there are three of these. Two hold 6 LED Panels (3 x 2), and one holds 4 LED Panels (2 x 2).
Ribbon Cable unknown The ribbon cable connecting the Panel PCB(s) to the logic. This is where we attach to the system.
AS1100 chip AS1100 A microchip used to control 7 segment displays or (in this case) dot matrix displays. There is one of these per 6 x 8 LED pixels, so 4 per LED Panel, or 32 across one display row.
AC to DC Power Converter unknown This takes mains power and outputs 5 V, (up to) 20 A DC, which is used by the back-of-unit logic, and to power the LEDs in the panel. The AS1100 chips do not use this power. We can attach a power supply to the DC output terminal instead of using mains power. There are two positive and two ground cables, but these are in-fact one of each (in a loop) for redundancy.
Back-of-unit logic unknown This is a collective term for the boards behind the display. These expose an Ethernet port for interfacing, which we cannot use as we do not know the HTTP requests that the unit requires. Thus, we do not use it and instead inject our Arduino into the ribbon cable.
DMX PCB unknown This is part of the back-of-unit logic. We use it in lieu of a proper ribbon cable connector, by soldering onto the terminal.

Picture of unit, with labelled parts: unit, display, display row, panel PCB, LED Panel

Picture of Panel PCB with LED Panels removed, showing AS1100 chips.

Annotated picture of the back-of-unit logic, showing: AC to DC Power Converter, DMX PCB, ribbon cables.

Daisy-chaining

The AS1100 chips are daisy-chained, like in the datasheet. Each controls a sub-matrix of pixels. This means that if we want to talk to a specific one (to send a specific digit) we have to send 32 messages (one per chip - for a total of 32 characters).

Alt text

Solder wires to ribbon cable

We need to connect to the AS1100 chips to send data based on the information from the datasheet. The signals we need to send data to the AS1100 chips are:

  • DATA pin, to send data with SPI protocol
  • CLOCK pin, for SPI protocol
  • LOAD pin, for SPI protocol
  • ISET pin, for setting LED voltage
  • GROUND pin

We can do this via the exposed ribbon cables, noting that:

  • The CLOCK and LOAD pins are inverted by the Panel PCBs, so we must invert our signal to what the datasheet says for these two pins. The DATA pin remains unchanged.

Picture of ribbon cables with pins labelled

Pin designation

In relation to the AS1100, these pins are:

Pin Name Use Required here?
🟥 1 NC
2 ISET The voltage on ISET is the voltage across each LED.
3 LOAD A falling edge of LOAD triggers the AS1100 to read the most recent SPI transmission (see datasheet, section 8.1).
4 DOUT Data OUT, this is a delayed DIN, used for daisy-chaining (see datasheet, 8.1, 9.2).
5 CLK Clock pin, inverted, for SPI. See datasheet, section 8.1.
6 GND Ground.
7 DIN Data IN. This is used to send data to the panel. See datasheet, section 8.1.
8 GND Ground.

Thus, to connect to a row of the display, we can plug the ribbon cable into the DMX PCB and solder onto the back.

Picture of DMX PCB with wires soldered to the ribbon cable connector.

Connect the sign to an Arduino

We connect the DMX board to an Arduino to communicate with it, as well as attaching all things to power that require it. Note the Arduino must be capable of outputting 5 V.

  • Connect:
    • LOAD to 7 (or whatever is defined in code)
    • CLK to pin 13 (or your Arduino's SPI clock pin)
    • DATA to pin 11 (or your Arduino's SPI MOSI pin)
    • GROUND to ground
    • ISET to your power supply.
  • Connect the AC to DC power converter to your power supply.
  • Ensure all grounds are connected together

Picture of setup, labelled.

flowchart TD
    ground
    arduino[arduino!]
    dmx[DMX board]
    psu[5 V power supply]
    converter[AC to DC converter]

    dmx -- DMX2 via variable resistor --- psu
    dmx -- DMX3-A5 --- arduino
    dmx -- DMX5-A13 --- arduino
    dmx -- DMX7-A11 --- arduino

    psu -- + pos + --- converter

    dmx -- DMX6/8 --- ground
    arduino -- AGND --- ground
    psu -- - neg - --- ground
    converter -- - neg - --- ground
Loading

Breadboard

Picture of breadboard setup

Other setup images

See other setup images

Picture of Arduino setup

Picture of DMX PCB setup

Picture of converter setup

Program Arduino with code

  • Download the Arduino IDE 2.
  • Copy CH_AS1100.h and CH_AS1100.cpp to C:\Users\<user>\Documents\Arduino\libraries\ConnectedHumber (or create a symbolic link)
  • Create a Sketchbook with the example code
  • The pins at the top of the code should match where you put them, and there are 2 chips per LED panel, so 32 across the width of a full sign.
  • Upload code to Arduino
  • Power on display with power supply
  • Press reset button on Arduino to start program!

Next steps

Hopefully that worked :)

If it didn't, see below.

If you want to write your own code building on the examples, you can see code documentation online (or in the code).

If it doesn't work

The display doesn't display anything

  • Check connections (no pins touching etc) with a multimeter (on continuity test mode)
  • Check SPI is sending to clock and data pins with oscilloscope
    • You can use the sketch spi_test to send a very simple repeated SPI signal to test.
  • Check load signal sends on load pin

The display flashes pixels randomly

  • Check that everything is grounded to the same ground
  • Use the display test sketch to see if the display is accepting instructions
  • Check that SPI signal is from 0V to 5V (with oscilloscope)

Something else

Releases

No releases published

Languages