mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 Fragen/Probleme rund um PCF8574


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich versuche gerade einen PCF8574 an meinem MSP ans Laufen zu bekommen. 
Das funktioniert eigentlich auch soweit. Ich habe an die Ports P4-P7 
LEDs angeschlossen und an die anderen Ports Taster. Ich kann die LEDs 
zum Leuchten bringen und die Taster abfragen. Zur Kontrolle habe ich ein 
Programm geschrieben, mit welchem man mit jedem Taster eine LED 
anschalten kann. Im Moment bin ich soweit, dass bei jedem Tastendruck 
die entsprechende LED an geht und auch die LEDs, die bereits an sind an 
bleiben.

Nun würde ich das ganze gerne so erweitern, dass die LEDs bei 
entsprechendem Tastendruck auch wieder aus gehen. Ich drücke also Taster 
1 -> LED 1 geht an, erneutes Drücken von Taster 1 -> LED 1 geht wieder 
aus. Allerdings hab ich keine Idee, wie man das umsetzen könnte. Ich 
hatte überlegt für jede LED eine Variable anzulegen, um zu speichern, ob 
die LED gerade an ist. Das ginge sicherlich, aber geht es nicht 
vielleicht auch noch einfacher, effizienter? Hat jemand eine Idee?

Hier einmal ein Teil des Codes:
  for(;;)
  {      
      input= pcf8574_get_inputs(0x20);
      in= input;
      switch (in|=0xF0)          // |=0xF0 dient als Maske, damit nur die ersten 
                                 // vier Bit (Port 0-3) des PCF8574 ausgewertet
                                 // werden
      {
          case 254:
              pcf8574_set_outputs(0x20, input & 0xEF | 0x0F);
              break;
          case 253:
              pcf8574_set_outputs(0x20, input & 0xDF | 0x0F);
              break;
          case 251:
              pcf8574_set_outputs(0x20, input & 0xBF | 0x0F);  
              break;
          case 247:
              pcf8574_set_outputs(0x20, input & 0x7F | 0x0F);
              break;       
      }/* switch (input|=0xF0) */
  }/* for(;;) */ 

Grüße

Martin

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Martin (Gast)

>anschalten kann. Im Moment bin ich soweit, dass bei jedem Tastendruck
>die entsprechende LED an geht und auch die LEDs, die bereits an sind an
>bleiben.

Wo ist dann das Problem?

>Nun würde ich das ganze gerne so erweitern, dass die LEDs bei
>entsprechendem Tastendruck auch wieder aus gehen. Ich drücke also Taster
>1 -> LED 1 geht an, erneutes Drücken von Taster 1 -> LED 1 geht wieder
>aus.

Das kann man leicht per Flankendetetktion und Variable machen.

Tasten periodisch abragen und speichern
Wenn alte Taste = 1 und neue = 0 -> Vairable invertieren
LEDs periodisch ausgeben

>hatte überlegt für jede LED eine Variable anzulegen, um zu speichern, ob
>die LED gerade an ist. Das ginge sicherlich, aber geht es nicht
>vielleicht auch noch einfacher, effizienter? Hat jemand eine Idee?

Pack deine LEDs und Tasten in ein Byte. Per Bitmanipulation kann man 
die Zustände abfragen und schreiben.

>Hier einmal ein Teil des Codes:  for(;;)

Uhhhh, das ist megaumständlich und ineffizient. Schau dir den Artikel 
oben an und setze es um.

MFG
Falk

Autor: Klaus Ra. (klara)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ganz einfach nach jedem Tastendruck den Zustand der LED´s abfragen und 
den Status negieren.

Sind die Taster OK oder prellen sie? Sonst müsste man das Prellen 
mittels Verzögerung und Totzeit entschärfen.

Gruss Klaus.

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.