notice: https://cdn-learn.adafruit.com/downloads/pdf/32x16-32x32-rgb-led-matrix.pdf
librairies arduino:
mkdir ~/rgb32 cd ~/rgb32 git clone https://github.com/adafruit/RGB-matrix-Panel.git git clone https://github.com/adafruit/Adafruit-GFX-Library.git mv RGB-matrix-Panel ~/sketchbook/libraries/RGBmatrixPanel mv Adafruit-GFX-Library ~/sketchbook/libraries/Adafruit_GFX
ajouter au début des fichiers d'exemple si besoin
#include <SPI.h>
le programme d'exemple testcolors_16x32 invoque RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false); le false est pour l'écran 32×16. en débranchant le fil A3, la broche correspondante sur l'afficheur est en l'air et on a bien les carrés de couleur. en mettant true pour le 32×32, l'affichage foire!
La librairie Adafruit utilise interruption timer + code assembleur pour gérer l'affichage d'un buffer mémoire avec gestion PWM. MAIS CA NE FONTIONNE PAS!!! donc je dois me coltiner la…
ICN2026 pdf me redirige dans http://www.starchips.com.tw/pdf/datasheet/SCT2024V01_03.pdf
Il est dit que le chip supporte 25Mhz de clk
CLK: Clock input of shift register, data is sampled at the rising edge of CLK LA/ Input terminal of data strobe. Data is latched when LA/ is low. And data on shift register goes through when LA/ is high.
Chronogrammes en page 5 de http://www.starchips.com.tw/pdf/datasheet/SCT2024V01_03.pdf
Programme ne nécessitant aucune librairie destiné à comprendre les signaux à envoyer à l'afficheur:
//B. Vandeportaele 2017 //simple program to test 32x32 rgb led panel //pin settings #define CLK 8 #define OE 9 #define LAT 10 #define A A0 #define B A1 #define C A2 #define D A3 //B0 is reserved, so use B_0 instead #define R_0 (0x01<<2) #define G_0 (0x01<<3) #define B_0 (0x01<<4) #define R_1 (0x01<<5) #define G_1 (0x01<<6) #define B_1 (0x01<<7) int CPTx=0; //counters int CPTy=0; void setup() { //port D pins 2-7 drive RGB0 and RGB1 pins //set DDRD bits to 1 for outputs DDRD |= 0xFC ; //set default output values to 1 PORTD =0xFC; pinMode(CLK, OUTPUT); pinMode(OE, OUTPUT); pinMode(LAT, OUTPUT); pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); digitalWrite(CLK, LOW); digitalWrite(OE, HIGH); digitalWrite(LAT, HIGH); digitalWrite(LAT, LOW); } void loop() { //drive the decoder 1 to 16 to select the line digitalWrite(A, (CPTy>>0)&1); //lsb digitalWrite(B, (CPTy>>1)&1); digitalWrite(C, (CPTy>>2)&1); digitalWrite(D, (CPTy>>3)&1); //msb for (CPTx=0;CPTx<4;CPTx++){ // draw four time the same pattern PORTD =R_0 | G_0 | B_0 | R_1 | G_1 | B_1 ; // white on both sides of the pannel digitalWrite(CLK, LOW); digitalWrite(CLK, HIGH); //strobe PORTD =B_0 |B_1; digitalWrite(CLK, LOW); digitalWrite(CLK, HIGH); //strobe PORTD =R_0 | R_1; digitalWrite(CLK, LOW); digitalWrite(CLK, HIGH); //strobe PORTD =G_0 |G_1; digitalWrite(CLK, LOW); digitalWrite(CLK, HIGH); //strobe PORTD =R_0| G_0 | R_1 |G_1; digitalWrite(CLK, LOW); digitalWrite(CLK, HIGH); //strobe PORTD =R_0| B_0 | R_1|B_1; digitalWrite(CLK, LOW); digitalWrite(CLK, HIGH); //strobe PORTD =B_0| G_0 |B_1 |G_1; digitalWrite(CLK, LOW); digitalWrite(CLK, HIGH); //strobe PORTD =0; digitalWrite(CLK, LOW); digitalWrite(CLK, HIGH); //strobe } //latch digitalWrite(LAT, HIGH); digitalWrite(LAT, LOW); //activate the display for a certain amount of time digitalWrite(OE, LOW); delay(1); //deactivate the display during the transfer of the next line digitalWrite(OE, HIGH); CPTy++; //go to the next line }
Ce programme fonctionne et permet l'affichage de 8 bandes de couleurs différentes répétées 4 fois.
vidéos: https://bvdp.inetdoc.net/files/rgbpanel/V71021-230843.mp4