!!!
Fotos, Grafiken nur über die
Upload-Option des Forums, KEINE FREMD-LINKS auf externe Fotos.
!!! Keine
Komplett-Schaltbilder, keine Fotos, keine Grafiken, auf denen
Urheberrechte Anderer (auch WEB-Seiten oder Foren) liegen! Solche Uploads werden wegen der Rechtslage kommentarlos gelöscht!
Keine Fotos, auf denen Personen erkennbar sind, ohne deren schriftliche Zustimmung.
Also hier setze ich weiter an und habe im www recherchiert um das Geheimnis zu lüften. Dieses Beispiel funktioniert auch mit einem klassischen analogen KW- Empfänger. Man kann über Mikro oder direkt die NF aus dem Empfänger einspeisen. Es kann sein, dass zusätzliche analoge Filter das Signal aufbereiten müssen. Es hat eine Weile gedauert, aber in einem Video fand ich den verwendeten Tone Dekoder. Ein kleiner Achtbeiner NE567 / SE567 = LM567. Das ist das Geheimnis einer sauberen Signalverarbeitung mit der Arduino- Plattform. Im Beispiel der kleine Nano.
Hier für alle Interessierten das Datenblatt aus dem Funkamateur. In Deutsch und mit Applikation!
Ich versuche das auch mal in Deiner beschriebenen Form. Ich habe mich gerade festgefressen und bin mit meinem TFT am hadern. Das LCD hat so unkompliziert funktioniert, hier auf der Picselebene des TFT wird gerade das Überschreiben von Werten bzw. in meinen Versuchen, von noch einfachen "Strings" zum Problem. Daher meine Nachfrage bezüglich Deiner Tests.
Hast Du schon Erfahrungen bei Deinen Programmierungen zu einem TFT- Display? Es geht um das Löschen von Zeilen und oder des ganzen Bildschirms wenn neue Werte eingeschrieben werden sollen. Ich habe gewaltig recherchiert und dazu einiges gefunden. Man muss prinzipiell alle betroffenen Strings übermalen oder den kompletten Bildschirm in seiner Hintergrundfarbe überschreiben. Das ist sehr unkomfortabel und kostet Zeit. Diese verlorene Zeit wird dann als Flackern oder langsames Verändern einzelner Sektionen sichtbar. Solch ein Display sieht schon sehr cool aus, aber eine richtige Lösung beim Überschreiben habe ich noch nicht gefunden. Allein das Cursersetzen ist eine Katastrophe.
Gruß
Joerg
Der Test in sw sieht prima aus.. aber nun lass das Hallo mal blinken! Völlig unpraktisch. Bei meiner angestrebten schnellen Morsezeichen - Dekodierung wird das zum Problem! Ideen? Hierzu siehe auch h t t p s://www.boecker-systemelektronik.de/Seite-/-Kategorie-1/Arduino-mit-TFT-Touchscreen ( Leerzeichen wegen Werbung eingefügt )
ich habe in meinen Projekten auch schon einige TFTs und OLEDs verbaut. Gerade bei meinen magischen Fächern kann man das komplette Löschen und Neuzeichnen vergessen. Der AVR (und manchmal auch die Schnittstellen wie I2C oder SPI) sind zu langsam für eine flackerfreie Darstellung wenn dauernd das komplette Frame aktualisiert werden muss. Hier gibt es nur die Möglichkeit die Unterschiede zwischen zwei Bildern herauszuarbeiten und die Deltas berechnen/übertragen zu lassen. Eine Möglichkeit hast Du dafür ja schon genannt. Mit AND und OR-Operationen auf den Grafikspeicher bzw. auf Teilen davon ist das aber gut beherschbar. fillScreen(x1,y1,x2,y2,farbe) macht in deiner Lib bestimmt auch nichts anderes? Allerdings würde ich auch nie mehr freiwillig hochauflösende Displays mit I2C oder SPI in Applikationen mit schnellem Bildwechsel einsetzen. Trotz aller Programmierkniffe kann man einen seriellen Datenbus nicht übermaß beschleunigen. Das ist dann einfach die falsche Hardware für den Job.
aber da ist für mich viel Forschergeist gefragt. Eigene Problemlösungen sind gut, aber hier wäre ein einfacher Programmauszug für das schnelle neue Einschreiben von Werten schon hilfreich. Stell Dir eine steigene Temperatur oder HF- Spannung vor. Du willst nur diesen kleinen Bereich ändern und als String setzen..
Überschriften....Dimension....sprich Formatierung des gesamten Shields bleibt gleich!
Im Link wird ja sogar ein kleines Oszilloskop prinzipiell beschrieben, also ein Kurvenverlauf! Extrem schwierig! Und ich scheitere hier schon an Zahlen und Buchstaben.
Angenommen der String steht bei x=30,y=30 und ist 15 Pixel in der Höhe und 30 in der Breite. Dann lösche ich mit fillScreen(x,y,h,w,farbe) halt, wenn x,y die linke obere Ecke ist, den Bereich von (30,30,45,60) bzw. (30,30,15,30) wenn die letzten beiden Werte h und w sind, mit der Farbe Schwarz (wenn das meine Hintergrundfarbe ist) und schreibe dann nur den Variablenstring neu. Das sollte doch klappen bei Dir?
Alternativ kannst Du den Variablenwert vor seiner Aktualisierung nochmal in einer Variablen zwischenspeichern. Wenn dann der neue Wert aufs Display geschrieben wird, schreibst Du vorher den alten Wert und in Hintergrundfarbe aufs Display und danach den neuen Wert in normaler Schriftfarbe.
ja ok....ich kann Dir gut folgen. Das entspricht auch etwa den Ergebnissen meiner Recherchen. Meine Schwierigkiten liegen auch in der Aufteilung des Displays. Im Link ist dazu ja gleich eine kleine Darstellung zur Positionierung. Wenn ich aber irgendwo...in einer gewissen Schriftgröße z.B. ein tft.println(""); setze, wie kann ich schnell die vohandene und entsprechende Curserposition ermitteln? In meinem Beispiel (Bild) habe ich das ganze Display obendrein noch entsprechend meines Aufbaus gedreht. ( siehe rotation=3) Da wirst Du kirre. Hier sind es nur Strings! Das empfinde ich als echt unpraktikabel. Wo sitzt genau der Curser zum String im obendrein gedrehten Display?
Wahrscheinlich ist es am Besten für jede Eingabe eine seperate Curserprtion mit anzugeben. Dann die gleiche Postion mit dem String und der Hintergrundfarbe überschreiben.....anschließend den neuen String setzen.
wenn die Cursor-Koordinaten nicht explizit angegeben sind, bleibt wohl nur das Ermitteln durch Versuchen, was ätzend sein kann! Dreht denn deine Bibliothek bei Display-Rotation das Koordinatensystem mit oder muß man die Variablen selbst noch transformieren?
Ich würde mir die Werte von setCursor irgendwo abspeichern (Array mit xy-Positionen, vielleicht auch noch verwendete Schriftgröße) und definitiv vor jedem println() die Werte mit angeben. Dann brauchst Du beim Löschen auch nichts weiter zu machen als mit setCursor nochmal die Position anzufahren, Zeichenstift wechseln, alten Wert in Schwarz drüberschreiben. Danach mit setCursor nochmal zurück zur Position, erneuter Farbwechsel des Zeichenstifts, neuen Wert ausgeben.
wenn Dir das mit den einzelnen Grafikprimitiven zu lästig wird, schau mal hier: http://www.impulseadventure.com/elec/arduino-touch-gui.html oder https://ugfx.io/index Da kann man mit relativ wenig Aufwand wunderbare Benutzeroberflächen mit Touchscreen-Bedienung zaubern. Damals habe ich ja bei meinem Wobbelsender auf dem Mega2560 auch noch alles selbst gezeichnet und aktualisieren müssen, heute würde ich so ein Framework vorziehen.
danke für die guten zusätzlichen Infos. Auf meiner Demo CD befinden sich zum TFT einige gute Graphikbeispiele. Diese müssen einfach mal probiert und verändert werden. Auch zur Tochfunktion habe ich einige zum Display passende Beispiele. Nochmals kurz zurück zur Darstellung von Strings und damit zu variablen Werten z.B. aus einer Analogmessung oder die letztendliche Darstellung einer 70cm Morsecodeübersetzung, um beim Binatone zu bleiben.
Die TFT- Rotation, wenn diese am Anfang des loops gesetzt wird, ist zum Glück völlig unproblematisch. Wird nur eine Schriftgröße gesetzt so bleibt das Ganze auch übersichtlich und die Curserposition entspricht einer einfachen mathematischen Reihe. Die Rotation ist eingebunden und man muss sich nicht weiter darum kümmern. Hier ein Beispiel für Schreiben und Löschen ohne den ganzen Bildschirm mit Hintergrundfarbe zu füllen. Das ist völlig ok so und das Flackern ist verschwunden. Die Erkenntnis ist, dass unbekannte Werte nur über eine graphische Fläche mit der Hintergrundfarbe überschrieben werden können. Deine angesprochende Zwischenspeicherung und anschließende Einschreibung und Überschreibung mit der Hintergrundfarbe wäre die beste Lösung für unvorhersehbare Werte, Wörter usw.....
Hier ein an- und abschwellendes Laufbeispiel mit bekannten Strings in meinem verdrehten Display, Löschung und kurzer zweiteiliger Blinkfunktion von "Hallo" genau in der mittleren Zeile des TFT- Displays.