Posts by Neiwirger

    Guten Morgen zusammen,


    letzte Nacht habe ich es hinbekommen.

    Ich bin über einen englisch Sprachigen Blog gestolpert, in welchem der Autor genau mein Verständnisproblem beleuchtet, da es laut seiner Aussage

    einige gibt, die dasselbe Verständnisproblem haben.


    Es ist tatsächlich die Ansteuerung des SPI-Busses, die mir Probleme gemacht hat. Mir war nicht bewusst wie genau die Funktion HAL_SPI_Transmit() des ST Mikrocontrollers Arbeitet.

    Aus diesem Grund habe ich mit einer for-Schleife die Daten über diesen Befehl gesendet. Das heißt aber auch, dass jedes Mal die SPI-Verbindung aktiviert und deaktiviert wurde, was die Kostbare Zeit gekostet hat.

    Stattdessen kann man dieser Funktion ein Array direkt als Daten übergeben und die Menge an Daten, die man übertragen möchte (maximal 65536 Byte).

    So wird der Kanal einmal geöffnet, alle Daten übertragen und dann geschlossen. Zack, ist das Bild da!


    Ich bedanke mich für eure tatkräftige Unterstützung, auch wenn ich nicht unbedingt der redseligste Fragesteller bin.

    Falls jemand anderes ein Verständnisproblem dieser Art hat, schickt mir gerne eine PN, ich Versuche dann zu Helfen.


    Freundliche Grüße


    Jens

    Guten Morgen,


    vielen Dank das ihr da so Geduldig mit mir seid. Ich bin jetzt mal so weit gekommen, dass ich das Bild Scrollen kann. Ein zuvor in den RAM geschriebenes Bild läuft flüssig von oben nach unten durch.

    Nun überlege ich mir, ob ich die Bilddaten außerhalb des Sichtbaren bereiches in den Ram schreiben kann, und dann das Bild durch laufen lasse.

    Dann habe ich dennoch die Problematik, das ich das Bild doch noch eher langsam auf die Grafikeinheit übertragen bekomme obwohl ich mit 20Mbits/s Arbeite.

    Ich bleib da dran, da mich das brennend interessiert.

    Grüße

    Prinzipiell ist mir das klar.

    Ich frage mich nur ob mein Verständnis für den Bildaufbau, respektive der Einstellung dazu grundlegend falsch ist.

    Da ich sehen kann wie Zeile für Zeile auf den Bildschirm geschrieben wird. Ein unbewegtes Bild auf 240x240 Pixel skaliert aus

    einem Array heraus dauert etwa 1,5 sekunden.


    Aus dem Grund auch die Frage zu den grundsätzen des Bildaufbaus, da ich vermute, dass ich hier definitiv im Dunkeln tappe

    und die Möglichkeiten des ST7789 nicht voll ausschöpfe.

    Guten Morgen,

    danke für die Antworten. Hier sind die gewünschten Infos:

    Du hast wirklich einen Mikrocontroller angeschlossen oder meinst du den Grafikprozessor auf dem Display?

    Ja, ich habe den STM32L476RG angeschlossen. Welcher auf den Grafikprozessor am Display zugreift und Bilddaten bereitstellt.

    Die SPI-Schnittstelle befindet sich auf einem Raspberry?

    Diese ist durch den STM32 bereitgestellt.


    Was meinst du mit flüssigen Bildaufbau? Videos?


    Schreibe mal was du eigentlich auf dem Display ausgeben möchtest.

    Folgendes habe ich vor:

    Ich habe einen MLX90640 IR-Sensor welcher 32x24 Pixel große Bilder bereitstellt. Diese Bilder möchte ich auf dem Display bereitstellen, um eine "Art" IR-Kamera auf zu bauen. Als refresh rate werden hier 64Hz im Datenblatt angegeben. Auch wenn ich diese nicht erreichen sollte, so würde ich gern aus dem Display das maximal mögliche rausholen.

    Den Sensor selbst habe ich noch nicht programmiert, da ich für diesen die Library gerne selbst schreiben möchte, aus Übungszwecken.


    Deine Intuition ist falsch. Üblicherweise wird einfach der gesamte Bildschirminhalt neu dargestellt. Und dein SPI Display buffert eh einen Frame. In deinem uC modifizierst oder erstellst du deinen nächsten Frame einfach komplett neu.

    Verstehe ich dich richtig, dass ich die Bilder per SPI nur auf den Grafikprozessor, welcher ein eigenen RAM hat, schiebe? Und eben dieser dann den Rest übernimmt?


    Vielen dank euch!

    Guten Morgen zusammen,


    Ich habe ein Waveshare 1,3" Display das ich mit einem Mikrocontroller von ST ansteuere. Angeschlossen habe ich das Display über SPI und ich kann dieses auch steuern.

    Zugegeben, ich habe eine Library von github genommen, da ich das Display eigentlich nur als mittel zum Zweck benötige und mich deshalb nur in den source code eingearbeitet habe.


    Nun habe ich ein Vertändnis problem.

    Ich möchte das Display nutzen um später einen flüssigen Bildablauf zu erhalten.


    Wie wird so ein flüssiger Bildaufbau erreicht?

    Ich habe die Vorstellung, dass ich das Bild welches auf dem LC-Display angezeigt wird in meinem Controller gespeichert ist und das neue Bild in einem zweiten Array gespeichert wird. Ich vergleiche nun jede Zelle der Beiden Arrays, und alles was in dem zweiten Array steht, wird auf das Display geschrieben.

    Oder liege ich damit komplett auf dem falschen weg.



    Mir würden bereits anregungen für weitere Suchen weiter helfen, ich hab diesbezüglich leider keinen Anschluss daran, wo ich suchen soll.


    Falls ihr noch Infos braucht, stelle ich die natürlich gern bereit.


    Freundliche Grüße


    Jens

    Hallo Bernd,


    wie erkläre ich dir das nun am besten...

    Ich habe meinen Fehler gefunden.


    Es scheint so, als ob ich das Busy Flag zum falschen Zeitpunkt abgefragt habe.

    Mit den entsprechenden delay Operationen hat das Programm ohne Probleme funktioniert.


    Des Weiteren ist mir aufgefallen, dass der beschriebene Fehler auch an anderen Stellen auf dem

    Display reproduzierbar ist. Immer dann, wenn ich den Cursor auf die gleiche Stelle des Displays

    gelegt habe, auf welchem auch das Zeichen mit >=0xA0 bereits hat.


    Beispiel:

    ü steht in Zeile 2, Spalte 5.

    Möchte ich nun ab Zeile 2, Spalte 5 überschreiben, werden die neuen Zeichen erst ab Spalte 6 angezeigt.

    Habe ich mit dem Beschreiben schon ab Spalte 4 angefangen, hat das Überschreiben anstandslos

    funktioniert.


    Ich bitte diesen Fauxpas zu verzeihen und bedanke mich sehr für die Hilfe!


    Grüße

    Jens

    Hallo,

    danke für die Antwort.


    Hier der Link zu der Display Serie.

    https://www.lcd-module.de/pdf/doma/blueline-w.pdf


    Ich habe davon das Display 2x16 Zeichen EA W162B N3LW.

    Der Zeichensatz von dem ich sprach, ist hierin enthalten.


    isBfSet(); habe ich eingerichtet um das Busy Flag abzufragen.


    Du kannst jedes Zeichen in die DDRAM-Adresse 0x00 schreiben, nur die Sonderzeichen nicht? Trifft das auch auf 0x40 zu?

    Sind die Zeichen aus dem Font des Displays oder hast du die selbst generiert?

    Ich kann in die DDRAM-Adressen 0x00 und 0x40 jedes Zeichen schreiben, welches kleiner als 0xA0 (nach obigem Link) ist und nach belieben manipulieren wie z.B. Überschreiben.

    Die Zeichen ab 0xA1 kann ich in den zuvor genannten DDRAM-Adressen zwar schreiben, jedoch nur über einen kompletten Display Clear löschen.

    Return home hat mich leider auch nicht weiter gebracht.


    Grüße

    Hallo zusammen,


    Ich habe eine eigene header Datei geschrieben welche ein 2x16 Zeichen LC-Display per µC ansteuert. Der LCD Controller ist ein HD44780, der µC welchen ich verwende ein ATmega32.


    Folgendes:

    Ich kann die Zeichen aus dem Datenblatt 0x21 bis 0xDF ohne Probleme an jeder Stelle auf dem Display schreiben, überschreiben, und löschen.


    Mit z.B. den Umlauten, Griechischen Buchstaben oder dem Blocksymbol kann ich das nur dann, wenn diese Symbole nicht an erster Stelle der Zeile stehen.


    Ich bekomm diese Symbole also in das Display, kann sie aber nur dann überschreiben wenn sie NICHT an erster Stelle in der jeweiligen Zeile stehen.


    Das einzige das funktioniert ist der Befehl clear Display, welcher die komplette Anzeige löscht.

    Und genau das würde ich gerne vermeiden.

    Ein leerzeichen drüber zu schreiben geht leider auch nicht.

    Vielleicht hat jemand eine idee.

    Hier ist mal ein auszug aus meinem quellcode.

    Für hilfreiche Kritik was das Problem angeht bin ich sehr dankbar.


    Schönen Sonntag!

    Hallo allerseits,


    ich möchte mit dem RaspberryPI und Java etwas herum experimentieren.


    Nun habe ich mir Pi4J geladen und habe bereits erste erfolge damit erzielt.

    Ich möchte jetzt einen Sensor, genauer gesagt den MLX90640 steuern und dieser hat 2 Byte große Register.

    Ich muss also um diese Register auslesen zu können erst einmal 2 Byte an den MLX senden,

    dann den Repeated Start ausführen um den MLX im Anschluss daran auf Read zu setzen und

    auslesen zu können.

    Das klappt soweit alles, nur bekomme ich keinen Repeated Start hin mit der read funktion.

    Das bedeutet, zwischen schreiben und lesen erzeugt mir PI4J immer eine Stop kondition.


    Hat jemand die entsprechende Kenntnis ob das was ich vorhabe so ohne weiteres mit PI4J

    möglich ist, oder komme ich da um ein Workaround oder gar um die Benutzung von Python

    oder C gar nicht herum?


    Freundliche Grüße



    Jens