Hi Hier Beitrag "ARDUINO und LCD Display PC-6749-UUW von Densitron" steht keider nicht, wie es ausgegangen ist. Ich möchte dieses Display unter PicoMite am Raspberry Pi Pico betreiben. Laut Datenblatt des HT1621B (https://datasheet.lcsc.com/lcsc/2108251130_HTCSEMI-HT1621BRQZ_C2886391.pdf) läuft dieser ab 2,4V, also habe ich das Display an 3,3V angeschlossen. Zum Datenprotokoll und Initialisierung: Es scheint, daß die Befehlsequenz aus "100", dann aus 9 Bits, also insgesamt 12 Bits besteht. Die Datensequenz besteht aus "101", 6 Adressbits, die das Segment angeben, und 4 Bits, die Com angeben. Insgesamt also 13 Bits. Um das Display zu aktivieren, muß ich also erstmal 10000000001x (Oszillator an) 10000000011x (Display an) an das Display senden? Muß Bias auch gesetzt werden? Was bedeutet das? Wenn ich dann 101 und irgendwelche weiteren 10 Bits an das Display sende, sollten doch irgendwelche Segmente sichtbar werden (muß Com dazu 0 oder 1 sein? Ist das bisher soweit richtig? Das Display habe ich mit Data an MOSI, /WR an SCK, /CS an CS am Pico angeschlossen. Unter PicoMite die entsprechenden SPI-Pins definiert, SPI mit 100kHz und 12 Bit geöffnet, CS auf 0, die beiden Kommandos gesendet, CS auf 1, SPI geschlossen, SPI mit 100kHz und 13 Bit geöffnet, CS auf 0, und die Daten mal durchgezählt. Leider bleibt das Display blank. Habe ich hier noch einen grundsätzlichen Denkfehler?
:
Bearbeitet durch User
Peter N. schrieb: > Muß Bias auch gesetzt werden? Was bedeutet das? Bias schaltest du schon an durch das LCD ON Kommando, sollte also fertig sein. Ich sende noch ein WDT OFF Kommando (0b10000000101), bin aber nicht sicher, ob das überhaupt nötig ist. Wenn du das Timing Diagram einhältst wie auf Seite 10 und 11 im Datenblatt, sollte es dann klappen. Es schadet nicht, die /CS Leitung vor allem anderen für 100ms auf low zu ziehen, um das Display zu resetten. > CS auf 0, > die beiden Kommandos gesendet, > CS auf 1, Du musst CS nach jedem Kommando mal kurz high setzen. Das SPI Interface ist mir unbekannt, ich benutze Bit-Banging auf einem AVR8.
:
Bearbeitet durch User
Ok, der Hauptfehler, das Display läuft tatsächlich nur mit 5V. Nach den Init-Befehlen werden alle Segmente angezeigt, die untere rechte Ecke aber nur schwach. Auf Daten reagiert das Display aber nicht... Matthias S. schrieb: > Bias schaltest du schon an durch das LCD ON Kommando, sollte also fertig > sein. Ich meine diese "BIAS and COM"-Einstellung (Befehl 100 0010 .....) Matthias S. schrieb: > Es schadet nicht, die /CS Leitung vor allem anderen für 100ms auf low zu ziehen, um das Display zu resetten. Mache ich am Anfang für 200mS. Aber davon läßt sich das Dispkay nicht beeindrucken, wenn es erstmal was anzeigt... Matthias S. schrieb: > Das SPI Interface ist mir unbekannt, Das ist nur ein taktsynchroner serieller Bus, der für einfache serielle Ansteuerungen wie hier funktionieren sollte. Die Anwendung von Bitbang unter PicoMite habe ich bislang nicht verstanden.
Peter N. schrieb: >> Bias schaltest du schon an durch das LCD ON Kommando, sollte also fertig >> sein. > Ich meine diese "BIAS and COM"-Einstellung (Befehl 100 0010 .....) Für das Densitron PC-6749-AA, das es von Pollin gab (3-stellige 16-Segment) war das nicht nötig. Meine Init Sequenz ist:
1 | // set HT1621 reset for 100ms
|
2 | DEN_PORT &= ~(1 << BIT_CS); |
3 | _delay_ms(100); |
4 | DEN_PORT |= (1 << BIT_CS); |
5 | // release reset for LCD
|
6 | _delay_ms(50); |
7 | // set HT1621 operation
|
8 | send_HTData(11,0x0040); // Command SYS EN |
9 | _delay_ms(100); // wait a little |
10 | send_HTData(11,0x00C0); // Command LCD ON |
11 | send_HTData(11,0x0A00); // Command WDT OFF |
12 | // init done, send some letters to RAM
|
13 | send_HTChar(0x0,'L'); |
14 | _delay_ms(10); |
15 | send_HTChar(0x5,'C'); |
16 | _delay_ms(10); |
17 | send_HTChar(0x9,'D'); |
18 | _delay_ms(10); |
19 | // now the main loop
|
Dazu muss ich sagen, das meine HTData Routine die führende 1 immer erzeugt und die 11 steht für die Anzahl der Bits, die dann gesendet werden, von links nach rechts. Übergeben wird ein uint16, das aber nur 11 bits nutzt. HTChar ist dadurch komplex, das die Adresse 0x0 fürs erste, 0x5 fürs zweite und 0x9 fürs dritte Digit benutzt wird. Edit: Ahh, durch den Schreibfehler im Titel verwirrt worden. Du hast genau das gleiche LCD wie ich, das PC-6749-AAW, ausser, das es bei Pollin nur 0,25 Euro kostet: https://www.pollin.de/p/lcd-modul-densitron-pc-6749-aaw-120818
:
Bearbeitet durch User
Wenig Fortschritte bislang. Ich habe die Elektrik erstmal korrigiert und einen Pegelwandler 3,3V -> 5V zwischen Pico und Display geschaltet. Kommandos funktionieren scheinbar auch mit 13 Bit Länge. Display On/Off per Kommando funktioniert. Matthias S. schrieb: > Es schadet nicht, die /CS Leitung vor allem anderen für 100ms auf low zu > ziehen, um das Display zu resetten. Das hat scheinbar keinerlei Wirkung Peter N. schrieb: > Matthias S. schrieb: >> Bias schaltest du schon an durch das LCD ON Kommando, sollte also fertig >> sein. > Ich meine diese "BIAS and COM"-Einstellung (Befehl 100 0010 .....) Hier muß auf 4 Commons geschaltet werden, damit das rechte untere Viertel der Stellen auch eingeschaltet wird. Matthias S. schrieb: > Ich sende noch ein WDT OFF Kommando (0b10000000101), bin aber > nicht sicher, ob das überhaupt nötig ist. Der Watchdog löst doch nur einen Interrupt aus. Da diese Leitung aber nicht rausgeführt ist, sollte das keinerlei Wirkung haben. Was mir immer noch nicht gelingt, Segmente ein und auszuschalten. Nach dem Init sind alle Segmente an, daran kann ich nichts ändern, außer ich trenne die 5V vom Display, dann sind bis zum nächsten Init alle Segmente aus. Die Segmentansteuerung verstehe ich so: Daten schreiben: 101 aaaaaadddd a adressiert eines der Segmente (0-12) d entspricht COM und gibt das Viertel an, in dem das adressierte Segment liegt. Wenn ich also 1010000000000 reinschreibe, müßten doch alle Segmente ausgehen?
:
Bearbeitet durch User
Peter N. schrieb: > Daten schreiben: 101 aaaaaadddd > a adressiert eines der Segmente (0-12) > d entspricht COM und gibt das Viertel an, in dem das adressierte Segment > liegt. Nein, das funktioniert etwas anders. Der RAM ist in 3 Blöcke mit jeweils 4 Bits organisiert und beginnt bei Adresse 0x0 fürs erste Digit, 0x5 fürs zweite und 0x9 fürs dritte Digit. So gibts für jedes Digit die 16 Segmente. Organisiert ist das so (Auszug aus meinem Programm):
1 | ; segment pattern |
2 | ; G AAAAAAA B |
3 | ; G H I J B |
4 | ; G H I J B |
5 | ; G H1J B |
6 | ; F KK L MM C |
7 | ; F NOP C |
8 | ; F N O P C |
9 | ; F N O P C |
10 | ; F E DDDDD C |
11 | ;
|
12 | ; sequence in display RAM is |
13 | ; G K F E H L N D I M O P A J B C |
14 | ; 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 |
15 | ; 1 word per letter |
16 | ; e.g. Capital Letter A would be the word 0xE44B |
Jedes Data Kommando besteht aus der Adresse und dann 4 Bits fürs Datennibble. Um COM1-COM4 muss man sich nicht kümmern. Peter N. schrieb: >> Ich meine diese "BIAS and COM"-Einstellung (Befehl 100 0010 .....) > > Hier muß auf 4 Commons geschaltet werden, damit das rechte untere > Viertel der Stellen auch eingeschaltet wird. Mache ich nicht und geht trotzdem in voller Dichte.
:
Bearbeitet durch User
Ach, noch vergessen - RAM Adresse 0x4 ist für den Doppelpunkt zwischen Digit 1 und 2 und hat nur ein Nibble. Man kann mit dem Write Kommando die 4 Nibbles für die 16 Segmente des Digits direkt hintereinander schreiben.
:
Bearbeitet durch User
Matthias S. schrieb: > Nein, das funktioniert etwas anders. Der RAM ist in 3 Blöcke mit jeweils > 4 Bits organisiert und beginnt bei Adresse 0x0 fürs erste Digit, 0x5 > fürs zweite und 0x9 fürs dritte Digit. Das verstehe ich nicht... Weder im HT1621B- noch PC-6749-AA-Datenblatt steht sowas. Wo steht das genau? Matthias S. schrieb: > Organisiert ist das so (Auszug > aus meinem Programm): Die Bezeichnung und Anordnung der LCD-Segmente entspricht dem PC-6749-AA-Datenblatt. Aber die "LCD Logic table" muß dann ja völlig falsch sein... Wo bekomme ich die richtigen Informationen zur Ansteuerung her?
Peter N. schrieb: > Aber die "LCD Logic table" muß dann ja völlig falsch sein Die ist insofern verwirrend, als das damit das Pinout des LCD Glases gemeint ist, das für dich uninteressant ist. Das Glas hat nun mal die 17 Anschlüsse, aber die sind ja schon mit dem HT1621 verbunden. Peter N. schrieb: > Wo bekomme ich die richtigen Informationen zur Ansteuerung her? Über das Datenblatt des HT1621. Das Datenblatt zum LCD enthält nur einen Auszug der Ansteuerung und z.B. die wichtigen 'Write' Sequenzen sind da gar nicht drin.
:
Bearbeitet durch User
Matthias S. schrieb: > Das Glas hat nun mal die 17 > Anschlüsse, aber die sind ja schon mit dem HT1621 verbunden. In dieser Tabelle steht ja auch, welche Display-Segmente mit welchen Anschlüssen des HT1621 verbunden sind. Matthias S. schrieb: > Über das Datenblatt des HT1621. Da steht ja auch nicht (zumindest nicht für mich ersichtlich) drin, wie sich die Ram-Ansteuerung auf die LCD-Ausgangspins des HT1621 auswirkt...
Peter N. schrieb: > Da steht ja auch nicht (zumindest nicht für mich ersichtlich) drin, wie > sich die Ram-Ansteuerung auf die LCD-Ausgangspins des HT1621 > auswirkt... Aber ich habs doch geschrieben, wie es funktioniert. RAM Adressen 0x0 - 0xC sind Nibbles, die aufs LCD gemappt sind. Sendest du 16 Bits an Adresse 0x0 im Data Modus, dann werden diese auf dem ersten Digit angezeigt. Das passt auch zu der LCD Logic Table. Sendest du 16 Bit an Adresse 0x5, dann gehts aufs zweite Digit usw.
Ah jetzt, ja. Ich habe noch ein Diagramm gefunden, in dem die Segmentansteuerung verständlich dargestellt wird. Jetzt brauche ich nur noch eine schöne Chraraktertabelle... Vorschlag zur Hintergrundbeleuchtung: Der Pin dafür geht ja direkt auf die Basis von Transistor Q1, mit R3 als Pulldown. Ich habe die Leiterbahn links oben an R3 (GND) durchtrennt und die beiden linken Anschlüsse von R2 und R3 verbunden (damit wird R3 ein Basispullup). Somit leuchtet die Hintergrundbeleuchtung ständig, kann aber ausgeschaltet werden, wenn man Pin 6 von P1 auf GND zieht.
Peter N. schrieb: > Somit leuchtet die Hintergrundbeleuchtung ständig Warum auch nicht. Ich hatte einen PWM Pin frei und kann ao das BL dimmen. Ich hänge dir mal meinen Font an, erspart dir evtl. ein wenig Arbeit. Ist für Microchip Studio und enthält die Buchstaben von SPC bis zur eckigen Klammer zu. Keine Kleinbuchstaben oder Control Codes.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.