Forum: Mikrocontroller und Digitale Elektronik Parallel zu delay.h arbeiten - ich steh auf dem Schlauch


von AufdemSchlauch (Gast)


Lesenswert?

Moin,

also irgendwie steh ich gerade auf dem Schlauch.

Annahme:
Ich hab eine Schaltung mit  LCD, Taster und blinkender LED.

Meine LED lass ich in main.c mittels delays.h blinken.

Jetzt hab ich eine Unterfunktion (Entpreller Taster und LCD-Ansteuerung)

Der Taster kommt sagen wir mal ohne Interrupt aus, sondern wird im 
Programm in main abgefragt.

Sagen wir mal meine LED blinkt alle 1 sek. und meine Unterfunktion 
braucht 5 sek. bis sie fertig ist.

sieht das dann nicht so aus?

Abstand 1 Sekunde:
LED 1
LED 0
LED 1
LED 0
Taster 1
5 sek.
LED 1
LED 0

Ich würde mir doch dann das Blinken kaputtmachen oder?

Gruß
der auf dem Schlauch stehende

von Alexander S. (esko) Benutzerseite


Lesenswert?

> Parallel zu delay.h arbeiten
Das funktioniert nicht richtig. Mach das Blinken und die Entprellung mit 
einem Timer-Interrupt.
Und in der Hauptschleife kannst du den Rest der Aufgaben erledigen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

AufdemSchlauch schrieb:
> Meine LED lass ich in main.c mittels delays.h blinken.
Das ist der Fehler.
Mit delay_ms() braucht der Prozessor seine ganze Rechenleistung dafür, 
Warteschleifen zu zählen...

Sieh dir andere funktionierende Programme an. Dort wirst du eine 
(Haupt-)Schleife finden, die der Prozessor dauernd abarbeitet. Und von 
"aussen" werden nur Flags gesetzt, die zeigen, dass etwas getan werden 
muß. Ein solches Flag wäre bei dir z.B. das Sekunden-Flag, das in einer 
kurzen und knackigen Timerinterruptroutine berechnet wird, und anzeigt, 
dass wieder mal eine Sekunde vorbei ist.

von AufdemSchlauch (Gast)


Lesenswert?

so in der richtung hab ich mir das ja auch gedacht, nur ist es doch 
irgendwie doof, dass man gleich mal am Anfang auf die falsche Fährte 
geführt wird, wenn man seine blinkende LED beim ersten Projekt in main 
schreibt.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Oder nimm gleich ein RTOS :) das ist mein Ernst.

Nut/OS z.B. von dehnen sind hier auch Leute im Form unterwegs

MfG

Tec

von Peter D. (peda)


Lesenswert?

Statt Delay einen Timer nehmen, z.B.:

Beitrag "Re: AVR Sleep Mode / Knight Rider"


Peter

von Falk B. (falk)


Lesenswert?

Siehe Multitasking

von Karl H. (kbuchegg)


Lesenswert?

AufdemSchlauch schrieb:
> so in der richtung hab ich mir das ja auch gedacht, nur ist es doch
> irgendwie doof, dass man gleich mal am Anfang auf die falsche Fährte
> geführt wird, wenn man seine blinkende LED beim ersten Projekt in main
> schreibt.

Das Problem ist, dass jeder Anfänger irgendwo anfangen muss. Man kann 
einem Anfänger nicht gleich alles bis zum Timer und Interrupts 
eintrichtern, ehe er sein erstes Programm schreiben kann.

von Klaus W. (mfgkw)


Lesenswert?

Wenn er mehrere Tasks in seinem ersten Programm hat, dann hat er noch 
etwas anderes falsch gemacht. :-)

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.