PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anschluss LCD an Microcontroller



peterfb
20.03.2018, 23:12
Hi ich will den LCD an einen µC anschließen. Das Datenblatt finde ich eine Katastrophe...Es gibt viele teure fertige LCD Module bei denen ich 4 digitale Pins für den 4-bit mode benötige und noch 1-2 für enable und write/read. Kann ich das mit diesem LCD(nicht mehr als 6 digitale Pins) auch realisieren und wenn ja wie? und welche zusätzlichen Bausteine oder ICs wären nötig? vll hat auch jemand schon eine ähnliche Schaltung parat...

33355

33356

witkatz
21.03.2018, 07:16
Es gibt viele teure fertige LCD Module bei denen ich 4 digitale Pins für den 4-bit mode benötige und noch 1-2 für enable und write/read.
Diese fertigen Module beinhalten einen Controller und die Ansteuerschaltung für die Flüssigkristalanzeige. Für das von dir aufgeführte transflexive Display brauchst du noch die Ansteuerung. Ich nehme diese Displays gerne für Batteriebetriebene Basteleien, z.B. so was hier (https://www.roboternetz.de/community/entries/385-Drehzahlanzeige-zum-Nachr%C3%BCsten-an-Handbohrmaschine-im-Bohrst%C3%A4nder). Dafür kann man z.B. einen PIC Mikrocontroller aussuchen, der eine LCD Ansteuerung mit der benötigten Wechselspannung ohne Gleichanteil in Hardware hat, z.B. den PIC16F19155 oder PIC16F19175. Mit welchen µC bist du unterwegs?

peterfb
21.03.2018, 09:46
Ich benutze ein ST Nucleo Board da ist ein Cortex-M4 drauf...ich habe nicht mehr viele Digitale Pins frei, da das ganze auf Arduino basiert. Weißt du wo ich eine Anleitung oder Schematic zu der Ansteuerschaltung finde? Ich wollte kein fertiges Modul kaufen.

witkatz
21.03.2018, 11:09
ich habe nicht mehr viele Digitale Pins frei, [...] Ich wollte kein fertiges Modul kaufen.
So wie ich die Ansteuerung von LCD Flüssigkristalanzeigen kenne, muss für das von dir vorgestellte Display an 23 Segmenten und am COM 50Hz Wechselspannung (ohne DC Komponente!) ausgegeben werden. Wenn du 24 freie digitale Ausgänge hättest, könntest du das vielleicht in Software realisieren.
Was ist denn eigentlich dein Ziel? Wenn es nur darum geht ein paar Zahlen auszugeben, dann ist so ein 16x2 Display mit integriertem Controller für 2'fufzich schon die einfachste Lösung.

- - - Aktualisiert - - -

Wenn dir das Ansteuern des HD44780 zu kompliziert oder zu Pin-aufwendig ist, dann ist vielleicht ein LCD Display mit i2c oder ein mit i2c Adapter das richtige? Bin beim googlen zufällig drauf gestoßen...

Klebwax
21.03.2018, 16:31
Kann ich das mit diesem LCD(nicht mehr als 6 digitale Pins) auch realisieren und wenn ja wie? und welche zusätzlichen Bausteine oder ICs wären nötig? vll hat auch jemand schon eine ähnliche Schaltung parat...


Nein das geht nicht. Da brauchst du die komplette LCD-Ansteuerung einschließlich Spannungswandler und Takterzeugung. Wenn du das noch nie gemacht hast, bist du ein paar Monate gut beschäftigt.

MfG Klebwax

Siro
21.03.2018, 19:47
Ich habe grad mal gekramt und eine alte Schaltung von mir gefunden.
Du brauchst dann eigentlich nur 3 Leitungen:

Clock
Chip Select
Datenleitung

Hier mal ein Ausschnitt aus dem Schaltplan:

33359

Es ist ewig her, als ich ein ähnliches Display mit nem PIC angesteuert habe, aber es gab da einiges zu beachten,
wenn ich mich recht erinnere musste ich die Segment und die COM Leitung in einem Takt kontinuierlich invertiert ansteuern.
Dies muss absolut symetrisch erfolgen, also 50:50 Prozent
Schieberegister hab ich das "berühmte" 74595 genommen, die kann man ja beliebig kaskadieren, weis nicht ob man das auf dem Bild erkennen kann.
Hier sollten "HC" Typen nicht "HCT" verwendet werden wenn dein Controller mit 3,3 Volt läuft, bei 5 Volt wärs egal.

Aus meiner Erinnerung, ich hoffe ich liege nicht falsch, dann korrigiert mich bitte:
Du schiebst die gesamten Daten rein, wobei die anzusteuernden Segmente High sind, dazu die COM Leitungen auf Low.
Dann schiebst Du die gesamten Daten invertiert rein, also alle anzusteuernden Segmente auf Low und die COM Leitung auf High.
Das muss im schnellen Wechsel erfolgen, aber absolut symetrisch erfolgen, sonst verblasst dein Display.

Bei deinem Display benötigst Du laut Datenblatt nur 5 Volt Signale. Spannungsconverter brauchst Du nix.

Ich vermute mal, es ist einfacher, wie schon beschrieben, ein Display mit fertigem Controller zu verwenden.

--------------
ich hab das grad nochmal ausprobiert.
Ja, das funktioniert so, siehe Bild. Hier habe ich die COM Leitung und das BC-Segment (das ist die "1") wechselweise angesteuert.
Es läuft bei 5 und auch bei 3,3 Volt wobei der Contrast etwas geringer wird.

33360

Die Software Hauptschleife von meinem PIC Controller



while (1)
{
LATA5 = 1; // COM Leitung auf High
LATA0 = 0; // Segment Leitung auf Low
Delay_ms(20);
LATA5 = 0; // COM Leitung auf Low
LATA0 = 1; // Segment Leitung auf High
Delay_ms(20);
}

Fazit:
Du hast 24 Pins bei deinem Display, dann brauchst Du lediglich 3 Schieberegister.
Der Rest ist dann Software, wobei nur 3 Leitungen benötigt werden.

33362


Dann hab ich mir eine Header Datei geschrieben:


/************************************************** ****************************
File : SEGCODE.H
Autor : Siro
************************************************** ****************************/

/* bit definition for the 7-segment-displays

a
-------
| |
f | | b
| g |
-------
| |
e | | c
| |
-------
d

*/

/* hardware definitions where the segments are connected */
#define SEG_A 0x80 /* Display Segment a is Bit 7 */
#define SEG_B 0x40 /* Display Segment b is Bit 6 */
#define SEG_C 0x20 /* Display Segment c is Bit 5 */
#define SEG_D 0x10 /* Display Segment d is Bit 4 */
#define SEG_E 0x08 /* Display Segment e is Bit 3 */
#define SEG_F 0x04 /* Display Segment f is Bit 2 */
#define SEG_G 0x02 /* Display Segment g is Bit 1 */
#define SEG_DP 0x01 /* Display Segment dp is Bit 0 */

/* visible outline of Numbers and Characters */
#define SEG_CODE_0 SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F
#define SEG_CODE_1 SEG_B + SEG_C
#define SEG_CODE_2 SEG_A + SEG_B + SEG_D + SEG_E + SEG_G
#define SEG_CODE_3 SEG_A + SEG_B + SEG_C + SEG_D + SEG_G
#define SEG_CODE_4 SEG_B + SEG_C + SEG_F + SEG_G
#define SEG_CODE_5 SEG_A + SEG_C + SEG_D + SEG_F + SEG_G
#define SEG_CODE_6 SEG_A + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G
#define SEG_CODE_7 SEG_A + SEG_B + SEG_C
#define SEG_CODE_8 SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G
#define SEG_CODE_9 SEG_A + SEG_B + SEG_C + SEG_D + SEG_F + SEG_G
#define SEG_CODE_A SEG_A + SEG_B + SEG_C + SEG_E + SEG_F + SEG_G
#define SEG_CODE_b SEG_C + SEG_D + SEG_E + SEG_F + SEG_G
#define SEG_CODE_C SEG_A + SEG_D + SEG_E + SEG_F
#define SEG_CODE_d SEG_B + SEG_C + SEG_D + SEG_E + SEG_G
#define SEG_CODE_E SEG_A + SEG_D + SEG_E + SEG_F + SEG_G
#define SEG_CODE_F SEG_A + SEG_E + SEG_F + SEG_G

#define SEG_CODE_G SEG_A + SEG_C + SEG_D + SEG_E + SEG_F + SEG_G
#define SEG_CODE_H SEG_B + SEG_C + SEG_E + SEG_F + SEG_G
#define SEG_CODE_i SEG_E
#define SEG_CODE_I SEG_E + SEG_F
#define SEG_CODE_L SEG_D + SEG_E + SEG_F
#define SEG_CODE_l SEG_E + SEG_F
#define SEG_CODE_n SEG_C + SEG_E + SEG_G
#define SEG_CODE_o SEG_C + SEG_D + SEG_E + SEG_G
#define SEG_CODE_O SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + SEG_F
#define SEG_CODE_t SEG_D + SEG_E + SEG_F + SEG_G
#define SEG_CODE_u SEG_C + SEG_D + SEG_E
#define SEG_CODE_P SEG_A + SEG_B + SEG_E + SEG_F + SEG_G
#define SEG_CODE_r SEG_E + SEG_G
#define SEG_CODE_S SEG_A + SEG_C + SEG_D + SEG_F + SEG_G
#define SEG_CODE_T SEG_A + SEG_E + SEG_F
#define SEG_CODE_U SEG_B + SEG_C + SEG_D + SEG_E + SEG_F
#define SEG_CODE_Y SEG_B + SEG_C + SEG_D + SEG_F + SEG_G
#define SEG_CODE_h SEG_C + SEG_E + SEG_F + SEG_G

#define SEG_CODE_MINUS SEG_G
#define SEG_CODE_UNDERLINE SEG_D
#define SEG_CODE_POINT SEG_DP
#define SEG_CODE_BLANK 0

021aet04
03.04.2018, 18:42
Du kannst ein LCD auch mit einem EXOR Gatter ansteuern. Du benötigst einen Takt und das Signal (für jeden Balken).
Takt gibst du auf die BP (Backplane = gemeinsamer Anschluss der Segmente), diesen Takt gibst du gleichzeitig auf einen Eingang des Gatters.
Signal gibst du auf den 2ten Anschluss des Gatters.

Wenn das Signal "0" ist sind BP und Segment gleichphasig, das Segment leuchtet nicht.
Wenn das Signal "1" ist sind BP und Segment gegenphasig, das Segment leuchtet.

Logiktabelle EXOR, A & B=Eingang, X=Ausgang:
A B X
0 0 0
1 0 1
0 1 1
1 1 0

Durch das EXOR hast du zwischen BP und Segment eine Wechselspannung. Wenn du Multiplexen willst wird es etwas komplizierter.

MfG Hannes

Crazy Harry
01.06.2018, 08:41
Du könntest auch versuchen einen PCF8566 aufzutreiben, der dir die eigentliche LCD-Ansteuerung abnimmt und nur die Anzeigedaten via I2C erwartet.