Forum: Mikrocontroller und Digitale Elektronik C >>> Ausgelagerte/autonome Abläufe möglich?


von __Son´s B. (bersison)


Lesenswert?

Hallo!
Versuche mich an einem Mini-Spiel.
Hier müssen Abläufe mit entsprechenden LED-Indikationen erfüllt werden 
bevor der User zum Ziel gelangt (oder nicht).

Der Ablauf ist klar, aber es müssen immer wieder Tasten abgefragt und 
autonom dazu LED-Signale (blinkend, dauerhaft, 1-malig für X Sek.) 
signalisieren.
Mit "Interrupt" setze ich mich gerade auseinander.

Ich stelle mir vor, dass aus dem main() hin und wieder Macros mit 
diversen LED-Signalisierungen angesprochen werden - teiles 2 parallel - 
und autonom bis zu einem Stopp-Befehl stumpf in einer Endlosschleife 
verharren.
Jetzt suche ich nach einer "sauberen" Struktur.

Folgend eine Signal-Schleife (9 unterschiedliche Signalvarianten):
1
void Scharf_fehler(void)  // Türe nicht geschlossen
2
{
3
  AlleSignale_aus();
4
  //uint8_t Durchlauf=5;
5
  //while (Durchlauf)
6
  while (1)
7
  {
8
    //LED_GN_ON;
9
    LED_GE_ON;
10
    //LED_RT_ON;
11
    SIGNAL_ON;
12
    //ALARM_ON;
13
    WarteMS(200);
14
    //LED_GN_OFF;
15
    LED_GE_OFF;
16
    //LED_RT_OFF;
17
    //SIGNAL_OFF;
18
    //ALARM_OFF;
19
    WarteMS(100);
20
    //Durchlauf--;
21
  }
22
}

_Hintergrund_
Anfänger
C
ATMEL ATtiny84
ATMEL Studio 7.0.x

von STK500-Besitzer (Gast)


Lesenswert?

__Son´s B. schrieb:
> WarteMS(200);

in der Zeit könnte man was anderes machen, und nicht einfach nur den 
Prozessor zum Warten zwingen, sondern nur diese Aufgabe 
("Multitasking"...)

von Stefan F. (Gast)


Lesenswert?

Zustandsautomaten sind ein gängiger Lösungsansatz für diese Aufgabe: 
http://stefanfrings.de/multitasking_arduino/index.html

von __Son´s B. (bersison)


Lesenswert?

Danke, erst einmal!
Werde mich mit "state machine" auseiander setzen.
Vor ~1Jahr gelesen, aber leider wieder verschüttet.

von __Son´s B. (bersison)


Lesenswert?

Ok, State machine ist klar, jetzt "nur noch" einen Timer 0 zum laufen 
kriegen und via Interrupt auswerten.
Wichtig, aber nicht ganz so einfach.

Interner Takt steht derzeit auf 1MHz;
#define F_CPU 1000000UL
Gibt es hier günstige und ungünstige Konstellationen im Zusammenhang mit 
einem Timer?

von Einer K. (Gast)


Lesenswert?

__Son´s B. schrieb:
> Gibt es hier günstige und ungünstige Konstellationen im Zusammenhang mit
> einem Timer?
Durchaus kann es hier Konfigurationen geben, welche nicht das tun, was 
du dir wünscht.

von Stefan F. (Gast)


Lesenswert?

Beispiel für die Sache mit dem Timer (ohne Arduino):
http://stefanfrings.de/avr_hello_world/index.html

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.