Wieder eine Frage zu Variablen .....

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

    • Wieder eine Frage zu Variablen .....

      Ich habe derzeit u.v.a. 3 Byte Arrays definiert....

      Dim Cg1(125) as Byte
      Dim Cr1(125) as Byte
      Dim Cb1(125) as Byte


      das kostet doch recht viel Speicher ....

      Ist es irgendwie möglich das auch anders zu lösen, indem man das nur einmal als :

      Dim Ccolor1(125) as byte
      Dim color as string
      Dim g as string
      Dim r as string
      Dim b as string


      definiert, und eben für color dann jeweils g, r, b einsetzt ?!?

      also zb. : color = g




      besten Dank im voraus !
    • Äh, versteh' jetzt nicht so recht. Wieviele verschiedene Variablen brauchst du gleichzeitig? Diese Anzahl bzw den Speicherplatz dazu musst du vorhalten, eben mit dim.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Dim sieht so aus .... ( ein Ausschnitt davon )


      Dim Cg1(125) As Byte
      Dim Cr1(125) As Byte
      Dim Cb1(125) As Byte
      Dim Cg2(125) As Byte
      Dim Cr2(125) As Byte
      Dim Cb2(125) As Byte
      Dim Cg3(125) As Byte
      Dim Cr3(125) As Byte
      Dim Cb3(125) As Byte
      Dim Cg4(125) As Byte
      Dim Cr4(125) As Byte
      Dim Cb4(125) As Byte
      Dim Cg5(125) As Byte
      Dim Cr5(125) As Byte
      Dim Cb5(125) As Byte


      Code für die erste LED Zeile sieht wie folgt aus .... und das mal fünf....


      Code :


      For Led = 1 To 20
      While Cg1(led) = 0
      For X1 = 1 To 8
      Set Portc.1
      Reset Portc.1
      Next
      Exit While
      Wend
      While Cg1(led) = 1
      For X1 = 1 To 8
      Set Portc.1
      Waitms 0.5
      Reset Portc.1
      Next
      Exit While
      Wend
      While Cr1(led) = 0
      For X1 = 1 To 8
      Set Portc.1
      Reset Portc.1
      Next
      Exit While
      Wend
      While Cr1(led) = 1
      For X1 = 1 To 8
      Set Portc.1
      Waitms 0.5
      Reset Portc.1
      Next
      Exit While
      Wend
      While Cb1(led) = 0
      For X1 = 1 To 8
      Set Portc.1
      Reset Portc.1
      Next
      Exit While
      Wend
      While Cb1(led) = 1
      For X1 = 1 To 8
      Set Portc.1
      Waitms 0.5
      Reset Portc.1
      Next
      Exit While
      Wend
      Next
      Reset Portc.1
      Reset Portc.1

      Natürlich geht´s mit Color wie ganz oben angedacht aber dafür müsste man eben für jede Farbe wieder einen Select Case o.ähn. machen und so wär die Ansteuerung der GRB 5050 mit dem Ws2812b Chip wesentlich kürzer !


      Schade auch das man das Array auch nur in Byte dimensionieren kann und nicht in Bit... würde für diesen Fall völlig reichen und noch mehr Speicher sparen......
    • Immer noch Fragezeichen bei mir. Du verwendest den Ws2812-chip? Warum dann nicht die Rainbow.lib, die dafür gemacht wurde?
      Die verwendet natürlich auch Speicher für die Led-farben, aber die Ansteuerung ist doch viel einfacher.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Naja, offensichtlich doch nicht so bestens. Meine Versuche seinerzeit zeigten, dass die bascom-Befehle einfach zu lahm waren. Das mag sein, dass es am Anfang noch innerhalb der Toleranzen der Ws2812 liegt, wenn der Datenstrom dann länger wird, dann passt es nicht mehr.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Das mag stimmen Tschoeatsch ! Die Ws2812b Chips unterliegen einer gewissen Exemplarstreuung .....
      es ist aber trotzdem möglich weit mehr als 125 mit dieser Schleifenart fehlerfrei anzusteuern... nur kann ich das nicht ausnutzen
      eben wegen SRAM out of Space....

      Deshalb wäre das mit der eingesetzten Variablen in das Array ( meine ursprüngliche Frage von oben ) sehr hilfreich !
    • Ok, dann grundsätzlich, jede Variable hat solange seinen Wert, bis er mit einem neuen überschrieben wird. Im einen Fall hast du eben 3x125 Werte, im anderen nur 125 Werte. Wieviele brauchst du jetzt? 5x20 sind bei mir im Taschenrechner 100 und nicht 125.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • absolute beginner schrieb:

      Schade auch das man das Array auch nur in Byte dimensionieren kann und nicht in Bit...
      Du kannst ja auch auf einzelne Bit eines Bytes mit MyByte.0 zugreifen und das geht auch mit einem Array

      MyArray(x).y

      Wie viele WS2812 sollen es denn am Ende sein?
      Ich frag nur, weil du ja pro LED 3 Byte brauchst.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Ich rätsel gerade, wie das überhaupt gehen soll. Ich sehe waitms 0.5, ich dachte, da gehen nur ganze Zahlen. Selbst wenn es 500 MicroSekunden ergibt, ein reset, damit die Daten an den Leds angezeigt werden, kann bei 50 microSekunden schon ausgelöst werden.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ja bei meiner ursprüngliche Frage ( ganz oben ) hab ich nur die Dims für eine Zeile als Beispiel angegeben !


      ich brauche natürlich für alle 5 Zeilen forlgend ...

      Dim Cg1(125) As Byte
      Dim Cr1(125) As Byte
      Dim Cb1(125) As Byte
      Dim Cg2(125) As Byte
      Dim Cr2(125) As Byte
      Dim Cb2(125) As Byte
      Dim Cg3(125) As Byte
      Dim Cr3(125) As Byte
      Dim Cb3(125) As Byte
      Dim Cg4(125) As Byte
      Dim Cr4(125) As Byte
      Dim Cb4(125) As Byte
      Dim Cg5(125) As Byte
      Dim Cr5(125) As Byte
      Dim Cb5(125) As Byte

      Dabei sind aber nur die 20 Leds ( pro Zeile ) auf der Anzeige sichtbar ! Der dann nach links eingeschobene Text wird allerdings ( unsichtbar ) rechts davon gesetzt !

      Der Zeichensatz ist zu je 2 Leerstellen + 5 Stellen ( Zeichenbreite ) von mir definiert worden ....

      15 Zeichen mal 7 Stellen ( unsichtbarer Teil ) + 20 ( sichtbarer Teil ) = 125
    • Ok, wird klarer, 5 Streifen mit 20 Leds übereinander. Klar, die Ws2812 haben 'Speicher' drin, 3 bytes. Wenn die reingeschoben sind, sind die Variablen im Programm wieder frei. Aber wenn du eine Led ändern willst, dann musst du die Daten für alle Leds rein schieben, also brauchst du die 125 bytes pro Streifen, eigentlich pro Farbe und Led nur 1 byte.. Oder zu zerfutzelst alle Buchstaben des sichtbaren Textes in bits, die du gleich in die Ws2812 schiebst, dann brauchst du weniger. Das ist aber leider Theorie, das geht zeitlich nicht.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • absolute beginner schrieb:

      15 Zeichen mal 7 Stellen ( unsichtbarer Teil ) + 20 ( sichtbarer Teil ) = 125
      Verstehe ich das jetzt richtig. Du willst also alle Zeichen in dem Array speichern die teilweise sichtbar sind und teilweise noch nicht sichtbar sind?
      Wenn ja ist das viel zu umständlich. Wenn es eine Scrolltextanzeige werden soll brauchst du doch nur dein Array um eine Zeile/Spalte verschieben und an der freien Stelle den neuen Inhalt einfügen. Also mach dein Array genau so groß wie deine Anzeige ist also Pixel hat und das ganze mal drei.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Michael schrieb:

      tschoeatsch schrieb:

      Oder zu zerfutzelst alle Buchstaben des sichtbaren Textes in bits, die du gleich in die Ws2812 schiebst, dann brauchst du weniger. Das ist aber leider Theorie, das geht zeitlich nicht.
      Warum soll das nicht gehen?

      Du verwendest ja auch den Speicher von der lib. Ich meinte ohne Speicher für jede Led, sondern die zu sendenden bytes werden aus dem Buchstaben gefutzelt und in die latches von den Ws2812 geschoben. Einmal drin, braucht man nix weiter.

      Wie oft trägst du dein Schmuckstück?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Apropos zerfuzeln .... ich hab sogar ( allerdings mit anderen Streifen ) die 8 bit pro Farbe ausgeben können .....
      also von daher kein Problem .... Die Schleifen laufen !

      eigentlich würde ich nur gerne wissen ob mein Wunsch, hier an Variablen zu sparen,
      sich mit dem Einsetzen der Variablen(g,r,b) in die Byte Arrays machen ließe !

      Dann bräuchte ich pro Zeile nicht 3 Byte Arrays sondern nur eines !
    • 8 bit pro Farbe ist 1 byte. Es gibt RGBW Leds, die 4 byte verwenden. Aus meiner Sicht brauchst du pro Led (Ws2812) 3 byte. Macht 20x5x3=300 byte.
      Was ich aber immer noch nicht raller, in deinem Programmschnipsel frägst du ab, ob ein byte einer Farbe 1 oder 0 ist. Das wäre bei der Ws2812 fast aus, bzw ganz aus. Du stellst offensichtlich keine Farbnuancen dar, oder wie?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------