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:
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.
Die Software Hauptschleife von meinem PIC Controller
Code:
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.
Dann hab ich mir eine Header Datei geschrieben:
Code:
/******************************************************************************
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
Lesezeichen