Wieviel Däumchen dreht mein Controller?

Gast #558042
Lesenswert?
• ▲
▼
Hallo,

gibt es eigentlich ne Möglichkeit genau festzustellen wie ausgelastet 
ein µC ist (die zudem nicht viel Arbeit macht) ?

Ich mache meistens in die Main-Schleife (while(1))eine Variable die ich 
bei jedem Durchlauf erhöhe. Nach 10 Sekunden schaue ich mir dann an wie 
oft der da war.

(Das Programm läuft hauptsächlich über Interrupts. In der main wird nix 
außer der initialisierung ...


Gruß
Gast #558051
Lesenswert?
• ▲
▼
Was "ausgelastet" bedeutet, kannst nur Du entscheiden. Der Controller an 
sich ist immer zu 100% ausgelastet, es sei denn, er schläft (sleep).

Wenn Du mit "ausgelastet" = "nicht in der Main-Loop" meinst, ist die von 
Dir verwendete Methode wohl am geeignetsten.
#558197
Lesenswert?
• ▲
▼
Meine (neueren) Programme (AVR, in ASM) laufen alle mit Interrupts und 
benutzen den Sleep. Wenn mich (nur bei umfangreicheren Programmen) die 
Auslastung interessiert, nutze ich einen freien Portpin, setze ihn zu 
Beginn jeder ISR auf H und direkt vor Sleep (Mainloop) wieder auf L. Nun 
kann man mit einem Tastgrad-Messgerät die Auslastung direkt ablesen. Mit 
einem Oszi erkennt man neben der Auslastung auch, ob einige 
Mainloop-Jobs länger als die Pause zwischen zwei Timer-Interrupts 
dauern.

...
Gast #559007
Lesenswert?
• ▲
▼
Wenn du deinen µC in den Pausen nicht schlafen schickst und in der 
Main() ausser einer Warteschleife sonst nichts steht, könntest du es 
vielleicht mal damit versuchen:

In der Main() einen Endlosloop mit folgendem Inhalt einbauen:
1
DDRB  |= 1<<PB0;      // PB0 als Ausgang setzen
2
PORTB |= 1<<PB0;      // PB0 auf definierten Wert (High) setzen
3

4
while(1)
5
{
6
  cli();             // Interrupts disablen
7
  PORTB ^= 1<<PB0;   // Portpin auf 0 setzen
8
  PORTB ^= 1<<PB0;   // Portpin auf 1 setzen
9
  sei();             // Interrupts enablen
10
};

Damit erhältst du an PB0 ein PWM-Signal, dessen Tastverhältnis durch die 
abzuarbeitenden Interrupts moduliert wird. An diesem Portpin kann nun 
ein Tiefpassfilter (RC-Glied) angeschlossen werden um dann eine analoge 
Spannung zu erhalten. Diese Spannung kann bequem mit einem Multimeter 
gemessen werden.

Nachteile dieser Methode wären:

  - der Spannungsverlauf ist nicht proportional zur Prozessorauslastung
  - bei 0% Prozessorauslastung beträgt die analoge Spannung nicht 0V
    ( --> Offsetspannung; kann aber zur Not experimentell ermittelt
    werden)

Gruß,
Magnetus

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.