www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wieviel Däumchen dreht mein Controller?


Autor: ich (Gast)
Datum:

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

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du kannst in der main imme einen Port auf
0 Schalten. Und im Interrupt immer auf 1. Wenn du jeztt mit einem 
LogicAnalyser oder Speicheroszi oder LED rangehst, siehst du wie 
ausgelastet dein Controller ist.

Autor: Brill (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, man hat die Warteschleife im Main und jedesmal wenn der Prozess da 
reingeht setzt man einen Pin hoch und wider tief. Dann kann man mit dem 
Scope zuschauen.

Autor: tastendrücker (Gast)
Datum:

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

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das meinte ich damit. Ausgelastet in dem fall = nicht in der main 
(Weil er da ja nix macht und nur strom verschwendet ;)

Autor: Willi Wacker (williwacker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast vielleicht auch einen Timer (und ein paar RAM-Bytes) frei, den 
könntest Du auch hernehmen um die Zyklen zu messen, die so verbraucht 
werden. Vorteil: Macht Dir der Prozessor eigentlich als Abfallprodukt.
Nachteil: So wie ich das sehe, müsstest Du jeden Interrupt verändern.

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: Magnus Müller (Gast)
Datum:

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

DDRB  |= 1<<PB0;      // PB0 als Ausgang setzen
PORTB |= 1<<PB0;      // PB0 auf definierten Wert (High) setzen

while(1)
{
  cli();             // Interrupts disablen
  PORTB ^= 1<<PB0;   // Portpin auf 0 setzen
  PORTB ^= 1<<PB0;   // Portpin auf 1 setzen
  sei();             // Interrupts enablen
};


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

Autor: Fehlerteufel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hahaha
ich hab eine 0 gegen eine 1 vertauscht!!

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, da ist 'CBI PORTB,PB0' und 'SBI PORTB,PB0' weniger kryptisch. Aber 
man kann nicht alles haben...  ;-)

Duck&wech...

...

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlerteufel wrote:
> Hahaha
> ich hab eine 0 gegen eine 1 vertauscht!!

Ach wirklich...?

Wo denn...?!?    staun

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.