Verständnisfrage C-Programmablauf

Gast #1145850
Lesenswert?

Guten Morgen µC-Profis,

ich habe eine Verständnisfrage zum Programmablauf von C-Programmen:

Ich habe eine Anwendung programmiert, in der von einem µC ein 
Messvorgang gesteuert wird. Dieser Programmteil dauert ca. 10s. Wie 
programmiert man es, dass parallel zu dieser Anwendung noch eine LED 
blinkt?

Danke

Helmut
Gast #1145857
Lesenswert?

das sind ein wenig infos. Warum dauert das 10s. Wartest du die ganze 
Zeit oder laufen da so viele Berechnungen ab.

Läuft das Programm nun auf einen µC  oder auf einem PC?

Welchen µC hast du, wenn er ein Timer oder PWM hat sollte sich damit die 
LED fast ohne C zum blinken bringen lassen.
Gast #1145879
Lesenswert?

OK. Mehr Infos:

Ich verwende einen ATmega644. Das dauert so lange, weil ich mehrere 
Warteschleifen eingebunden habe. Es wird nicht viel berechnet, sondern 
nur Ausgänge geschaltet. Und dabei sollte eben die LED blinken. Diese 
hängt aber nicht an einem PWM-Ausgang, sondern an PA7.
#1145889
Lesenswert?

Da hilft nicht viel, als vernünftig programmieren lernen. Zum einen lies 
dir mal das Tutorial hier durch, zum andern lies im Forum und in der 
Codesammlung ein wenig rum, und kupfere dir Ideen ab, wie man mehrere 
Sachen gleichzeitig machen kann.

In Kürze:
Es ist sehr schlecht, wenn dein Programmablauf nur "geradeaus" geht und 
dort länger wartet. Mach dir eine Hauptschleife und einen 
Timerinterrupt. Der Timer steuert sozusagen deinen ganzen 
Programmablauf, indem kurze Sachen dort direkt ausgeführt werden und 
alles was länger dauert durch ein im Interrupt gesetztes Flag dann in 
der Hauptschleife ausgeführt wird. Dann ist es kein Problem, jede Menge 
Sachen quasi "parallel" ablaufen zu lassen.

Matthias
Gast #1145892
Lesenswert?

na dann:

* PA7 auf Ausgang schalten

* Beliebigen Timer aufziehen, Ablaufzeit = Hälfte der gewünschten 
Blinkperiode, Interrupt bei Ablauf.

* Interrupt-Service-Routine (ISR) schreiben: PA7 umschalten und 
Timer-Interrupt quittieren. Für den Eintrag in die 
Interrupt-Vektortabelle haben die AVR-Tools üblicherweise C-Makros, 
soweit ich weiß.

* Globale Interrupt-Freigabe geben und Timer laufenlassen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren