PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Enable Pin?



pro-bot128
28.07.2011, 19:16
Hallo,
schon wieder ne Frage und zwar:
ich möchte bei meinem LCD-Display so viel wie möglich Pins sparen. Den Pin 5 habe ich schon mit GND verbunden. Nun ist mir der enable-Pin aufgefallen. Der wird doch bei der Funktion lcd.display oder lcd.noDisplay entweder auf HIGH oder auf LOW gesetzt. Kann ich nicht den ENABLE-Pin einfach an 5v oder 3.3v verbinden, sodass ENABLE immer an ist, weil die lcd.display oder noDisplay benötige ich eh nicht.
Hat jemand noch ein Tipp, wie man Pins sparen kann?

Danke

PS: Ich muss ein KeyPad und ein LCD-Display an ein Arduino ranbekommen...

PICture
28.07.2011, 19:55
Hallo!


Kann ich nicht den ENABLE-Pin einfach an 5v oder 3.3v verbinden, sodass ENABLE immer an ist, weil die lcd.display oder noDisplay benötige ich eh nicht.

Nein, das kannst du nur dann machen, wenn du auf dem Display nix sehen brauchst. ;)

pro-bot128
28.07.2011, 20:06
Also wenn Spannung an ENABLE anliegt, sieht man auf dem Display nichts?

PICture
28.07.2011, 20:13
Die steigende Flanke vom genug langen Enable Signal schiebt die Daten von Eingangspuffer in RAM des Controllers und erst dann werden sie sichtbar. Es ist so eine Art von "clock" bei allen mir bisher bekannten Display`s. ;)

Man kann die nötige Anzahl Pins zum Ansteuerung biliebigen Displays bis auf zwei mit einem Schieberegister reduzieren (sehe dazu: https://www.roboternetz.de/phpBB2/viewtopic.php?t=13685 ).

pro-bot128
28.07.2011, 20:48
Hi, deine Lösung ist so ähnlich wie TWI (Two Wire Interface) oder?Theoretisch könnte ich das Display an die Pins 13 bis 8 anschließen und das Keypad an 7 bis 1 anschließen. Das Problem: 1 geht nicht, wegen RX...

PICture
28.07.2011, 20:58
Ja, die Displayansteurung ist eine Art von TWI mit eigenem Protokol.

Es ist auch möglich beides, das Display und Keypad paralell an gleiche Pins anschliessen. Dabei muss man die I/O' entsprechend umschalten und das Keypad bei gedrückten Tasten darf kein Kurzschluss bei Ausgabe verursachen. ;)

BMS
28.07.2011, 22:12
Hallo,
ist das Keypad ein 3x4 Tastenfeld als Matrix geschaltet?
Dann könntest du von den 4 Datenleitungen des Displays mit den 4 Zeilenanschlüssen verbinden.
In diese Verbindungsleitungen müssten aber auch noch Dioden, um keine unerwünschten Verbindungen
beim Drücken von mehreren Tasten zu erhalten. Die 3 verbleibenden Spalten kannst du an freie Eingänge
des Arduino anschließen. Macht dann also insgesamt 4Datenleitungen + RS + EN + 3Spaltenleitungen = 9 Pins für Display und Keypad gesamt.
Solange EN auf Low ist, kannst du an den 4 Datenleitungen machen was du willst, denn das Display
ignoriert zu diesem Zeitpunkt die angelegten Spannungen. Währenddessen kannst du das Keypad auswerten.
Grüße,
Bernhard

-schumi-
28.07.2011, 23:54
Das Keypad kann man noch Pinsparender anschließen. Leider kann man dann nur noch 1 Taste gleichzeitig drücken.

Mit 3x4 Matrix: 7 Leitungen für 12 Taster
Siehe Bild: 5 Leitungen für 31 Taster
(Mit 4 Leitungen hätte man 15 Taster -> 3 Leitungen weniger und 3 Taster mehr als Matrix)

19467

Leider ist dafür etwas mehr Löten angesagt :-D

Gruß
schumi

PS: Im Anhang noch Postskript-Datei für besser Auflösung und KiCAD Schaltplan

pro-bot128
29.07.2011, 16:38
ich habe bei vielen Videos bei YouTube gesehen das die ein KeyPad an Pin 7 bis Pin 1 am Arduino anschließen... Das funktioniert bei mir nicht: alle Zeilen funktionieren, bis auf Zeile 4: da ist der Pin an Arduino Pin 1 angeschlossen. Ich nehme an, dass das was mit RX zutun hat, oder?

kingf
13.08.2017, 22:41
Hallo
wasa bedeutet enbale pin auf Low oder Hihg setzten (bedeutet es aktivieren oder dekativiere)

021aet04
16.08.2017, 13:52
Enable ist freigabe, ein enable pin (Anschluss) ist somit ein Freigabeanschluss. Low, high sind Bezeichnungen von Pegeln, bei TTL sind das +5V (high) und 0V (low).

MfG Hannes

oberallgeier
16.08.2017, 15:39
.. wasa bedeutet enbale pin auf Low oder Hihg setzten (bedeutet es aktivieren oder dekativiere)Zur Ergänzung des Postings von 021aet04 oben.

Wenn der Enable-AUSGANG des Mikrocontrollers auf high geht (VOH ist mind. 2,4 V), dann geht üblicherweise der Enable-EINGANG des LCDs (VIH) auf mindestens 2,0 und das LCD (bzw. der Controller des LCD) erkennt ein high-Signal. Jetzt weiß der LCD-Controller, dass er Daten von seinem Eingangspuffer in sein RAM schieben sollte. Dazu muss aber das Signal eine bestimmte Zeit stehen. Anschließend muss es wieder auf low gehen.

Wenn dies nicht geschieht, also DAUER-(1) oder DAUER-(0) dann wird kein gültiger "Übernimm-Daten-auf-Display"-Befehl gegeben und das Display bleibt leer . . . siehe hier (https://www.roboternetz.de/community/threads/54207-LCD-Enable-Pin).

Und Logikpegel waren hier erklärt (https://de.wikipedia.org/wiki/Logikpegel) schon bevor Du gefragt hast.

Nachtrag:
Bei mir läuft üblicherweise der Enable-Befehl so ab (Sprache C) :
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// erzeugt den Enable-Puls
void lcd_enable(void)
{
LCD_PORT |= (1<<LCD_EN1);
_delay_us(20); // kurze Pause
// Bei Problemen ggf. Pause gemäß Datenblatt des LCD Controllers verlängern
// http://www.mikrocontroller.net/topic/80900
LCD_PORT &= ~(1<<LCD_EN1);
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -und wird beispielsweise hier aufgerufen:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//Eigentliche LCD-Zugriffs-Funktion; 4-Bit-Modus
void lcd_send(unsigned char data) {
// oberes Nibble setzen
LCD_PORT = (LCD_PORT & 0xF0) | ((data >> 4) & 0x0F);
_delay_us(15);
lcd_enable();
// unteres Nibble setzen
LCD_PORT = (LCD_PORT & 0xF0) | (data & 0x0F);
_delay_us(15);
lcd_enable();
_delay_us(60);
LCD_PORT &= 0xF0;
}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Hoffentlich bin ich nicht zu aufdringlich - hier noch ne kleine High-Low-Tabelle:
Pegel Eingang Ausgang
Technologie Low (VIL) High (VIH) Low (VOL) High (VOH)
TTL 5V = 0,8 = 2,0 = 0,4 = 2,4
LVTTL 3,3V = 0,8 = 2,0 = 0,4 = 2,4

Es bedeutet z.B: VIL = V-in-low, VIH = V-in-high