Fortsetzung zu Beitrag "Re: Display mit Touchscreen bei Pollin?" mit reinem BASCOM und ATMEGA32 Danke für Hilfe und Ideenaustausch!
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
Gast
#1481779
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...
Habe leider erst Morgen die Hardware wieder in Griffweite, dann wird getestet. Danke schonmal - und ich melde mich! Gruß Thomas
Gast
#1483750
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
Gast
#1484967
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
Gast
#1484977
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!!
Wusste nicht dass das so empfindlich ist, ich kenne noch die "alten 4x20 Zeichen Displays" da war das kein Problem ;) Wird Erldigt > 20k rein ;)
Gast
#1485071
@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?
Gast
#1486216
Hm, irgendwas klemmt bei Hochladen ... Test .. Test
Gast
#1486231
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
Gast
#1486234
Das mit dem Anhang hat leider nicht geklappt ....
Gast
#1486245
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 ...
Gast
#1486248
Geht leider nicht .... Warum auch immer ...
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
Ratlos ...... geht auch angemeldet nicht mehr ...
Seltsam, bei mir gings vorhin ja noch. Kommt eventuell auf die Dateierweiterung drauf an?! Das bekommen wir schon hin ;-)
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)
Noch ein Datenblatt, jetzt zum Display-Controller LC7981
Gast
#1486467
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?
Gast
#1486633
Egal welcher Plan, wenn Du den internen RC-Oszillator benutzt, sind Quarz und Kondenstoren nicht erfoderlich.
Darf man fragen, welche Art von Projekt Du vor hast?
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
Hi Alex, morgen sind die Displays da. freu Mal schauen ob ich am Wochenende dazukomme Sie zu testen. Ich melde mich! Gruß Thomas
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:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Wie darf ich mir das Raster genau vorstellen, von welcher bis zu welcher Zeile geht die LCD_FORM_0 und die LCD_FORM_7? Das wäre super zu wissen. Als nächstes bin ich gerade dabei (experimentell) mit den Modulen http://www.ehomeportal.de/Funk-System-FS20/Bausaetze/FS20-868-MHz-HF-Sendemodul-TX868-75.htm?shop=shop&SessionId=&a=article&ProdNr=68-620-11&t=1597&c=1932&p=1932 und http://www.ehomeportal.de/FS20-868-MHz-Empfangsmodul-RX868-3V.htm?shop=shop&SessionId=&a=article&ProdNr=68-641-28 meine Wohnlichter zu schalten. Dafür hab ich eine gute Hilfe gefunden und bin gespannt bis mir 'die erste Leuchte angeht' Viele Grüße Thomas PS: Würde Dir auch gerne bei was helfen, leider weiss ich als noch Beginner nicht bei was :-) g
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
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
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
Gast
#1497394
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
Gast
#1497504
@Thomas, über Deine Absenderadresse, und rate mal wie der Admin dort heißt ...
@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
... oder probiere mal: "Disable Timer0" -> Steuerimpulse senden -> "Enable Timer0" ....
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
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
Warum arbeitest Du nicht mit laufenden Menüpunktnummern? Diese kannst Du als Index auf die Texte nutzen und auch zum Verzweigen auf die Handler. ...
Klappt! :-) Es wird so langsam ein Schuh draus.
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
Gast
#1546647
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
Gast
#1573436
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
Gast
#1573533
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
. Normal: -BBBB--- < 1.Pixelzeile -B---B-- -B---B-- -BBBB--- -B---B-- bis -B---B-- -BBBB--- -------- < 8.Pixelzeile ^ ^ Gedreht: 1. bis 8. Pixelzeile
Gast
#1573673
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
Gast
#1574127
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
Währe sehr nett wenn mir jemand ein bisschen Hilfe geben könnte. Liebe Grüsse
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
Gast
#1574970
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
Gast
#1575048
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
Gast
#1575505
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
> > Danke > > Grüsse Kevin ...
Gast
#1575899
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
und hier der Assembler-Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
> 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. ...
Gast
#1575977
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
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)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | |
164 | |
165 | |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | |
186 | |
187 | |
188 | |
189 | |
@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
Gast
#1596909
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
Gast
#1597021
Ups .. Fehler .. nicht ABS sondern INT war gemeint 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
Hallo, danke für eure Ausführungen, so wie es aussieht habe ich die Kirche komplett ums Dorf getragen.. ;) So sieht’s momentan bei mir aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
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
@ Chriz X. wenn du das Display wie oben beschieben für den Grafikmodus initialisieren würdest, währe es so einfach ... Addr = Y1 * 20 + X1 / 8 Command = &H0A Datenwert = low(Addr) Gosub Zum_glcd Command = &H0B Datenwert = high(Addr) Gosub Zum_glcd Command = P_set_del Datenwert = X1 Mod 7 Gosub Zum_glcd Sascha
Gast
#1597475
Chriz X. schrieb:
> Addr_lo = Low(addr)
dann müßte auch funktionieren:
Addr_hi = High(addr)
Gruß allu
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?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
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.
Gast
#1597620
@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
allu schrieb:
> @Chrix, hast Du es mit der High-Adresse auch mal so probiert?
Super, so funktioniert's!
Danke!
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
Jetzt noch eine Line-Funktion, habt ihr da auch gleich noch was Passendes? Nicht, dass ich wieder die komplette Kirche ansacke ;) Gruß MaXX
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:
> Angehängt die letzte Lib, und mein BastelTestProgramm.
Super Arbeit ! DANKE !
Gruß MaXX
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
Hi Tiny_80, danke für deine Arbeit! Jetzt steht meinem Projekt nichts mehr im Weg :) Ich konvertiere dann noch ein paar Fonts (90°) Gruß MaXX
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
mein Username ist Linux_80 nicht _90 ! ;)
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
Gast
#1615188
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
Andy schrieb: > 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 ich würde sagen, Du hast die Reihenfolge der Datenpins verdreht, DB0 muss an PD0 usw. Denn wenn dieser Balken durchläuft ist das LCD nicht initialisiert.
Gast
#1615216
Hallo Tiny 80, hab das direkt nach meiner Frage auch gemerkt und gedreht, die Situation bleibt aber unverändert. 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.
Gast
#1615232
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.
Ausserdem sind die Print-Befehle noch drinnen, wenn man den ganzen PortD verwenden will, müssen die alle raus, sonst ist PD0 und PD1 blockiert.
Gast
#1615244
Habe ich auskommentiert, aber immernoch gleiches ergebnis
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
Gast
#1615499
$baud..... habe ich auch schon auskommentiert
Gast
#1615836
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
Gast
#1624246
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.
Gast
#1624298
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?
Gast
#1624303
ähm 1.11.9.0 ich glaub ich lebe mal wieder hinterm mond werd das gleich mal in ordnung bringen vllt klappts ja dann
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
Gast
#1669971
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:
1 | |
2 | |
3 | |
4 | |
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:
1 | |
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
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???
push
Gast
#1753770
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
Gast
#2603160
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 :)
Gast
#6334643
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
Gast
#6336443
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/ng4NmKL https://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
Gast
#6336696
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).
Gast
#6340429
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/jWM550g https://ibb.co/j3QWZRt https://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
Gast
#6340437
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
Gast
#6340449
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
Gast
#6340540
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.
Gast
#6340555
I apologize from the beginning I did not understand how to insert a photo here, right now I'll redo everything!
Gast
#6340558
In the photo, the DG-16080 screen with a touchscreen (you can note where there are contacts X +, X-, Y +, Y-)
Gast
#6340560
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.
Gast
#6340577
Here's how the touchscreen looks on your circuits.
Gast
#6340581
And it looks like mine according to the measurements of the multimeter.
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
Gast
#6340854
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)
Gast
#6340857
Can I install four 100 Ohm Resistors from the microcontroller to the touchscreen (I didn’t try the 100om but on the 75om and 150om)?
Gast
#6340864
By the way, here is a photo of my craft)
Gast
#6340867
Front Side.
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.
Gast
#6341007
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.
Gast
#6341020
To : Sven B. (svenba) And what compiler do you use assembler for, I installed myself by Bascom, Winavr and Atmel Studios.
Gast
#6532492
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
















