Hallo Micha,

den Aufwand mit UND-Gliedern würde ICH mir sparen. Probleme beim Flashen seh ich keine (außer dass die Digits dabei vielleicht kurz wild flackern oder aufblitzen).

Zum Thema je einen Pin pro Digit:
Man könnte jedem Digit einen eigenen Pin spendieren, aber warum sollte man? Es führt letztenendes nur zu mehr Verdrahtungsaufwand. Das Mapping ist problemlos im Code zu bewerkstelligen, sodass ein einziger Pin ausreicht. Konkret wären das im Code ein paar Variablen mehr plus eine einzige (!) Codezeile

Schau Dir mal den folgenden (ungetesteten!) Demo-Code an. Hier siehst Du, wie einfach das Mapping sein könnte. Er ist auch problemlos erweiterbar. Vielleicht könntest Du den Code mal bei Dir testen und berichten, ob er funktioniert (ich hab leider keine RGB-Digits hier). Ich bin im Code einfach davon ausgegangen, dass Segment "a" die erste LED in so einem RGB-Digit ist und Segment "g" das siebte.

Der Code arbeitet nach dem Prinzip: Zeige eine bestimmte Ziffer (oder Symbol) auf einem bestimmten RGB-Digit. Die zur Verfügung stehenden Ziffern und Symbole sind in der Segment-Tabelle zu finden.

Nette Grüße
Rob

Code:
   ' =====================================================================
   ' Test-Demo 7-Segment Anzeige mit WS2812b (RGB-Digits)
   ' Je eine WS2812b-LEDs pro Segment
   '
   '      a
   '     ****
   '    *    *
   '  f *    * b
   '    *    *
   '    * g  *
   '     ****
   '    *    *
   '  e *    * c
   '    *    *
   '    *    *
   '     ****
   '      d
   '
   '
   ' Die Nutzung des Codes (auch auszugsweise) ist ausschließlich für nicht
   ' kommerziellen Nutzung freigegeben!
   ' Der Code ist experimentell und die Benutzung erfolgt auf eigene Gefahr!
   ' Der Sourcecode darf für den Eigenbedarf beliebig geändert werden.
   '
   ' =====================================================================

   ' Autor     Robert L. 2024
   ' Bascom    2.0.8.6
   ' Version   0.0.1


   $Regfile = "m328pdef.dat"
   $HWStack = 60
   $SWStack = 60
   $Framesize = 60
   $Crystal = 16000000                                      ' Ext. Quarz
   Waitms 400                                               ' Warten, bis Spannung stabil anliegt


'  --------------------------------------------------------
'  Globale Definitionen
   Config Base = 0                                          ' Arrays beginnen bei 0


'  --------------------------------------------------------
'  Konstanten WS2812b
   Const Num_LEDs = 48                                      ' Anzahl LEDs (für 6 RGB-Digits -> 6 * 8 LEDs = 48)


'  --------------------------------------------------------
'  WS2812b konfigurieren
   Config Rainbow = 1 , Rb0_len = Num_LEDs , Rb0_port = PortB , Rb0_pin = 0
   '                                                                      ^ Angeschlossen an Pinx
   '                                                        ^------------ Angeschlossen an Portx
   '                                 ^-------------------------- Anzahl LEDs auf dem Strip
   '                ^------------------------------------- Anzahl der Strips

   Dim Color(3) as Byte                                     ' Array, welches die 3 Farbwerte enthält
   Red Alias Color(_base)
   Green Alias Color(_base + 1)
   Blue Alias Color(_base + 2)

   Dim Black(3) as Byte                                     ' Array zum Ausschalten der LEDs
   Black(_base) = 0
   Black(_base + 1) = 0
   Black(_base + 2) = 0

   RB_Selectchannel 0                                       ' Strip auswählen


'  --------------------------------------------------------
'  Variablen

   Dim Segment as Byte                                      ' Aktuell zu bearbeitendes Segment
   Dim Pixel_No as Byte                                     ' WS2812B LED-Indexnummer

   Dim BitPattern as Byte                                   ' Variable zur Aufnahme des benötigten Bitmusters einer Zahl oder eines Symbols
   Dim Show_Number as Byte                                  ' Anzuzeigende Zahl
   Dim Active_Digit as Byte                                 ' Aktives Digit

   Dim Offset_Digit(6) as Byte                              ' Hier in der Demo für 6 RGB Digit Anzeigen
   Offset_Digit(0) = 0                                      ' Erster LED-Index Digit 0
   Offset_Digit(1) = 8                                      ' Erster LED-Index Digit 1
   Offset_Digit(2) = 16                                     ' Erster LED-Index Digit 2
   Offset_Digit(3) = 24                                     ' Erster LED-Index Digit 3
   Offset_Digit(4) = 32                                     ' Erster LED-Index Digit 4
   Offset_Digit(5) = 40                                     ' Erster LED-Index Digit 5


'  --------------------------------------------------------
'  Konstanten für Symbole
   Const Symbol_Minus = 10                                  ' Konstante Minus Symbol
   Const Symbol_Kapital_C = 11                              ' Konstante Buchstabe (großes) C
   Const NoNumber = 12                                      ' Konstante zum vollständigen Ausschalten eines Digits


'  --------------------------------------------------------
'  Startwerte setzen

   ' Welche Zahl auf welchem Digit?
   Show_Number = 0                                          ' Anzuzeigende Nummer (bisher möglich: 0-9, Symbol_Minus, Symbol_Kapital_C, NoNumber)
   Active_Digit = 0                                         ' Auf welchem Digit soll die Zahl angezeigt werden (0= Digit 1, 5= Digit 6)

   ' Welche Farbe?
   Red = 0                                                  ' Rotwert (0-255)
   Green = 50                                               ' Grünwert (0-255)
   Blue = 0                                                 ' Blauwert (0-255)



'  -----------------------------------------
'  Hauptprogramm
'  -----------------------------------------
   Do

      BitPattern = Lookup(Show_Number , Segment_Table)      ' Anzuzeigendes Bitmuster aus der Lookup Tabelle holen

      For Segment = 0 to 6                                  ' Alle 7 Segmente prüfen, ob sie ein oder aus sein sollen (0=a, 6=g)
         Pixel_No = Segment + Offset_Digit(Active_Digit)    ' LED Mapping
         If BitPattern.Segment = 1 then                     ' Soll aktuelles Segment leuchten?
            RB_Setcolor Pixel_No , Color(_base)             ' Farbwerte für LED in den Farbspeicher schreiben
            Else                                            ' Soll aktuelles Segment aus sein?
            RB_Setcolor Pixel_No , Black(_base)             ' Farbspeicher auf 0 setzen
         End If
      Next Segment

      RB_Send                                               ' Daten senden


      ' Testanimation
      Incr Show_Number                                      ' Nächstes Bitmuster anzeigen lassen
      If Show_Number > 12 then                              ' Nach Durchlauf aller verfügbaren Bitmuster...
         Show_Number = 0                                    ' ...wieder von vorne beginnen...
         Incr Active_Digit                                  ' ... mit dem nächsten Digit
         If Active_Digit > 5 then Active_Digit = 0          ' Am Ende wieder alles auf Anfang
      End If
      Waitms 500

   Loop
   End

'  -----------------------------------------
'  Programmende
'  -----------------------------------------




'  ----------------------------------------------
'  Segment_Table
'  In dieser Tabelle stehen alle verfügbaren
'  Zahlen und Symbole
'  ----------------------------------------------
   Segment_Table:                                           ' LookUp Table Index beginnt IMMER bei 0
'         xgfedcba
   Data &B00111111                                          ' 0
   Data &B00000110                                          ' 1
   Data &B01011011                                          ' 2
   Data &B01001111                                          ' 3
   Data &B01100110                                          ' 4
   Data &B01101101                                          ' 5
   Data &B01011101                                          ' 6
   Data &B00000111                                          ' 7
   Data &B01111111                                          ' 8
   Data &B01101111                                          ' 9
   Data &B01000000                                          ' 10 (Symbol_Minus)
   Data &B00111001                                          ' 11 (Symbol_Kapital_C)
   Data &B00000000                                          ' 12 (NoNumber)