@Mac80:
Zu dem TSL Code.
Erstmal glaube ich das da ein paar Klammern in Deiner task_TSL nicht so ganz richtig gesetzt sind.
Eine if Bedingung ohne klammer führt nur genau EINE direkt darauf folgende Zeile aus.
Die Einrückung spielt in C anders als in Python keine Rolle

Und was if(channel == 3) da überhaupt zu suchen hat ist mir auch nicht ganz klar.

Also strukturier es doch zunächst etwas einfacher und versuch erst danach es so zu machen
wie es für die SRFs gelöst wurde.

Du musst ja nicht die requestedDataReady Funktion verwenden.
Das ist nur um mehr Dinge nebenläufig erledigen zu können eingeführt worden.
Es geht auch normal blockierend.

Im Beispiel RP6Base_I2CMaster_04.c siehst Du wie man beide Arten auch miteinander mischen kann.

Dann reduziert sich ein Zugriff auf so einen Sensor z.B. auf


Code:
#define PCF8591_4LDRS_ADR  0x90

/**
 * Read 4x PCF8591 LDRs - we do not take advantage of the method we use for
 * the SRF Sensors above!
 */
void task_ext_LDRs(void)
{
    if(getStopwatch2() > 200) 
    {
        I2CTWI_transmitByte(PCF8591_4LDRS_ADR, 0b01000100 );  // 64 + 4); 
        
        uint8_t results[6];
        I2CTWI_readBytes(PCF8591_4LDRS_ADR,results,5);
        // Byte 0 contains last conversion result - thus we skip it and
        // begin with results[1]:
        writeString_P(" | LDR1:"); writeInteger(results[1], DEC); 
        writeString_P(" | LDR2:"); writeInteger(results[2], DEC); 
        writeString_P(" | LDR3:"); writeInteger(results[3], DEC); 
        writeString_P(" | LDR4:"); writeInteger(results[4], DEC); 
        writeChar('\n');
        setStopwatch2(0);
    }
}
Hier ein PCF8591 4 Kanal ADC auslesen - musst Du natürlich noch an den Sensor anpassen.
Probiers doch erstmal so.

MfG,
SlyD