Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage C-Programmablauf


von Helmut (Gast)


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

von Peter (Gast)


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.

von peter (Gast)


Lesenswert?


von Helmut (Gast)


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.

von Klaus F. (kfalser)


Lesenswert?

Entweder Du programmierst das Blinken der LED in die Warteschleifen mit 
ein (das hat den Vorteil, dass Du siehst dass dein Programm arbeitet) 
oder du verwendest ein klitzekleines Multitasking Betriebsystem, z.B, 
AvrX.
AvrX wird von mir am Atmega32 eingesetzt, funktioniert ohne Probleme.

von Matthias L. (matze88)


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

von tuppes (Gast)


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.

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.