- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 54

Thema: 7-Segmentanzeige mit Farbsteuerung

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #29
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Bei mir ergibt sich das Timing bedingt durch die Software,
    dass ich zwischen den Bytes 7 us Low habe und
    zwischen den einzelnen Bits habe ich zur Zeit 3,8us Low.
    Ich habe 57 Leds dran

    Klicke auf die Grafik für eine größere Ansicht

Name:	WS2812_7us_Pause.png
Hits:	5
Größe:	30,2 KB
ID:	33462

    Übrigens sieht man hier den "Fehler" in der RIGOL-Software vom MSO1104Z. Die automatische Min Max Funktionion für die Pulsbreite funktioniert nicht richtig.
    Das wurde mir sogar bestätigt,...... Die Cursorpositionen stimmen aber BX-AX = 7us
    Code:
    void LedShiftOut(U8* leds, U8 count) 
    {
        U8 one_byte;
        U8 bit_count;
    
        // damit keine Multiplikation verwendet wird:
        count=(count+count+count);             // 3 Bytes pro Led RGB
        DISABLE;   // alle Interrupts sperren
        while (count) {
            CLRWDT();              // den Watchdog bedienen, fass erforderlich
            one_byte = *leds++;    // aktuelles Datenbyte laden
            // 8 Bits durchlaufen:
            for (bit_count = 0; bit_count < 8; bit_count++) 
            {
                if (one_byte & 0x80) // wenn das oberste Bit 7 gesetzt ist dann
                {
                    LATA5 = 1;  // lange High Phase einleiten
                    NOP();
                    NOP();
                    NOP();
                    LATA5 = 0;   // High Phase beenden
                    NOP();   // testweise länger auf low 
                    NOP();
                    NOP();  
                    NOP(); 
                    NOP();
                    NOP();  
                    NOP(); 
                    NOP();
                    NOP();  
                    NOP(); 
                    NOP();
                    NOP();  
                    NOP(); 
                    NOP();
                    NOP();  
    
                } else  // Kurze High Phase weil das Datenbit Low ist
                {
                    LATA5 = 1;  // kurze High Phase einleiten
                    NOP();
                    LATA5 = 0; // High Phase beenden
                    NOP();   // testweise länger auf low 
                    NOP();
                    NOP();                
                    NOP();   
                    NOP();
                    NOP();  
                    NOP();   
                    NOP();
                    NOP();                
                    NOP();   
                    NOP();
                    NOP();  
                    NOP();
                    NOP();
                    NOP();  
                    
                }    
                one_byte <<= 1;   // Das Datenbyte 1 mal links verschieben
            }
            count--;   // Anzahl auszugebener Datenbytes -1
        }
        ENABLE;   // Interrupt wieder einschaalten
        __delay_us(50);  // Das Ende der Datenübertragung erreicht wenn die Leitung länger als 50us Low bleibt.
    }
    Mein LedArray sieht so aus:
    Code:
    // so viele LEDs sollen angesteuert werden:
    #define LED_COUNT 57
    
    /* Jede LED hat 3 Bytes insgesamt also 24 Bits */
    typedef  struct  // __pack weil wir keinen Speicher verschwenden wollen
    { 
        U8 green;     /* 8 Bit fuer die Helligkeit */
        U8 red;       /* 8 Bit fuer die Helligkeit */
        U8 blue;      /* 8 Bit fuer die Helligkeit */
    } TLed;           /* Type Bezeichner ist TLed */
    
    TLed LedArray[LED_COUNT];
    aufgerufen wird dann so:

    Code:
     
    // Beispiel wie die Farben gesetzt werden, hier für LED Nr 4 (Zählung geht von 0..)
    
        LedArray[3].green = 0x00;     // grün aus
        LedArray[3].red   = 0x7F;      // halbe Helligkeit für rot
        LedArray[3.blue   = 0x10;      //   bissle Blau dazu
    
       LedShiftOut(&LedArray,LED_COUNT);
    ab 7,5us Low Phase flippen die LEDs bei mir aus

    - - - Aktualisiert - - -

    @Ceos:
    ich hatte das auch schon, dass nach einigen LEDs nur noch Blödsinn rauskam.
    Bei mir war tatsächlich eine LED defekt. Die habe ich ausgetauscht und dann lief es richitg.
    Hatte auch erst gedacht das es an der Software bzw. Timing liegt.
    Geändert von Siro (16.05.2018 um 19:32 Uhr)

Ähnliche Themen

  1. 7 Segmentanzeige multiplexen
    Von Maverick83 im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 01.06.2011, 14:19
  2. Picaxe <-> 7-Segmentanzeige
    Von D!PSW!TCH im Forum PIC Controller
    Antworten: 16
    Letzter Beitrag: 04.11.2007, 15:58
  3. Farbsteuerung im HSV modell
    Von Jörn Arne im Forum Assembler-Programmierung
    Antworten: 5
    Letzter Beitrag: 05.10.2007, 23:40
  4. 7 Segmentanzeige
    Von TobiasBlome im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 22
    Letzter Beitrag: 17.08.2007, 21:26
  5. Anschlussbelegung 7 Segmentanzeige
    Von Elektronikus im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 19.12.2004, 19:57

Berechtigungen

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

Solar Speicher und Akkus Tests