Adafruit: 16x24 Red LED Matrix Panel

 Overview: 2 Wiring:  2 Code:    2 git/Compiles with make: 2 Demo:    2 Total:   10 Comments: Looks good. Have you been able to look into other ways besides bit banging to drive the display?



Overview
Adafruit's 16x24 Red LED Matrix Panel uses the HT1632C LED driver. The driver has the ability to dim and flash and they can be chained together to produce large displays. The code developed for this Mini Project is based on Adafruit's original HT1632 github repository originally written for Arduino. It also uses a modified version of BoneHeader.h to support C++ originally from Andrew Miller's github repository.



Inputs and Outputs
A single matrix panel can be powered directly off of the BeagleBone's 3.3V supply (running only on USB power). The interface is a bit-banged serial interface requiring 3 pins: chip select (active low), write clock (rising edge trigger), and data. The HT1632C also has a read pin, but it is not populated or used in the example code developed for this Mini Project.

Bone Usage


The pin mappings

P9 pin # (BeagleBone pin) -> Panel pin (wire color)

1 (GND) -> GND (black)

3 (VDD_3V3EXP) -> VCC (red)

15 (R13/GPIO1_16) -> CS0 (white)

23 (V14/GPIO1_17) -> DATA (yellow)

25 (A14/GPIO3_21) -> WR (orange)

Sample C++ Code
The code shown below is sample code to demonstrate the 16x24 Red LED Matrix Panel.


 * 1) include "../Resources/adafruit/HT1632/HT1632.h"
 * 2) include 
 * 3) include 
 * 4) include "icons.c"

/* This is a basic demo program showing how to write to a HT1632 These can be used for up to 16x24 LED matrix grids, with internal memory and using only 3 pins - data, write and select. Multiple HT1632's can share data and write pins, but need unique CS pins.


 * 1) define DATA 117 //3_21
 * 2) define WR 49 //1_17
 * 3) define CS 48 //1_16

void testMatrix2(HT1632LEDMatrix *matrix) { //Display "Hi" matrix->setTextSize(2); matrix->setTextColor(1); matrix->write('H'); matrix->write('i'); matrix->writeScreen; usleep(2000000);

// Blink! matrix->blink(true); usleep(2000000); matrix->blink(false);

// Dim down and then up for (int8_t i = 15; i >= 0; i--) { matrix->setBrightness(i); usleep(100000); } for (int8_t i = 0; i < 16; i++) { matrix->setBrightness(i); usleep(100000); }

// Blink again! matrix->blink(true); usleep(2000000); matrix->blink(false); }

void testMatrix1(HT1632LEDMatrix *matrix) { //Display icon matrix->drawBitmap(0, 0, icon, matrix->width, matrix->height, 1); matrix->writeScreen; usleep(2000000);

// Blink! matrix->blink(true); usleep(2000000); matrix->blink(false);

// Dim down and then up for (int8_t i = 15; i >= 0; i--) { matrix->setBrightness(i); usleep(100000); } for (int8_t i = 0; i < 16; i++) { matrix->setBrightness(i); usleep(100000); }

// Blink again! matrix->blink(true); usleep(2000000); matrix->blink(false); }

int main(void) { printf("Starting...\n"); HT1632LEDMatrix matrix = HT1632LEDMatrix(DATA, WR, CS); matrix.begin(HT1632_COMMON_16NMOS); printf("Clear\n"); matrix.clearScreen; printf("Test #1\n"); testMatrix1(&matrix);

printf("Clear\n"); matrix.clearScreen; printf("Test2\n"); testMatrix2(&matrix); printf("Done!\n"); return 0; }

This code example and the required resources can be found in Greg Larmore's github repository

Updates
A node.js implementation has been added that sends hard coded pictures to the bone. Also the driver has been switched over to use mmap for gpio writes to speed it up. Ideally the writes should occur at 500kHz now.

Future Work
The node.js implementation should be modified to take in a .gif file. Or scrolling text could be implemented.