Forum: Compiler & IDEs C - Gekoppelte mC's - gekoppelte Zustandsautomaten - IRQ - AVR


von J. W. (ontheway)


Lesenswert?

Hi,

ich habe mal eine eher strukturelle Frage. Ich habe so eine billige 
Ampelsteuerung programmiert, die letztens Endes aber viel mehr Ausgangs- 
und Eingangsports bedienen soll. Allerdings möchte ich gesichert dafür 
sorgen, das das Gesamtsystem im Notfall in einen definierten Zustand 
übergeht. Nun habe ich mir gedacht, und das auch schon programmiert: Ich 
nutze jetzt  einen IRQ, um in jedem Zustand zum Beispiel ein Notaus zu 
haben. Das finde ich wesentlich effektiver, als nur einen Eingabeport 
zur Kontrolle abzufragen, was meint ihr?

Nun aber der eigentliche Punkt, das ist gerade noch Zukunftsmusik, aber 
das ist mein übernächstes Ziel: Automaten, verteilt über mehrere 
Controller. Ich versuche mich bissi in I2C einzufuchzen.
Nehmen wir einen "einfachen" Fall: Controller 1 hat seinen Automaten bis 
zum Endzustand durchlaufen, er übergibt diesen Zustand an den nächsten 
Controller 2.
Habt ihr einen Tipp, was ich mir hierzu durchlesen sollte, wie ich das 
strukturell aufbaue?
Nun aber mal eine ganz technische Frage, denn als Theoretiker bekomme 
ich die Programmierung irgendwie hin... ich schiebe ja gerade meinen 
Code simplest über die ISP-Schnittstelle auf mein Pollinboard, fein... 
aber wenn ich nun zum Beispiel 2 AVRs habe, wie soll ich die Dinger dann 
programmieren?
Ich kann ja kaum immer irgendwelche Boards umstöpseln? Und dann 
debuggen? Null Ahnung, danke für ein bisschen Tipps zur Zukunftsmusik!

LG
Jens

von TestX .. (xaos)


Lesenswert?

J. W. schrieb:
> Ich
> nutze jetzt  einen IRQ, um in jedem Zustand zum Beispiel ein Notaus zu
> haben. Das finde ich wesentlich effektiver, als nur einen Eingabeport
> zur Kontrolle abzufragen, was meint ihr?
schau dir mal den watchdog an

> Code simplest über die ISP-Schnittstelle auf mein Pollinboard, fein...
> aber wenn ich nun zum Beispiel 2 AVRs habe, wie soll ich die Dinger dann
> programmieren?
> Ich kann ja kaum immer irgendwelche Boards umstöpseln? Und dann
> debuggen? Null Ahnung, danke für ein bisschen Tipps zur Zukunftsmusik!
ein paar stichworte:
bussystem, bootloader, modellbasierte-softwareentwicklung, matlab, 
simulink, matlab-embedded coder

von Peter D. (peda)


Lesenswert?

J. W. schrieb:
> Ich
> nutze jetzt  einen IRQ, um in jedem Zustand zum Beispiel ein Notaus zu
> haben. Das finde ich wesentlich effektiver, als nur einen Eingabeport
> zur Kontrolle abzufragen, was meint ihr?

Wenn Du hier schon etwas länger mitliest, sollte Dir die Antwort klar 
sein.
Solche Fragen erscheinen im Schnitt täglich (gefühlt micro-sekündlich).

Eine Ampel muß nicht innerhalb 1µs umschalten, das sieht kein Mensch.
Entprellen+Störunterdrückung ist dagegen immer sehr nützlich.

von Peter D. (peda)


Lesenswert?

J. W. schrieb:
> Nehmen wir einen "einfachen" Fall: Controller 1 hat seinen Automaten bis
> zum Endzustand durchlaufen, er übergibt diesen Zustand an den nächsten
> Controller 2.

Aufgaben, die spielend ein MC erledigen kann, auf mehrere MCs 
aufzuteilen, ist niemals "einfach".
Um den erheblichen Software-Mehraufwand zu rechtfertigen, muß es schon 
gewichtige Gründe geben.
Z.B. daß die MCs voneinander weit entfernt sind und daher möglichst 
wenige Leitungen oder Funk verwendet werden sollen.

von Falk B. (falk)


Lesenswert?

@  J. W. (ontheway)

>sorgen, das das Gesamtsystem im Notfall in einen definierten Zustand
>übergeht.

Dann nutze für diese Überwachung möglichst wenig bis keine Software 
sondern einfache, robuste, zuverlässige Hardware. Ein Watchdog ist ein 
einfacher Ansatz, aber bei weitem nicht alles.

>Nun habe ich mir gedacht, und das auch schon programmiert: Ich
>nutze jetzt  einen IRQ, um in jedem Zustand zum Beispiel ein Notaus zu
>haben. Das finde ich wesentlich effektiver, als nur einen Eingabeport
>zur Kontrolle abzufragen, was meint ihr?

Das ist ein Irrtum. Eine normale statemachine läuft so oder so mit 
festem Zeitraster. Und ehe du einem Mikrocontroller mit einer komplexen 
Steuerung einer Ampel oder auch deutlich größeren Anlage auslastest, 
muss du schon EXTREM viel machen.

Sicherheitskritische Sachen macht man anders. Aber das ist eine kleine 
Wissenschaft für sich. Redundanz, Diversität, Failsafe, um mal ein paar 
Stichworte zu nennen.

>Nun aber der eigentliche Punkt, das ist gerade noch Zukunftsmusik, aber
>das ist mein übernächstes Ziel: Automaten, verteilt über mehrere
>Controller.

Mach erstmal einen AUtomaten auf EINEM Controller WIRKLICH gut und 
wasserdicht. Dann sehen wir weiter.

>Nun aber mal eine ganz technische Frage, denn als Theoretiker bekomme
>ich die Programmierung irgendwie hin...

Theoretisch ;-)

>aber wenn ich nun zum Beispiel 2 AVRs habe, wie soll ich die Dinger dann
>programmieren?

Umstecken? Probleme eines Theoretikers . . .

>Ich kann ja kaum immer irgendwelche Boards umstöpseln?

Warum nicht? Oder einfach einen 2. COM/USB Port nutzen. Und du willst 
verteilte Automaten entwerfen?

> Und dann
>debuggen? Null Ahnung, danke für ein bisschen Tipps zur Zukunftsmusik!

Siehe Fehlersuche

von J. W. (ontheway)


Lesenswert?

Andi D. schrieb:
> J. W. schrieb:
> schau dir mal den watchdog an
Okay, verstehe ich nicht. Was nutzt mir der Watchdog als Eingabeport? 
Das geht doch garnicht? Der ist doch noch ein "Reset-Timer" oder so?
>
> ein paar stichworte:
> bussystem, bootloader, modellbasierte-softwareentwicklung, matlab,
> simulink, matlab-embedded coder
Was nutzt mir Matlab, wenn ich auf der Hardwareebene mehrere Controller 
verstöpsel? So wie es ausschaut, produziert mir das zig IFs und ELSES 
und SWITCHES, die ich dann nicht mehr verstehe... ich möchte mich nicht 
so abhängig machen, zumindest am Anfang nicht... und ich wüsste nicht, 
wie mir Matlab hilft, wenn ich die Dinger auf Hardwareebene beschreiben 
möchte?! Aber ich bin da ja noch Anfänger, sorry.

von Falk B. (falk)


Lesenswert?

@J. W. (ontheway)

>Okay, verstehe ich nicht. Was nutzt mir der Watchdog als Eingabeport?
>Das geht doch garnicht? Der ist doch noch ein "Reset-Timer" oder so?

Ja. Der Watchdog macht einen Reset, wenn deine Software sich nicht mehr 
innerhalb einer bestimmten Zeit definiert meldet, sprich, den Watchdog 
periodisch zurücksetzt. Aber ein Watchdog ist kein Allheilmittel und er 
allein stellt auch keinen sicheren Zustand her. Er ist nur ein billiger 
Rettungsanker.

von Peter D. (peda)


Lesenswert?

Falk Brunner schrieb:
> Ein Watchdog ist ein
> einfacher Ansatz, aber bei weitem nicht alles.

Er ist vor allem völlig untauglich gegen konzeptionelle Fehler oder 
fehlerhafte Programmablaufplanung.

Für ne Spielzeugampel braucht man keinen Watchdog.

von J. W. (ontheway)


Lesenswert?

Falk Brunner schrieb:
> @J. W. (ontheway)
>
> Aber ein Watchdog ist kein Allheilmittel und er
> allein stellt auch keinen sicheren Zustand her. Er ist nur ein billiger
> Rettungsanker.
Genau Falk, das meinte ich. Mir geht es doch auch garnicht um eine 
Spielzeugampel, ich möchte verstehen, wie ich komplexe Automaten baue 
und wie ich dann noch diese Koppel. Das empfinde ich als hochgradig 
anspruchsvoll. Mangels Erfahrung.

von Peter D. (peda)


Lesenswert?


von adsf (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Aufgaben, die spielend ein MC erledigen kann, auf mehrere MCs
> aufzuteilen, ist niemals "einfach".
> Um den erheblichen Software-Mehraufwand zu rechtfertigen, muß es schon
> gewichtige Gründe geben.

Ganz wichtig zu beachten. Und zum "Automatenentwurf": solange das 
Automatenmodell noch sinnvoll ist (im Sinne man kann überblicken was da 
abgeht und hat nicht nur irgendwas aus einer anderen Beschreibung 
generiertes) kannst du einfach immer eine größere CPU nehmen wenns knapp 
wird... Verteilen auf mehrere Systeme bringt da nix. Und wenn nimmt man 
da kommunizierende Automaten und nicht einen verteilten. (Wie immer: es 
gibt Spezialfälle und Ausnahmen, auf erheblich höheren Ebenen oder für 
theoretische Betrachtungen kann das schonmal vorkommen. Aber da redet 
keiner über uCs)

von Bronco (Gast)


Lesenswert?

J. W. schrieb:
> ich möchte verstehen, wie ich komplexe Automaten baue
> und wie ich dann noch diese Koppel. Das empfinde ich als hochgradig
> anspruchsvoll. Mangels Erfahrung.

Teile und herrsche:
Alles, was komplex ist, läßt sich in einfachere Teile herunterbrechen.
Ein komplexer Automat läßt sich in mehrere einfache Automaten teilen.
Das strukturierte Aufteilen und das klare Kapseln dieser Teilen ist das 
A&O einer systematischen Softwareentwicklung.

Beispiel:
1
main()
2
{
3
  switch(Tageszeit)
4
  {
5
    case MORGENS:
6
      // Hier einen Subautomaten für Morgens abarbeiten
7
      Morgens_Automat(); break;
8
    case MITTAGS:
9
      ...
10
  }
11
}
12
13
void Morgens_Automat(void)
14
{
15
  switch(Ablauf)
16
  {
17
    case AUFSTEHEN:
18
      Aufstehen_Automat(); break; 
19
    case RASIEREN:
20
      Rasieren_Automat(); break; 
21
    case ZÄHNEPUTZEN:
22
      ...
23
  } 
24
}

von Uwe (Gast)


Lesenswert?

Am besten erst mal überlegen bzw. definieren wie der gefahrlose bzw 
sicher Zustand aussieht und wie er (durch konstruktion mechanisch, 
elektrisch ereicht werden kann, wenn z.B. der Strom ausfällt) erreicht 
werden kann (eigensicher wäre auch ein Begriff den du mal Gugeln 
kannst).
Für nen Geldschrak wärs doof wenn die Tür bei Stromausfall aufgeht, fürn 
nen Kaufhaus sollte sie schon aufgehen, bei ner City toliette kann man 
sich streiten.

von amateur (Gast)


Lesenswert?

Wachhund vs. Interrupt

Ein Wachhund hilft nur gegen Blockaden (Endlosschleifen oder Funktionen 
die ewig Zeit verbrauchen). In einem sicherheitsrelevanten System hilft 
Dir das nur Beschränkt weil ein Reset meist die schlimmste Lösung ist 
und das Feststellen, ob Kollege Zufall oder Kollege Kaputt der 
Verursacher ist...
Unterbrechungen kommen auch nicht immer an z.B. weil eine amoklaufende 
Sequenz ihn desaktiviert haben kann. Auch ist die Unterbrechung auch nur 
ein Signal, welches dann nach seiner Ursache untersucht werden muss. 
Siehe vorher.
Unter dem Strich kommst Du nicht darum herum jeweils alles im Auge zu 
behalten. Dann fängt aber die Frage nach dem Sinn eines Wachhundes oder 
der Unterbrechung an.

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.