www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie Kombination von auftretenden Zuständen einfach realisieren?


Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte gerne auf 6 verschiedenen Zustände reagieren:

zustand a;
zustand b;
zustand c;
zustand d;
zustand e;
zustand f;

Dies Zustände können auch in verschiedenen Kombinationen bzw. gemeinsam 
auftreten. Da ich nun nicht alle 63 möglichen Kombinationen so...

if( zustand a == 0 &&
    zustand b == 1 &&
    zustand c == 0 &&
    zustand d == 1 &&
    zustand e == 0 &&
    zustand f == 0 )

tu was;

...vordefinieren will, wollte ich fragen, welche Möglichkeiten es gibt, 
dies anders zu realisieren. Würde mich freuen, wenn mir hierzu jemand 
weiterhelfen könnte.

Gruß
Axel

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jeden zustand ein bit in einen byte zuordnen und dann nur noch das byte 
vergleichen?

Autor: Vivil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na wie sieht es mit 1 2 4 8 16 32 aus?

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"bau" dir eine Zustandsmatrix, welche als "Adressbits" deine Zustände 
hat, und an der jeweiligen Adresse die benötigte Funktion.

Deine Matrix muß dann genau 2^5 Adressen haben. Alle Adressen müssen 
sinnhafte Werte haben. Z.B.

Zustand fedcba
        001010  = Adresse 10 dezimal --> Wert 67
        001011  = Adresse 11 dezimal -_> Wert 99


in deinem Array an Adrese 10 steht dann "67", welches gleichbedeutend 
ist mit der Aktion "LED grün einschalten" (oder was weiß ich was du 
machen möchtest)

der Zustand 001011 ist unerlaubt. Daher bewirkt "99" die Aktion "Hupe 
einschalten" (oder sonstewas)

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei vielen verschiedenen Aktionen würde ich das ganze als 
Funktionspointer-Array deklarieren und die Zustände dann als Index ins 
Array verwenden.

    PROGMEM const void (*FuncPtr[64])(void) =
    {
        (void *) GetAdc0,
        (void *) GetAdc1,
        (void *) GetAdc2,
        (void *) GetAdc3,
        ....
        (void *) LCD_Line1,
        (void *) LCD_Line2,
        (void *) RLY_Out,
        (void *) EPILOG,
    };

int main(void)
{
    void (*fp)(void);  /* pointer to function */

    fp = (void *) pgm_read_word_near(FuncPtr + StateSum);
    (*fp)();

Gruß Anja

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke für die schnellen Antworten.
Eine Zustandsmatrix brauche ich in jedem Fall, die die einzelnen

@Vivil: Was meinst du mit:

> Na wie sieht es mit 1 2 4 8 16 32 aus?


zustand a = 0 * 1
zustand b = 1 * 2
zustand c = 0 * 4
zustand d = 1 * 8
zustand e = 0 * 16
zustand f = 0 * 32

Summe = 10

if ( Summe == 10 )
send("Zustand b und a detektiert")

Allerdings muss ich ja die Zahlenwerte auch irgendwo hinterlegen.

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.