Projects · 3-Bank Display

3-Bank Display

Two Arduino sketches for the same OSEPP Pro Mini (ATmega328, 5 V, 16 MHz) hardware: three PDSP1880 LED character displays with a pot on A0 for scroll speed.

Original on GitHub Rewrite on GitHub Full write-ups live in each repo README.
Breadboard prototype: three PDSP1880 LED character displays, MCU on the right, multi-turn pot for scroll speed
Breadboard prototype: three PDSP1880 modules, Pro Mini, and scroll-speed pot.
Full write-up (original sketch: hardware, wiring, behavior)

This section documents the original sketch. The rewrite repo uses the same wiring and scroll logic; see new_3_bank_display_test for that README.

Overview

This program drives three PDSP1880 LED character displays from an OSEPP Pro Mini (Atmel ATmega328 at 5 V, 16 MHz). The three modules are wired as one master and two slaves so they act as one long chain of digit positions.

The firmware walks the full displayable ASCII set (TotalDisChar = 0x7F) across every digit. Characters are written left to right: DisPosCount advances until TotalDig is reached, then the run returns to the leftmost digit and the character index advances by one. That continues until TotalDisChar + TotalDig - 1 is reached.

Conditional math between Char2Count and Char2Dis corrects for the offset caused by writing left-to-right across TotalDig positions. Extra wrap math at the end of the character set makes the sequence roll from the last glyph back to the first so the chain never stops with a hard edge.

Scroll speed comes from analog pin A0 (pot wiper). The ADC reading is scaled with map() into a delay Timeinms between 20 ms and 500 ms. At shorter delays the full ASCII run looks like the character set is scrolling right to left.

Hardware

ItemDetail
MCUOSEPP Pro Mini - ATmega328 @ 5 V, 16 MHz
Displays3× PDSP1880 (left master + two slaves)
Scroll controlPotentiometer wiper on A0 (CCW = GND, CW = +5 V; sketch notes a 10 kΩ ten-turn)
Power+5 V (VIN) and GND to the Pro Mini and all three displays

How the firmware works

Setup

setup() sets Port D and Port B as outputs (DDRD / DDRB = 0xFF), then loads Port D with ASCII space (0x20) so the displays power up blank instead of showing garbage.

Main loop

Each pass of loop():

  1. Adjusts Char2Count if it has already walked past TotalDig (offset after the first full pass across the chain).
  2. For every digit position DisPosCount from 0 through TotalDig (0x17 = 23):
    • Holds /WR idle high (DisIdle | Char2Dis) so nothing is written while the next glyph is prepared.
    • Computes Char2Dis from Char2Count, wrapping when the count passes TotalDisChar.
    • Advances Char2Count, or resets it to 0 at the end of the wrap window.
    • Reads the pot on A0 and updates Timeinms (ScrMin…ScrMax).
    • Selects the bank (left / mid / right module) from DisPosCount.
    • Writes bank + digit address on Port B, then pulses the character out on Port D with /WR low (DisWR | Char2Dis).
  3. After all digits are updated, delay(Timeinms) sets how long that frame holds before the next character step.

Bank select

Digit positionsBank valueModule
0-70xF0Left (bank 1, D11)
8-150xE8Middle (bank 2, D12)
16-230xD8Right (bank 3, D13)

PORTB = Bank | DisPosCount combines chip-enable bits with the digit address on A0-A2 (D8-D10).

Schematic

Wiring schematic: Pro Mini to three PDSP1880 modules and scroll pot

Shared bit0-bit6, /WR, and disp A0-A2 go to all three PDSP1880 modules. D11 / D12 / D13 are individual bank selects (CE1-CE3). The pot wiper goes to A0.

Pin map

From the sketch header. Port D is character data and write; Port B is digit address and bank select.

Pro MiniPortChip pin #Function
D0 (RX0)PD030Display bit 0
D1 (TX1)PD131Display bit 1
D2PD232Display bit 2
D3PD31Display bit 3
D4PD42Display bit 4
D5PD59Display bit 5
D6PD610Display bit 6
D7PD711Display write (active low)
D8PB012Display A0
D9PB113Display A1
D10PB214Display A2
D11PB315Bank select 1 (left)
D12PB416Bank select 2 (middle)
D13PB517Bank select 3 (right)
A0PC023Scroll-speed pot wiper
VIN--+5 V
GND--Ground
RST--Reset
NC--No connection

Build and upload

  1. Clone or download 3_bank_display_test from GitHub.
  2. Open the sketch file Three_bank_display_test in the Arduino IDE (no external libraries required).
  3. Select board Arduino Pro or Pro Mini, processor ATmega328P (5 V, 16 MHz).
  4. Wire as in the schematic / pin map above.
  5. Upload and turn the pot to adjust scroll speed.

GitHub Actions compiles this sketch on every push to master (compile check only; does not upload to the board).

Original sketch: Jim Burney, July 2013.