Forum: Compiler & IDEs Korrekter Programmaufbau


von Rainer (Gast)


Lesenswert?

Hi,

wie würdet Ihr das Programm aufbauen:

Aufgabe:
-bestimmte Signalfolge an 4 Pins anlegen
-an 2 AD-Pins den anliegenden Wert mehrfach messen, umrechnen und 
anzeigen

Überlegung bis jetzt:
-Interruptfunktion, die die Signalfolge steuert und dementsprechend die 
Messung aufruft
-in der Main wird jede Sekunde eine Funktion aufgerufen, die den 
aktuellen Messwert umrechnet und anzeigt

Ist dies OK? Oder gibt es einen besseren Programmaufbau (sparsamer, 
sicherer...)

von Oliver (Gast)


Lesenswert?

Nun, wenn das die gesamte Aufgabenstellung ist, brauchst du dich um die 
Eingabepins gar nicht zu kümmern. Eine Signalfolge anlegen kann man da 
ja jederzeit, passieren soll damit ja nichts weiter ;)

Also einfach alle 100ms eine ADC-Messung machen, und anzeigen. Fertig.

Oliver

von Rainer (Gast)


Lesenswert?

Es tut mir leid, da habe ich mich falsch ausgedrückt. Ich soll eine 
Signalfolge nach einem bestimmten Rhythmus an 4 Leitungen raus geben.

von Karl H. (kbuchegg)


Lesenswert?

Also zeitliche Steuerung.


Getreu dem Motto, dass jedes ordentliche Programm in irgendeiner Form 
einen Timer braucht, bist du auf einem guten Weg.

von Rainer (Gast)


Lesenswert?

Die Frage ist, ob ich z.B. die Messung in der Main aufrufe, oder vom 
Timerinterrupt aus.
Also läuft mein Programm standardmäßig von der main-Fkt aus, nur die 
Signalfolge wird im TimerInterrupt gesteuert?

von Karl H. (kbuchegg)


Lesenswert?

Rainer schrieb:
> Die Frage ist, ob ich z.B. die Messung in der Main aufrufe, oder vom
> Timerinterrupt aus.

Ist es im kleinen µs Bereich zeitkritisch bzw. wie aufwändig ist die 
Generierung?

Wenn zeitkritisch bzw. einfach zu implementieren: Ab in die ISR damit.

> Also läuft mein Programm standardmäßig von der main-Fkt aus, nur die
> Signalfolge wird im TimerInterrupt gesteuert?

Ist zb eine Möglichkeit.

von Pako (Gast)


Lesenswert?

Ein Vorschlag:

Synchronisiere die main-Schleife mit einem festen Zeitintervall, z.B. 
alle 10ms. D.h. die Schleife wird alle 10ms einmal durchlaufen.

Dann kannst alle Aufgaben, die zyklisch und in einem festen Intervall 
erfolgen müssen, in diese Schleife hineintun.

Nur die Aufgaben, die eine schnelle und sofortige Reaktion benötigen, 
kommen in die ISR.


Beispiel:
Du mißt einen Wert und gibst in einmal pro Sekunde mit printf über einen 
UART aus.
-> Das printf() kommt in die Hauptschleife
-> Das Füttern des UARTs kommt in den UART-TX-Interrupt.

PS: Überleg Dir gut, was wirklich eine sofortige Reaktion benötigt. Das 
Abfragen eines Buttons muß nicht über Interrupt erfolgen.

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.