Author Topic: State Maschine (FSM)  (Read 18613 times)

achim

  • Moderator
  • Full Member
  • *****
  • Posts: 175
  • Karma: +6/-0
State Maschine (FSM)
« on: October 06, 2014, 03:32:56 PM »
Hallo
hat jemand was mit der FSM gemacht?
Hat jemand Interesse?
achim

achim

  • Moderator
  • Full Member
  • *****
  • Posts: 175
  • Karma: +6/-0
Re: State Maschine (FSM)
« Reply #1 on: October 07, 2014, 10:00:37 PM »
Hallo
habe den ersten Teil von der State Maschine fertig gemacht. Könnte morgen im Netz stehen. Bitte mal lesen
Einige Teile fehlen noch.
achim

Rene

  • freakyfriday
  • Full Member
  • *
  • Posts: 138
  • Karma: +6/-0
    • Video - Tutorials für Hobbyelektroniker
Re: State Maschine (FSM)
« Reply #2 on: October 07, 2014, 10:23:34 PM »
Hallo Achim,

Vor über 30 Jahren, während meines Informatikstudiums, war das einmal ein Thema. Ich hielt es damals für eine ziemlich theoretische Sache und ich habe es bis heute auch nie gebraucht. Aber ich kann mir vorstellen, dass FSM bei dem Entwurf komplexer Schaltsysteme durchaus nützlich sein kann.

Ich werde mit Sicherheit deinen Artikel durchlesen.

Gruss
René

achim

  • Moderator
  • Full Member
  • *****
  • Posts: 175
  • Karma: +6/-0
Re: State Maschine (FSM)
« Reply #3 on: October 08, 2014, 12:56:15 PM »
Hallo Rene
es war mal theorie. Viele Leute scheuen sich da vor, genau so wie Multitasking. Viele haben gesagt, das es nicht geht. Habe für beide Fälle den Beweis erbracht, das es mit ganz einfachen Sachen geht und teilweise sogar auf recht kleinen ATs. Dabei kann man ganz erstaunliche Sachen machen, was mit einer einfachen Programmierung fast unmöglich ist. Nimm nur als Beispiel das auslesen von tastern. Ich kann eine LED mit einem Taster einschalten und mit einem anderen ausschalten, gleichzeitig auch noch mit noch einem anderen Taster bei kurz etwas schalten und bei lang was anderes schalten. Das sind 4 Grundlegende Funktionen in ca. 30 - 50 Zeilen Programm. Wer so was mit anderen Sachen machen will - wünsche ich viel Spass dabei.
State Maschine ist eigentlich nur die logische Fortsetzung von Multitasking. Dabei wird für jede Funktion ein abgegrenzter "Raum" geschaffen und alle Bausteine mit einander verbunden. In Abhängigkeit des Programmes gibt es fast kein starrer Ablauf. Alles ist offen und trotzdem festgelegt. Auch das schreiben ist sehr anspruchsvoll. Es gibt nichts fertiges dazu. Ein paar Hinweise und Anfänge, alles andere liegt bei mir. Auch die Programme muss ich schreiben. Ein grundsatz dazu ist, klein anfangen, dann steigern und alles, wirklich alles erklären. Damit es auch anfänger verstehen. Ein Höhepunkt dabei ist, State Maschine und I2C Bus zu koppeln. Es geht, das habe ich schon getestet. Jetzt noch was zum lesen draus machen und es geht.
Hoffe das alle drauf warten und recht neugierig sind
achim

Nukular

  • Newbie
  • *
  • Posts: 45
  • Karma: +1/-0
Re: State Maschine (FSM)
« Reply #4 on: October 08, 2014, 09:57:58 PM »
Ich dachte zuerst, dass ihr von seiner Nudeligkeit sprecht, FSM für Fliegendes Spaghetti Monster.
Dann will ich nicht weiter stören, Ramen  ;D

Rene

  • freakyfriday
  • Full Member
  • *
  • Posts: 138
  • Karma: +6/-0
    • Video - Tutorials für Hobbyelektroniker
Re: State Maschine (FSM)
« Reply #5 on: October 08, 2014, 10:51:21 PM »
Hallo Achim,
ich habe deine Artikel über Multitasking gelesen und heute etwas selber herumgebastelt. Allerdings musste ich auf die normale Arduino IDE zurückgreifen, da mir schlicht das Wissen für deine sehr hardwarenahe Programmierung fehlt.

Ein Modul behandelt die LED's. Ich kann sagen, wie lange sie hell ist und wie lange dunkel.
Eine rote LED leuchtet 1 Sekunde und ist anschliessend 0.2 Sekunden dunkel. Bei einer blauen LED ist das genau umgekehrt. Die rote LED startet mit einem hellen Zyklus, die blaue LED mit einem dunklen Zyklus. So erhalte ich einen asymmetrischen Wechselblinker.

Ein weiteres Modul behandelt einen Taster. Wenn ich ihn länger als 1 Sekunde drücke, meldet er mir einen langen Tastendruck. Darunter bekomme ich einen kurzen Tastendruck. Zeiten unter 20 ms werden nicht berücksichtigt, damit erhalte ich eine gute Entprellung.

Bei einem kurzen Tastendruck wechselt jeweils das Timing der roten und blauen LEDs. Ein langer Tastendruck schaltet eine dritte LED ein und wieder aus.

Ich verwende im Programm keine Delays, sondern arbeite mit der Funktion millis() aus der Arduino - Bibliothek.

Hier ist das Hauptprogramm. Die anderen Module wären hier zu gross. Ich habe aber das ganze Projekt als Anhang beigefügt. Es kann aber nur in einer Arduino IDE geöffnet werden.

Code: [Select]
#include "Constants.h"


void setup() {

 // OnBoard - LED verwenden 
 pinMode(13,OUTPUT);
 digitalWrite(12,LOW);

 // Die rote und die gruene LED initialisieren   
 ledRot_init(8);   // pin 8
 ledGruen_init(9); // pin 9

 key_init(2); // Taste an Pin 2

 // Wechselblinker, rot ist 1 Sek. an, gruen ist 0.2 Sek. an
 ledRot_blink(LED_STATE_BLINK_ON,1000,200); // beginn mit hellem Zyklus, 1000 ms an, 200 ms aus
 ledGruen_blink(LED_STATE_BLINK_OFF,200,1000); // beginnt mit dunklem Zyklus, 200 ms an, 1000 ms aus
}



void shortPress() {
  // Schaltzeiten von rot/gruen vertauschen
  static boolean red = true;  // rot leuchtet lange
  red = !red;
  if (red) {
    ledRot_blink(LED_STATE_BLINK_ON,1000,200);
    ledGruen_blink(LED_STATE_BLINK_OFF,200,1000);
  } else {
    ledRot_blink(LED_STATE_BLINK_ON,200,1000);
    ledGruen_blink(LED_STATE_BLINK_OFF,1000,200);
  }
}

void longPress() {
  // LED 13 wird geschaltet
  static boolean ledOn = false;
  ledOn = !ledOn;
  if (ledOn) digitalWrite(13,HIGH); else digitalWrite(13,LOW); 
}

void loop() {
  ledRot_blink();  // aktualisiert den Zustand gemäss vorgegebenem Timing
  ledGruen_blink();
  int keyState = key_debounced(); // gibt zurück, wie die Taste gedrückt wurde
  if (keyState == KEY_SHORT) shortPress();
  else if (keyState == KEY_LONG) longPress();
}

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: State Maschine (FSM)
« Reply #6 on: October 09, 2014, 09:42:45 AM »
Salut,

zu FSM gibt es auch ein paar interessante Artikel im  Arduino Playground. Ausserdem gibt es einen weiteren interessanten Artikel http://www.mathertel.de/Arduino/FiniteStateMachine.aspx.
Früher wurde ich auch auf eine professionelle FSM hingewiesen: Quantum Leaps

Ciao, Mathias

achim

  • Moderator
  • Full Member
  • *****
  • Posts: 175
  • Karma: +6/-0
Re: State Maschine (FSM)
« Reply #7 on: October 09, 2014, 07:21:23 PM »
Hallo
ich habe bei der ganzen Sache ein grundlegendes Problem. Ich arbeite so richtig mit C, nicht mit der abgespecktem Version. Mein Board zum Arduino ist noch nicht fertig. Die FTDI lader/Anschlüsse habe ich zwar schon, konnte aber noch nicht testen oder machen, wie ich es lade kann.
Und dann habe ich ein noch blöderes Problem. Leider durfte ich kein englisch lernen, sondern nur russisch. Dadurch kann ich kein englisch und russisch auch nicht (mehr)
Ich weiss, es gibt gute Programme zur übersetzung. Wie kann ich diese auf dieser Seite anwenden?
Fragen über fragen. Bitte um Nachsicht und ein bischen Hilfe und Verständnis. Danke
achim
P.S.
Wenn du es gelesen hast und anwendest, hast du es auch soweit verstanden? Sorry, bin neugierig was ich verbessern kann.

Rene

  • freakyfriday
  • Full Member
  • *
  • Posts: 138
  • Karma: +6/-0
    • Video - Tutorials für Hobbyelektroniker
Re: State Maschine (FSM)
« Reply #8 on: October 09, 2014, 09:27:44 PM »
Hallo Achim,
ich habe da ähnliche Probleme. Eine seriöse Grundausbildung in Informatik ist zwar vorhanden, aber schon gut 30 Jahre alt. Dabei ist vieles verloren gegangen. Ich entwickle seit dieser Zeit Software. Leider handelt es sich dabei um recht langweilige Bürosoftware. Mit Hardware habe ich mich nie auf professionellem Niveau beschäftig. Vor etwa 2 Jahren bin ich auf den Arduino gestossen und betreibe das als Hobby. Und C ist eigentlich nicht meine Programmiersprache, daher bin ich froh, die vereinfachte Version in der Arduino IDE verwenden zu können.

In der Schweiz lernten Kinder früher vorwiegend französisch, englisch hatte ich erst auf der Gymnasialstufe. Technische Literatur verstehe ich inzwischen recht gut, mit englischsprachigen Zeitungen und Filmen habe ich so meine Mühe. Da viele Fachbegriffe sowieso aus dem Englischen kommen, genügen die Grundbegriffe der englischen Sprache um entsprechende Artikel zu verstehen. Je mehr man das macht, umso leichter fällt es einem.

Ich lerne jeden Tag (oder wenigstens an den Tagen, an denen ich Zeit habe, mich damit zu beschäftigen) etwas Neues dazu. Und das ist eigentlich das Spannendste an diesem Hobby. Am Anfang hing ich etwas im luftleeren Raum. Deshalb bin ich sehr glücklich über die Community, die sich rund um boxtec gebildet hat.

So, im nächsten Beitrag werden ich noch etwas zu deinen Artikeln über Multitasking und State Machine schreiben. Bitte behalte dabei die obigen Zeilen im Hinterkopf und verwechsle meinen Beitrag nicht mit einer 'Expertenmeinung'.

Gruss
René




Rene

  • freakyfriday
  • Full Member
  • *
  • Posts: 138
  • Karma: +6/-0
    • Video - Tutorials für Hobbyelektroniker
Re: State Maschine (FSM)
« Reply #9 on: October 09, 2014, 10:10:33 PM »
Hallo Achim,
soeben habe ich den Artikel zu der State Machine gelesen. So eine klare und leicht verständliche Einführung habe ich bisher noch nie gesehen. Super gemacht!
Die Programmbeispiele sind dank den ausführlichen Kommentaren sehr leicht verständlich und könnten ohne Probleme direkt für den Arduino umgesetzt werden. Ich bin gespannt, wie es hier weiter geht.
Eine State Machine schreit förmlich nach einer Umsetzung als Klasse. Dann könnten mehrere gleichartige Objekte als Instanzen dieser Klasse erzeugt werden. Globale Variablen wären dann praktisch nicht mehr notwendig und der Code müsste nur einmal vorhanden sein. Das würde aber C++ bedingen und in der Arduino IDE wäre das die Hölle.
 
Die Artikel zum Multitasking sind auch sehr gut verständlich. Das kooperative Multitasking wird sehr gut erklärt. In der Arduino IDE gibt es das berühmte Beispiel BlinkWithoutDelay. Dieses zeigt, wie man eine Lampe ohne delay() blinken lassen kann. Es zeigt aber nicht, was man mit dieser Technik wirklich alles machen kann. Du lieferst in deinen Artikeln viel mehr Hintergrundinformationen.

Du verwendest in deinen Programmen konsequent deutsche Bezeichnungen für Variablen und Funktionen. Das erleichtert dem Betrachter das Verständnis. Bei mir kommt da oft ein grauenhaftes Gemisch aus deutschen und englischen Bezeichnungen zusammen.

Mit Multitasking 4 habe ich mich nicht näher beschäftigt. Schuld ist da meine Bequemlichkeit. In der Arduino - Umgebung sind selbstverständlich Timer vorhanden und die Funktion millis(), die ich oft verwende, basiert auf einem solchen. Damit konnte ich Entprellung, kurze und lange Betätigung eines Tasters sehr einfach realisieren.

Für viele Leser wäre es einfacher, wenn du deine Beispiele mit der Arduino Sprache (ist auch C, aber mit einer umfangreichen Bibliothek) und Arduino Hardware machen würdest. Viele könnten dann die Beispiele einfach nachbauen und damit experimentieren. Da du aber Experte für deine Umgebung bist, solltest du auch dabei bleiben. Mit etwas eingeschaltetem Hirn und genügend Interesse, sollte jeder deine Beispiele auf seine Umgebung umsetzen können.

Auf jeden Fall danke ich dir für deine Artikel. Sie haben mich dazu gebracht, auf diesem Gebiet etwas zu experimentieren. Und schon wieder konnte ich viel lernen.

Gruss
René





achim

  • Moderator
  • Full Member
  • *****
  • Posts: 175
  • Karma: +6/-0
Re: State Maschine (FSM)
« Reply #10 on: October 10, 2014, 06:37:31 AM »
Hallo rene
danke für deine Blumen und deine Einschätzung. So wie das klingt, ist alles richtig gemacht. Das freut mich sehr.
Der nächste Artikel ist auch schon "angefangen". Dascwrste Blatt ist schon da. Ansonsten zählt zu meinen Grundsätzen auch, das ich erst über ein Thema sprechen kann, wenn ich es auch verstanden habe.
Noch mal danke
achim

achim

  • Moderator
  • Full Member
  • *****
  • Posts: 175
  • Karma: +6/-0
Re: State Maschine (FSM)
« Reply #11 on: November 20, 2014, 06:49:03 PM »
Hallo
auch zur State Maschine habe ich weiter gemacht. Ist zwar nicht viel geworden, aber es geht weiter. Habe da wohl zur Zeit zu viele Baustellen offen. Bin immer auf der suche nach einfachen Erklärungen, kompliziert kann jeder. Dadurch kann es etwas dauern. Sorry
achim