LCD anschluss per Schieberegister / 4 Portd und 4 Portb

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • LCD anschluss per Schieberegister / 4 Portd und 4 Portb

      Hallo,

      ich habe da mal wieder eine paar Fragen.
      1. Ist es möglich die Datenweitergabe im Programm an das LCD manuell z.B. über ein Schieberegister zu regeln?
      Also kann man die Datenbits irgendwie in eine Variable schreiben und dann im Programm weiter an das Schiebereigster leiten?
      - Ja, ich weis das wird dann langsamer und evtl. macht 8 Bit dann gar keinen Sinn mehr.

      2. Ist es möglich das LCD im 8 Bit Mod zu betreiben und dabei Datenports = PortD.0 - 3 und dann vier weitere Datenbits an PortsB.0-3?
      - Habs schon getestet hat aber nur Fehler ausgespuckt.

      Grüße
      Alex
    • Dem Lcd ist es egal wie die Daten entstehen sie müssen nur passen wenn sie bei ihm ankommen.
      Möglich ist alles, wenn es anders sein soll als die fertigen Routinen/Libs es vorsehen muß es selber zu fuß programmiert werden. Was für ein LCd? Was soll bezweckt werden? Ist das Lcd zu langsam oder hat das Programm "keine Zeit" für die Ausgaben?
    • Wieso brauchst du 8 Pins, wenn du ein Schieberegister verwenden willst?

      Ich sehe da nur Clock und Data fürs Schieberegister. Damit kannst du z.B. die 8 Bits für D0 bis D7 raus schieben. Dann brauchst du noch RS und EN zur Steuerung vom Display. WR bleibt auf GND.

      Man kann aber das Display auch im 4-Bit Mode betreiben, dann geht alles übers Schieberegister.
      Dann brauchst du nur 2 Pins (Clock und Data).

      Damit du nicht alle Display Routinen neu schreiben musst,
      gibt es die 2 Bascom-Directiven, mit denen man die Ausgabe der Daten umleiten kann auf eigene Routinen:
      1. $LCDPutData
      2. $LCDPutCtrl
      Dort schreibst du Code, der die Daten auf das Schieberegister ausgibt.
      Dann kannst du weiterhin alle Bascom-Befehle fürs Display wie gewohnt verwenden.
    • Mitch64 wrote:

      Damit du nicht alle Display Routinen neu schreiben musst,gibt es die 2 Bascom-Directiven, mit denen man die Ausgabe der Daten umleiten kann auf eigene Routinen:
      1. $LCDPutData
      2. $LCDPutCtrl
      Dort schreibst du Code, der die Daten auf das Schieberegister ausgibt.
      Dann kannst du weiterhin alle Bascom-Befehle fürs Display wie gewohnt verwenden.
      Hallo,

      Aus der hilfe geht nicht wirklich viel hervor.
      Mir ist nicht wirklich klar wie man die dinger benutzt.
      Eigendlich ist es mir überhaupts nicht klar.
      Wäre irgendwie praktisch wenn ich die von der Routine "übersetzten" Daten abfangen und in einem Byte speichern könnte. Dann könnt ich das Byte per SPI oder manuell an das schieberegister schicken könnte.
      Sieht aber so aus als müsste ich die Daten manuell aus dem speicher holen oder?

      Muss ich mir dann die entprechenden Speicherstellen raussuchen und alles per ASM erledigen?


      Grüße & Herzlichsten dank!
      Alex

      The post was edited 2 times, last by Alex_T ().

    • Pluto25 wrote:

      Dem Lcd ist es egal wie die Daten entstehen sie müssen nur passen wenn sie bei ihm ankommen.
      Möglich ist alles, wenn es anders sein soll als die fertigen Routinen/Libs es vorsehen muß es selber zu fuß programmiert werden. Was für ein LCd? Was soll bezweckt werden? Ist das Lcd zu langsam oder hat das Programm "keine Zeit" für die Ausgaben?
      LCD 16x2 weil billig.
      Ports am MC sparen um vielleicht 2x 16x2 Zeichen Displays anzuschließen. Dachte hier an evtl. 3 Schieberegister für die Daten und die anderen Ports.

      Aktuell möchte ich nur mehrere Displays an einen Mega hängen. Möglichst einfach und Portsparend und möglichst ohne das ich noch was kaufen darf ;)

      Grüße & Herzlichsten Dank!
      Alex
    • Alex_T wrote:

      Ports am MC sparen um vielleicht 2x 16x2 Zeichen Displays anzuschließen.
      Du solltest erst mal eins anschließen und verstehen, wie es funktioniert. Dann kannst du auch mehr anschließen.

      Bezüglich $LcdPutData und $LcdPutCtrl.
      Mit den beiten Direktiven leitest du die Ausgabe ans Display auf eigene Routinen um. Bei den Direktiven musst du ja Labels angeben, die dann angesprungen werden.
      Das Label für $LCDPutData steht dabei für ein Datenbyte (RS=High) und das Label $LCDPutCtrl für ein Commandbyte (RS=Low).

      Die Labels werden von Assembler her angesprungen und das entsprechende Byte fürs Display liegt im Register r24. Musst also nix selber aus dem RAM holen.
      Und dieses Byte in r24 musst du dann auf das Schieberegister geben.
      Weil die Labels von Assembler angesprungen werden, musst du die Labels entweder in Assembler abarbeiten, um das Byte an das Display zu senden, oder du verwendest Pushall und Popall. Zwischen den Befehlen kannst du dann in Basic programmieren.

      Das steht aber alles in der Hilfe.
      Siehe das Beispiel hier: avrhelp.mcselec.com/lcdputctrl.htm

      In deiner Routine gibst du dann die Daten Nubble-weise aufs Schieberegister, mit den entsprechenden Steuerleitungen RS und EN.
      Die anderen Beiden Leitungen sind noch frei. Es ließe sich noch die Display-Beleuchtung an und ausschalten.
      Das letzte Bit könnte man als EN fürs 2. Display nutzen.

      Ich empfehle dir die Nibbles auf das Schieberegister Ausgang Q7:4 zu legen, in der gleichen Reihenfolge wie die Display-Datenleitung D7:4.
      Die anderen 4 Ausgänge frei wählbar für die Steuerleitungen RS, EN (Display 0), EN (Display 1) und Backlight.

      Das Display wird dann im 4-Bit Mode betrieben, musst also pro Aufruf eines Labels 2x das Schiegeregister ansteuern. Erst High-Nibble von r24 raus schieben, dann Low-Nibble. Und nicht vergessen, die Steuerleitungen richtig zu bedienen.

      Wie die Steuersignale zu bedienen sind ist hier unter der Überschrift Interface gut erklärt: sprut.de/electronic/lcd/
    • Alex_T wrote:

      mehrere Displays an einen Mega hängen. Möglichst einfach
      Da würde ich I2C mit der YwRobot.lib nehmen. Nur 2 Pins, bis 8 Displays (mehr möglich) und normale Bascom Lcd Anweisungen.

      Alex_T wrote:

      ich noch was kaufen
      Welche Shift register müßten nicht mehr gekauft werden? Und jedes bräuchte einen eigenen E Pin. Bei 2 LCDs einen Pin mehr und echte "Bitfrimelei" Vielleicht über eine modifizierte Ywrobot?
    • Pluto25 wrote:

      Welche Shift register müßten nicht mehr gekauft werden? Und jedes bräuchte einen eigenen E Pin
      Nicht das Shift-Register braucht den E-Pin, sondern das Display. Das Steuersignal muss aber auch über das Schieberegister.

      Übrigens geht es noch einfacher.
      Display im 8 Bit Mode betreiben.
      Dann werden nur die Datenbits über das Schieberegister ausgegeben.
      Und die Leitungen E und RS werden über Controllerpins ausgegeben.
      Damit sind dann 4 Leitungen für ein Display nötig. Bzw. 5 für 2 Dislays.
      Und dann ist es auch kein Bitgefummel mehr.

      Und das läuft beides (4-Bit-Mode, wie oben beschrieben und im 8-Bit-Mode) alles über Bascom-Befehle.
      Also Cls, Locate, Print etc. alles normal Anwendbar, so wie man es gewohnt ist.

      Das nur noch zur Ergänzung.
    • Es gibt verschiedene Schieberegister.
      Man braucht eins, dass die seriell reingeschobenen Daten mit einem Signal auf den Ausgang übernimmt.
      Der Pin heißt oft Load.

      Ich kann aber nochmal nachschauen.

      Und ja ich habe das schon mal gemacht. Allerdings mit I2C. Da ist aber bei den Daten, die ans Display gesendet werden, kein Unterschied.
      Ob man die per Uart, per I2C oder SPI rausschiebt. Das Ergebnis am Display muss das selbe sein.

      Nachtrag:
      Der Baustein 74594 wäre ein solches Schieberegister mit Ausgabe-Speicher (Latch)

      The post was edited 1 time, last by Mitch64 ().

    • Mitch64 wrote:

      Nachtrag:
      Der Baustein 74594 wäre ein solches Schieberegister mit Ausgabe-Speicher (Latch)
      Schön davon hab ich noch ein paar. Wunderbar.

      Ich werde mich heute oder morgen durch eure Antworten durcharbeiten.
      Ich habe sie gerade schnell überflogen. Ih habt mir einiges an anregungen geliefert.

      Das mit dem Register R24 ist extrem interessant.

      Grüße & Besten dank an alle!
      Alex
    • Ich kam nicht auf die Idee; Axel wollte nichts neues kaufen. Außerdem war das kein gemekere sondern eine Feststellung. Vermutlich werd ichs nie bauen aber sollte mal eine Highspeed Variante die jederzeit störungsfrei unterbrochen werden darf nötig sein haben wir nun eine Möglichkeit.
      Bisher nehme ich bei Pin-Not , größeren Entfernungen oder mehreren LCDs I2C.