Das ist aber nicht die ominöse Delay-Konstante aus dem Quellcode?
Nein, diese Polling Konstante wird in der while(1) schleife beim Auslesen des Status Registers benutzt um den Prozess zu verlangsamen.
Ich hab da "_delay_ms(AS7265X_POLLING_DELAY);" draus gemacht.
Beim Auslesen der Sensorwerte müssen die Anzahl der gewünschten Samples * 2,8 und dann noch mal 1,5 ( also *4,2 ) in ms genommen werden.
Ich hab's der Einfachheit halber gleich mal 5 genommen.
Die Sequenz zum Auslesen der 3 Sensoren sieht dann so aus:
Code:
void getchanneltop(void)
{
uint8_t pointer = 0;
uint8_t buffer = 0;
//Readout Data
selectDevice(AS72651_NIR);
setMeasurementMode(AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT); //One-shot reading of VBGYOR
_delay_ms(AS7265X_INTERGRATION_TIME*5);
for(uint8_t i=0x08;i<0x14;i+=2) //Für i hab Ich dann gleich die richtigen Register Adressen benutzt.
{
//selectDevice(AS72651_NIR);
buffer=i2m_AS72xx_topread(i);
Top_read[pointer]=buffer;
Top_read[pointer]=(Top_read[pointer]<<8);
buffer=i2m_AS72xx_topread(i+1);
Top_read[pointer]|=buffer;
pointer++;
}
//Readout Data
selectDevice(AS72652_VISIBLE);
setMeasurementMode(AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT); //One-shot reading
_delay_ms(AS7265X_INTERGRATION_TIME*5);
for(uint8_t i=0x08;i<0x14;i+=2)
{
//selectDevice(AS72652_VISIBLE);
buffer=i2m_AS72xx_topread(i);
Top_read[pointer]=buffer;
Top_read[pointer]=(Top_read[pointer]<<8);
buffer=i2m_AS72xx_topread(i+1);
Top_read[pointer]|=buffer;
pointer++;
}
//Readout Data
selectDevice(AS72653_UV);
setMeasurementMode(AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT); //One-shot reading
_delay_ms(AS7265X_INTERGRATION_TIME*5);
for(uint8_t i=0x08;i<0x14;i+=2)
{
//selectDevice(AS72653_UV);
buffer=i2m_AS72xx_topread(i);
Top_read[pointer]=buffer;
Top_read[pointer]=(Top_read[pointer]<<8);
buffer=i2m_AS72xx_topread(i+1);
Top_read[pointer]|=buffer;
pointer++;
}
}
Das Ganze war schon ein längerer Kampf.
Was immer noch passiert ist, das der Sensor ab und zu kein ACK auf dem I2C bus sendet, aber da hab Ich dann Zeitschleifen rein gemacht, damit der Controller nicht blockiert wird.
Watchdog wäre auch ein Alternative gewesen, allerdings würde der Controller die komplette Initialisierung durchlaufen und das wollte Ich vermeiden.
Lesezeichen