- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Überprüfen der Auslastung/Verarbeitungsdauer?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Beiträge
    209

    Überprüfen der Auslastung/Verarbeitungsdauer?

    Anzeige

    Powerstation Test
    Hallo,

    ich stelle mir gerade mal die Frage, wie ich überprüfen kann, ob der AVR mein Programm auch in der richtigen Zeit ausführt?

    Angenommen ich habe Schleifen mit Zeit-Eintrittsbedingungen, also alle 200ms dies, alle 50ms das und so weiter.

    Wie kann ich überprüfen, ob alles in der entsprechenden Zeit abgearbeitet wird? Hoffe mal nicht mit Stoppuhr...oder? Wenn er zb alle 200ms eine Schleife abarbeiten soll (ADC, Print, LCD-Ausgabe, Berechnungen ect) er aber für die Arbeit 220m braucht, kann man sich ja vorstellen, was nach einer Stunde los ist: er hängt der gewünschten Zeit ziemlich hinterher...

    Wäre ja doof, wenn der vollgestopfte AVR da dem Zeitwunsch nachhängt...

    Vielen Dank

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Dafür gibts die Timer.
    Du kannst z.B. mit nem Uhrenquarz nen Mega in ne Real-Time-clock
    verwandelt, der alle Sekunde exakt eine bestimmte Funktion
    ausführt, die dann möglichst kürzer als eine Sekunde sein sollte.
    Oder mit den Tiern dann halt alle hundertstel oder andere beliebige
    Zeiträume eine bestimmte Funktion macht.
    220ms sind aber auch ne halbe Ewigkeit für nen AVR.
    I Zweifel kannste auch mal mit nem schnelleren Quarz probieren
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Beiträge
    209
    du hast die Frage wohl nicht verstanden. Ich will überprüfen, ob der AVR meine Instruktionen in der richtigen Zeit ausführt, also nicht überlastet ist. Denn es nützt nichts, wenn ich einen Timer einrichte, aber die auszuführende Arbeit länger dauert als die dafür vorgegebene Zeit.

    Wie lange blockiert zb "print" von einem 60Zeichenstring den var? kann ich zb 5mal in der sek (also die angesprochenen 200ms) den String send und in der verbleibenden zeit noch einiges anderes machen lassen?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Also die UART ist ne absolute Bremse vom µC, wird die
    nicht interruptbasierend wie z.B. mit Print betrieben
    ist der Controller ne halbe Ewigkeit am Daumen drehen.
    Für dolche Überprüfungen gibts den Simulator.
    Da steht unten die Cycles also Taktzyklen die
    vergehen und auch die vergangene Zeit.

    Wie lange es dauert 5 Bytes zu senden hängt von Deiner Baudrate ab.

    Wenn Du den String einfach so per Print rausschickst wirds mit anderen Funktionen schwierig noch nebenher was zu machen. Dafür gibts dann den Ringpuffer, der über Config Serial out buffered etc. angelegt werden kann
    oder, wie ich es meist mache, auch manuell eingerichtet werden kann.
    Das Schreiben ins Senderegister UDR ist ne kurze Geschichte, die Hardware übernimmt dann das Senden in Eigenregie, braucht man bis zum nächsten Zeichen dann nix mehr machen, der weil kann der µC dann anderes tun.
    Dafür gibts dann den UTXC- Interrupt, der ausgelöst wird wenn die Übertragung eines Byte abgeschlossen ist. In diesem Interrupt schreibt man dann das nächste Zeichen in die UDR und dann gehts fröhlich weiter mit anderen Dingen, bis eben zum nächsten Zeichen.
    Ob die 200ms reichen für alle Deine Bytes hängt von der Baudrate ab.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Beiträge
    209
    also bei mir steht nach einiger Zeit Cycl.=14767:18.4958
    ist das jetzt gut? Gibt es irgendwo eine Erklärung für den Simulator?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Das sind dann rund 15000 Zyklen, bei nem 16MHz Quarz sind das dann
    rund eine tausendstel Sekunde. Kommt auf den Quarz halt an.

    PS: hab meinen Beitrag oben noch erweitert
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Beiträge
    209
    38400 und arbeiten tue ich mit mit 8MHZ und dem gepufferten Senden

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    ok, also 8n1 Codiert, rechnerisch währen dann ... hmmm ...

    4266 Bytes pro Sekunde übertragbar, also 4,3 Byte pro Milisekunde,
    wenn ich mich nicht verrechnet hab versteht sich.
    auf 200 ms ergeben sich dann 860 Byte ... sollte also gehen

    ... so in etwa und auf die Schnelle
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Beiträge
    209
    Hat ein String von 60 Zeichen hat eine Länge von 60 Byte?
    Oder wie lang ist er?

    Nur nebenbei macht der AVR ja noch eine Menge anderer Dinge, deswegen wäre es wirklich interessant zu wissen, ob die Zeiten stimmen.

    Hat das noch nie jemand nachgemessen?

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    ein Zeichen ist im Allgemeinen ein Byte.
    Der String hat noch ein Byte mehr wegen dem Stringende Zeiger
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen