LCD Ausgabe stoppen, mittels ESC-Button

Beitrag #5186440 wurde von einem Moderator gelöscht.
#5186447
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
Moderator Persönliche Seite #5186558
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.
OP #5186572
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
Angehängte Dateien:
Moderator Persönliche Seite #5186592
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. ;-)
#5186615
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
Gast #5186836
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 :-)
Moderator (Firma: Titel) Persönliche Seite #5186853
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?
Angehängte Dateien:
#5187533
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren