Forum: Mikrocontroller und Digitale Elektronik Berechnung Zähldauer


von Max (Gast)


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...)

von Max (Gast)


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

von Peter II (Gast)


Lesenswert?

lass es doch einfach im Simulator laufen. Dort stehen die Zeiten da.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.