- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 11

Thema: konfiguration analoger Pins

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Der Mittelwert wird doch gebildet über:
    - Die Summe der AD-Werte aller aktiven Kanäle geteilt durch..
    - ...die Anzahl aller aktiven Kanäle.
    Dann brauchst Du doch nur für die Mittelwertbildung eine Variable "sum" und eine Variable "count"

    Vielleicht ist aber auch für den Youngster das Schwierigste, eine elegante Konfigurationsbeschreibung für die aktiven Kanäle zu finden. Mal als Ansatz dazu: Die Info "aktiv/nicht aktiv" für einen Kanal passt in ein Bit. Ein Byte hat 8 Bits, das reicht auf jeden Fall, um bitcodiert die Zustände aller vier Kanäle abzufragen. Du kannst also über eine Variable "config" die Konfiguration aller Kanäle zusammenfassen. Bit0 zeigt an, dass AD0 aktiv ist, Bit1 zeigt den Zustand von AD1, usw...
    Wie man so ein Bit abfragt, weißt Du? Klar, durch eine Bitmaske! Z.B. if (config & (0x01 << 2) != 0) gibt an, ob AD2 aktiv sein soll.

    Man kann so jetzt alle 4 Kanäle einzeln durchgehen mit:
    if (config & (0x01 << 0) != 0)
    {
    sum+= Wert von AD0;
    count+=1;
    }
    if (config & (0x01 << 1) != 0)
    {
    sum+= Wert von AD1;
    count+=1;
    }
    …(Kanäle 2 und 3 auch noch)
    Mittelwert = sum/count


    Eleganter geht's aber über ne Schleife:
    for (int i=0; i<4;i++)
    {
    if (config & (0x01 << i) != 0)
    {
    sum+= Wert von AD(i); //Achtung, prüfen: Ist A0=0, A1=1,... dann kann man auch in analogRead den Schleifenzähler i als Argument reinstecken
    count+=1;
    }
    }

    Mittelwert = sum/count

    Last but not least:
    Was passiert, wenn config=0 ist? dann gibt's eine Division durch 0 bei "Mittelwert = sum/Count". Das sollte man abfragen mit "wenn count = 0, dann Mittelwert = 0xFFFF, ansonsten Mittelwert = sum/Count".
    Rundungsfehler: Bei der Messung auf allen vier Kanälen wurde z.B. sum = 3 und Count = 4 ermittelt. Bei der Ganzzahldivision wird immer abgerundet, Obwohl der Mittelwert 0,75 näher an 1 liegt, bekommst Du das Ergebnis 0. Die Rundung kannst Du über "Mittelwert = (((2*sum)/ count)+1)/2 aufpeppen.
    Geändert von Holomino (12.07.2018 um 15:35 Uhr)

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 19.06.2018, 08:39
  2. Konfiguration Port Pins bei Powerdown (Stromsparen)
    Von Alcedo7 im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 29.12.2010, 00:05
  3. I2C Bus mit PIC18F252 Konfiguration
    Von Adonai im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 11
    Letzter Beitrag: 05.12.2006, 08:21
  4. Konfiguration der Pullup-Widerstände
    Von Step im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 23.08.2006, 23:16
  5. Konfiguration eines Keyboards???
    Von EDatabaseError im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 07.07.2005, 15:42

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress