Berechnung Zähldauer

Gast #3627600
Lesenswert?
• ▲
▼
Hallo,

ich habe eine Frage zu meinem Programmabschnitt, welcher folgendermaßen 
aussieht:
1
  if (adc_MITTEL(0 , 255) > 1020)       //Druck bei 255 Samples über 1020
2
  {
3

4
      while(b <= 200)    //Warteschleife
5
      {
6
        while(adc_MITTEL(0 , 100) > 1020)    //Abfrage ob immer noch Druck
7
        {      
8
          PORTC = pumpe;
9
          b = 0;
10
        }
11
        PORTC = 0x00;
12
        b++;
13
      }
14

15
    
16
    uart_WRITEC("Spuelen\n\r");
17
    PORTC |= (1 << DDC4);    //Spülvorgang
18
    _delay_ms(100);    // Einstellen der Spüldauer
19
    PORTC &= ~(1 << PC4);
20

21
    }
22
  }

Es ist quasi so, dass durch den Druck am ADC erst eine Pumpe1 ausgelöst 
wird und nach einer gewissen Zeit, fett wenn der Benutzer nicht 
nochmal den Sensor aktiviert fett, soll eine Pumpe zum Spülen 
ausgelöst werden. Ich habe das ganze jetzt mit einer Zählvariable 
gelöst, da mir kein anderer Weg eingefallen ist um diesen 
"reentry"-Mechanismus zu realisiern.

Frage 1: Gibt es dafür bessere Lösungen?
 -Ich habe auch schon an ISR gedacht, aber ich glaube die wäre zu lange, 
da man ISRs ja so kurz wie möglich halten soll

Frage 2: Wie kann ich die Zeit berechnen, welche der µC zum hochzählen 
der Laufvariable braucht? (Ich steh bei der Frage echt neben mir 
irgendwie...)
Gast #3627893
Lesenswert?
• ▲
▼
Also nach langer recherche, hab ich ausm Assemblercode die 
entscheidenden Stellen gesucht und geschaut wieviele cycles dafür 
benötigt werden. Dabei bin ich auf 7 Cycles gekommen. Laut Datenblatt 
kann der ATMEGA328P bei 16Mhz 16MIPS bewältigen, dass würde für mich 
ergeben, dass einmal die while-schleife raufzählen 44µs dauert. Leider 
stimmt diese Berechnung hinten und vorne nicht mit der tatsächlichen 
Zeit überein. Kann mir da jemand meinen Fehler bei der Berechnung vll. 
verraten? :)

Dank schonmal

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.