www.mikrocontroller.net

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


Autor: Helmut (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

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

Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Helmut (Gast)
Datum:

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

Autor: Klaus Falser (kfalser)
Datum:

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

Autor: Matthias Larisch (matze88)
Datum:

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

Autor: tuppes (Gast)
Datum:

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

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.