Ich lach mich kaputt.....
Du hast ja sowas von recht Witkatz
Oh Mann, das tut ja weh, vielen Dank für die Info
--------------------------------------------------
Ich habe jetzt einen laufenden Code, fast ausschließlich in "C" , basierend auf der Funktion von Klebwax(dessen Code ich geklaut habe).
Das Timing stimmt eigentlich nicht, aber das scheint wesentlich unkritischer zu sein als das Datenblatt vorgibt.Code:// so viele LEDs sollen angesteuert werden: #define LED_COUNT 3 /* 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]; void LedShiftOut(U8* leds, U8 count) { U8 one_byte; U8 bit_count; count *=3; // 3 Bytes pro Led RGB while (count) { one_byte = *leds++; // next Byte for (bit_count = 0; bit_count < 8; bit_count++) { if (one_byte & 0x01) // lowest Bit { LATA5 = 1; asm("NOP"); asm("NOP"); asm("NOP"); LATA5 = 0; } else { LATA5 = 1; asm("NOP"); LATA5 = 0; } one_byte >>= 1; } count--; } Delay_ms(1); }
Die Low Phasen dürfen nämlich viel länger sein, das scheint nicht zu stören. Die sind bei mir alle so ca. 2us.
Die High-Phasen müssen lediglich stimmen, dann ist die Welt in Ordnung.
Ich habe zwischen den Bytes sogar 5us Pause, das stellt kein Problem dar.
Nochmal einen DANK an alle Die mir hilfreiche Informationen gegeben haben (beonders Witkatz + Klebwax)
Lesezeichen