MSP430 Fragen/Probleme rund um PCF8574

Gast #1082193
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:
1
  for(;;)
2
  {      
3
      input= pcf8574_get_inputs(0x20);
4
      in= input;
5
      switch (in|=0xF0)          // |=0xF0 dient als Maske, damit nur die ersten 
6
                                 // vier Bit (Port 0-3) des PCF8574 ausgewertet
7
                                 // werden
8
      {
9
          case 254:
10
              pcf8574_set_outputs(0x20, input & 0xEF | 0x0F);
11
              break;
12
          case 253:
13
              pcf8574_set_outputs(0x20, input & 0xDF | 0x0F);
14
              break;
15
          case 251:
16
              pcf8574_set_outputs(0x20, input & 0xBF | 0x0F);  
17
              break;
18
          case 247:
19
              pcf8574_set_outputs(0x20, input & 0x7F | 0x0F);
20
              break;       
21
      }/* switch (input|=0xF0) */
22
  }/* for(;;) */

Grüße

Martin
@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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.