Forum: Mikrocontroller und Digitale Elektronik LCD Ausgabe stoppen, mittels ESC-Button


von Y. L. (ynynloxx)


Lesenswert?

Hey,

wie lautet der Code um eine LCD Anzeige zu stoppen, indem man den 
ESC-Button drückt und wie kehrt man wieder zurück in den Hauptmenü?

LG

Beitrag #5186440 wurde von einem Moderator gelöscht.
von Max D. (max_d)


Lesenswert?

Pseudocode:
If(esc-knopf) stoplcd() ;

Für echten Code solltest du vlt. Die ganze Fragestellung deiner 
Hausaufgabe posten.

von Adam P. (adamap)


Lesenswert?

Ich möchte nach Berlin, muss ich jetzt Links oder Rechts abbiegen?

Sorry Yin-yin Lo, aber merkst du etwas?

Du kannst mir die Frage nicht beantworten, weil du gar nicht weißt wo 
ich mich befinde - und genau so wenig wissen wir:

- welches LCD
- welche Steuerung
- welches Menü
- welches System
- usw.

Aber versuch mal das:
ON/OFF Schalter, der sollte ein Rücksprung ins Hauptmenü bewirken.

Kopfschüttel

von Y. L. (ynynloxx)


Lesenswert?

Also meine ganze Aufgabe lautet dass ich eine Zeichenkette auf dem LCD 
Display in 500ms Abständen ausgeben, solange bis der ESC-Button gedrückt 
worden ist.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Y. L. schrieb:
> Also meine ganze Aufgabe lautet

Nun, erstens sind wir hier nicht das Wer-macht-mir-meine-Hausaufgaben
Forum, folglich solltest du etwas vorweisen können, was du schon an
Eigenleistung zur Lösung deiner Aufgabe getan hast.  Falls es dann mal
an einer Ecke hakt, weil du vielleicht den Wald vor lauter Bäumen nicht
siehst, wirst du sicher Hilfe im Forum finden.

Zweitens hat natürlich außer dir keiner hier eine Idee, auf welcher
Hardware und mit welcher Softwareumgebung du überhaupt arbeitest.

Netiquette lässt grüßen: alle relevanten Informationen gehören in
das Eingangsposting.

von Y. L. (ynynloxx)


Angehängte Dateien:

Lesenswert?

Ich entschuldige mich dafür dass es so rüberkam als wollte ich dass 
einer hier meine Aufgaben erledigt. Es war nicht meine Intention. Bin 
Anfänger und deswegen auch noch bisschen ahnungslos bei Rückfragen.

Habe die Headerdatei delay.h inkludiert und soweit alles im Code womit 
die Aufgabe erfüllt ist. Ich weiß nur nicht wie ich Anzeige auf dem LCD 
stoppen kann indem ich den ESC-Button drücke (welches mit den Button 4 
von PORTB verbunden sein sollte).

(Ich entschuldige mich jetzt schonmal wenn ich mich vielleicht falsch 
ausgedrückt habe in einigen Punkten).

LG

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Y. L. schrieb:
> welches mit den Button 4 von PORTB verbunden sein sollte

Da ist nun die erste Frage: wie ist der Button denn verbunden?

Ist es ein Taster nach Vcc, ein Taster nach GND?  Gibt es in der
Hardware schon Widerstände, die den Pin ohne gedrückten Button in
eine der beiden Spannungslagen ziehen?  Macht die Software schon
irgendwas, um diesen Button zu bedienen, oder musst du das alles
selbst machen (also ist das Teil deiner Aufgabe)?

Prinzipiell fragt man beim AVR (um den es ja offensichtlich geht)
die Eingänge eines Ports über das IO-Register PINx ab, hier also
PINB (x = Name des Ports).  Damit bekommt man den Zustand aller
acht Eingänge dieses Ports, man muss sich dann in einer logischen
Operation den heraussuchen, der der gewünschten Bitnummer (hier also
offenbar 4) entspricht.  Ob das Bit dann bei gedrücktem Button 0 oder
1 wird, das hängt von den Antworten auf obige Fragen ab. ;-)

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Ich habe Da noch ein ganz anderes Problem:
Wie stoppt man eine LCD-Ausgabe?
Sofern wir hier über ein 'normales' LCD-Modul reden und nicht über das 
eigentliche LCD - also nur das Glas-Dingens.

Das Modul zeigt bis in alle Ewigkeiten Das an, was zuletzt zum Display 
geschickt wurde.
Wenn Das ein 'Lösche das Display, schalte die Beleuchtung aus, schiebe 
den Cursor nach 0' war, dann ist das Display leer, dunkel und der Cursor 
steht ganz vorne.

Was wird bei 'nicht gestopptem Display' ausgegeben?
Vll. wirst Du ja einen aufsteigenden Counter anzeigen und beim Druck auf 
den 'ESC'-Knopf soll diese Anzeige (nur die Anzeige, oder auch der 
Counter selber?) stehen bleiben?
Bei Ersterem quasi eine Art Zwischen-Zeit, wie bei den alten Stop-Uhren 
möglich hüstel ... ja, ich kenne so Dinger noch ;).

MfG

von Bongotrommel ngo (Gast)


Lesenswert?

„Hi

Ich habe Da noch ein ganz anderes Problem:“

Das glauben wir Dir gern!

von Christian S. (roehrenvorheizer)


Lesenswert?

Und schreibe das delay besser vor das clear, sonst siehst Du nichts.

von Manfred (Gast)


Lesenswert?

Christian S. schrieb:
> Und schreibe das delay besser vor das clear,

Egal wie, das wird so oder so ein Flackerdisplay.
Es werden zwei delays benötigt: Schreiben - Pause - Löschen - Pause.

Da eine Taste abgefragt werden soll, wird das delay durch eine 
sinnvollere Funktion ersetzt werden müssen.

von Stefan F. (Gast)


Lesenswert?

Du hast da ja mit while() eine Endlosschleife vorliegen, die fortlaufend 
etwas auf dem Display ausgibt.

Ich denke, die Aufgabe besteht darin, dass ein Druck auf die ESC Taste 
diese Schleife verlassen soll. Also das PIN Register lesen und mit 
break() die Schleife verlassen.

Ich könnte die eine Zeile Code jetzt hier hinschreiben, aber leider
> sind wir hier nicht das Wer-macht-mir-meine-Hausaufgaben Forum

> Da eine Taste abgefragt werden soll, wird das delay durch eine
> sinnvollere Funktion ersetzt werden müssen.

Das kommt dann sicher später im Kurs für Fortgeschrittene :-)

: Bearbeitet durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Y. L. schrieb:
> Bildschirmfoto_2017-10-24_um_22.39.33.png
Du hättest besser den Quellcode umrahmt von den [c] Tags hier her 
kopiert. Dann hätte man den Code für diese ESC-Taste kurz einfügen 
können.


BTW: wenn nicht selber ein wenig über die Aufgabe nachdenkst, 
recherchierst und du es nicht selber probierst, dann lernst du nichts 
und wirst in der Prüfung auflaufen. Ich denke, das ist dir klar?

von Adam P. (adamap)


Lesenswert?

Das mit den 500ms ergibt für mich irgendwie gar kein sinn.

Falls es so sein sollte:
1
while
2
{
3
    lcd_writeString("Foo");
4
    _delay_ms(500);
5
    lcd_clear();
6
}

...dann wirst du die Ausgabe immer sehen, mit einem Flakern alle 500ms.

Um der Aufgabe gerecht zu werden, wäre ich für 500ms die Ausgabe 
anzeigen, dann löschen und 500ms warten (nichts anzeigen) und dann 
wieder von vorne...somit hast du eine blinkende Ausgabe und falls dann 
ESC gedrückt wurde, springst aus der while rauß und löscht die Ausgabe - 
ENDE.

Aber wenn du das mit _delay_ms() machst, und dein ESC Pin nicht mit 
einem Interrupt verbunden ist, dann sollte dir klar sein, dass du 
mindestens 500ms ESC gedrückt halten musst, da dein Prog. im "delay" 
hängt.

Weiterhin wissen wir nicht ob ESC den Pin auf HIGH oder LOW zieht.

Das ist kein optimaler Code, aber ich wills dir nicht unnötig 
kompliziert machen. - evtl. muss den PIN von PORTB noch anpassen.
1
bool esc = false;
2
3
do
4
{
5
    lcd_writeString("Foo");
6
    _delay_ms(500);
7
    
8
    /* ESC zieht PIN gegen LOW - Entprellung fehlt! */
9
    if( !(PINB & (1<<PINB4)) )
10
    {
11
        esc = true;
12
    }
13
14
    lcd_clear();
15
    _delay_ms(500);
16
17
    /* ESC zieht PIN gegen LOW - Entprellung fehlt! */
18
    if( !(PINB & (1<<PINB4)) )
19
    {
20
        esc = true;
21
    }
22
    
23
} while(esc == false);
24
25
lcd_clear();
26
lcd_writeString("ENDE");
27
28
while(1)
29
{
30
}

edit:
Hast du das an der FH/Uni?
Kommt mir vor wie Aufgabe 1 in Systemarchitektur / Technische Info. :-D
Wobei das bei uns Assembler war und kein LCD.

: Bearbeitet durch User
von Manfred (Gast)


Lesenswert?

Adam P. schrieb:
> ...dann wirst du die Ausgabe immer sehen, mit einem Flakern alle 500ms.
Flakern - das Display schießt?

Aber das hatten wir schon:
Manfred schrieb:
> Flackerdisplay.

von Adam P. (adamap)


Lesenswert?

Manfred schrieb:
> Adam P. schrieb:
>> ...dann wirst du die Ausgabe immer sehen, mit einem Flakern alle 500ms.
> Flakern - das Display schießt?

JA, hab ich einen Buchstaben vergessen ;-) sorry...

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.