Sure Electronics HT1632 LED Display mit Adafruit Library

Hallo zusammen!

Nachdem ich bereits einige Projekte mit dem 16x24 LED Display von Adafruit realisieren konnte, bin ich auf ein fast identisches Modul von Sure Electronics gestossen, mit dem ich in Zukunft lieber arbeiten möchte, weil es (a) günstiger und (b) auch mit 5mm grossen LEDs ausgestattet ist.

Leider habe ich nun ein Problem, mit der Adafruit Library das SureDisplay anzusteuern, da anscheinend (bautechnisch bedingt) alle 8x8-LED-Matrix-Module sowohl um 90° gedreht als auch räumlich anders verteilt sind. (z.B. lässt ein Demo-Programm auf dem Adafruit-Display alle LEDs zeilenweise von oben links nach unten rechts aufleuchten, dasselbe Programm auf dem SE-Display allerdings spaltenweise von rechts oben nach links unten)

Es gibt zwar Libraries für genau dieses Modul, allerdings finde ich diese nicht so benutzerfreundlich wie die Variante von Adafruit. Diese kommt nämlich noch mit einem weiteren mächtigen Tool daher: der GFX-Library, die das Einbinden von eigenen Fonts und Grafiken erheblich erleichtert.

Danke soweit schonmal für die Aufmerksamkeit! :slight_smile:

Nun zur Frage:
Meint Ihr es ist möglich die Library von Adafruit dahingehend zu modifizieren, daß man quasi das Koordinatensystem ummodelt und alle Arduino-Programme unverändert verwendet werden können? Sollte dann auch die GFX-Library ohne Veränderung funktionieren, weil ja die Ansteuerung des Displays über die HT1632-Library erfolgt?

Mit der Programmierung von Libraries bin ich leider total überfordert und würde mich über einen "Schubs" in die richtige Richtung sehr freuen.
Vielleicht liege ich mit meinem Ansatz aber auch total falsch und sollte mich einfach damit abfinden, für jedes Display seine bereits existierende Library zu verwenden?

Zu verändernde Library: GitHub - adafruit/HT1632: Arduino library code for HT1632(C) matrix panel driver chips, and the panels we have in the Adafruit shop

Funktionierende Libraries für SureElectronics Displays:

mit bestem Dank im Voraus schonmal für jeden Beitrag
derGeppi

Hallo,

derGeppi:
Sollte dann auch die GFX-Library ohne Veränderung funktionieren, weil ja die Ansteuerung des Displays über die HT1632-Library erfolgt?

Zumindest diesen zweien Teil der Frage kann ich mit ja beantworten, die GFX-Library benötigt eigentlich nur eine Funktion um ein Pixel an einer Position zu setzen. Man sieht sie auch auf Rechnern, die gar keine Arduinos sind.

Ich denke diese Funktion dürfte auch der Schlüssel für die Anpassung an das neue Display sein. Da muss es ja sowohl in der originalen Adafruit Version als auch für das neue Display entsprechenden Code geben. Das ist die Stelle, die in der Lib für das neue Display angepasst werden muss ...

..schonmal vielversprechend! :slight_smile:

Jetzt müsste man nur wissen, welcher library-Teil die grafischen x,y-Koordinaten den einzelnen 8x8-Matrizen zuordnet..

Um es einzugrenzen: ist die *.h- oder *.cpp-Datei dafür verantwortlich?

Guck einfach mit einem Texteditor rein, die gehen davon nicht kaputt. Nach beim Schließen einfach nicht abspeichern. Und wenn du dir nur eine Kopie anguckst, dann bist du erst recht auf der sicheren Seite. ´Wenn du einen Verdacht hast, dann mach einfach beide Versionen, die von Adafruit und die von Shure in 2 Fenstern nebeneinander auf.
Wenn du ein Backup der Originaldateien hast, dann editiere einfach den Teil, den du denkst, speicherst ab und testest. Du hast mindestens 100.000 Versuche, bis die FLASH Zellen vom Arduino irgendwann "nö" sagen :smiling_imp:
Ich weiß garnicht mehr, wo ich damals mal versuchsweise rumgefummet habe. Entweder vom MAX7219 oder auch von Shure die Lib, oder wars der Beispielsketch?
Na jedenfalls habe ich mir auch irgendwo aus den Netz nen Font gezogen und da rein verpflanzt. Dabei bin ich was Programmieren betrifft, auch der totale Noob.

In der Adafruit Library ist die ganze Logik in der Funktion "drawPixel", hier ab Zeile 61

In der funktionierenden Lib ist das ganze aufgeteilt auf mehrere Funktionen, ein Einstieg wäre hier in Zeile 131

Geschafft! :slight_smile:

Habe Euren Rat befolgt und mal beide libraries parallel verglichen. Leider ist die Umwandlung x,y-Koordinaten => Ansteuerung der 8x8-Matrix-Panels soo unterschiedlich umgesetzt, daß ich da gar nichts adaptieren konnte.

Also weiter Inspiration holen (websuche).. :wink:
Dabei stieß ich auf den Blog von RedLegoMan, der in seinem Projekt ebenfalls die Adafruit-library derart umgemodelt hat, daß er damit ein 32x8-Display von Sure ansteuern konnte. Hat zwar nicht die Auflösung von meinem, aber immerhin...

Hier kam ich mit dem Abgleich wesentlich besser voran. Und in der Tat, ArduFE: der einzig wichtige Teil spielt sich in der Funktion ab Zeile 61 ab! :slight_smile:
Hier müssen die x,y-Koordinaten pro Panel getauscht werden:

void Adafruit_HT1632LEDMatrix::drawPixel(int16_t x, int16_t y, uint16_t color) {
  if((x < 0) || (x >= _width) || (y < 0) || (y >= _height)) return;

  uint8_t m;
  // figure out which matrix controller it is
  m = x / 24;
  x %= 24;

  uint16_t i;

  if (x < 8) {
    i = 7;
  } else if (x < 16) {
    i = 128 + 7;
  } else {
    i = 256 + 7;
  }
  i -= (y % 8);				
  
  if (y < 8) {
	y = (x % 8) * 2;
  }	else {
    y = (x % 8) * 2 + 1;
  }
  i += y * 8;

  if (color) 
    matrices[m].setPixel(i);
  else
    matrices[m].clrPixel(i);
}

Vielleicht programmiertechnisch nicht super-elegant gelöst, aber hey... if it works :wink:

Danke für die Hilfe!