- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 15

Thema: Ansteuerung eines SparkFun AS7265x Triad Sensors

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    899
    Hmmm?!?

    Das ist aber nicht die ominöse Delay-Konstante aus dem Quellcode?
    Code:
    #define AS7265X_POLLING_DELAY 5 //Amount of ms to wait between checking for virtual register changes
    Haben die so ziemlich in jede Registerzugriffsroutine mit einem Delay() reingeknallt.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    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.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Nachtrag:

    Was noch zu den AS7265x Sensoren zu sagen wäre ist, das Sie schnelle Abfragen auf dem I2C Bus nicht mögen.
    In der Arduino lib sind vermutlich dehalb auch sehr viele Zeitschleifen eingefügt.
    Manchmal hägen sich die Module dermassen auf, das auch ein Softwarereset nichts mehr hilft.

    In der endgültigen Version werd Ich wohl den Reset Pin ansteuern um da wieder raus zu kommen.

    Die Abfrage eines Moduls dauert im Besten Fall bei mir 1/2 Sekunde für die 18 möglichen Wellenlängen.

    Ob das mit der seriellen Schnittstelle besser geht hab Ich nicht getestet.

Ähnliche Themen

  1. Normalisierung von Daten eines Beschl.sensors
    Von Snaper im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 05.08.2011, 19:22
  2. Genauigkeit eines Sensors
    Von Student123 im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 04.08.2011, 15:03
  3. Wie berechne ich die Temperatur eines NTC Sensors ?
    Von Shadow992 im Forum Sensoren / Sensorik
    Antworten: 7
    Letzter Beitrag: 27.05.2010, 15:41
  4. Antworten: 13
    Letzter Beitrag: 18.02.2006, 17:19
  5. Anschluss eines Sensors an einen PCF8574
    Von batti112 im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 16.03.2005, 02:01

Berechtigungen

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

LiFePO4 Speicher Test