Einzelne Bits an LED-Matrix mit HT16K33 ändern

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Einzelne Bits an LED-Matrix mit HT16K33 ändern

      Hallo zusammen ;)

      Ich möchte mich zunächst kurz vorstellen, denn ich bin neu hier: Mein Name ist Cornelius, ich bin 34 und Energie-Elektroniker. Seit meiner Ausbildung habe ich mich auch im privaten Bereich mit Elektronik beschäftigt, und um zwei Hobbys zu verbinden baue und entwerfe ich selber Röhrenverstärker für Egitarre. Da ich in meinen Amps auch verschiedene Umschaltungen vornehmen möchte, kommen die uC`s ins Spiel. Letztes Jahr habe ich angefangen, mich in die Programmierung mit Bascom einzuarbeiten. Zunächst ging es darum, MIDI-Befehle zu senden, aber nun benötige ich für meinen Fussschalter eine Anzeige (für z.B. den Speicherplatz, den ich aufrufen möchte). Dafür habe ich mir von adafruit eine 8x8 LED-Matrix besorgt die mit einem HT16k33 bepackt ist. Ein LCD schied für mich aus, denn die Zeichen sind einfach viel zu klein, wenn da Teil auf dem Boden liegt und ich davor stehe.

      Diese Woche nun habe ich mit der Matrix beschäftigt und dank Eurer Beiträge und Datenblatt-Wälzen ist es mir gelungen, die ersten "Bilder" anzuzeigen. Die Initialisierung ist also schon einmal geschafft, I2C funktioniert und ich habe nun auch herausgefunden, warum die erste Spalte immer als zweite und die eigentlich letzte als erste angezeigt wird (komische Hardware..das...)

      So wie ich das Datebblatt verstanden habe, ist es wohl möglich, die LEDs auch direkt und einzeln anzusteuern, quasi Bit-weise. Leider bin ich aus dem Rest des Datenblattes nicht so richtig schlau geworden. Denn ich kann doch eigentlich immer nur Byte-Befehle übertragen, oder ? Also in meinem Fall die HT16K33-Adresse, dann der DisplayRAM-Pointer als Byte und anschliessend die Daten als beliebige Anzahl von Bytes. Ich könnte nun den DisplayRAM-Pointer an mein gewünschtes Bit setzen und dann ein Byte schicken, aber das würde ja die nachfolgenden 7 Stellen dann auch wieder überschreiben oder ?
      Ziel ist es, den "Bildschirm" sozusagend zu teilen und unabhängig von einander die Anzeige zu ändern. Also links z.b. 2 kleine Buchstaben, die über die Taster 1-3 verändert werden. Unabhängig davon rechts untereinander 4 kleine 2x2-Quadtrate, die mir einen Schaltzustand von Sonderfunktionen zeigen sollen, gesteuert über Taster 4-6 meinetwegen.
      Versteht ihr was ich meine ?

      Ich könnte natürlich im Master die Bildzeilen als Variablen anlegen und dort nur die einzelnen Bits "toggeln", aber dann müsste ich jedesmal das ganze Bild schicken. Und würde man das dann nicht als "flackern" sehen ?

      Könnt ihr mir helfen ?

      Vielen lieben Dank,
      Mit freundlichen Grüßen Cornelius :)
    • Kennst du mein beispiel für die HT16k33?
      bascomforum.de/index.php?threa…ighlight=ht16k33#post2464
      Das Adafruit teil ist wirklich etwas komisch, die haben ein Digit für die Doppelpunkte verfeuert. Anzeige Digit 1+2, digit 3 ist der doppelpunkt, Anzeigedigit 4+5 .
      Wie bei so etwas üblich kannst du keine einzelnen Bits schreiben ,nur Bytes. Aber du kannst jedes Byte adressieren, d.h. du musst nicht wie bei einem Schieberegister alle Werte neu schreiben wenn sich nur ein Bit ändert.
      man kann den Bildspeicher auslesen.
      d.h. für dein Vorhaben:
      Byte auslesen
      Ein bit im Byte ändern
      Byte zurückschreiben

      Allerdings machen doch die 16 Byte für den gesammten HT16k33 jetzt nicht wirklich platzprobleme. Oder ist dein AVR schon randvoll?
      Bin grad selber noch mit den Ding am bauen, eine 8 x 16 Segment Anzeige plus drei dutzend Taster, Hardware ist schon fertig, an der Software fummel ich noch etwas.
      IMG_0761.JPGIMG_0762.JPG

      Tobias
    • Hallo Tobias,

      Danke für Deine Antwort. Ja, ich hatte mir Dein Beispiel angeschaut und es hat mir bei der Initialisierung sehr geholfen.
      Wenn ich den Bildspeicher, wie von Dir beschrieben, erst auslesen muss, dann kann ich auch gleich bei meinem Ansatz bleiben. Ich habe für "Bild schicken" eine Routine angelegt, in der ich alle Zeilen rüberschicke. Die einzelnen Zeilen sind als Byte-Variable angelegt. So kann ich die bitweise ändern und schicke nochmal nach.
      Habs auch schon ausprobiert und es funktioniert nach meiner Zufriedenheit sehr gut ;) das befürchtete Bildflackern bleibt auch aus, geht also schnell genug.
      Etwas entsetzt war ich, als ich mein erstes Bild fertig hatte und die ganzen Buchstaben plötzlich seitenverkehrt waren a_32_d623ea7e Da ich bisher nur mit symmetrischen Bilder getestet hatte, ist das gar nicht aufgefallen. Naja, musste nur die ganzen Hexzahlen nochmal neu durchrechnen.... :whistling:

      Ich werde mein Projekt hier nochmal genauer vorstellen, wenn ich fertig bin.
      Wie gesagt, Danke für Deine Hilfe,
      Lg cornelius