Zitat:
-------
#Autor: allu (Gast)
Datum: 13.11.2009 19:15
Bleib erstmal bei 8 Mhz, dafür sind die Zeiten der Displayansteuerung
ausgelegt. Langsamer gehts immer, schneller muß man probieren. Demnächst
möchte ich auch einen Mega32 mit 16 Mhz verwenden und dabei die
Ansteuerzeiten anpassen.
Ein Quarz ist für die Displayansteuerung nicht notwendig, aber sehr
empfehlenswert, Stichwort: serielle Schnittstelle.
Bei 8 Mhz-Quarzen verwende ich 27pf.
------------------------------------------------------------------------
-----
OK, dann reicht zum ansteuern aber jetzt erst mal 'ohne' Quarz. Soblad
es geht und der Quarz da ist wird er eingebaut.
Wie hast Du Dein Display mit dem Atmega32 zusammengeklebt? Schon
mit dem gleichen Schaltplan, oder? Hast Du eine Schaltung mit passendem,
funktionierendem Code?
(Sorry für das teils- Doppelposting, aber sonst weiß ja keiner in diesem
Thread -- <was bisher geschah>
Gruß
Thomas
Den Touch habe ich aktuell noch gar nicht angeschlossen, meine
Widerständchen hängen noch auf der Platine im freien rum, ich wollte
eigentlich einfach einmal einen Text ausgeben.
Ich kann mir nicht vorstellen dass beide meiner Displays defekt sind,
dennoch zeigen beide etwas anderes an. Das Eine Zeigt Streifen, das
Andere zeigt bei Kontrasterhöhung so 8 kleine Kästchen mit
"grauverlauf"...?!
Wahnsinn? Nein gerade nur Verzweiflung und leider keine Funktion.
Für Heute ist Ende mit experimenten. Aber Morgen gehts weiter!
Gruß
Thomas
Hallo Thomas,
ich verwende bisher die Testschaltung von Benedikt mit dem Mega8.
Den Mega32 habe ich leider noch nicht in Betrieb, da bin ich noch ganz
am Anfang.
Hast Du nur ein Display? Und wie war es verpackt? Erfahrung: Große
hellrosa Noppen-Tüte = schlecht, kleine schwarze Tüte = gut.
Gruß allu
Im Unterschied zu deinem Schaltplan hab ich einen 20k Poti zwischen Pin
2 (+5V) und 17 (VEE) gehängt, der mit dem Schleifer an Pin 3(V0)
hängt.So stehts auch im Datasheet des 16080.
(Mir ist aufgefallen, dass ein kleinerer Wert als 20k einen schlechteren
Kontrast gibt.)
Danach hab ich erstmal im Hauptprogramm alle Subprogramme ausser
Initialisierung auskommentiert, um zu sehen, ob der Reset wenigstens
läuft.
Danach hab ich nur Highs auf dem Display ausgegeben, dann Lows, dann
Hex55 (Strichel) usw... Immer mal wieder am Kontrast drehen, sonst
entgeht einem schnell was!!
ich hoffe, das hilft dir...
Hallo Thomas,
bin auch gerade dabei das Programm auf den Mega32 umzustellen und habe
dabei ähnliche Effekte erhalten. Da ich die serielle Schnittstelle noch
brauche, ist das Display bei mir anders angeschlossen: PD6 = RS, PD5 =
RW, PD7 = E, PC0 bis PC7 = D0 bis D7, PD4 = CS und PD3 = R.
Ein Test aller Ports ergab, dass PD0(RxD), PD1(TxD) und PC2, PC3, PC4,
PC5 keine Ausgangssignale lieferten.
Warum PC2 bis PC4 nicht funktionierten, lag an der Einstellung im
Brenn-Prog. (AVR ISP MK2). Das JTAG-Interface war eingeschaltet. Nachdem
unter Fuses hinter dem Eintrag JTAGEN das Haken weg war, erschien auf
dem Display das erste Kalibrierkreuz.
Noch eine Anmerkung, wenn beim Compilieren Fehler gemeldet werden,
könnte das an der neuen Bezeichnung ADCSRA liegen:
' sbi ADCSRA, ADSC ' neuer Name nach Atmel
sbi ADCSR, ADSC ' Bezeichnung in Bascom
Also das letzte A wegmachen. Oder im „m32def.DAT den Namen in ADCSRA
ändern.
Gruß Alex
Hi Allu,
ich denke inzwischen es muss sich bei mir um ein Hardwareproblem
handeln.
Meine Testplatine habe ich durchgeprüft und sollte funktionieren, aber
Ihr kennt das ja... Es schleichen sich gelegentlich die
"interessantesten" Fehler ein.
In meinem Fall warte ich jetzt auf die neue Pollin Lieferung und dann
gehts weiter. Denke dass das Display einen Defekt hat (nicht sicher aber
könnte sein)
Ich melde mich sobald es Neues gibt.
PS: Das Display wäre der Hammer, hab gerade 100te von Ideen was man
damit so alles anstellen könnte - es fehlt jetzt nur noch der erste
Schritt (ein erstes Lebenszeichen)
Gruß und guten Start in die Woche!
Thomas
ANHANG:
Testaufbeu und die interessante Anzeige des Displays.
[schön mit vielen, vielen Brücken und Streifenrasterplatine]
...und die Rückseite
hab schon lange keine Lochrasterprojekte mehr durchgeführt und muss
sagen, es gibt doch nichts spannenderes als ein trockenen Rotwein,
gediegene Musik und ein schönes Elektronikprojekt.
@Allu: schwarze, kleine EMV-Tüte und Display wie auf Photo.
@Sven & Allu :-)
Könnt Ihr mal Euren "minimal-aber-funktionierenden", ersten Code posten?
So, die neuen Displays sind noch nicht da.
Ich habe jetzt ein verwirrendes Ergebniss. Eventuell könnt Ihr damit
etwas anfangen weil es bei Euch auch mal so war?!
Das Display Streift jetzt unschön von oben nach unten, innerhalb von
ca.0,5sekunden endlos durch.
|--------|
|░░░░░░░░| <- Streifen (unkontrolliert und ungewollt)
| | saust immer von oben
| | nach unten
| | durch das Display etc.etc.
|--------|
mehr tut sich nicht.
Den aktuellen Source habe ich mal angehängt.
Die Ports passen mit meiner Verdrahtung überein:
Daten = D0-D7
Controll ist Port C
Rs Alias 5
Rw Alias 4
E Alias 3
Cs Alias 1
R Alias 0
- JTAG ist disabled (im BASCOM Progrämmle unter manueller
Programmierung)
- ADCSRA habe ich abgeändert zu ADCSR
- Hab aktuell noch ein 10k Kontrastpoti drin, so wie es aber aktuell tut
ist das nicht das Problem.
Ohje,ohje
Gruß
Thomas
auf welcher Frequenz bist du denn mit dem Atmega?
Versuch mal weniger, das geht immer; sieht wie´n Timing Problema aus...
Werd mal mein Display rauskramen und versuchen, das Richtige falsch zu
machen :-)
Bezug;
Init_gc_mode:
Data &H00 , &H07 'Die nächsten 7
Data &H00 , &H12 'Befehle an GC senden
Data &H01 , &H76
Data &H02 , &H17
Data &H03 , &H4F
Data &H08 , &H00
Data &H09 , &H00
Data &H00 , &H32
Hab mal bißchen gefummelt!
Stell mal deinen Character-Pitch (ßH01) auf H77 anstatt 76, dann hast du
->8dots pro 1byte<- gesendete Daten.Ist auch schöner beim Programmieren.
Daraus ergibt sich ein "Number of Characters"(ßH02)von 19dez.,also H13!
((Hn = 2 bis 256) - 1)
Versuch mal.
Wenn ich bei mir die NumofChar zu hoch einstelle, erscheint irgendwann
auch nur ein Balken, weil er die Daten nicht über die gesamte Höhe
zieht... Rest sieht soweit gut aus...
Guten Abend Sven,
leider ergab der Tipp keine Änderung am Ergebniss.
Ich muss wohl auf ein neues Display warten.
Hast Du genau das Display mit dem ATMEGA32 am laufen?
Da ich Anfänger im ATMEGAen bin, jetzt mal eine sehr doofe Frage:
Zum testen der Lauffähigkeit meines Controlers wollte ich gerade am
freien PORTC.7 eine LED drankleben und diese mit BASCOM ein oder auch
mal ausschalten. PORTC.7 = 0 -> Theoretisch ja logisch AAABER: Tut
nicht, PORTC.7 wird nicht 0. ???
Gruß
Thomas
Hallo Thomas,
lösche mal die Zeile "$baud = 19200" aus dem Programm. Dadurch werden
von Bascom die beiden Ports PD0 und PD1 für die serielle Schnittstelle
reserviert und sind dann nicht mehr verfügbar.
Gruß Allu
Hallo zusammen,
mein Mega32 läuft jetzt. Es lag nur an der JTAG-Freigabe. Da ich die
serielle Schnittstelle brauche, ist meine Schaltung anders verdrahtet.
Übrigens funktioniert das Display auch noch mit 16 Mhz-Taktfrequenz.
Gruß allu
@allu:
Jo, meins läuft auch (bis jetzt) auf 16MHz kommt halt nur auf Timing und
die Busy-wait Routine an...
Hatte am Anfang nur zum Probieren auf 1MHz geschaltet..
@Thomas:
Hast du nach dem Umschalten von PC7 mal ne Endlosschleife gesetzt??
Hi und erstmal vielen Dank für die Unterstüzung!
Also ich hab meinen ATMeg32 auf 8MHz internen Takt, damit am XTAL1 und
XTAL2 nichts dran (auch desshalb weil mein Quarz noch mit den neuen
Displays in Lieferung ist).
Das mit dem Baud-Tipp klingt logisch, wurde entfernet - aber immer noch
kein Lebenszeichen.
Ich sehe Du, Allu hast einen 100k Kontrastpoti drinne. Ich einen 10k.
Wenn ich bei mir den Kontrast aber stelle, kann ich von 'ganz blass' bis
'ganz dunkel" einstellen. Sollte das nicht reichen? Oder ist das bei mir
eine nur scheinbar korrekte Funktion?
Aktuell habe ich etwas den überblick verloren. Ich werde mir Morgen die
komplatte Schaltung noch einmal zu Gemüte führen (jedes Raster, jeder
Pin und jeder Luftspalt) danach kommt der Code nochmals dran.
Sollte dies nicht zum Erfolg führen, werde ich bis die neuen Displays
kommen, schonmal die Schaltung nach genau dem 'jetzt neuen
Allu'-Schaltplan anfertigen, damit ich mit Sicherheit ein Lebenszeichen
erwarten kann. Das wäre jetzt wirklich gut um sicher zu gehen ob das
Display OK ist.
Das mit der Test-LED an PORTC war mein Fehler, das klappt schon, danke
für den Tipp Sven!
Diese Kontrast-Einstellung ist teilweise ne feinfühlige Sache, ab und zu
triffst du den "richtigen Punkt" nicht. Wie ich oben schon schrieb;
besser nen Poti mit min. 20k nehmen!!
@Thomas
Flachbandkabel sprechen über wie Hund. Zu deinem Display-Kabel habe ich
mal eine Frage. Es sieht so aus, als ob doppelt so viel Adern als nötig
vorhanden sind - was sehr gut wäre.
Ist jede nicht benötige 2. Ader mit GND verbunden?
Hallo zusammen,
anbei eine Programmversion mit angepassten Steuerzeiten für die
schnelleren 16 Mhz. Waren teilweise um ca. 100 nsec zu kurz.
Die Bit-Ports für den Controlbus sind jetzt frei wählbar. Zum
kreuzungsfreien Anschluss werde ich Reset und CS des Displays noch nach
PA6 und PA7 umverdrahten.
@Thomas
Lustige Muster habe ich bei falscher Controller-Konfiguration und bei
Verdrahtungsfehlern erlebt. Ich kann Dir nur raten, ändere nix im
Programm was den Display-Controller betrifft, bevor nicht was
vernüftiges angezeigt wurde.
Gruß allu
Die jeweils 'zweiten' auf dem Flachband hängen bei mir in der Luft.
Jetzt wo Du das schreibst, macht es wirklich Sinn die auf Masse zu
hängen. Danke für den Tipp, wird bald möglichst versucht.
Ich hab hier mal noch ein Datenblatt vom 16080er Display,
eventuell habt Ihr das in der Form ja noch nicht. Ich zumindest hatte
bisher ein 'noch schlechter' ausgeführtes.
Gruß
Thomas
Hallo Thomas,
mit einem ausführlicherem Datenblatt habe ich tagelang gegen den
Controller gekämpft. Gehe mal davon aus, dass mit dem Programm ein
kleines Kreuzchen oben links erscheinen muss. Und mit der Version _7
wenn, ich es nur endlich hochladen könnte ...
Hi Allu,
kannst Dich ja mal im Forum anmelden, eventuell klappts ja dann.
Ich würd Dir auch gern mal meine ICQ zukommen lassen, über PN, falls Du
das nutzt.
Gruß
und trotz Uploadproblemen 'nen schönen Abend
Thomas
Habe mal alle Unterlines entfernt ---- großer Woodoo-Zauber --- ich
glaube selbst nicht dran --- egal --- jetzt werden die Dateien
angezeigt.
Die Version 7 zeigt auf der Startseite einen Text an, so ist leichter zu
sehen, ob was geht.
Gruß Alex (alias allu)
Hi Thomas,
angemeldet habe ich mich, danke, guter Tipp.
Aber mit "ICQ zukommen lassen, über PN" kann ich leider nichts anfangen.
Da hat mir das Internet auch nicht so richtig weitergeholfen.
Wahrscheinlich weil ich ein älteres, wenn nicht gar uraltes Model bin.
Aber in mir ist immer noch zuviel Unsinn drin.
Ebenfalls einen ahngenehmen Abend Alex
ICQ ist ein "Messenger", also ein Programm um sich von 'Mensch vor PC'
zu 'Mensch vor PC' direkt "Echtzeit" per Tastatur zu unterhalten. Wenn
man sich bei ICQ anmeldet bekommt man eine ICQ Nummer, die dann
sozusagen die Zugangsnummer ist um im ICQ-Netzwerk erreichbar zu sein.
Im ICQ Programm kann man dann seine Bekannten oder Freunde hinzufügen
und kann dann wenn diese online sind kontaktieren. Ist relativ bekannt,
aber keine Schande wenn man es nicht kennt :-)
Ich wollte dir also meine ICQ Nummer via "privater Bordnachricht (PN)"
hier im Forum zukommen lassen, fals Du ICQ installiert gehabt hättest.
Aber ist nicht so wichtig, wir haben ja das Forum.
---
Zum Atmel Projekt
---
Du bist fleißig und dir steht ja eine hervorragende Analysehardware zur
Verfügung wenn ich das richtig interpretiere! Alle Achtung schwärm!
Was ist das für ein schickes Gerät?
Ich bin mir inzwischen sicher dass das Display defekt ist (100%ig).
Leider dauern die Pollin-Bestellungen immer ne ganze Weile und ich muss
noch warten.
Aber dann geht’s wieder rund. Den Erfolg möchte ich sehen, denn ich hab
hier eine kleine FHZ FS-20 (siehe ELV) Funk-Haussteuerung und möchte
anstelle des PCs die Beleuchtung und die Heizung mittels dieses
Projektes vom Wohnzimmer aus gemütlich am Tochdisplay verwalten. Und ein
weiteres Projekt würde auch schon warten.
Frage: Wenn ich bei Deinem ursprünglichen Schaltplan (den vor dem
aktuellen) den Quarz mit den Kondensatoren einfach weglasse, hat das
doch keine Folgen, oder?
Guten Tag
@Thomas, das ist ein "Intronix Logicport 34 Channel Logic Analyzer", ein
schönes Teil. Unter www.pctestinstruments.com gibts die Software. Ohne
Logicport läuft diese im Demo-Mode.
Ab und zu bastele ich an einem Hausmeldesystemsystem mit 8 Slaves und
einem Master herum. Die Heizung wollte ich auch überwachen. Das
Touchdisplay soll am Master Anzeige und Bedienung übernehmen.
Die Slaves gibt es schon. Sie verfügen über 5 Meldeeingänge, einen
1-Wire-Bus, einen Temperatursensor und zwei Schaltausgänge. Das ganze
läuft per Aufruf vom Master über einen RS485-Bus. Der wohnt aber zur
Zeit noch als Mega8 auf einem Steckbrett.
@Sven
>Hab mal bißchen gefummelt!>Stell mal deinen Character-Pitch (ßH01) auf H77 anstatt 76, dann hast du>->8dots pro 1byte<- gesendete Daten.Ist auch schöner beim Programmieren.
Mein Grund für 23*8 ist die Lesbarkeit. Es bleiben dann 2 „Leerpunkte“
zwischen den Zeichen und 3 "Leerzeilen" zwischen den Zeilen. Aber das
ist Geschmackssache.
Allerdings ist die Auswertung des Touchs auf 23*8 ausgelegt. Die
Messergebnisse des A/D-Wandlers sind weiter verwertbar. Die Auswertung
aber wird falsche Zeichenpostionen und damit verbunden falsche
Rückgabewerte liefern.
Gruß Alex
Hallo Alex,
das Display ist angekommen UND es funktioniert! freude
Das 'alte' ist tatsächlich defekt.
Viele Dank erstmal für Deine Unterstützung, jetzt macht es wieder
richtig freude zu experimentieren. Als nächsten Schritt, werde ich mich
mit der Software detailierter auseinandersetzen damit ich auch verstehe
was gemacht wird.
Dein Logic-Analyser ist wirklich chick, für soetwas wie die
Displayansteuerung auch perfekt!
Wünsche Du kommst mit Deinem Projekt voran!
[Wenn ich darf, komme ich bestimmt nochmal mit Fragen ;-)]
Beste Grüße zum Wochenende
Thomas
Hallo Thomas,
klasse, dass es mit dem neuen Display funktioniert (mitfreu)!
Um die Programmierung übersichtlicher zu gestalten, bin ich gerade dabei
das Programm in verschiedene Dateien aufzuteilen. Bis jetzt habe ich die
Initialisierung, Touch, LCD und Charakter-Tabelle ausgelagert. Nicht
elegant, sondern nur mit $include als Textdatei.
Fragen, wenn ich helfen kann, gerne. Ich habe auch schon öfters Rat in
diesem Forum gefunden.
Eine Frage hätte ich doch noch:
Funktioniert der Touch auch, oder verwendest Du nur das Display?
Angenehmes Wochenende, Gruß
Alex
Hallo,
es funktioniert der Touch und das Display bestens!
Der Touch liefert nach der Kalibrierung genau die richtigen Werte
zurück!
Hast Du es schon geschafft Darstellungen außerhalb von ASCII
einzubinden, also z.b. kleine Buttons?
Grüßle
Thomas
Nachtrag: Kann ich die Schriftgröße innerhalb einer 'Seite' ändern?
Später soll das mal so aussehen:
-----------------------------
| Licht Wohnzimmer < > | 'die Pfeile sollten kleine Button sein
| Licht Büro < > |
| |
| Garage: offen | 'Statusabfragen
| Temperatur Bad: 23°C | 'Die 23°C sollten schön groß sein!
| |
| |
|---------------------------|
| Hauptmenü | Weiter |
-----------------------------
so wie ich das interpretiere, kann ich mit dem aktuellen Programm immer
eine Zeile zusammenbauen und dann am Ende komplett ausgeben. Kann ich
auch wie oben ein Muster im Quellcode generieren und diesen dann
anzeigen?
Also dass ich immer einen Bildschirm wie oben gestalte (egal ob ASCII
oder Bild)?
Nach dem Motto
Zeile 1 = ---------------------
Zeile 2 = blblblblblblbblblblblb
Zeile 3 = blubblubblub
Zeile 4 = usw...
lcd_schreibe_jetzt_alle_zeilen()
Gruß
Thomas
Hi Thomas,
meine Sonderzeichen habe ich in der Tabelle Tabchr (jetzt in
RomTabs.txt) mit untergebracht, wie z. B. Ohm, Grad Celsius, ein Häkchen
und einen Radiobutton (oder wie das Ding auch immer heißt). Etwas Platz
ist noch vorhanden.
Nein, bisher gibt es nur eine Schriftgröße. Kleine Pfeile könnte man
noch in die Tabchr packen (Zeichenraster ist 7-breit und 8-hoch, nicht
gerade viel).
Warum überhaupt ein Raster und eine Form-Tabelle?.
Der Display-Controller ist unflexibel, ohne Raster müsste man jedes
Pixel einzeln in den Controller schreiben.
Für eine einfache Anbindung des Touchs ans Basic. Weil ich Ketten von
größer-kleiner Abfragen vermeiden wollte. Die Auswertung (das getroffene
Rasterkästchen wird berechnet) dauert etwa 50 Mikrosekunden, dann
stehen dem Basic Postion-Fein, Position gerastert und der Rückgabewert
zur Verfügung.
Man kann auch nur ein Zeichen an eine beliebigen Postion ins Display
schreiben (Nach unten von 0 bis 79, zur Seite von 0 bis 22, wobei über
71 nicht sinnvoll ist). Ganze Zeilen sind nicht notwendig
Das Motto „von oben nach unten“ und „lcd_schreibe_jetzt alle_Zeilen()“
ist eine gute Idee, aber nicht im Programm enthalten. Ursprünglich
wollte ich die Bildschirmmasken ins Rom packen und von da aus laden.
Aber das war mir für meine ersten Versuche zu unübersichtlich.
Naja, mit Software kann man immer fast alles machen, fragt sich nur,
wie groß ist der Aufwand. Und jeder hat so seine Ideen. Die wirft man am
besten alle in einen Topf, rührt um und realisiert die sinnvollsten
davon.
Im Moment bin ich gerade am überlegen, wie man einen Linie- oder
Box-Befehl basteln könnte.
Die aufgeteilte Version ist angehängt. Alle Dateien müssen sich zum
Compilieren im gleichen Ordner befinden.
Gruß
Alex
Hi Alex,
ich hab mal die Dateien mit Trennlinien ein bischen getunt
(Das ist zwar nichts Besonders aber erhöht die Lesbarkeit beim
programmieren)
Eventuell kannst Du damit was anfangen.
Ich denke es reicht auch vollkommen wenn mit ASCIIs gezeichnet wird.
Persönlich muss ich keine "grafischen" Buttons haben, eine Linie wäre
natürlich perfekt zum Buttons malen.
Die Raster und Form-Tabelle ist perfekt so, finde ich gut zu handeln.
Das Display macht einen rießen Spaß!
Gruß
Thomas
Hi Alex,
ich hätte da mal noch ein Frage. Bin gerade dabei mit dem COde zu
spielen und klappt auch ganz gut soweit. Gelegentlich bin ich etwas am
raten, aber man kommt durch Versuche meist drauf. Aktuell habe ich mir
mal eine Testseite auf dem Display gemacht um einzelne Ports ein und
auszuschaleten - rein aus Testzwecken.
Eine Frage zum Touch-Rückgabewerte-Raster:
Hallo Thomas,
ja, es ist schöner aufgeteilt und besser lesbar, danke.
Habe mal zum "Buttons malen" ein paar einfache Zeichen und Pfeile in die
RomTabs eingegeben (ist angehängt, aber noch ungeprüft). Mit
„Zeichensatz anzeigen“ kann man die Symbole sehen.
Dim Lcd_format(192) As Byte
Dim Lcd_form_0 As String * 23 At Lcd_format(1) Overlay usw., usw
192 Byte Gesamtgröße =
(23 Zeichen je Zeichenzeile für den String + 1 für das interne
Endezeichen 00h von Bascom.)
multipliziert mit
8 Zeichenzeilen zu je 10 Zeilen( Zeile = 1 Bildpunkt hoch).
Das ist halt eine Variante von vielen die das Display bietet. Ich habe
23 Zeichen je Zeile, mit einer Höhe von 10 Zeilen gewählt. 80 Zeilen
ergeben deshalb 8 Zeichenzeilen – Schreiben kann man aber ab jeder
Zeile (z.B locate Zeile 32, 33, 34 , ...usw.), passt halt nicht mehr ins
gewählte Touch-Raster. Übrigens werden nur die nächsten 8 Zeilen
überschrieben. 10 Zeichenzeilen gehen also auch.
Bildlich gesehen liegt unter jedem Rasterfeld ein Speicherplatz in der
LCD_Form-Tabelle. Wird der Touch berührt, wird X/Y des Rasterfelds
berechnet und der zugehörige Speicherplatz in LCD_form gelesen.
LCD_form_0 liegt unter der obersten Zeichenzeile 0, Position symmetrisch
locate_Zeile = 01
LCD_form_7 liegt unter der untersten Zeichenzeile 7, Position
symmetrisch locate_Zeile = 71
Zu beachten ist noch, dass das Leerzeichen für den Rückgabewert 0h
steht. Möchte man ein Leerzeichen über den Touch eingeben, muss in die
Formtabelle ein „_“ eingetragen werden. Für eine Funktionstaste wird nur
128 addiert.
Beispiel: (1) erzeugt = (128+“1“),(128+“1“),(128+“1“) → 3 Raster breit
1 liefert eine „1“ zurück
Mehr steckt nicht dahinter. Dinge wie () zum Erzeugen der
Funktionstasten sind nicht wirklich notwendig. Habe ich mir nur aus
Tipp-Faulheit und zur besseren Übersichtlichkeit eingebaut.
Gruß
Alex
Danke für Deine Antwort!
Die Pfeilchen sind praktisch, damit kann man richtig schöne Navigationen
darstellen und der Radiobutton ist auch prima für zum Beispiel "Aktor
ist EIN oder AUS".
Kommst Du voran mit Deiner Haussteuerung?
Grüßle
Thomas
Hallo Alex,
ich hab gerade ein Problem eventuell hast Du eine Idee:
Ich habe nun meine Sendemodule angekoppelt und kann auch schon
funkschalten.
Das Problem ist, dass ich zur korrekten "Sendegeschwindigkeit" den
ATMEGA auf 7372800Hz Takten muss (8MHz gingen zum Test auch aber nicht
optimal)
damit ist aber der Touch und der Bildaufbau viel zu langsam.
Gibts da eine Möglichkeit, das zu umgehen?
Kann ich wärend des Betriebs des ATMEGA den Takt ändern (nur zum
Zeitpunkt des Signalaussendens) und danach wieder zurück auf 16MHz?
Gruß
Thomas
Hallo Thomas,
mit meiner Haussteuerung, im Moment garnicht, bin zeitlich im Moment
etwas knapp.
Habe es gerade mal mit 8 Mhz probiert, der Bildaufbau ist nicht
sichtbar, dass geht wie immer schlagartig. Bei 16 Mhz werden 4
Wartezyklen eingeschoben, bei 8 Mhz werden es wohl nur 2 sein. Also ist
kein grober Geschwindigkeitsverlust zu erwarten - siehe oben Bild
Ansteuerung 16080.jpg.
Beim Touch sieht das anders aus, der ist jetzt auf 16 Mhz mit 30
Abfragen/sec ausgelegt. Werfe den Vorteiler halt wieder raus. Der Touch
verbraucht dann bei 8 Mhz je Sekunde < 30 msec Rechenzeit, da muss man
nicht wirklich was zurückändern.
Natürlich kann man mit etwas zusätzlicher Hardware die
Taktgeschwindigkeit umschalten. Die Frage ist, brauchst die
Rechenleistung von 16 Mhz? Oder soll der Stromverbrauch minimal werden?
Und für was brauchst Du genau 7372800Hz?
Wie ist das Modul angekoppelt? Zum Beispiel könnte eine IRQ-Routine mit
ungünstigen (hemmungslosen) Aufrufen den Mega lahmlegen.
Also an den 8 oder 7 Mhz liegt es sicher nicht.
Gruß
Alex
Tim0_isr:
'------------------------------------------------------------------
Set Portb.0 ' für Zeitmessung
' Incr Irq_teiler
' If Irq_teiler = 2 Then ' Vorteiler durch 2 für 16 Mhz
' ergibt Touchabfrage alle 33 msec
' Irq_teiler = 0
Gosub Touch_auswerten
Incr Ticker
If Ticker = 3 Then
Ticker = 0
If Timer_a > 0 Then Decr Timer_a
If Timer_b > 0 Then Decr Timer_b
End If
' End If
Reset Portb.0 ' für Zeitmessung
Return
Hallo Alex,
du hast vollkommen Recht, ich brauche die 16MHz eigentlich nicht
unbedingt und 'könnte' den Vorteiler raus machen, damit die Abfrage bei
8MHz schnell genug ist.
Das habe ich auch gerade versucht, faszinierender Weise ändert sich
dabei aber auch etwas bei meiner Sendesequenz?!
Wenn ich den Prescale vom Timer0
[/c]Config Timer0 = Timer , Prescale = 1024
Theoretisch dürften die beiden doch keine Gemeinsamkeiten haben?
Wenn ich darf, sende ich Dir meinen Code mal per Mail,
eventuell kannst Du einen groben Fehler erkennen. Ist nicht all zu viel
zum durchlesen.
Meine Sendemodule müssen das Protokoll eben in einer bestimmten
Zeitspanne senden. Die funktionieren ähnlich wie der RC5-IR Code.
Gruß
Thomas
Hallo Thomas, hallo benim,
Mail ist für mich nicht ok. Nichts für ungut, aber mit meiner
Mailadresse bin ich sehr vorsichtig.
Dafür sind Foren wie dieses hier, transistorNET und ähnliche doch da.
Gruß
Alex
Hallo Thomas,
hmm, schwierig. Dass mit den Timern und Prescalern weiss ich leider auch
nicht. Der Touch läuft per Interupt, zeitlich gesteuert über den
Prescaler (Teiler 1024) mit nachgeschaltetem Timer_0 (Teiler 256) →
28,125 Touchaufrufe/Sekunde bei 7372800 Mhz.
Der IRQ_Teiler ist Software und verändert außer der Anzahl der
Touchaufrufe nichts.
Um zeitlich kurze Impulsketten mit einem Mikroprozessor exakt zu
erzeugen, wird der IRQ für den Touch wohl gesperrt werden müssen. Oder
den IRQ rausnehmen und den Touch im Abstand von etwa 30 bis 60 msec
selbst aufrufen, dann bleiben die zeitkritischen Programmteile
ungestört.
Gruß
Alex
Das einfachste ist die Touchroutine nicht im Interupt zu betreiben.
Einfach im Programm erkennen ob gedrückt worden ist.
Das kann man über die ADC`s gut erkennen.
Dann kann das Ganze auch mit kleinerer Taktrate betrieben werden.
Und man hat einen Timer frei und kann ihn verkaufen oder in Zahlung
geben ;-)
Oder Impulse ausgeben oder messen oder....oder
Danke für den Tipp,
aktuell klappt es zwar ganz gut, aber bei Gelegenheit kommt der
Interrupt raus.
Ich hatte völlig übersehen, dass der Timer2 einen Prescaler von 128
unterstützt. Timer0 und Timer1 machen das nicht. Aktuell funktioniert
das senden perfekt.
Gruß
Thomas
@Allu,
Zufälle gibt es manchmal, faszinierend!
Ist ein Projekt welches mir sehr wichtig ist, auch wenn zur Zeit nicht
so viel Zeit dafür ist. Würde mich freuen wenn es Dir gefällt und Dir
dort auch mal geholfen wird!
Gruß
Thomas
www.TransistorNET.de :-)
@Alex,
was meinst Du zum rauswerfen der Interruptfunktion für den Touch, würde
eventuell einiges an Programmaufwand ersparen.
Wärst Du dafür? (Können wir ja zusammen machen)
Gruß
Thomas
Hallo Thomas,
nein, die Touchroutine rauswerfen habe ich nicht gemeint, sondern "Gosub
Touch_auswerten" nicht mehr per IRQ, sondern regelmäßig selbst aufrufen.
Wie es jetzt ist, läuft der Touch ohne weiteres zutun, der
Programmieraufwand würde m.E. eher größer werden.
Die IRQ-Routine möchte ich bei mir nicht rausnehmen, da mir sonst die
Software-Timer A, B, und noch viele mehr wenn nötig) nicht mehr zur
Verfügung stehen würden. Außerdem läuft darüber inzwischen die
Zeitsteuerung zum Datenaustausch mit den Slaves.
Vielleicht wäre das auch eine einfache Lösung für Dein Problem, einfach
im Interrupt bei Bedarf die Impulserzeugung aufrufen. Wenn es nicht
länger als 25msec dauert, sollte es ohne Störungen ablaufen
(vorausgesetzt die 28,125 Touchaufrufe/Sekunde sind noch eingestellt).
Gruß
Alex
Hallo Alex, das senden klappt bei mir inzwischen hervoragend. Mit dem
Empfangen happert es aber noch. Unabhängig davon muss ich mir etwas
einfallen lassen um noch einen Timer zu haben, da ich später auch zu
einer bestimmten Uhrzeit etwas senden lassen möchte.
Leider reichen meine aktuellen BASCOM Kentnisse noch nicht ganz aus um
das Programm so umzubauen dass ich einen Timer übrig habe.
Zum Thema Emfpangen von Funksignalen, habe ich Heute eventuell den
Zugriff auf ein Oszi, dann sieht die Welt eventuell schon wieder ganz
anders aus
Wünsche Euch ein schönes Wochenende!
Gruß
Thomas
Entschuldigt, dass ich mich (nochmal) einmische.
> Unabhängig davon muss ich mir etwas> einfallen lassen um noch einen Timer zu haben, da ich später auch zu> einer bestimmten Uhrzeit etwas senden lassen möchte.
Nur als Tip, ohne Euer Programm zu kennen:
Wie wäre es, einen Timer mehrere Dinge timen zu lassen?
Beispiel:
Ein Timer erzeugt im Zeitabstand von 10 ms Interrupts.
In diesem Interrupt wird:
- der Merker "ms10" gesetzt
- die Variable "hundsek" hochgezählt
- bei Erreichen von 100 husek auf 0 gesetzt und der Merker "neusek"
gesetzt
Die Mainloop läuft nun im Kreis und fragt die Merker ab. Ist ein Merker
gesetzt, wird zur entsprechenden Job-Routine verzweigt. Diese löscht
(resetet) den Merker und erledigt den Job.
Der ms10-Job (alle 10 Millisekunden) kann den Touchscreen abfragen (oder
Tasten abfragen und entprellen), TimeOut-Zähler für irgendwelche Dinge,
die sonst per Warteschleife (Wait, Waitms) das Programm anhalten würden,
herunterzählen, und weitere Dinge überprüfen, für die ein Abstand von 10
ms akzeptabel ist. Durch das Führen weiterer Zählvariablen lassen sich
weitere "Zeitscheiben" für zyklische Jobs einrichten.
Der Neusek-Job (alle Sekunde) zählt dann die Uhr einschließlich Kalender
hoch, wobei sich für Schaltaufgaben die "fortlaufende Zahl" besser
eignet, für die Anzeige allerdings getrennte Variablen für Sekunde,
Minute, Stunde, Tag, Wochentag (Mo, Di...), Monat, Jahr, Jahrhundert.
Bei Bedarf kann der Neusek-Job auch noch auch noch lange TimeOuts
(Sekundenauflösung) verwalten.
Was meine ich mit "TimeOut"?
Eine Zählvariable (TimeOut-Zähler) wird vom zyklischen Job auf 0
getestet. Ist sie 0, wird nichts gemacht. Ist sie nicht 0, dann wird sie
vermindert. Wird sie dabei 0, so wird der entsprechende Job aufgerufen
oder ein entsprechender Merker verändert. Um einen Timeout zu starten,
muss die Routine, die ihn braucht, nur die TimeOut-Variable auf den Wert
der gewünschten Wartezeit setzen. Dann geht's zur Mainloop, den Rest
übernimmt der TimeOut.
Dies alles bitte nur als Hinweis auf alternative Programmstrukturen
sehen, wie sie auch in Bascom möglich sind, wenn das Programm
entsprechend konzipiert.
...
Hallo Hannes,
hmmm, alternative Programmstruktur? Ich sehe einen sauberen
Programmaufbau im wesentlichen auch so, wie er von Dir oben beschrieben
wird.
Gruß
Alex
@Allu,
ich lass es mal auf mich zukommen, aber die Displayansteuerung wie Sie
aktuell (von Dir) ist ist super und klappt wirklich gut.
Ob ich die Timer noch brauche kommt demnächst auf.
Senden wie gesagt funktioniert, empfangen leider noch nicht ;)
Gruß
Thomas
@Thomas,
freud mich, wenn Du was verwenden konntest. Du brauchst einen Timer für
eine Aktion pro Tag und ich die Uhrzeit, eine Schaltuhr wäre also nicht
schlecht. Bin gerade am überlegen, wie man Prozessorquarz,
IRQ-Frequenz, Touchabfrage, Uhr und meinen seriellen Datenaustausch
(vielleicht auch Dein Sendetelegramm, wenn Du mir verrätst wieviel Zeit
es braucht) am geschicktesten zeitlich kombiniert. Habe ich dass richtig
in Erinnerung, Du verwendest 7,372800 Mhz ?
Mir ist schon nicht klar, wie Du ohne Oszi den Sender zum funktionieren
gebracht hast, aber auch noch einen Empfänger, der scheinbar strohdumm
ist und nur Impulse liefert, zusätzlich mit dem Mega32 decodieren
willst, das wird richtig eng. Da hilft höchstens noch das Zauberwort
externer Interrupt.
Ich habe mal einen Funksteckdosenempfänger (läuft übrigens einwandfrei
mit 5V) mit einem Mega8 kombiniert, weil ich was mit der Fernbedienung
schalten wollte. Zugegeben, das Programm war primitiv und hat nur die
Codes auf einem LCD angezeigt, aber der Mega8 war immer mit dem Ohr in
der Luft. Vielleicht wäre ein Empfängerbedienungsmega8 auch eine Lösung.
Ankopplung z.B. über die serielle Schnittstelle.
Gruß
Allu
Hallo Micha,
probier mal:
####### weiter im Menü ############
Locate_zeile = 61 ' Zur Zeile 6 gehört LCD_form_6
Locate_spalte = 0
'Muster = "01234567890123456789012"
Lcd_string = " test"
Lcd_form_6 = " (6 )" ' LCD_form_6 gehört zur 6.Zeile,
'sonst stimmt Text und Schaltfläche nicht überein
Gosub Lcd_write_string
' Muss zum Schluss einmal aufgerufen werden.
' Gosub Lcd_form_aufbau ' Funktionstasten erzeugen
'########### und zum sprung ###########
Test:
Gosub Lcd_clear ' Display löschen
Gosub Lcd_form_clear 'alte Rückgabewerte löschen
Locate_zeile = 41 ' Zur Zeile 4 gehört LCD_form_4
Locate_spalte = 0
Lcd_string = " TEST " ' Text für Display
Lcd_form_4 = "(6 )" ' Funktionstaste "5" mit Klammerbreite
vorbereiten
' Die 5 muss direkt hinter "Klammer auf"
stehen
Gosub Lcd_write_string 'Text auf Display schreiben
Locate_zeile = 01
Locate_spalte = 0 ' Zur Zeile 0 gehört LCD_form_0
Lcd_string = "Zurueck" ' Text für Display
Lcd_form_0 = "(5 )" ' Funktionstaste 5 mit der Klammerbreite
vorbereiten
Gosub Lcd_write_string 'Text auf Display schreiben
Gosub Lcd_form_aufbau ' Funktionstasten erzeugen
Temp_a = 0 ' nur für Test
Do
If Touch_meldet = Ja Then
' Was getan werden soll, Beispiel:
Incr Temp_a ' Test, um 1 erhöhen und anzeigen
Locate_zeile = 45
Locate_spalte = 18
Lcd_string = Str(temp_a) + " "
Gosub Lcd_write_string
Touch_meldet = Erledigt
End If
Loop Until F_taste = _menue ' Rückkehr ausgewählt
Gosub Auswahl ' Auswahl aufbauen
Return '.. und zurück
Gruß
Allu
Hallo zusammen,
anbei eine erweiterte Version für Bascom und und den ATMega8. Das
Programm läuft auf der Schaltung von Benedikt. Umlaute und einige
Sonderzeichen sind jetzt direkt erreichbar. Dünne() und dicke[] Rahmen
für Tasten lassen sich automatisch erzeugen (allerdings zeigt mein
Display unschöne Streifen bei zu vielen Balken).
Alles in den gleichen Ordner packen, dann sollte Bascom den .bas
fehlerfrei übersetzen.
Das Programm lässt sich zum Testen des Displays und des Touchs verwenden
und bietet Routinen um in Bascom Display und Touch einzubinden.
Gruß
Allu
Hallo und ein erfolgreiches, glückliches neues Jahr Zusammen!
Deinen Code werde ich gleich mal ausprobieren, Alex. Apropos: Das senden
und Empfangen klappt nun hervorragend. Keine Probleme mehr. Jetzt geht
es nur noch um ein chickes Displaydesign :-)
Viele Grüße und bis bald
Thomas
Diesen guten Wünschen kann ich mich nur anschließen und wünsche
ebenfalls allen ein frohes neues Jahr, Glück und Gesundheit.
Thomas, schön das Deine Funkübertragung so gut funktioniert. Ich bin
immer noch am Display basteln. Inzwischen gibt es paar neue Funktionen
(Bilder oben) und einen Autorepeat für die Touchtasten. Die Uhr ist noch
in Arbeit.
Leider zeigt das Display bei hellem Hintergrund dunkle Streifen.
Gruß
Alex
Wow, das sieht ja prima aus.
Ist das der Code von oben?
Werde ich heute mal noch anschauen.
Wie erstellst Du die Buttons? Bisher habe ich die immer von ASCII-Hand
gemacht.
Gruß
Thomas
Edit: Ahhh, ich verstehe, die Klammern werden automatisch in einen
chicken Rahmen übersetzt. Das ist ja super!
Jetzt hätte ich eine wichtige Frage:
Da ich bereits schon viel "Menügefusel" gemacht habe und nicht nochmal
alles ändern möchte am bestehenden Projekte. Könntest Du mir sagen,
welche Parts ich updaten muss, damit ich auf Deiner aktuellen Version
bin?
Gruß
Thomas
Hallo Alex,
ich habe mir den Code mal genauer angeschaut und habe die Änderungen
gefunden :-)
Die Sache bei mir ist, dass ich den Touch ganz ohne Timer abfrage. Ich
packe bei einem Menü in jede Do-Schleife ein "Gosub Touch_auswerten" und
greife so mit voller Brutalität ohne Timer auf eine Tastenaktion zu.
Das aber auch nur damit mir meine Timings vom Sende und
Empfangsprotokoll passen. Das FS20 Protokoll ist da sehr empfindlich und
ich benötige den Timer1 für das Empfangen (Captureport) und den Timer2
für das Senden. Leider funktioniert somit die Sache mit den aufgeteilten
Interrupts bei mir nicht, da das ja nur der Timer 1 kann.
Sehe ich das richtig?
Den Timer 0 habe ich bei mir komplett frei. Eventuelöl kann ich damit
dann meine Uhr und ähnliches realisieren.
Gruß
Thomas
PS: Was meinst Du?
Jetzt kommt nochmal eine Frage:
Das "Hauptmenü" bzw. 'Auswahl:' besitzt wie ich das sehe Maximal 8
Auswahlpunkte, die mit:
1
_kalibrierenAlias1+48+128'Auswahlpunkt1
2
_setupAlias2+48+128'Auswahlpunkt2
3
_deleteAlias3+48+128'Auswahlpunkt3
4
_touch_werte_anzeigenAlias4+48+128'Auswahlpunkt4
5
_menueAlias5+48+128'Auswahlpunkt5
6
_auswahl_6Alias6+48+128'Auswahlpunkt6
7
_zeichensatz_anzeigenAlias7+48+128'Auswahlpunkt7
8
_fs20_sendenAlias8+48+128'Auswahlpunkt8
ausgewertet werden.
Wie stelle ich es nun auf eine einfache Art an, meinen Untermenüs
ebenfalls solche Auswahlpunkte zur Verfügung zu stellen? Bisher habe ich
in meinen Untermenüs immer mit den X und Y Koordinaten gearbeitet um zu
Erreichen, dass bei Betätigung eines Buttons das Ziel aufgerufen wird.
Das ist aber recht aufwendig zu schreiben und ergibt einen riesen
Quelltext.
Wie kann demnach eine einfache, ordentliche Abfrage weiterer Button aus
einem Untermenü gemacht werden? Ist die 'Select Case' Anweisung mit
vorigem Buchstabenvergeben im LCD_Form_x das wie Du es machst?
Viele Grüße
Thomas
Hallo Thomas,
zuerst zur letzten Frage nach den Menüpunkten.
> Das "Hauptmenü" bzw. 'Auswahl:' besitzt wie ich das sehe Maximal 8> Auswahlpunkte, die mit:> _kalibrieren Alias 1 + 48 + 128 'Auswahlpunkt 1
... usw ...
>_fs20_senden Alias 8 + 48 + 128 'Auswahlpunkt 8> ausgewertet werden.
Nein, es sind viel mehr möglich, nämlich maximal 184. Genau so viel wie
es kleine Touchtasten gibt (23 Spalten * 8 Zeichenzeilen). Im
Testprogramm kann man das schön mit Touchtest und Texteingabe mal
probieren.
Nur um die Möglichkeit zur freien Texteingabe zu behalten, gibt es die
"Funktionstasten", o.k., ungünstige Wortwahl. Da passiert aber weiter
nichts, als das von Lcd_form_aufbau das erste Zeichen nach der Klammer
inklusive der Klammern mit dem (Zeichenwert + 128 = Rückgabewert)
überschrieben wird.
Die Rückgabewerte werden in einem Array gespeichert, man kann genauso
gut die Werte direkt zuweisen, z.B. : Lcd_format(29)= 1. Um die Eingabe
und das Positionieren zu vereinfachen, können die einzelnen Werte auch
in Form einer Textzeile direkt zugewiesen werden. Bascom verwendet wie C
eine 0 als Textendezeichen, deshalb hat das Array 24 * 8
Speicherstellen.
Dim Lcd_format(192) As Byte
Dim Lcd_form_0 As String * 23 At Lcd_format(1) Overlay
Dim Lcd_form_1 As String * 23 At Lcd_format(25) Overlay usw.
Die kleinen Folientasten liegen, flächenmässig betrachtet, dann genau
über den Textzeichen, wenn die Pixelzeilen
Locate_zeile 01,11,21,31,41,51,61,71 Verwendung finden.
Passend dazu Lcd_form_0 ,1 ,2 ,3 ,4, 5 ,6 ,7 für die Rückgabewerte.
> Wie stelle ich es nun auf eine einfache Art an, meinen Untermenüs> ebenfalls solche Auswahlpunkte zur Verfügung zu stellen? Bisher habe ich> in meinen Untermenüs immer mit den X und Y Koordinaten gearbeitet um zu> Erreichen, dass bei Betätigung eines Buttons das Ziel aufgerufen wird.> Das ist aber recht aufwendig zu schreiben und ergibt einen riesen Quelltext.
Eben um die Programmierung nicht in endlose X/Y-Abfragen ausarten zu
lassen, gibt es ja die Aufteilung in 23*8 kleine Tasten und die Tabelle
mit den Rückgabewerten. Es funktioniert in allen Menüebenen mit
vollkommen unterschiedlichen Rückgabewerten (sprich Tastenbelegungen).
Vielleicht schaust Du Dir nochmal meinen Bascom-Quelltext an, da gibt es
nirgendwo eine Koordinatenabfrage, nur die Auswertung von
Rückgabewerten. Und ein Beispiel für eine Möglichkeit die Menüs zu
wechseln, ist auch enthalten
In der Variablen F_Taste (Folien-Taste) wird der Rückgabewert
zurückgegeben, der zu der Fläche auf dem Display passt. Mit dem
dargestellen Zeichen selbst hat das überhaupt nichts zu tun. Kommt eine
0 zurück, ist für diese Taste kein Rückgabewert eingetragen worden. Bei
einem Menüwechsel muss man natürlich zuerst alle Rückgabewerte löschen
und die neuen Rückgabewerte eintragen. In jedem Menü können die gleichen
Rückgabewerte oder auch ganz andere Rückgabewerte verwendet werden -
solange der Vorrat reicht.
Als Rückgabewerte empfehle ich die Ascii-Zeichen 0 bis 9, A bis Z
und a bis z zu verwenden. Sind eben einfach einzugeben.
Für die Auswertung des Rückgabewerts gibt es viele Möglichkeiten, ob
„Select Case F_taste“, If F_taste = xyz then .., oder eine andere
Abfragemöglichkeit, dass ist eben Geschmackssache.
Ich hoffe, es hilft weiter.
Gruß
Alex
Hallo zusammen,
hat es einer hier schon geschafft das Touch-Feld genau auszulesen?
Meine versuche sehen leider nicht viel-versprechend aus. Eventuell hat
ja einer eine Schaltplan und ein Beispielprogramm für C?
Ich Versuche das ganze auf einem ATMega8 anzusprechen.
Danke & Gruß
Ingo
Hallo
gibts denn eine Möglichkeit den gesamten Displayinhalt um 90° zu drehen?
Klar das dann alle Werte neu berechnet werden müssen aber würde es rein
theoretisch gehen das Display für hochkant zu nutzen?
Danke
Im Grafikmode - ja. Eine Möglichkeit, grob:
8x8 einstellen, Fonttabelle "um 90 Grad drehen". Die Adressberechnung
muss dann angepasst werden, sodass die Chr-Bytes von links nach rechts
ins Display geschrieben werden.
Gruß allu
Hm, ich bin noch nicht so Fit in der Materie.
Im Grafikmodus? Ich möchte aber Text schreiben!
Fonttabelle drehen?
Kannst du mal bitte ein kleines Beispiel schreiben? Evtl versteh ich es
dann besser.
Danke
Jo also einfach den "Buchstaben" drehen, soweit klar.
mit $include bekomm ich dann die font8x8 rein
Ja aber wie ruf ich dann aus der font8x8 auf? Weil er greift ja auf die
tabchr Daten zu.
Das steht im asm Teil und den versteh ich nicht, in dem asm Teil muss
ich ja dann sicher auch die Cr Bytes ändern??
Ich nutze die "nur_text.bas" von dir!
Danke
Hallo alle miteinander,
ich spiel auch gerade mit dem Display und Bascom rum. Text ausgabe
funktioniert mit dem Code von Allu schon wunderbar. Aller Dings würde
ich gern einzelne Pixel an oder aus schalten. Ich denke das wird am
besten gehen wenn man Write_2_Byte ein bisschen umbaut, oder täusche ich
mich da?
Hier mal der Code:
1
Write_2_byte:
2
push Temp_1
3
4
cbi Control_Bus, CS 'Chip select aktivieren
5
rjmp Write_2_Byte_20
6
7
Write_2_byte_10:
8
cbi Control_Bus, E 'Enable-Puls beenden
9
nop 'warten
10
nop 'warten
11
nop
12
nop 'warten
13
14
Write_2_byte_20:
15
sbi Control_Bus, E 'Enable-Puls beginnt
16
nop 'warten
17
nop 'warten
18
nop 'warten
19
'warten
20
sbic Daten_Bus_in, Bussy 'Fertisch ?
21
rjmp Write_2_Byte_10
22
nop
23
24
cbi Control_Bus, E 'Enable-Puls beenden
25
cbi Control_Bus, RW 'Write Signal aktivieren
26
nop
27
28
'Register im Grafikcontroller auswählen
29
ldi Temp_1,auf_Output_stellen 'Datenbus auf Ausgabe stellen
kolli schrieb:
> Jo also einfach den "Buchstaben" drehen, soweit klar.
Von "einfach" habe ich nichts gesagt. Du schreibst doch selbst:
> Klar das dann alle Werte neu berechnet werden müssen ....
Das beschreibt den Arbeitsaufwand recht gut. Durch das Drehen des
Displays verschiebten sich die Adressen für die Zeichenzeilen, die
Initialisierung des GLCD-Controllers und die Fonttabelle muß angepasst
werden. Oder willst Du die Drehung per Programm im ATMega jedesmal neu
berechen?
Das Programm Nur_text.bas ist für 23 Zeichen je Zeile ausgelegt.
Schreiben kann man damit bis zu 10 Zeichenzeilen. Mit Touchprogramm sind
es 8 Zeichenzeilen, damit die Folientasten dazu passen.
> mit $include bekomm ich dann die font8x8 rein> Ja aber wie ruf ich dann aus der font8x8 auf? Weil er greift ja auf die> tabchr Daten zu.
Über die Tabelle-font8x8 "tabchr:" schreiben und das alte tabchr:
auskommentieren.
Ein Beispielprogramm habe ich leider nicht.
Gruß allu
Kevin schrieb:
> .... würde> ich gern einzelne Pixel an oder aus schalten. Ich denke das wird am> besten gehen wenn man Write_2_Byte ein bisschen umbaut, oder täusche ich> mich da?
"Write_2_Byte" bedient das GLCD direkt. Soweit ich das Datenblatt des
LC7981 verstanden habe wird immer zuerst das Instruction-Register
(Befehl) ausgewählt und dann der entsprechende Datenwert (Daten)
geschrieben. Die Routine schreibt also zuerst den Inhalt von "Befehl"
und dann Inhalt von "Daten" in den GLCD-Controller.
Da gibt es also nichts zu ändern, vielmehr kannst Du die Routine für
Deine Zwecke verwenden. Befehl und Datenwert eintragen und Write_2_Byte
aufrufen. Von Bascom aus würde ich das so probieren,
im Bascomteil am Programmanfang:
Dim Command as Byte
Dim Datenwert as Byte
Im Assemblerprogramm direkt vor "Write_2_Byte:"
Zum_glcd:
Loadadr Command, X
LD Befehl, X
Loadadr Datenwert, X
LD Daten, X
Write_2_Byte:
usw ....
Werte bestimmen und in "Command" und "Datenwert" eintragen und
mit "Gosub Zum_glcd" ausgeben.
Gruß allu
Ok, da ich das auf dieser Basis allein nich hin bekomme, stell ich die
Frage einfach mal anders.
Ist es mit einem anderen Display z.B. mit KS0108 einfacher?
Oder ist der Aufwand bei "allen" gleich?
Danke
Hallo Kolli,
zum KS0108 kann ich nichts sagen. Muss es den unbedingt gedreht sein?
Wäre es auch eine Möglikeit 2 Bereiche nebeneinander anzuzeigen? Zum
Beispiel 10 Zeichen 3 Abstand und dann wieder 10 Zeichen. Quasi 2
Tabellen nebeneinander.
Oder 3 Tabellen: 7 Zeichen, 1 Abstand, 7 Zeichen, 1 Abstand, 7 Zeichen
Das könntest Du mit dem Programm machen, so wie es ist.
Gruß allu
Nein es muss "hochkant" stehen, da das Gehäuse und alles rings um so
vorgefertigt da steht.
Ich hab mir damals darüber keinerlei Gedanken gemacht als ich das
vorbereitet habe, weil ich dachte das es mit einem Grafik LCD kein
Problem wäre.
Ja und jetzt hab ich Zeit weiter an der Sache zu basteln und nun steh
ich da.
Ich brauch auch keinen Touch etc. ich will einfach nur Zahlen und
Buchstaben anzeigen und irgendwie auch größer als es jetzt in dem
Beispielcode ist.
Tja da war ich wohl sehr "Blauäugig" mit meiner Planung.
Ich dacht eben das Ausgeben von Zahlen und Text ginge so easy wie mit
nem 20x4 LCD, und denn gibts nen "Rotate" Befehl, tja eben weit vorbei
gedacht.
Danke
Hallo,
also beim KS0108 liegen die Datenbyte's 90° "gedreht" im Speicher -
bezogen auf das Display also senkrecht.
Mit etwas Anpassung sollte es also möglich sein mit den Fonts und
Displayroutinen ein LC7981 im hochformat zu betreiben.
Sascha
Hallo,
danke schonmal für die Hilfe, aber irgendwie versteh ich bei dem
Datenblatt nur kauderwelsch. Kann mir vielleicht jemand ein wenig hilfe
geben?
Ich werde nicht schlau daraus welchen Befehl ich schreiben soll, wie ich
die Position setze und wie ich den Pixel an/aus schalte.
Ist für mich alles noch neuland.
Danke
Grüsse Kevin
Kevin schrieb:
> Hallo,>> danke schonmal für die Hilfe, aber irgendwie versteh ich bei dem> Datenblatt nur kauderwelsch. Kann mir vielleicht jemand ein wenig hilfe> geben?> Ich werde nicht schlau daraus welchen Befehl ich schreiben soll, wie ich> die Position setze und wie ich den Pixel an/aus schalte.
Befehle 0eh und 0fh...
>> Ist für mich alles noch neuland.
Alle verfügbaren Befehle in Kurzform auflisten, um etwas mehr Übersicht
zu erhalten und alle Befehle auf einen Blick zu sehen. Dann die Details
der Befehle nachlesen. Notfalls auch mal etwas ausprobieren, wenn sich
der Sinn beim Lesen nicht erschließt.
1
Zusammenfassung des Befehlssatzes des LCD-Treibers LC7981
Super :)
jetzt sehe ich das Datenblatt etwas anders. Bin auch schon fleissig am
probieren. In der ersten Zeile kann ich Pixel an/aus schalten und eine
Linie Zeichnen. Allerdings habe ich noch ein Problem, dass mich seit
Stunden beschäftigt.
Ich bekomme es einfach nicht hin eine Zeile tiefer zu gehen und dort
Pixel zu setzen. In der Ersten Zeile funktioniert es wunderbar. Ich geb
beim RAM-Zeiger-low meine Spalte an.
Gebe ich einen anderen Wert as H00 im RAM-Zeiger-high an verschwindet
der Pixel oder liegt irgendwo auf dem Display, aber nicht da wo er sein
soll.
Kennt jemand die Berechnungsroutine für das lower und upper Byte, oder
kann mir jemand helfen?
Mit dem Text funktioniert es, aber irgendwie bekomm ich es nicht
gebacken die Zeile zu ändern. Am ende soll es dann so funktionieren,
dass ich mit locate_x und locate_y meinen Pixel auswähle und setzen
kann.
Vielen Dank
Hier mein Code (Bascom):
1
'TEST PIXEL
2
Gosub Lcd_clear
3
4
'1. Pixel
5
Command = &H0A 'Befehl: RAM-Zeiger Low
6
Datenwert = &H00 'Spalte 1 (a 8 Pixel 0-22)
7
Gosub Zum_glcd 'In Display-RAM schreiben
8
Command = &H0B 'Befehl: RAM-Zeiger High
9
Datenwert = &H00
10
Gosub Zum_glcd 'In Display-RAM schreiben
11
Command = &H0F 'Befehl: Pixel setzen
12
Datenwert = &H01 'Pixel 1 (1-8)
13
Gosub Zum_glcd 'In Display-RAM schreiben
14
15
'2. Pixel
16
Command = &H0A 'Befehl: RAM-Zeiger Low
17
Datenwert = &H01 'Spalte 2 (a 8 Pixel 0-22)
18
Gosub Zum_glcd 'In Display-RAM schreiben
19
Command = &H0B 'Befehl: RAM-Zeiger High
20
Datenwert = &H00
21
Gosub Zum_glcd 'In Display-RAM schreiben
22
Command = &H0F 'Befehl: Pixel setzen
23
Datenwert = &H01 'Pixel 1 (1-8)
24
Gosub Zum_glcd
und hier der Assembler-Code:
1
Zum_glcd:
2
Loadadr Command , X
3
LD Befehl, X
4
Loadadr Datenwert , X
5
LD Daten, X
6
7
Write_pixel:
8
push Temp_1
9
10
cbi Control_Bus, CS 'Chip select aktivieren
11
rjmp Write_pixel_20
12
13
Write_pixel_10:
14
cbi Control_Bus, E 'Enable-Puls beenden
15
nop 'warten
16
nop 'warten
17
nop
18
nop 'warten
19
20
Write_pixel_20:
21
sbi Control_Bus, E 'Enable-Puls beginnt
22
nop 'warten
23
nop 'warten
24
nop 'warten
25
'warten
26
sbic Daten_Bus_in, Bussy 'Fertisch ?
27
rjmp Write_pixel_10
28
nop
29
30
cbi Control_Bus, E 'Enable-Puls beenden
31
cbi Control_Bus, RW 'Write Signal aktivieren
32
nop
33
34
'Register im Grafikcontroller auswählen
35
ldi Temp_1,auf_Output_stellen 'Datenbus auf Ausgabe stellen
> Kennt jemand die Berechnungsroutine für das lower und upper Byte, oder> kann mir jemand helfen?
Wie wäre es, sich Seite 15 des Datenblattes mal genauer anzusehen? Dabei
den Druckfehler ignorieren, der sich da eingeschlichen hat, vertausche
"Display Pattern" und "Character-Code" und die Tabelle ergibt Sinn.
Und dabei nicht vergessen, dass eine RAM-Zelle nicht einen Pixel
enthält, sondern eine Gruppe aus 8 Pixeln. Dann sollte es Dir möglich
sein, jede Pixelgruppe des Displays exakt zu adressieren. Die
Adressierung des Pixels innerhalb der Gruppe ist ja Bestandteil des
Befehls.
...
Guten Morgen und Danke für den Tip.
Leider verstehe ich das nicht. Wie kann ich daraus schliessen in welche
Zeile ich schreiben will? Da steht doch nur welche pixel ich bei der
Curser-Position setze, oder nicht?
Ich steh total auf dem Schlauch.
Grüsse
> Leider verstehe ich das nicht.
Überleg' mal...
Ein Byte sind 8 Pixel (oder Dots), diese liegen waagerecht
nebeneinander.
Eine Pixelzeile hat 160 Pixel. Nun rate mal, wieviele Bytes man braucht,
um eine Pixelzeile mit Pixeln zu füllen.
Und genau so viele Adressen weiter beginnt die nächste Pixelzeile.
Du bestimmst also die Adresse, indem Du erstmal die Nummer der Zeile mit
der Anzahl der Bytes je Zeile multiplizierst und dann die waagerechte
Position (in Achter-Blöcken betrachtet) dazu addierst. Nun hast Du die
Adresse für das RAM, also für die Achtergruppe von Pixeln. Den
eigentlichen Pixel in dieser Gruppe selektierst Du anschließend mit dem
Parameter im Befehl 14 oder 15.
Um das zu verstehen, reicht eigentlich das Mathematikverständnis der
Grundschule. Da ist keine höhere Mathematik dabei...
Wenn Du immernoch Probleme hast, dann nimm ein Blatt Millimeterpapier,
zeichne die Displaygröße (160x80) sowie die Pixelgruppen (Bytes) ein und
nummeriere sie durch (Adressen). Vielleicht fällt es Dir dann leichter,
die (eigentlich recht einfachen) Zusammenhänge zu verstehen.
...
Hallo,
ich experimentiere momentan auch mit dem Display von Pollin.
Der Textmodus klappt super, auch Rahmen werden um die Buttons
gezeichnet.
Hast du es jetzt hinbekommen ein Pixel zu setzen wo du es möchtest?
Ich komme gerade nicht weiter :(
Ich habe mal den Code angehangen mit dem ich teste.
Gruß MaXX
Hallo MaXX,
packe mal die LCD16080_2.txt und die LCD1600_1.bas in deinen Ordner und
probiere mal damit. Testweise wird der 1., 2. und 8.-Pixel gesetzt.
Wofür ein neues Assemblerprogramm Write_pixel? Meiner Meinung nach liegt
dort der Fehler.
Gruß allu
Hallo Alex, DANKE !! :)
Das Pixel setzen funktioniert bestens! Kann man den ASM-Code irgendwie
einkürzen??
Ich wollte mir die Funktion Pset(x,y) und Line(x1,y1,x2,y2) basteln.
Ich habe etwas getestet und bin auf die Werte in der Excel-Tabelle
gekommen.
Hier der Code dazu:
1
Dim V As Byte
2
Dim W As Byte
3
Dim X As Byte
4
5
Dim W_to As Byte
6
W_to = 255
7
8
For V = 0 To 7
9
If V = 7 Then W_to = 126
10
For W = 0 To 255 'W_to (23 out) '1.Zeile==> 23*7 (0..22=23)=190px
11
Waitms 1
12
For X = 0 To 6
13
Command = &H0A ' Befehl: RAM-Zeiger Low
14
Datenwert = W ' Zeichen 0..22
15
Gosub Zum_glcd ' In Display-RAM schreiben
16
17
Command = &H0B ' Befehl: RAM-Zeiger High
18
Datenwert = V ' Segment 0..7 + w_to = 126 !
19
Gosub Zum_glcd ' In Display-RAM schreiben
20
21
Command = &H0F ' Befehl: Pixel setzen
22
Datenwert = X ' Pixel 0-6 ! (7)
23
Gosub Zum_glcd
24
Next X
25
Next W
26
Next V
Dieser Code füllt das LCD komplett mit Pixel.
Jetzt frag ich mich wie ich aus der Tabelle eine Formel hinbiege in der
ich auf die x und y Koordinaten schließen kann?! *überleg..*
Gruß
MaXX
Hallo Chrix,
freud mich, dass dein "Pixeln" klappt. Die NOPs in der GLcd-Ansteuerung
sind für einen Prozessortakt bis etwa 20Mhz ausgelegt. Die
Geschwindigkeit jedoch bestimmt im wesentlichen das GLcd.
Zu deiner Frage:
> Kann man den ASM-Code irgendwie einkürzen??
Antwort: Sehr wahrscheinlich. Aber, Gegenfrage: Wozu ?
Gruß Alex
Hallo,
ich habe jetzt die Formeln zusammengebastelt, die man benötigt um
einzelne Pixel mit Koordinaten (x,y) zu setzen. …allerdings nur in
Excel!
(Falls jemand Interesse daran hat bzw. damit weiter kommt => siehe
Anhang)
Man kann nicht alles in eine Formel packen. k.A. wie es
geschwindigkeitstechnisch aussieht. Höchstwahrscheinlich wäre es besser
die Formeln in ASM umzusetzen?!
Hat jemand Ideen?
Gruß
MaXX
Ich muss das jetzt (offtópic) einfach mal los werden, Ihr seid echt
spitze. Es macht richtig Freude, zusammen auf einem Forum Ideen
auszuarbeiten. Sorry, dass ich länger nicht aktiv war in dieses Thread,
aber mir fliegen die Termine um die Ohren :-)
Viele Grüße
Thomas
Hallo,
ich habe die Bestimmung der Koordinaten fertig, vorerst in VBA.
Nur zur Pixelbestimmung, ist dieser Code doch schon sehr umfangreich!
Sieht jemand eine Möglichkeit hier etwas zu optimieren?
bzw. eine ganz andere Herangehensweise?
Gruß
MaXX
(EXCEL mit VBA-Programm zum testen im Anhang)
@tc-maxx
Was hast Du eingentlich genau vor mit diesen Berechnungen ?
Was bedeuten die ganzen Variablen ?
Gehts darum, irgend ein Pixel im Grafikmodus zu setzen/löschen ?
Dann schauts mir etwas zu kompliziert aus. ;)
Hi,
ja mit dieser Funktion sollen mal Pixel gesetzt werden.
Die Variabeln sind die Anpassungen für die beiden Subs Normalfall &
Sonderfall.
k.A. wie man sonst an so etwas herangeht, ich habe noch keine
Erfahrungen in diesem Bereich.
Ich benötige aber die Pixel-Setz-Funktion dringend für mein aktuelles
Projekt mit diesem Display.
Gruß
MaXX
@tc-maxx
also wenn man eine Pixelposition berechenen will, braucht man ja das
entspr. Byte davon, in dem das Pixel liegt.
Wenn man davon ausgeht, das oben Links 0,0 liegt, sind bei diesem LCD in
X-Richtung die Pixel innerhalb eines Bytes.
Also nur die X-Achse durch 8 Teilen, und man hat das Byte, dann noch die
Anzahl Zeilen dazu.
BytePos = Y * 28 + X / 8
Die Pixelposition innerhalb des Bytes bekommt man, wenn man den Rest von
X / 8 ausrechnet. Und noch umrechnet auf die andere aufsteigende
Richtung da das 7. Bit ganz links ist.
Hi,
schau dir mal meine Exceltabelle an, wenn es so einfach wäre hätte ich
nicht so eine große Funktion schrieben müssen.
MaXX
(im Anhang die *.bas mit funktionierender P_Set-Funktion)
@tc-maxx
da versteh ich aber trotzdem nicht so ganz was Du da so rumrechnest.
Willst Du gleich die XY-Werte vom Touch der Pixelsetz-Sub übergeben ?
Ich dachte es geht einfach darum, im Bereich von den 160x80 irgendwo ein
Pixel zu treffen !
Klär mal auf.
Um ein Pixel zu setzen/löschen, muss man ja erst mal die Cursorposition
(=RAM-Adresse) setzen, dann entsprechend setzen/löschen mit Befehl 12/13
(&He, &Hf) die Pixelposition übergeben, das wars dann schon.
Wenn man das Pixel x 70,y 30 treffen will ergibt das RAM-Position:848,
Bit 6.
Es muss nur noch abgestimmt werden, ob oben Links 0,0 oder 1,1 ist. Bei
1,1 muss man vor dem Berechnen 1 abziehen :)
kann es sein das du dein Display falsch initialisiert hast?
Betreibst du es wirklich im Grafikmodus??
Ich benutze das Display ebenfalls, und Berechnung ist so wie 'Tiny 80'
schrieb!
Sascha
Hallo Chriz,
wenn die Initialisierung noch so ist, wie ich sie eingetragen hatte,
dann läuft das Display im Grafikmodus. Aufgeteilt in 23 Zeichen pro
Zeile mit 7 verwendeten Bit pro Byte. Genauer, es sind 22 Zeichen mit 7
Bit-Breite und und das letzte mit 6 Bit-Breite (7*22 + 6 = 160 Pixel) je
Zeile.
Der Controller rechnet aber nur mit geraden Adressen, also ist der
Anfang der nächsten Pixel-Zeile 24 Byte weiter zu finden.
Die beiden Zahlen für das Display sind damit 7 und 24.
Tiny 80 schrieb:
> BytePos = Y * 28 + X / 8
Das sehe ich genauso, wäre also mit unserer Initialisierung:
BytePos = Y * 24 + ABS(X / 7)
Der Rest von X/7 ist dann die Bitposition.
Beispiel: links oben ist 0/0, x = 8 , Y = 0, (das 9.te Pixel
anknipsen)
BytePos = Y * 24 + ABS(X / 7 ) = 0 * 24 + ABS(8/7) = 1 / 8/7 = 1 Rest 1
Also Byteadresse = 1, Pixelposition = 1
Beispiel: x = 9 , Y = 2
BytePos = Y * 24 + ABS(X / 7) = 2 * 24 + ABS(9/7) = 49 / 9/7 = 1 Rest 2
Also Byteadresse = 49, Pixelposition = 2
Die 16-Bit-Byteadresse in Low und High aufteilen und die Pixelposition
ungeändert zum_Glcd schicken (ich hoffe, ich habe nichts falsches
erzählt).
Gruß Alex
Moin,
Jetzt hab ich versucht die Bascom-Lib weiter zu bauen, aber es hängt
irgendwo :)
Komisch ist aber, wenn statt dem LCD an PortB der ISP hängt, läuft
zumindest mal das Programm durch :-/
Heut seh ich nix mehr ;)
Deshalb hab ich die Lib und ein Beispiel für Text und eins für Grafik
angehängt.
Das Problem in der Grafikversion ist, dass bei der ersten For-Schleife
(Y=20), nur bis 31 gezählt wird, egal wo man anfängt zu zählen, die
Linie wird auch gezeichnnet, kann man schön erkennen, wenn man ein Wait
einbaut.
Bei der 2. For-Schleife kommen die Pixel irgendwo am LCD an, aber nur
die ersten 6, aber die Anzahl stimmt :)
PS:
Das Programm bleibt an diesen Stellen komplett hängen.
allu schrieb:
> Hallo Chriz,>> wenn die Initialisierung noch so ist, wie ich sie eingetragen hatte,> dann läuft das Display im Grafikmodus. Aufgeteilt in 23 Zeichen pro> Zeile mit 7 verwendeten Bit pro Byte. Genauer, es sind 22 Zeichen mit 7> Bit-Breite und und das letzte mit 6 Bit-Breite (7*22 + 6 = 160 Pixel) je> Zeile.
was soll denn der Mist - im Grafikmodus nicht die volle Bytebreite zu
verwenden. Und im Grafikmodus gibts auch keine Zeichen pro Zeile.
nutze als:
'Character pitch' 7 => 8 Pixel
'number of Characters' 19 => 20 Byte pro Zeile
dann ergibt sich die Pixelnummer mit einer einfachen UND-Verküpfung mit
7 aus der X-Koordinate. Die Cursoadresse zu X/8 + Y*20
Sascha
Der Datenwert für High kann 0, 1, 2, 3, 4, 5, 6, 7 sein.
Meine Rechnung dafür: Tmp = Y * 160/7/256
So kommt es aber bei den Sonderfällen in den Zeilen 11, 22 , 43, 54 und
75 zu Fehldarstellungen.
Wie kann ich das anders berechnen?
@Tiny 80: schön, dass du an der Lib weiterarbeitest ;)
MaXX
Wenn ich es mit "Character pitch=8 Pixel" und "number of Characters = 20
Byte pro Zeile" initialisiere, dann funktioniert der Rest von allu's
Programm nicht mehr richtig oder?
@allu
ist folgender Abschitt alles was zum initialisieren des LCD gebraucht
wird?
Wie müßte dies angepasst werden?
ich sehe zwar nicht was dort zum Display gesendet wird weil das in
"Init_gc_mode" steht, und Temp_1 nicht initialsiert wird, aber das wirds
schon sein.
>Wenn ich es mit "Character pitch=8 Pixel" und "number of Characters = 20>Byte pro Zeile" initialisiere, dann funktioniert der Rest von allu's>Programm nicht mehr richtig oder?
Ich weis ja nicht welche Grafikfunktionen du aus allu's lib noch
verwendest, denn seine Initialisierung deutet ja eher auf den Textmodus
hin.
Sascha
Hat eigentlich schon jemand einen Bascom-Zeichensatz erstellt, den man
mit include einbindet, der für dieses LCD zu brauchen ist ?
Also alles um 90° gedreht.
@Chrix, hast Du es mit der High-Adresse auch mal so probiert?
Chriz X. schrieb:
> Addr = Y1 * 24> Ganz = X1 / 7> Addr = Addr + Ganz 'Addr = Y1 * 24 + INT( X1 / 7 )> Rest = X1 Mod 7 'Rest = X1 Mod 7 => Addr_lo = Low(addr)>> Command = &H0A ' Befehl: RAM-Zeiger Low> Datenwert = Addr_lo> Gosub Zum_glcd ' In Display-RAM schreiben
' Zeilen mit Tmp löschen
> Command = &H0B ' Befehl: RAM-Zeiger High
Datenwert = high(addr)
> Gosub Zum_glcd ' In Display-RAM schreiben
Chriz X. schrieb:
> @allu> ist folgender Abschitt alles was zum initialisieren des LCD gebraucht> wird?> Wie müßte dies angepasst werden?
Nichts, nur die Tabelle die die Initialisierungsdaten enthält.
Chriz X. schrieb:
> '---------------------------------------------------------------------> Lcd_initialisieren:> '---------------------------------------------------------------------> ldi ZL, low(Init_gc_mode *2)> ldi ZH, high(Init_gc_mode *2)
Die Initialisierungsdaten stehen in der Tabelle "Init_gc_mode". Da
brauchst Du nur eintragen, wieviel und welche Befehle zum GLcd geschickt
werden sollen.
Gruß allu
Hallo,
also im Prinzip hätte alles soweit gepasst mit meiner Lib von gestern
Nacht, 1. Fehler war, das ich die Zeilenanzahl mit 19 statt mit 20
berechnet habe.
Warum sich das Programm gehängt hatte, war einfach nur wegen der
Verkabelung, bzw, hab ich mit den Pullups rumprobiert, und schon gings
:-D
Das Handy war glaub ich auch ein wenig schuld, das hier gleich daneben
lag :-/
Angehängt die letzte Lib, und mein BastelTestProgramm.
Um den Touch hab ich mich noch nicht recht gekümmert, deshalb passen die
Pixel nicht so ganz zusammen.
Tiny 80 schrieb:
> Hat eigentlich schon jemand einen Bascom-Zeichensatz erstellt, den man> mit include einbindet, der für dieses LCD zu brauchen ist ?> Also alles um 90° gedreht.
Ich habe mal einen 8x8-Zeichensatz konvertiert. (90°)
Leider ziegt mir es nur in der 1. Zeile etwas an.
MaXX
Da wird diese Zeichen-Schreib-Funktion auch eine kleine Optimierung
benötigen, um mit dem Byte-Layout zurecht zu kommen.
Muss ich mal angucken wie das Original das macht ;)
So, dann schaumamal :)
Mit dem Font von oben, und dieser Lib, und meinem BastelProg, kommt das
im Bild raus ;)
Bei Lcdat kommt erst die Zeile, dann die Spalte (siehe Bascomhilfe) !
Anders als bei zB. KS0108 geht die Zeile von 1-80 (Pixel), die Spalte
von 1-20 (Zeichen).
Ich hab aber nicht alle eventualitäten ausprobiert, auch weiss ich nicht
was passiert, wenn man einen anderen Font als 8x8 verwendet !
mfG
Hallo,
ich weiss, das showpic noch auf der OP-Liste steht,
aber die nächste Zeit wird das nix.
Fasching ist ja auch vorbei, und ich muss wieder was Ernsthaftes machen
;-)
Hallo,
ich habe die Kalibrierung des Touchscreens lt. Application Note: AVR341
in Bascom umgesetzt. (falls jemand Interesse daran hat..)
Das Entprellen des Touchscreens funktioniert noch nicht optimal
und es wird noch nicht erkannt wenn eine fehlerhafte Kalibrierung
durchgeführt wurde. (Ideen?)
Vielleicht kann man den Code ja noch optimieren ???
Gruß
MaXX
Hallo zusammen,
erst mal vielen Dank für eure zur Verfügung gestellten Sourcen, die
haben mir schon sehr sehr viel geholfen. Gerade da ich noch am Anfang
meine Mikrocontroller Laufbahn bin.
Könnt Ihr mir vielleicht einen Tipp geben, wie ich es hinbekommen kann
das ich mit Hilfe von selbst definierten Buttons auch Befehle an den
Controller weitergeben kann. So das sich dadurch meinet wegen eine LED
an einem freien Port An/Aus schalten lässt. So etwas, was in diese
Richtung geht habe ich in den ganzen Pollin DG 16080 Beiträgen hier im
Forum noch nicht gefunden (zumindest meine ich es nicht gesehen zu
haben).
z.Z. benutzte Version:
Autor: Chriz X. (tc-maxx)
Datum: 07.02.2010 15:39
Gruß
Matze
Tiny 80 schrieb:
> mein Username ist Linux_80 nicht _90 ! ;)
Sorry :)
Ich habe etwas weitergebastelt, Touchwerte werden jetzt in den Eprom
gespeichert und es wird eine Prüfung gemacht ob richtig Kalibriert
wurde.
An der Entprellung habe ich noch gearbeitet aber irgendwie gelingt es
mir nicht den ADC-Wert zu nehmen wenn man das Touch los lässt. :(
Gruß MaXX
Chriz X. schrieb:
> An der Entprellung habe ich noch gearbeitet aber irgendwie gelingt es> mir nicht den ADC-Wert zu nehmen wenn man das Touch los lässt. :(
also zum Entprellen:
nach dem Erkennen des Touch's messe ich X und Y Wert und prüfe danach
noch mal ob der Touch noch gedrückt ist, das ganze mache ich 4x und
berechne aus den Messwerten den Durchschnitt. Ist der Touch nach einer
Messung nicht mehr gedrückt so werden die Messwerte verworfen.
PS: was soll das doppelte Auslesen des ADC ??? Den Dummy-Read braucht's
nur nach einem Wechsel der Referenzspannungsquelle bzw. evl. nach dem
Einschalten des ADC.
Sascha
Hallo!
Da ich noch nicht sehr bewandelt in der Controllerwelt bin, habe ich
eine Frage zu der Sache mit dem Display.
Ich habe den Display wie folgt angeschlossen:
(DisplayPin - Name - Pin µC)
1 - GND - GND
2 - +5V - +5V (und an Poti)
3 - Vo - Schleifer Poti
4 - RS - PC5
5 - R/W - PC4
6 - E - PC3
7 - DB0 - PD7
8 - DB1 - PD
usw, bis:
14 - DB7 - PD0
15 - CS - PC1
16 - Res - PC0
17 - Ree - Poti
Als code habe ich den code von Tiny 80 wie im Anhang abgewandelt.
JTAG ist ausgeschaltet.
Allerdings wird nicht eine schrift dargestellt, sondern es läuft nur ein
kleiner Balken über das Display von unten nach oben.
Wäre jemand so nett und kann mir etwas helfen?
Viele Grüße
Andy
Probier mal das $include font...
wieder ans Ende des Progs zu setzen, denn das sind nur Daten und kein
Programm.
Ausserdem steht Mode = 6 was Textmodus bedeuted,
bei graphischer Ausgabe sollte es Mode = 8 heissen.
Habe ich gemacht, aber mehr oder minder ohne Erfolg.
Nach dem ersten mal programmieren waren nur quadrate mit verschiedenem
kontrast zu sehen und nach dem zweiten mal erschien wieder der wandernde
balken.
Zum UART und PD0. PD1:
Falls die Baudrate für die serielle Schnittstelle initialisiert wurde,
sind PD0 und PD1 nicht mehr verfügbar. Also, falls Du es noch nicht
getan hast, auch die Zeile "$baud = xxxx" auskommentieren.
Gruß allu
Hallo Liebe Forumuser,
wie so oft lag das Problem da, wo man es am wenigsten erwartet. Ein
Flachbandkabel hatte keinen richtigen Kontakt zum Stekcer.
Der Display läuft nun einwandfrei.
Danke für eure Hilfe.
Eine Frage habe ich noch:
hat mittlerweile jemand eine Bibliothek für Bascom erstellt, mit der man
auch Bilder anzeigen kann?
Grüße
Andy
hallo
hab mal zum testen die bas und lib von Tiny 80 (linux_80) versucht
allerdings nörgelt bascom external rutine not found _box und _boxfill
sowie label not found _box _boxfill....
seine lib datei findet er allerdings und ich kann weder in der bas noch
inn der lib irgendwo was mit _box finden?
was is da falsch gelaufen?
mfg
Hallo,
in der selber gebauten Lib müssen ja nur die Teile vorhanden sein, die
zum Pixel setzen usw. angepasst wurden, der Rest kommt von Bascom
selber.
Wenn meine Lib im Bascom-Lib-Verzeichnis ist, sollte alles klappen.
also ich habe deine glcdlc7981.lib ins lib verzeichnis von bascom
kopiert die font datei und die bas datei in c:\lcd\
aber wie beschrieben taucht der fehler auf ... muss ich an bascom
irgendetwas einstellen?
p.s. habe version 1.11.9.0 ist die schonwieder veraltet oder ungeeignet?
Hallo Leute,
Mein glcd geht nach langen Suchen.
Tip:Bei billig Disp. ist der Druchkontakt meist nicht oki
deshalb auch mal auf deranderen Seite Löten.
Frage wer ist so lieb mir die Lib von Holger für den Pic
mit c18 comeiler (bitmap.c) umzuschreiben. Ich raf das nicht!
Gruß sammelstoerung
Hallo Leute,
ich habe leichte Probleme irgend wie die zeit oder Temperatur beim
Pollin Display an zeigen zu lassen, ich habe schon einiges probiert im
Programm von Allu, aber es funktioniert nicht, kann mir jemand Bitte
zeigen wie die Zeit oder Temperatur beim Programm eingebunden wird. ??
Danke
Migelito
Hallo Migelito,
ich war eine Woche unterwegs, deshalb die verspätete Antwort.
Migelito schrieb:> Hallo Allu,> irgendwie will es nicht, ich denke aber doch das ich es soweit richtig> umgesetzt habe, oder ?> habe mal die wichtigen Zeilen mit rein genommen wie ich es im Programm> habe.> er compiliert zwar aber er zeigt nur "Grad" an, kann aber auch nicht das> Programm für ein ds1820 mit ins Hauptmenü rein nehmen dann spinnt das> komplette Programm.
Auf Basis Deiner Programmzeilen habe ich mal folgendes probiert, zeigt
auf dem Display:
Temperatur = 12.3 Grad
Temperatur = 12.3 °C
Gruß allu
Dim Temp1 As Byte
Dim Temperatur As String * 3
Temp1 = 123 ' nur für Test vorbesetzen
Locate_zeile = 21
Locate_spalte = 0
'Muster = "01234567890123456789012"
Lcd_string = "Temperatur = Grad"
Gosub Lcd_write_string
Locate_zeile = 71
Locate_spalte = 0
'Muster = "01234567890123456789012"
Lcd_string = "Temperatur = " + Chr(4) ' Grad-Symbol
Gosub Lcd_write_string
Do
' Simulator für Temperaturwert
Incr Temp1 ' Temperatursimulator und Anzeigezeit
Wait 1 ' ...NUR für Simulation !!!
' Temperaturstring aufbereiten
Temperatur = Str(temp1)
Lcd_string = Format(temperatur , "00.0")
' und anzeigen zwischen Temperatur und Grad
Locate_zeile = 21
Locate_spalte = 13
Gosub Lcd_write_string
' und anzeigen zwischen Temperatur und Grad-Symbol
Locate_zeile = 71
Locate_spalte = 13
Gosub Lcd_write_string
Loop ' Endlosschleife NUR für den Test
Letzter Post schon nen Monat her, hmm...
Hallo Jungs ich hab da mal ne Frage/ Problem:
Wie bekomm ich es hin, da bei mir Control und Datenports ganz anders
aufgeteilt sind,daß das Program trotzdem weis was zu tun ist?
bei mir:
LCD Mega32
4 RS - PC1
5 fest an GND, oder sollte ich Daten lesen können? Wenn ja, warum?
6 E - PC2
7 DB0 - PC3
8 DB1 - PC4
9 DB2 - PC5
10 DB3 - PC6
11 DB4 - PC7
12 DB5 - PA5
13 DB6 - PA6
14 DB7 - PA7
15 CS - PA4
bei "normalen" TextLCDs hätte ich zB.;
Config Lcdpin = Pin , Rs = Porta.5 , E = Porta.4 , Db4 = Porta.0 , Db5 =
Porta.1 , Db6 = Porta.2 , Db7 = Porta.3
geschrieben, geht das hier auch?? (anstatt RS natürlich Cd, E = Wr etc.)
ich steh voll auf dem Schlauch und blicks gar ned!
Hilfe
@s_bronco
bei dieser Aufteilung müsste man sich einen extra Treiber schreiben, um
mit den Bascom-Befehlen etwas hin zubekommen.
Auf jeden Fall wird es damit eine ziemlich langwierige Geschichte bis
die 8Bit draussen sind, und das bei jedem Befehl mehrfach.
Beim Config Graphlcd werden die einzelnen Port-Definitionen, glaub
ich, nicht akzeptiert, auch wenn man den Treiber selber schreibt.
Lesen sollte man vom LCD schon können, sonst kann man keine einzelnen
Pixel setzen, da man ja nicht weiss welche Pixel vorher 0 oder 1 sind.
Auch wenn der LC7981 nen Pixelsetz/lösch Befehl hat, ist es damit nicht
von Vorteil damit das ganzen Display vollzumalen, das dauert ewig.
Und i.d.R. fragt man das Busy-Flag ab, ob das LCD schon fertig ist für
den nächsten Befehl.
@John Small: Danke für die ausführliche Erklärung.
Werd das dann mal so stecken und im Schaltplan ändern; naja, erst mal
schaun wie ichs überhaupt verdrahten kann....
Danke nochmal
kann immer noch nicht editieren, grumelgrumel
ein dickes Danke und Lob an alle die das hier geschaffen haben,
besonders an
linux_80, dank deiner LIB geht das jetzt endlich!
Hallo,
das LCD arbeitet bei mir ziemlich gut, habe aber trotzdem noch was
gefunden:
Ich habe mir einen 5x5font erstellt, nur mal die Zahlen und
Großbuchstaben.
Anzeigen geht auch wunderbar, allerdings sind die Zeichen im 8
Pixelraster, im Header steht aber das der Font 5 breit und 5 hoch ist,
warum ist der Abstand dennoch zu groß?
Fontheader:
Hi,
ein Byte hat ja bekanntlich 8bit, und deswegen werden alle Zeichen in
Y-Richtung in diesem Abstand platziert.
Es hat sich bis jetz noch keiner die Arbeit gemacht einen anderen
Abstand vorzusehen.
Ja dachte mir schon sowas..
Hatte aber gedacht in der LIB was über den Abstand gelesen zu haben, war
dann wohl doch was anderes, C source vermutlich.
Wenn sich allerdings jemand darum kümmert, würde ich das gern annehmen.
Ich schon wieder..
Das Display geht in unregelmässigen Abständen einfach Aus, uC läuft aber
weiter, nach reset ist Display wieder eine Weile an (irgendwas von 5min
bis 10h)
absolut nicht nicht vorhersehbar.
Änderung meinerseits war, den LCD- reset fest über 10k auf 5V zu legen
und Initanpassung:
also Enable und Reset teilen sich im Prog den PortA.6
liegt das daran?
kann ich Reset im Init vielleicht einfach weglassen?
ich habe keine Pins mehr übrig, alles belegt.
Hilfe
Hallo,
ich schon wieder, kann halt nix alleine machen...
Habe jetzt eine Platine geätzt auf die das LCD aufgesteckt wird, darauf
arbeitet ein M324.
LCD läuft perfekt, ich kann alles anzeigen was ich will, M324 arbeitet
perfekt, ISP etc. alles funktioniert.
ABER!
ich erzeuge im M324 eine Basiszeit von 10ms mittels des Timer0 und
Interrupt bei Überlauf, sobald ich den Timer0 laufen laß, habe ich
ständig wechselnde Streifen auf dem LCD, Text und Grafik werden noch
angezeigt, halt überlagert von diesen Streifen.
Die meisten Streifen laufen von links oben nach rechts unten.
Timer langsamer oder schneller timen > Streifen ändern sich langsamer
oder schneller, Timer aus > Streifen weg.
Hilfe!
Ist mein Boardlayout Schei*** oder kann ich da am AVR Softwareseitig was
machen?
Am Steckbrett + Pollinboard hats funktioniert.
Hier mal der Testcode:
1
' ******** Compiler Kommandos
2
3
$regfile = "M324Pdef.dat"
4
$crystal = 16000000
5
$hwstack = 160
6
$swstack = 30
7
$framesize = 20
8
$lib "glcdLC7981.lib"
9
$include "8x8B.font"
10
$include "5x5.font"
11
12
13
' ##############################################
14
' ################ INIT ################
15
16
' ******** Globale Variablen
17
Dim A As Byte , Flag As byte , TargetCounter as word
18
Dim PollCounter as word , LCDCounter as word , TouchCounter as word , IntervallCounter(3) as word
UPDATE:
mit einem Standard Mega32 gibts keine Störungen.
M324 und M32 sind doch aber Pinkompatibel????
der einzig große Unterschied ist die 2. Compare Einheit vom Counter2,
OCR2A und OCR2B anstatt nur OCR2???
ich habe mal eine Frage:
Wenn ich die -10V direkt an den Kontrastpin halte, sollte das Display
dann nicht schwarz werden?! Bei mir ist es nicht der Fall... "Display
Off" usw. sind natürlich so eingestellt, dass das GLCD funktionieren
sollte. Ist mein LCD kaputt? Im Datenblatt steht sogar, dass der
Kontrast bis zu 20V aushält. Vielleicht ist dort versehentlich mal 5V
drangekommen, aber mehr nicht.
Ich hoffe ihr wisst weiter...!
Tester schrieb:> ...> Im Datenblatt steht sogar, dass der Kontrast bis zu 20V aushält.
Ja, schon, aber auf VCC bezogen. Die (negative) Kontrastspannung bezieht
sich immer auf VCC. Das steht aber auch im Datenblatt.
MfG
Hallo!
Ich habe mir auch 3 dieser Grafik LCDs besorgt. Und ich möchte mich
Schritt für Schritt an das Display herantasten. Zuerst mal nur im
Textmodus.
Wie muss ich denn das in Bascom programmieren? Brauche ich für die
Zeichen auch so einen Font? (ist das nur im Grafikmodus nötig oder
nicht?) Oder gibt es da auch so eine Bilbliothek dafür. Denn dann könnte
man das LCD ja nur initialisieren und dann einfach einen Text anzeigen
lassen, wie bei einem Normalen LCD?
Bin halt noch ein Bascom anfänger!
Hoffe es kann mir jemand antworten.
LG Michi
hallo,
hat jemand eine idee, wie ich mit obiger lib eine *.bgf einfügen kann?
text usw läuft alles, nur ein bild wird mit mit folgendem code nicht
angezeigt:
(...)
Showpic 0 , 0 , Test
Wait 5
Lcdat 3 , 1 , "ABCDEFGHIJKLMNOPQR"
Lcdat 13 , 1 , "STUVWXYZ0123456789"
(...)
Return
(...)
Test:
$bgf "test.bgf"
$include "font8x8.font"
Hab mich an der AppNote
http://www.mcselec.com/index.php?option=com_content&task=view&id=189&Itemid=57
orientiert. Hoffe mir kann jemand helfen.
Danke schonmal :)
Hello.
I apologize for my English (using Google translator)
guys I can’t connect the screen (DG-16080) to Atmega168 (micro
controllers 100% of the workers tried on two pieces)
the screen works on Atmega16. (special thanks to those who participated
in this forum, since I have not found experiments with such a screen
anywhere else)
And also about the touchscreen there is a question, when connected, as
it is drawn on the diagrams above, part of the touchscreen does not
work.
Thank you in advance for your help.
Hi,
haven't had a look into this since my last post 10 years ago.
Do you even have enough pins available on an M168 as it's quite
different to an M16 ?
An m168 is about a 28 pin package while an m16 has 40Pins.
What language are you using, is Bascom still available ?
Kids tend to use Arduino these days to code atmegas ;)
kbye
Thank you very much for your answer, I honestly did not hope since 10
years have passed)
I figured it out with Atmega168 (connected to port B) but it doesn’t
work with the touchscreen (or rather it works but doesn’t work
correctly) I soldered a board for Atmega 16 on the breadboard (there are
more ports in it) I write on BASKOM using your library and examples of
working with it. According to the touchscreen connection schemes that
described above did not work, maybe I'm doing something wrong?
I attach a photo of my board and screen (but it seems to be 100% like
yours)
https://ibb.co/ng4NmKLhttps://ibb.co/TtFgq8p
so I donno what we did back then.
did you check the resistance of the touch thing using a multimeter if
its working at all ?
the ones we got back then where some kind of refurbished ones, I guess,
and were sold w/o mentioning that there is a touch screen.
I had to fix them with a soldering iron, that's what i found in my past
posts :D
checked (I removed these screens from the cash register terminal
Hypercom ICE5500, I left another one specifically for verification, and
so the touchscreen works in it) measure the resistance (should it be
there any specific?) ;-)
No, I don't have any specific values,
but there is a post around somewhere in this or the other thread.
It's just so you see if its connected an you're using the matching
connections for X and Y axis (don't touch it when doing this).
In the photo, the DG-16080 screen with a touchscreen (you can note where
there are contacts X +, X-, Y +, Y-)
FOTO:
https://ibb.co/jWM550ghttps://ibb.co/j3QWZRthttps://ibb.co/2hRPg1y
when measuring with a multimeter (if you count the 1st night in the left
to the right), then 1 and 2 legs are measured (I defined them as X + and
X-) and 3 and 4 (defined as Y + and Y-), naturally tried playing with
contacts but no result.
https://ibb.co/QHkwkbN
On the touchscreen there are such inscriptions (Google does not know
anything about them): G.T/GUNZE USP.4484038 DVO-02
On the soft cable (4 contact so that comes from the touchscreen) it is
written : 24060T
I figured out the screen itself but anyway, here are the inscriptions
from it:(the inscription on the chip that is on the chip)
DG16080-11C-WFBLY-H REV B 3325310252 02.29/033149 , (the inscription on
the sticker that on the second chip) 040238-001 , (inscription on the
board)DATA VISION P206-1D DG-16080-11
numbered on the photo contacts on a soft loop
https://ibb.co/SygrTW8
By the way, on the circuits in this topic (and circuits from other
sources) the touchscreen is shown as four resistors with a common
center, and on my touchscreen 1 and 2 legs are not connected to 3 and 4
(for example, if you measure 1 and 3 or 4 legs with a tester, then there
is no resistance, the same with 2 and 4)
https://ibb.co/47pbZdW
Sonic Blast schrieb:> https://ibb.co/SygrTW8> https://ibb.co/47pbZdW
Please Please add your images as an attachment to your post. It is
easier to view and people trying to help you do not have to follow a
link to some dubious third partiy image hoster. In addition it will be
preserved not only for a few months, so if someone will come up with the
same problem you have in the future, it is easier for everybody to have
pics of what is found to be a solution and what is not.
A post/solution referring to a schematic, etc. that is no longer
available because of some external filehoster, is useless.
when measuring with a multimeter (if you count the 1st night in the left
to the right), then 1 and 2 legs are measured (I defined them as X + and
X-) and 3 and 4 (defined as Y + and Y-), naturally tried playing with
contacts but no result.
Hi.
Its funny to see that someone is still interested in this post after so
many years.
I managed to use this display with the touch in the past but i used
assembler for my project.
I think, the attached pic could be helpful for you.
The two pairs of connectors should always have a low resistance between
them but not to the other two.
To measure the right coordinates on the touch, you need to create a
point, where both layers (X and Y) are connected. So it has to be
"touched". Then i connected one layer (e.g. Y) on + and on the other
layer ( X), i measured on one side, while the other side was connected
to ground.
This was for X - coordinate. For Y coordinate vise versa.
Have fun !
Sven
before trying to connect the screen and then the touchscreen from the
beginning I read this topic and it seems people wrote here that
everything works for them, laid out code examples ... Well, yes, BASCOM
is far from assembler but we write on what we can do)
And I already read the article (with which you have a photo of the
principle of action of a transreflective touchscreen), everything is
said the same there, as well as here to connect it to the
microcontroller ...
Well, okay, I’ll try, if I manage to connect, I’ll write in a friend and
then it’s still useful)
Guys to all who answered Thank you very much)
If I remember well, i didnt use any resistors between the touch and the
uC.
... No, I´m sure, that i didnt use resistors, the layers are the
resistors themself !
Alexander B. schrieb:> Can I install four 100 Ohm Resistors from the microcontroller to the> touchscreen
There is no need for resistors. It works fine without them.
Okay Thomas, here is the code of the program that I use (the code that
was laid out here as examples), take a look, maybe I missed something, I
definitely didn’t change anything critical?
Thank you in advance for your help.
Guys, thank you all for at least answering after 10 years -))) It turned
out to set up the Touchscreen (I just had a slightly different display),
Special thanks to everyone who had a hand in creating the Library to
Bascom, you are just Gods.