Forum: Mikrocontroller und Digitale Elektronik MSP430 Problem mit LCD


von Steffen (Gast)


Lesenswert?

Hallo zusammen,

ich habe folgendes Problemchen. Ich habe ein 4 mal 20 Zeilen Display an
meinen msp430f149 angeschlossen. Funktioniert auch soweit. Nun habe ich
zwei Tasten, die auch am Controller hängen "Display Clear" gehangen.
Wenn nun Text auf dem Display steht und ich die Taste drei drücke, wird
das Display gelöscht. Wenn Text auf dem Display steht und ich die erste
taste drücke, wird das Display nicht gelöscht. Wenn auf dem Display nix
steht und ich die erste Taste drücke, wird auch mit der Taste 1 das
Display gelöscht. (Erkennbar, dass ich dann auch noch kurz einen Txt
ausgeben lasse).

Die Steuerleitungen E RW RS vom LCD hängen an 5.0 - 5.2. Die Taster
hängen an 5.3-5.7.

Wäre toll, wenn jemandem auffallen würde, woran das wohl liegen
könnte.

Gruß
Steffen

  WDTCTL = WDTPW + WDTHOLD;// Watchdog Timer stoppen
  P1DIR=0xFF;              // Port 1 = Output (6 LEDs)
  P4DIR=0xFF;              // Port 4 = Output (8 Datenleitungen LCD)
  P5DIR=0x07;              // Port 5 = Input  (5 Taster)
                           // Port 5 = Output (RS, R/W und E vom LCD

                           //(entspricht P 5.0, 5.1, 5.2))
  P1SEL=0x00;                     // Alle Ports als GPIO nutzen
  P4SEL=0x00;                     // Alle Ports als GPIO nutzen
  P5SEL=0x00;                     // Alle Ports als GPIO nutzen

  P1IE=0x00;                      // Interrupt ausmachen

  P1OUT=0x00;              // Initial alle LED's aus
  P5OUT=0x01;              // Initial E (clock) auf high, RS, R/W low
  P4OUT=0x00;              // Ports mit null initialisieren

  wait(30000);             // Init-zeit des display ist ca. 15 ms
  LCDInit();               // LCD initialisieren ...
  LCDClear();              // und dann noch löschen und Cursor an den
                           // Anfang zurück

von SupaChris (Gast)


Lesenswert?

Ööhhmm...also ich weiß nach Lesen deines Beitrags nichtmal, wo das
Problem liegt. Kein Mensch weiß, wie deine Funktionen LCDInit() und
LCDClear() aussehen. Niemand weiß, was du in der Taster-ISR machst. Und
aus deiner Beschreibung werd ich auch nicht wirklich schlauer...

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hier dann mal meinen kompletten Code.



Taster 1 und 4 sollen ja das Display clearen. Bei Taster 4 funktioniert
das auch immer. Taster eins funktioniert nur, wenn das Display eh schon
leeer ist.

Gruß
Steffen

von SupaChris (Gast)


Lesenswert?

Hmm...das ist ja übel durcheinander. Wie kommt man drauf, solche
Tasterabfrage als Polling zu machen? Das gehört in nen Interrupt. Aber
an P5 geht beim INT. Aber so sieht man doch nich durch, kein Wunder,
dass man da beim Programmieren durchnander kommt. Mach ma die
Tasterabfrage (wenn die denn an P5 bleiben müssen) lieber in einer
Switch Case Anwendung. Ich nehme an, dass es an der fehlenden
Entprellung liegen könnte. Also mal Tasten entprellen.

von ehde76 (ex-Steffen) (Gast)


Lesenswert?

so, nachdem hier wieder ein Steffen aufgekreuzt ist, änder ich mal
meinen namen, aug, aug... ansonsten, wie chris schon sagt, ordentliche
isr, tasten entprellen (daran liegt es aber bestimmt nicht) und mal
code überdenken... das geht auch kürzer und nicht so umständlich, wer
soll bei dem durcheinander einen fehler finden... ausserdem kommen mir
einige stellen sehr bekannt vor (mathar.com?)... gutes tutorial, jedoch
ist der lcd-teil nicht gerade seine kür... das soll jetzt aber nix gegen
sebastian sein, seine seite ist insgesamt 'ne tolle sache!

gruß next_state <= ehde76

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.