Gast
#5215902
Hallo ich will eine Wortuhr bauen mit WS2812 LED Pixel als Anzeige. Es gibt ja auf dieser Seite eine Zusammenfassung über die Ansteuerung: https://www.mikrocontroller.net/articles/WS2812_Ansteuerung Ich wollte einen Streifen aus ca 10 LEDs mal zum testen mit einem PIC16F887 ansteuern. Es werden ja 24 Bits in einer Reihe gesendet für ein LED (G;R;B). Zum testen habe ich den Ausgang direkt im Code ohne Schleifen etc. 24-Mal ein und ausgeschaltet. Für 0-Bits schalte ich den Ausgang ein und direkt wieder aus. Laut anderen Quellen spielt die Low-Dauer so gut wie keine Rolle. Für ein 1 füge ich zwischen ein- und ausschalten 2 NOP() Aufrufe ein. Beispiel: Low-Bit: Pin = 1; Pin = 0; High-Bit: Pin = 1; NOP(); NOP(); Pin = 0; Ich habe eine Taktfrequenz von 8MHz (Interner Oszillator). Daher wäre das ja: 2x(1/(8MHz/4))=500ns. Alles über und um die 500ns High Time sollte eigentlich als 1 interpretiert werden. Das LED schaltet sich dann auch ein, aber immer weiss. Auch wenn ich nur 0-Bits zu senden versuche. Das heisst, jedes Bit wird eigentlich als 1 erkannt, was heissen müsste, dass die Zeit zwischen ein- und ausschalten zu lang wäre. Habe schon überlegt, ob meine Taktfrequenz zu niedrig ist. Mit dem Multimeter messe ich am Ausgangspin um die 33kHz, wenn ich ihn im Programmcode ständig invertiere, was ja viel zu niedrig wäre. Weiss aber nicht, ob das Multimeter was taugt zum Frequenz messen. Daher hier mal meine Konfiguration der Frequenz, vielleicht sieht jemand einen Fehler: #include <xc.h> #include <stdlib.h> #include "../Include/ws2812.h" #define _XTAL_FREQ 8000000 // CONFIG1 #pragma config FOSC = INTRC_NOCLKOUT #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = ON #pragma config CP = OFF #pragma config CPD = OFF #pragma config BOREN = OFF #pragma config IESO = OFF #pragma config FCMEN = OFF #pragma config LVP = OFF // CONFIG2 #pragma config BOR4V = BOR40V #pragma config WRT = OFF void main(void) { ANSEL=ANSELH=0x00; OSCCON=0b01110001; } Im Anhang ist noch der entsprechende Datenblatt-Auszug für das OSCCON Register. Hat jemand eine Ahnung, wo das Problem liegen könnte? Wäre sehr dankbar für irgendwelche hilfreichen Tipps. MFG
