Verständnisfrage C-Programmablauf

Gast #1145850
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
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
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.
#1145885
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.
#1145889
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.