Forum: Mikrocontroller und Digitale Elektronik Berechnung Zähldauer


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Max (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

      while(b <= 200)    //Warteschleife
      {
        while(adc_MITTEL(0 , 100) > 1020)    //Abfrage ob immer noch Druck
        {      
          PORTC = pumpe;
          b = 0;
        }
        PORTC = 0x00;
        b++;
      }

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

    }
  }

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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
lass es doch einfach im Simulator laufen. Dort stehen die Zeiten da.

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.