-         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: SHIFTOUT mit AVR-Clock

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.538
    Anzeige

    Zitat Zitat von hardware.bas Beitrag anzeigen
    Der Datasheet der RGBDIGITs entspricht genau dem Datasheet der offensichtlich dort verbauten hintereinandergeschalteten intelligenten RGB-LEDs, darum ist korrekt, dass für die Ansteuerung eines Digits 8x24 BITs gebraucht werden.
    Da gibt es aber keine Pause. Die 192 Bits müssen am Stück raus. Kommt da eine Pause drin vor, wird wieder die erste LED angesteuert.

    Das Protokoll für eine 8-stellige Anzeige besteht also in 64 Datenpaketen
    Wenn man die Digits einzeln ansteuert, sind es 8 Datenpakete, eins pro Digit, mit einer Länge von 192 Bits.

    Eigentlich macht man das aber anders. Man schaltet die Digits einfach hintereinander. Es sind ja "nur" 64 LEDs für die 8 Digits. In anderen Projekten werden 100 oder auch 200 LEDs so gesteuert. Ich hab eine Matrix mit 144 (12*12) LEDs in Betrieb, aber mit einer fertigen Library, deren innere Funktion ich nicht kenne. Das entspricht einer Anzeige mit 18 Digits.

    Die Interuptroutine von 1250ns muss reichen, einen einzigen Spike zu senden und Longvariable um eine Stelle in einen Ausgangspin zu schieben. Die 50 Mikrosekunden-Pause dient dazu, die Longvariable (obwohl nur 3 Byte benötigt werden) neu zu beschreiben. und einen Zeiger zu incrementieren.
    Auf einem 8-Bitter werden aus einem Shift eines Longs 4 Shifts eines Bytes. Dazu braucht man noch einen Zähler, der die 24 Bit abzählt. Und da es diese "50 Mikrosekunden-Pause" nicht gibt, muß man sich in den 1250ns alle 24 Bits noch um das Nachladen kümmern. Dazu werden am Anfang des Interrupts noch einige Register gerettet, die am Ende wieder hergestellt werden müssen. Die Neopixel-Libraries schieben 1000 und mehr Bits in einem Rutsch raus.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Sandfurth
    Beiträge
    1.107
    Ich sehe - bis jetzt - im Datasheet immer noch die Pause
    alle 24 BITs. Die einzelnen Segment-RGB-LEDs müsste
    daher schaltungstechnisch als Einzelbauelemente
    betrachtet werden. Also 64 Sendeprozeduren bei
    8 DIGITs. Offensichtlich erfolgt die Adressierung so,
    dass jede LED nur das erste 24 BIT-Datenpaket auswertet,
    dann ausblendet und nur die restlichen weitersendet usw .
    Meine neue Idee währe jetzt, während der Displayansteuerung
    sämtliche Interrupts abzuschalten und wie folgt zu verfahren:
    DIM IMPULS AS BIT(24)
    .
    FOR SEGMENT = 1 TO 24
    PORTA.1 = BIT(SEGMENT) : Ausgabe der H/L-Torsteuerung
    NOP : oder mehrere NOPs
    TOGGLE PORTA.0 : Spike für die MMVs
    TOGGLE PORTA.0 : gibt wohl dafür einen extra Befehl
    NOP : oder mehrere NOPs
    NEXT SEGMENT

    VG Micha

    werde
    Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
    Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Sandfurth
    Beiträge
    1.107
    Muss leider zugestehen, dass BIT-Arrays nicht compiliert werden.
    Das variablenbezoge Auslesen von LONG-BIT akzeptiert jedoch
    der Compiler. Um die die og FOR-NEXT-Schleife umzuschreiben,
    wollte ich im Vorfeld mittels Bascom-Simulator, die notwendigen
    Taktzeiten ermitteln. Leider weiss ich nicht, wie das dort lösbar
    ist, irgendwelche "clocks" zeigen 0 an, laufen jedoch biem Bewegen
    des Mauszeigers auch nach dem Ende der Simulatin weiter.
    Gibts da einen Trick? Im BASCOM-Help wurde ich nicht fündig.
    VG Micha

    - - - Aktualisiert - - -

    Hab jetzt versucht, die Realtimevorgänge im BASCOM-Simulator
    mit Auslesen des TIMER1 in etwa rauszukriegen. Scheint für
    Zeitsimulationen ungeeignet zu sein. Wird wohl für weitere
    Aussagen hierzu die Hardware besser entscheiden, sprich,
    das ATMega8-Experimentier-Board.
    VG Micha
    Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
    Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Sandfurth
    Beiträge
    1.107
    Ohne Programmänderung hat bei meinem BASCOM-Simulator heute plötzlich
    die Timerfunktion funktioniert. Leider war die Wiederholgenauigkeit teilweise
    nicht akzeptabel. Heraugekommen sind jedenfalls Werte, welche eine viel
    zu hohe Taktzahl für alle bisher avisierten Lösungen zur Ansteuerung der
    RGB-DIGITs zur Folge haben (Jenseits von Gut und Böse). Ich verzichte aus
    Zeigründen daher auf einen Hardwaretest und die Nutzung (trotz anfänglicher
    Euphorie) der RGB-DGITs. Werde eine andere effektvolle Anzeigenform finden
    VG Micha
    Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
    Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Wenn du selber mit dem Timing nicht zurechtkommst, dann würde ich mir mal die Rainbow-Lib (RB_...) ab Bascom Version 2.0.8.0 ansehen. Die ist von einem cleveren Programmierer genau für die WS2812 Chips gemacht worden.
    Ist zwar eigentlich für RGB Stripes gedacht, wird aber mit deinen RGB Digits genau so funktionieren.

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.955
    Ich hab mir jetzt mal einen anderen Beitrag mit den Anzeigen von Dir angeschaut.
    Hier geht es ja nicht um eine SPI, sondern um eine Codierung, bei denen ein 0 Bit und ein 1 Bit lediglich eine andere Pulsweite aufweisen.
    Das würde ich versuchen mit einem Timer zu realisieren.
    Bei einem 20MHz Prozessortakt würde ein Timer für ein Bit genau 25 Prozessortakte für ein komplettes Bit brauchen.
    Wenn man jetzt einen Timer mit einem CTC und dem Compare A Timer mit 24 proggt und das Comparematch B mit dem Wert für die 1 oder 0 versieht ( z.B. 17 ),
    werden gültige Pulslängen ausgegeben. Der Comparematch B müsste dazu im Fast PWM Modus arbeiten.
    Der Comparematch B Wert müsste im Comparematch Interrupt A upgedatet werden.
    Die Crux dabei ist, das die Updaterei innerhalb von ca. 7 Prozessortakten geschehen muss.
    Das ist auch in Assembler keine leichte Aufgabe.
    Alle Register sichern wie Bascom das üblicherweise macht wird wohl nicht möglich sein.
    Ich würde es mit einem inkrementierenden X Register und einer Tabelle mit einem Tabellenplatz ( = 8Bit ) pro auszugebenden Bit in Assembler probieren.
    Die benutzten Register dürfen dann aber von Bascom nicht mehr verwendet werden und exklusiv für die Biterzeugung des Displays arbeiten.

    Alternativ könnte man das Gleiche auch im Comparematch B Interrupt versuchen.
    Allerdings muss man dann peinlichst darauf achten, das das Comparematch B Register nicht zu früh geändert wird.
    Dann hätte man für die Updaterei 16 Prozessortakte.

    Die Aufgabe bleibt aber weiterhin sportlich.

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Sandfurth
    Beiträge
    1.107
    Danke erstmal für die vielen Hinweise. In der Tat, das Projekt
    habe ich noch nicht ganz aufgegeben. Ich werde mich mal
    "back to the roots" begeben und der AVR wird dann nur noch
    für die Bereitstellung der für eine 8-stellige Anzeige notwendigen
    24-Bit-Datenpakete für die Segmente sorgen müssen, neben
    seiner egentlichen Aufgaben. Der Rest wird hardwaremässig
    erledigt. Die Impulse (400nS für L und 850nS für H) werden dann
    nicht mehr von 2 MMVs (RC-Abgleich entfällt) erledigt, sondern
    mit einem synchronen Binärzahler mit umschaltbaren Datenmuster
    erzeugt. Entweder durch unterschiedliche Voreinstellung oder
    gesteuerte UND-Abgriffe mittels Gatter, beides durch Umschaltung
    von H/L. Diese Impulse werden einem 24-Bit-Schieberegister, welches
    mit dem 1/25 Takt des Binärzählers (50nS/1250nS) bedient wird
    entnommen. Dieses Schieberegister wird während der 50000nS-Pause
    parallel über 3-Byteports geladen. Anstelle des 20MHz-Oszillators
    für die Anzeigehardware, kann dann auch problemlos ein entprellter
    Handtaster für den Funktionstest genommen werden.
    VG Micha
    Was brauche ich für Werkzeug - in dieser Reihenfolge seht ihr es:
    Vorschlaghammer, Notebook, BASCOM, Lötequipment, Rohrzange, Bolzenschneider ...

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Probleme mit Shiftout
    Von rauf81 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 22.05.2011, 17:31
  2. SHIFTOUT mit externem Takt möglich?
    Von stefan_Z im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 27.11.2007, 13:10
  3. ShiftOut und ShiftIn in Assembler einbinden
    Von Ruppi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 31.12.2005, 18:37
  4. [ERLEDIGT] Verständnisfrage shiftout / HC595
    Von Jürgen200 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 10.01.2005, 14:25
  5. Shiftout geht nicht?
    Von x-ryder im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 01.12.2004, 17:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •