mikrocontroller.net

Forum: Compiler & IDEs ADC messen/vergleichen - Anfängerfrage


Autor: SoN (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich spiele momentan mit einem CNY-70 zur optischen Erkennung eines 
Zählwerks. Die Messung läuft auf den ADC und wird in einer ISR ständig 
auf eine Variable gelegt.
Nun zur eigentlichen Frage... ich habe folgenden Auswertecode und möchte 
mal jemand mit c-Erfahrung draufschauen lassen, um hier einen 
grundsätzlichen Fehler auszuschließen. Grund ist, dass ich immer mehr 
Impulse messe, wie eigentlich da sind. (ja ich weiss, CNY ist nicht der 
Beste für sowas). Bei meinen Beobachtunen hat der Sensor aber immer die 
richtige Anzahl Impulse geliefert.
hier der code :
 uint8_t pu = 0;               // Zähler für Stromimpulse
uint8_t signal = 0;             // Signalsteuerung Strom 0= messen AN 1= messen aus
uint8_t signalg = 0;            // Signalsteuerung Gas 0= messen AN 1= messen aus

//Hauptschlfeife
// *************
    
  while(1)
  {

  #if USE_ADC
    ANALOG_ON;
    
    #if CNY70
      // Strom
      if (var_array[4] < var_array[24])     // var4 enthält ADC-Wert CNY-70 Stromzähler, var 24 Schaltschwelle
        {
        if (signal ==0)      // nur Flanke zählen
          {
        pu++;
        //lcd_print(1,8,"P:%3i",pu);
        signal = 1;
          }
        }
      else signal = 0  ;
    
      if (pu == 75) {        // 75 Umdr. sind 1kWh
        var_array[28]++;      // var 28 Strom in kWh 
        pu = 0;
          }
    
      // Gas
      if (var_array[5] > var_array[25])     // var5 enthält ADC-Wert CNY-70 Gaszähler, var 25 Schaltschwelle
        {
        if (signalg ==0)      // nur Flanke zählen
          {
          var_array[27] = var_array[27] + 10; // Gaszähler Liter
          signalg = 1;
          }
        }
        else signalg = 0  ;    
      
      if (var_array[27] >= 999) {
        var_array[26]++;      // Gaszähler m3
        var_array[27] = 0;  }

    #endif  //CNY70
  
  #endif //USE_ADC

Danke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SoN wrote:
> Hallo,

> Nun zur eigentlichen Frage... ich habe folgenden Auswertecode und möchte
> mal jemand mit c-Erfahrung draufschauen lassen, um hier einen
> grundsätzlichen Fehler auszuschließen. Grund ist, dass ich immer mehr
> Impulse messe, wie eigentlich da sind.

Dein Problem wird sein, dass der ADC durch rauschen bzw. sonstige 
Einflüsse keinen konstanten Wert liefert, selbst wenn der CNY nicht 
angeschlossen ist. Wenn nun das ADC Signal ständig ein klein wenig rund 
um die Schaltschwelle pendelt, dann zählst du jedesmal eine Flanke.
Was du brauchst ist eine Hysterese.
Beim Anstieg des ADC zählst du die Flankenerkennung erst dann, wenn eine 
Schaltschwelle überschritten wird. Aber beim Absinken des ADC Werts, 
sollte der Mechanismus erst dann wieder scharf geschaltet werden, wenn 
die Schaltschwelle deutlich unterschritten wurde.

Autor: SoN (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für den Hinweis.
Ein erster Test verspricht Erfolg!
gruss
SoN

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.