Hi! Danke für die Antwort! Hatte hier schon oft gelesen, dass viele über den ext.Int. gehen und hab mich deshalb dafür entschieden. Dein Konzept sieht aber wirklich plausibel aus, werde versuchen, das so um zu setzen, nach zwei Wochen ohne vernünftiges Resultat ist mir ein neuer Ansatz ganz Recht! Welchen Wert (ms) würdest du als Prellschwelle verwenden? Sven
Sven B. schrieb: > Hi! > Danke für die Antwort! > Hatte hier schon oft gelesen, dass viele über den ext.Int. gehen und hab > mich deshalb dafür entschieden. Das würde ich nicht überbewerten. Es gibt auch immer wieder Leute, die meinen, ihre Tasten per ext.-Interrupt einlesen zu müssen. > Dein Konzept sieht aber wirklich plausibel aus, werde versuchen, das so > um zu setzen, nach zwei Wochen ohne vernünftiges Resultat ist mir ein > neuer Ansatz ganz Recht! Wie gesagt, ich habe es noch nicht realisiert, es existiert also noch keinerlei Erfahrung damit. > Welchen Wert (ms) würdest du als Prellschwelle verwenden? Da muss ein Kompromiss gefunden werden. Zu schnell könnte zu Störungen führen, zu langsam beeinträchtigt die Grafikeingabe (malen, schreiben). Finde es raus. Man kann den Statuszähler ja rückwärts laufen lassen, dann kann man die Prellanzahl durch Variation des Startwertes einstellen, ohne den eigentlichen Code (welcher Statuszählerwert welchen Job erledigt) dabei nicht zu ändern. Auch die 1 ms ISR-Rate ist erstmal aus der Luft gegriffen und kann variiert werden. Die Grenze nach unten ist das ADC-Tempo, der ADC sollte in diesem Intervall mindestens zwei Wandlungen geschafft haben, so dass die erste (ungenaue) Wandlung überschrieben ist und nicht erst per Programm ausgefiltert (unterdrückt, weggeworfen) werden muss. Die Grenze nach oben ist die gewünschte Geschwindigkeit der Toucheingabe. Da aber (fast) jedem Programm einen Zeittakt braucht, lohnt es sich, einen glatten Wert zu nehmen, aus dem man nebenher noch die Systemzeit ableiten kann. > > Sven ...
Gast
#1602815
Yippie! Du bist mein Held der Woche!! Die erste Routine zur Timer gesteuerten Abfrage läuft! Endlich! Nur leider misst er nur vernünftige Werte bei niederigem Takt, meine Schaltung soll aber auf 20MHz laufen.Da kommt immer nur der "Min.Wert". Hat jemand ne Idee? ADC Prescaler ist schon so hoch wie möglich und meine sonstigen Messwertaufnahmen gehen damitz einwandfrei... Touch-debouncing?? Aber wie?
Gast
#1603472
Versuch mal, messen und sofort nochmal messen und nur den 2. Messwert auswerten. Gruß allu
Gast
#1603503
Hi! Danke, habs schon mit Dummy-Messungen bis hoch auf 10 versucht. Ausserdem hab ich an allen möglichen Stellen delays eingefügt usw, er misst immer nur max Werte... Hab mein Display/Touch ber Flachband (ca. 5cm) an die uC-Platine angeschlossen, hab das Gefühl, dass die verschiedenen Signal sich da stören.?. Ach ja, hier mal meine erst (leicht veränderte) Variante der Timer-Touch- ISR: (noch mit Ausgabebefehlen zum überprüfen)
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 | |
Gast
#1603523
Wie ich die Berührungs- und Positionerkennung für meinen Touch gelöst habe, hatte ich oben schon mal kurz beschrieben: Beitrag "Re: Display mit Touchscreen bei Pollin?". Zur Zeit babe ich den IRQ auf 20msec Zeitabstand eingestellt. Nach meinen Versuchen reicht eine Dummy-Messung. Dann sollten sich auch 5cm Flachbandleitung beruhigt haben. Während den beiden Messungen dürfen aber die Portleitungen zum Touch nicht verändert werden. Gruß allu
@ Sven B. zeig mal den Rest des Programms: ADC starten/auslesen, Touchports einstellen! Displayausgaben in der ISR - gruselig. Sascha
Deshalb halte ich mich ja zurück, das ist nicht das, was ich empfohlen hatte... ...
Gast
#1603747
Hi Leute! Natürlich fliegen die Displayausgaben raus, hatte ich doch oben auch geschrieben. Nach zwei Wochen vergeblicher Liebesmühe wird man mir wohl ein bißchen sichtbare Erfolgskontrolle durchgehen lassen. Ausserdem ging es mir hier erstmal darum, etwas reagierendes hin zu kriegen, deswegen hab ich den Vorschlag von Hannes nicht 100% umgesetzt, sondern arbeite mich Stück für Stück heran! Hier mal noch ein bißchen Code;
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Die Init für meinen ADC habe ich so aus meinem funktionierenden Programm übernommen, genau wie die Messabläufe. Aber hier mal die X-Messumschaltung;
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 | |
Touch_speichern_Y sieht genau so aus, nur wird der Wert in Z+1 gespeichert und natürlich vorher die Pins umgeschaltet.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
Oh! Die angehängte Datei könnt ihr IGNORIEREN, hatte gedacht, die wäre nicht angenommen worden. Das meiste ist nur Baustelle der letzten Tage...
Lies Dir noch mal mein Konzept durch. Ich schlug vor, eine ADC-Messung nur vorzubereiten (Portpins setzen, Messquelle auswählen) und dann die ISR zu verlassen. Die Messung (egal ob ADC oder nur Berührung) erfolgt dann im nächsten Interrupt, danach wird die nächste Messung vorbereitet. Zwischen Vorbereitung und Messung vergeht also immer die Zeit eines Timer-ISR-Intervalls, in der aber die CPU nicht wartet, sondern Jobs der Mainloop abarbeiten kann. Der ADC klappert derweil im Hintergrund (per Hardware) einige Wandlungen durch, wobei es auch darauf ankommt, dass er mindestens zwei Wandlungen schafft, damit das erste fehlerhafte Ergebnis überschrieben (entsorgt) wird und ein sinnvolles Ergebnis erscheint. Und was machst Du? Du rufst in der ISR Unterprogramme auf, die erst jetzt die Ports konfigurieren, die ADC-Quelle auswählen und auch noch sofort das Ergebnis liefern sollen... Das kann doch gar nicht funktionieren, der ADC braucht doch auch seine Zeit zum arbeiten. Du erzeugst doch damit in der ISR elend lange Busywaits. Und dabei ist es doch so einfach, etwas vorausschauend zu planen... Vom LCD-Zugriff möchte ich nicht reden, mit meinem LCD-Treiber ist das kein Problem, der führt einen Bildschirmspeicher im SRAM, was die Zugriffe extrem beschleunigt. An das LCD übertragen wird der Inhalt dann byteweise in einem per Timer synchronisierten Job der Mainloop. Damit darf ich dann auch in der ISR ganze Texte ausgeben, ohne dass ein Timing-Problem entsteht. Aber das ist nun wieder eine andere Baustelle. ...
Danke für die kritische Antwort. Ich beschäftige mich erst seit letztem August mit uC,daher sind mir einige Dinge einfach noch nicht so klar. Ich habe jetzt also die Befehle, die ich erst per rcall aufgerufen hatte direkt in die "Schleifen" geschrieben und halte mich an die von dir vorgeschlagene Reihenfolge. Den ADC lasse ich dann also im Free Run laufen und kümmere mich nicht mehr unbedingt um das Busy-Flag, richtig? Mein Hauptprogramm ist ein Oszilloskop auf einem zweiten, grösseren GLCD, wobei ich erst 255 Werte mit ADC speichere und danach auf dem GLCD ausgeben lasse, usw, das funktioniert bis jetzt alles super. Was würde jetzt passieren, wenn der "TouchADC" im Free Run anläuft, die ISR zurück springt und dann der Punkt kommt, wo ich die 255 Werte des anderen Portpins über ADC hole und während dieser Zeit die Interrupts sperre? Kann ich dem ADC nach Start einer Wandlung eines Eingangs umschalten auf Wandlung von zwei Eingängen? Evtl über "laden ADC-Register -- setzen High für neuen Eingang --- speichern in Register" ? Schönes Wochenende wünsch ich euch!
Sven B. schrieb: > Danke für die kritische Antwort. Sorry, manchmal bin ich da recht direkt... > Ich beschäftige mich erst seit letztem August mit uC,daher sind mir > einige Dinge einfach noch nicht so klar. Das ist normal. > > Ich habe jetzt also die Befehle, die ich erst per rcall aufgerufen hatte > direkt in die "Schleifen" geschrieben und halte mich an die von dir > vorgeschlagene Reihenfolge. Das allein ist es nicht, das würde weiterhin Busywaits bewirken. > > Den ADC lasse ich dann also im Free Run laufen und kümmere mich nicht > mehr unbedingt um das Busy-Flag, richtig? Das wäre richtig, wenn der ADC sich nur um den Touch kümmern bräuchte. Einfach das Abfrage-Intervall so hoch legen, dass darin mindestens zwei Wandlungen erfolgen. > > Mein Hauptprogramm ist ein Oszilloskop auf einem zweiten, grösseren > GLCD, wobei ich erst 255 Werte mit ADC speichere und danach auf dem GLCD > ausgeben lasse, usw, das funktioniert bis jetzt alles super. Aha, dann ist ja der ADC bereits voll ausgebucht. Dann sollte man unbedingt den ADC-Complete-Interrupt nutzen, um die maximale Samplerate nutzen zu können und nebenher noch etwas Rechenzeit für andere Aufgaben zu haben. > > Was würde jetzt passieren, wenn der "TouchADC" im Free Run anläuft, die > ISR > zurück springt und dann der Punkt kommt, wo ich die 255 Werte des > anderen Portpins über ADC hole und während dieser Zeit die Interrupts > sperre? Dies ist kein gutes Konzept. Wenn der ADC eine Quelle (also ohne Quellen-Umschaltung) mit maximaler Samplerate abtasten soll, dann nutzt man den ADC-Complete-Interrupt und liest die Messwerte in ein Array ein. Die ISR wird dabei so kurz, dass die Mainloop nebenher noch andere Arbeiten erledigen kann. Übrigens halte ich den ADC des AVRs für etwas zu langsam für ein Gerät, dass Oszilloskop genannt werden darf. Für einen Kanal kommt man nicht viel höher als 15 kHz Samplerate (wenn man sich an das Datenblatt hält, also den ADC-Takt nicht über 200 kHz wählt), bei zwei Kanälen ist es dann nur noch 1/4 davon je Kanal, da ja die jeweils erste Messung nicht so gut ist. > > Kann ich dem ADC nach Start einer Wandlung eines Eingangs umschalten auf > Wandlung von zwei Eingängen? Du solltest Dir im Datenblatt nochmal den Aufbau, die Arbeitsweise und die Timingdiagramme des ADCs genauer ansehen. > Evtl über "laden ADC-Register -- setzen High für neuen Eingang --- > speichern in Register" ? Das verstehe ich jetzt nicht, ADC-Register ist doch readonly. Falls Du Admux meinst, sicher kann man das ändern, aber bitte nicht irgendwann während der Messung, sondern erst nach der Messung. Z.B. in der ADC-ISR: Messwert holen und sichern, ADMUX auf nächste ADC-Quelle einstellen, ADC wieder starten, im Hauptprogramm weiter arbeiten. > > Schönes Wochenende wünsch ich euch! Danke, Dir auch, die Sonne scheint ja bereits... ...
Hannes Lux schrieb: > Übrigens halte ich den ADC des AVRs für etwas zu langsam für ein Gerät, > dass Oszilloskop genannt werden darf. Für einen Kanal kommt man nicht > viel höher als 15 kHz Samplerate (wenn man sich an das Datenblatt hält, > also den ADC-Takt nicht über 200 kHz wählt), bei zwei Kanälen ist es > dann nur noch 1/4 davon je Kanal, da ja die jeweils erste Messung nicht > so gut ist. Off-Topic: Ja, das war mir von Anfang an auch klar, deswegen bin ich gerade dabei, eine kleine abgeschirmte Platine zu entwickeln, welche zwischen meine Eingangsverstärkerschaltung und den uC gesteckt werden kann. Hab dafür schon nen schnellen ADC von Maxim und schnelle RAMs liegen. Ich versuche nur, mein Projekt Stück für Stück weiter zu entwickeln und lerne dabei immer mehr dazu. (Am Anfang blinkte nur eine Led, dann Text auf einem 2 Zeilen Textdisplay, dann Punkte auf dem GLCD von Pollin, dann ADC einlesen mit Poti, ausgeben Byteweise mit Umrechnung, ausgeben bitweise mit Umrechnung auf 240x128, entwickeln und aufbauen einer Eingangsschaltung mit Multiplexer zum V/Div einstellen und hoher Eigangsimpedanz,Messung mit (für mich) maximal erreichbarer Samplerate, TOUCHBENUTZUNG, schnelleres Messen,......) Die Frequenz, welche bis jetzt mit einer kompletten Periode angezeigt wird, liegt bei 2,5 kHz, das reicht fürs erste... Sorry fürs Abschweifen... :-) Ich stelle mir jetzt vor, dass ich den ADC für die Touchabfrage im Free Run starte und sollte mein Oszi-ADC dazwischen kommen, wird in dessen Unterprogramm der Touch-Schwellenzähler zurückgesetzt und meine 255 Werte werden geholt. Dann würde die Berührung nur in diesem Fall verworfen und wenn sie NACH dem OsziMessen kommt normal ausgewertet. Ist zwar nicht so elegant, aber könnte evtl funktionieren, oder? Später soll der interne ADC eh nicht mehr fürs Oszi genutzt werden und es wird nichts mehr verworfen. Was hältst du davon? Mit dem ADC-Int hab ich noch nicht gearbeitet, werd mich da jetzt aber mal ran machen, dann könnte ich das oben geschilderte evtl sein lassen. In etwa würde das ganze dann so aussehen, oder? Start Intvektor ADC wählen Intvektor Timer wählen Hauptprogramm: mach blabla rjmp starte OsziADC mach blabla rjmp Hauptprogramm starte OsziADC: setze bit1 in Register XY ; Oszi ist am messen st Z(ADCwahl), xy admux xy adsc ADIF ret Timer-ISR: Abfrage Z(ADCwahl) ; misst Oszi? wenn ja, Abbruch setze bit2 in Register XY ; Touch misst st Z(ADCwahl), xy Schwellenaktionen wie bekannt adsc adif Abbruch: reti ADC-ISR: ld XY, z(ADCwahl) auswerten bit1 oder 2 set? bit1: ; Oszi Messwertzähler = 255 ? wenn ja, Abbruch st Z(OsziADC), ADCH inc Messwertzähler, speichern xxx Abbruch: reti bit2: ; Touch st Z(TouchADC), ADCH xxx reti
Allu schrieb: > Nach dem Einschalten wird zur Kalibrierung ein Kreuz angezeigt, das in > der zu berühren ist. Danach folgen die 3 weiteren Ecken. Erfolgt eine > Fehlermeldung, ist der Touch sehr abweichend von meinen Exemplaren, es > werden dann Defaultwerte geladen und nach 5 Sekunden geht's weiter. Eine > erfolgreiche Kalibrierung wird im EEProm abgelegt. Hi Allu, ich versuche gerade die Z-Werte vom ADC in eine korrekte X/Y Positionen für das Display umzurechnen. Du hast ja in deinem Code den Touch kalibriert, ich habe versuch ASM zu verstehen aber das gelingt mir nicht! :( Kannst du mir bitte beschrieben wie die Kalibrierung funktioniert und wie du die Umrechnung realisiert hast? Vielen Dank! Gruß MaXX
Hi MaXX, mein Display habe ich in ein Raster mit 23 Zeichen mit 7 Pixel Breite (x, 10 Pixel-Zeichen-Zeilenhöhe) und in 8 Zeichenzeilen (y) unterteilt. Das ergibt 23 x 8 = 184 kleine Folientasten. Dafür ist die Berechnung der Kalibrierung ausgelegt. Diese erfolgt in Bascom und wird im EEprom abgelegt. Was Du in ASM siehst, ist die Berechnung der Rasterkoordinaten und des Rückgabewerts, wenn der Touch berührt wurde. Der Touch läuft per Interrupt im Hintergrund. Mit dem habe ich nichts mehr zu tun, außer in Bascom zu fragen, wurde eine Folientaste gedrückt und welchen Rückgabewert hatte diese. Bei einer Zehnertastatur bespielsweise ordne ich einfach den Tasten die Rückgabewerte "0" bis "9" zu. Und dann kommt in Bascom die Frage, wurde eine Taste gedrückt und wenn ja, welchen Rückgabewert hatte diese. Die x/y-Koordinaten brauche ich also im meinem Auswerteprogramm überhaupt nicht. Die Striche der Kreuze liegen auf der erster Pixelzeile des zweiten und des letzten Zeichens, in X- und Y-Richtung. Kalibriert wird hier auf ein Raster, da ich nicht auf dem Display malen will, sondern auf einfache Art Tasten erzeugen möchte. Beispielweise generiert der Text (Return) eine dünn umrandete Taste und [DEL] ein dick umrandete Taste. Aber da hat ja jeder andere Ziele. Gruß allu
Sven B. schrieb u. A.: > > Ich stelle mir jetzt vor, dass ich den ADC für die Touchabfrage im Free > Run starte und sollte mein Oszi-ADC dazwischen kommen, wird in dessen > Unterprogramm der Touch-Schwellenzähler zurückgesetzt und meine 255 > Werte werden geholt. Dann würde ich die ADC-Zugriffe generell in einen Interrupt auslagern. Um im Oszi-Betrieb mit unterschiedlichen Zeitachsen arbeiten zu können, würde ich dann wieder den Timer-Int (Compare) benutzen. Da ja der Oszi nicht kontinuierlich läuft, sondern einen "Schnappschuss" macht und dabei den zur Verfügung stehenden RAM füllt, muss ja während des Scanns der Touch nicht abgefragt werden. So kann per Merker entschieden werden, ob die ISR den Messwert ins Oszi-Array schaufelt, oder den Touch abfragt. Die Touchabfrage ist dann eben während des Scanns blockiert. > Dann würde die Berührung nur in diesem Fall verworfen und wenn sie NACH > dem OsziMessen kommt normal ausgewertet. Ist zwar nicht so elegant, aber > könnte evtl funktionieren, oder? Die Berührung würde ich während des Oszi-Scanns überhaupt nicht testen, es gibt keinen Grund, den Scann abzubrechen. Für den Scann würde ich auch den gesamten freien RAM nutzen (außer Variablen und Stack natürlich), so dass man bei der Darstellung darin scrollen bzw. zoomen kann. > Später soll der interne ADC eh nicht mehr fürs Oszi genutzt werden und > es wird nichts mehr verworfen. > Was hältst du davon? Ich halte nichts davon, mit einem AVR zwei verschiedene GLCDs mit unterschiedlichen Controllern ansteuern zu wollen. Ich hatte auch mal mit einem GLCD 320x128 mit T6963C und einem Mega32 herumgespielt, es dann aber erstmal beiseite gelegt, weil andere Dinge anstanden. Realisiert sind erstmal nur Life-Oszi (also kein Speicherbetrieb) mit AVR-ADC mit nur einem Kanal und 8-Bit-Logic-Logger auf Event-Basis (Loggen von Veränderung mit Zeitstempel) mit grafischer Darstellung zoom- und scrollbar. Dazu sollte noch ein Speicher-Oszi und ein LA mit einstellbarer Abtastrate kommen, mir ist aber auch irgendwie die Lust vergangen, denn was Vernünftiges wird das sowiso nicht. Wenn Du mir eine PM schreibst, kann ich Dir gern mal den bisher existierenden Code schicken. Veröffentlichen möchte ich ihn nicht, dazu ist er zu schlecht, es gibt in diesem Forum bedeutend bessere Umsetzungen von Oszi und LA. Das Teil wird mittels zweier Drehgeber und einiger Taster bedient. Die Touch-LCDs gab es damals noch nicht. > > Mit dem ADC-Int hab ich noch nicht gearbeitet, werd mich da jetzt aber > mal ran machen, dann könnte ich das oben geschilderte evtl sein lassen. > In etwa würde das ganze dann so aussehen, oder? > > > Start > Intvektor ADC wählen > Intvektor Timer wählen Naja, ich schreibe da nicht nur die benötigten Vektoren, sondern die gesamte Sprungtabelle, denn ich mag keine Lücken im Code. Das ist aber Ansichtsache. > > Hauptprogramm: > mach blabla > rjmp starte OsziADC > mach blabla > rjmp Hauptprogramm > > starte OsziADC: > setze bit1 in Register XY ; Oszi ist am messen > st Z(ADCwahl), xy > admux xy > adsc > ADIF > ret > > Timer-ISR: > Abfrage Z(ADCwahl) ; misst Oszi? > wenn ja, Abbruch > > setze bit2 in Register XY ; Touch misst > st Z(ADCwahl), xy > Schwellenaktionen wie bekannt > adsc > adif > Abbruch: > reti > > ADC-ISR: > ld XY, z(ADCwahl) > auswerten bit1 oder 2 set? > bit1: ; Oszi > Messwertzähler = 255 ? > wenn ja, Abbruch > st Z(OsziADC), ADCH > inc Messwertzähler, speichern > xxx > Abbruch: > reti > > bit2: ; Touch > st Z(TouchADC), ADCH > xxx > reti Naja, ich wäre mit diesem Konzept nicht glücklich. Aber ich möchte diesen Thread nicht auch noch für ein Oszi-Projekt entführen. ...
Hallo MaXX, genaueres zur Berechnung. Ursprünglich wollte ich noch eine mögliche Verdrehung der Touchfolie gegen das LCD rausrechnen, hat sich aber bei meinen Displays als nicht notwendig herausgestellt. So konnte die Berechnung der Kalibrierwerte recht schlicht ausfallen. Das Prinzip am Beispiel der X-Achse (im Programm werden jeweils 2 Werte gemittelt, aber das ist hier erstmal egal). Prinzip: |<----------------------ADC-Wert------------------| |<-ADC-Wert->| | + + Kal-Kreuze| | X_links X_rechts| |<-1 Raster->|<-- -----------21-Raster----------->|<-1 Raster->| |<------Displaybreite = 23 Zeichen (Raster / Folientasten)---->| X_links und X_ rechts sind die entsprechenden Messwerte des ADCs. Der Randabstand zum zweiten Zeichen ist (die Zählung beginnt bei 0): X_1_pos = X_links ; erster Kalibrierwert Um das berührte Rasterkästchen im Auswerteprogramm schnell ermitteln zu können, ist der zweite Kalibrierwert so aufgebaut, dass im wesentlichen eine Multiplikation und ein Division zur Bestimmung ausreichen. Um die erforderliche Genauigkeit zu erhalten, wird bei X mit 1024 und bei Y mit 2048 multipliziert). X_pro_spaltenbreite = 21 * 1024 / (X_rechts - X_links) Zur Auswertung: - der ADC liefert einen X-Wert, nennen wir ihn X_aktuell - von X_aktuell wir der Randabstand abgezogen (X_1_Pos) - ist das Ergebnis negativ, ist die Position 0 berührt worden - war es positiv wird der verbleibene Rest mit X_pro_Spaltenbreite (hardware)multipliziert und dann durch 1024 geteilt, Low-Byte ignorieren und High-Byte 2 mal rechts schieben und plus 1 rechnen. Die X-Postion des Rasterkästchens ist jetzt bestimmt. - da je nach Touch auch mal ein Wert grösser als 22 herauskommen könnte, wird das Ergebnis noch auf den Max-Wert korrigiert (Wertebereich 0-22 = 23 Zeichen je Zeile). Mehr steckt nicht dahinter. Die Y-Richtung funktioniert genauso. Die beiden Werte zeigen jetzt auf das errechnete Rasterkästchen. Damit wird auf die Tabelle der Rückgabewerte zugegriffen (Form_tab) und der Wert in F_Taste bereitgestellt. Die Tabelle der Rückgabewerte liegt im RAM, hier schreibt man rein, was man bei der Berührung des entsprechenden Rasterkästchen haben möchte. Jetzt wird noch das Flag Touch_meldet gesetzt und fertig. Was das LCD an dieser Stelle anzeigt, ist davon völlig unabhängig. Ob eine Taste oder Text, Hauptsache es stimmt mit dem Raster überein. Gruß allu
@allu Danke für deine Erklärung, jetzt ist mir einiges klar!!! Ich habe mal 4 Punkte auf meinen Touch gesetzt die ich angetippt habe, dabei sind folgende Werte (siehe Bild) herausgekommen. Kann das sein, oder mache ich hier evtl. etwas Grundlegendes in der Ansteuerung falsch ? MaXX
Chriz X. schrieb: > ich habe mal 4 Punkte auf meinen Touch gesetzt die ich angetippt habe, > dabei sind folgende Werte (siehe Bild) herausgekommen. X muss in Richtung von P1 nach P2 ansteigen, ok, aber die Wertepaare gleichen Abstands von P1/P3 und P2/P4 weichen viel zu stark voneinander ab. Y muss in Richtung von P1 nach P3 ansteigen, falsch. Für mich sieht das so aus, als würde nochmal die X-Richtung mit umgedrehter Polarität gemessen werden. Die Messwerte müssen sich anlog zu deiner Liste LCD(X) und LCD(Y) verhalten. Übrigens verwende ich nur die oberen 8-Bit des A/D-Wandlers, reicht für meine Aufgabenstellung. Im Touchprogramm ist eine Entprellfunktion integriert. Die Touchfolie wird nur für einige 100 usec während der Messzeit angeschaltet, da diese doch recht niederohmig ist. Ob sich damit die Werteabweichungen erklären lassen, weiß ich leider auch nicht. Gruß allu
Gast
#1606945
Alex D. schrieb: > Chriz X. schrieb: >> ich habe mal 4 Punkte auf meinen Touch gesetzt die ich angetippt habe, >> dabei sind folgende Werte (siehe Bild) herausgekommen. > > X muss in Richtung von P1 nach P2 ansteigen, ok, > aber die Wertepaare gleichen Abstands von P1/P3 und P2/P4 weichen viel > zu stark voneinander ab. > > Y muss in Richtung von P1 nach P3 ansteigen, falsch. Für mich sieht das > so aus, als würde nochmal die X-Richtung mit umgedrehter Polarität > gemessen werden. > Gruß allu Hm Display unterscheide ? bei mir ist es auch andersherum. ALSO: H->L | L
Gast
#1607008
K. J. schrieb: > Hm Display unterscheide ? bei mir ist es auch andersherum. > > ALSO: > > H->L > | > L Geht auch, die Werte müssen halt per Software umgerechnet werden um aufsteigende GLCD-RAM-Adressen zu erreichen. Man kann den Touch aber auch gleich so anschliessen, dass es direkt passt. Nur X und umgepolt X nochmal messen geht nicht. Da fehlt Y. Gruß allu
Hi, also ich habe jetzt nochmal angeschlossen wie es eigentlich sein müsste! (oder?)
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 | |
Nun zeigt es mir den Wert für X nur noch in der linke Hälfte des LCD an, in der rechten Hälfte erhalte ich permanent eine 1. Und der Wert für Y wird mir nun in der oberen Hälte des LCDs angezeigt, in der Unteren bekomme ich auch eine 1. MaXX
Gast
#1607148
Auch wenn ich selbst Bascom benutze, aber beim Touch? Sag mal, was willst du eigentlich mit dem Touchwert anstellen? Malen, Tasten basteln, Einzelpixel "antouchen" oder was sonst? Gruß allu
allu schrieb: > Sag mal, was willst du eigentlich mit dem Touchwert anstellen? Malen, > Tasten basteln, Einzelpixel "antouchen" oder was sonst? Als erstes will ich es verstehen, dann malen und Tasten basteln. Gruß MaXX
Hi, ich habe das Problem gefunden: Ich hatte in der ADC-Config die Referenzspannung auf Internal statt auf Avcc stehen. Gruß MaXX
Gast
#1607460
Zwei Vorschläge hätte ich noch (am Beispiel von X): Chriz X. schrieb: > Waitms 20 ' Wait until the port is stable > X = Getadc(1) ' Read the ad value for the y ändern in: X = Getadc(1) X = Getadc(1) Das sollte schneller und genauer gehen, da der ADC bei der relevanten Messung bereits auf dem richtigen Eingang steht. Chriz X. schrieb: > X = 1024 - X ' Invert the reading bedeutet, der Touch wird umgekehrt mit Spannung versorgt, aber wozu soll das gut sein? Am Rande bemerkt, die größte Zahl des ADC ist 1023 und nicht 1024. Chriz X. schrieb: > Config Pina.3 = Output ' Output > Reset Porta.3 ' Low > > Config Pina.2 = Output ' Output > Set Porta.2 ' High dafür schreiben: Config Pina.3 = Output ' Output Set Porta.3 ' High Config Pina.2 = Output ' Output Reset Porta.2 ' Low Gruß allu
Danke allu, ich habe es so umgesetzt. Gruß MaXX
Gast
#1609616
hallo, hab mal eine frage und zwar habe ich das Touch so wie die Schaltung von benedikt verdrahtet. Ich habe alle auf eine platine gesetzt mit ISP-Programmer, wenn ich jetzt einen Atmega8 bespielen möchte ( mit den richtigen Fuses) klappt das auch und das Programm läuft super. Jetzt kann ich aber kein 3. mal den Controller bespielen, ich kann nich mehr auf ihn zugreifen, auch nich auf ner anderen platine. Ich habe so schon 4 Atmegas geschrottet oder kan nich mehr zugreifen. Was mache ich verkehrt? Wo liegt mein Fehler ?
Vielleicht Fuses falsch gesetzt? Was hast du denn "gefused"?
Gast
#1609683
Also ich habe folgende gesetzt: SUT1 SUT0 CKSEL3 CKSEL1 CKSEL0 BOOTSZ0 BOOTSZ1
Gast
#1609707
Ich sehe grade weiter ob folgenden beitrag: falls du einen billig-programmer am com-port des pcs benutzt. dann solltest du mal den transistor fuer die reset-steuerung checken, hier ist ein exemplar mit recht hoher stromverstaerkung erforderlich. Welchen transistor sollte ich denn verwenden? ixh habe jetzt BC 547B drin.
@Klaus da der AVR auf internem Takt laufen muss kann es nicht sein das CKSEL 3 gesetzt ist, denn dann musst du einen Quarz anschließen, oder zum wiederbeleben einen externen Takt. warum verstellst du die FUSE's wenn er läuft wie er soll?? Sascha
Gast
#1609732
ich habe die fuses vorher vestellt und dann lief der und dann wollte ich noch ne andere software draufbügeln aber danach geht nix merh bei allen 4 atmegas war das so. Im Anhang noch mal die Fuses also häkchen heisst unprogrammed.
Gast
#1609733
Ich meine natürlich 0 bedeutet häkchen.
läuft denn das Programm noch - auch wenn er sich nicht proggen lässt? Sascha
Gast
#1609759
Also es läuft solange, bis ich ein neues Programm aufspiele und danach geht dann nix mehr. Und ich habe nur die hier aus dem Forum genommen, die auf laufen.kann es sein das sich das Display und Isp gleichzeitig nicht verstehen?
Klaus schrieb: > Also es läuft solange, bis ich ein neues Programm aufspiele und danach > geht dann nix mehr. lief zuvor schon das Programm fürs Display ? > kann es > sein das sich das Display und Isp gleichzeitig nicht verstehen? das kann schon sein - ich hab in der Testschaltung das Display zum programmieren jedenfalls nicht angeschlossen gehabt da ich dort keinen ISP-Stecker dran hatte. Sascha
Gast
#1609818
ja also das Programm lief vorher einwandfrei. Ich habe jetzt den letzten atmega mal immer auf nem exteren board programmier und jetzt scheint das zu funktionieren. Dann lag das wohl doch am ISP und gleichzeitigem Display totzdem danke für die Antworten
evl. mit einem Pullup an CS vom Display dafür sorgen, das während des programmierens das Display wirklich inaktiv ist. Sascha
Gast
#1611733
So nun hab ich doch noch mal eine frage und zwar benutze ich den ersten Code von benedikt, wo es nur um das text Display geht und nun wollte ich die Schrift kleiner machen, damit ich mehr zeilen bekommen. Welchen Ansatz muss ich da nachgehen?
Kleiner machen geht nicht wirklich, wenn es gut lesbar bleiben soll. Die Zeichen sind 7 Pixel hoch. Ein Pixel Zwischenraum = 8. Das Display ist 80 Pixelzeilen hoch, ergibt maximal 10 Zeichenzeilen. Aber enger schreiben geht, maximal 26 Zeichen je Zeile sind möglich. Gruß allu
Moin Moin, ich würde gerne wissen, ob es schon Ideen bzw. Ansätze gibt, wie man es schaffen kann, damit man mit diesem Touchscreen auch etwas steuern kann. Wie z.B. ein Relais. Weil wenn ich diesen Thread richtig verfolgt habe gibt es soetwas leider noch nicht. Wenn es bis jetzt noch keine Sourcecodes dafür gibt, könnte mir jemand vielleicht einen Denkanstoß geben in welche Richtung ich mir Gedanken machen muss. Bin was Controller angeht noch recht neu auf dem Gebiet also bitte nicht gleich verbal niedermachen. MfG Julius
Wieso soll das nicht gehen? Du malst Dir mit den bisher bekannten Routinen eine Benutzeroberfläche. Du nutzt den Touch, um Eingaben zu machen. Die Eingaben werden dem Hauptprogramm gemeldet und haben Koordinaten. Nun liegt es an Dir, die Koordinaten auszuwerten, also den Buttons der Oberfläche zuzuordnen und die entsprechenden Schalthandlungen auszuführen. Das ist im Prinzip nichts Anderes, als wenn Du Tastendrücke auswertest und in Abhängigkeit davon Portpins setzt. Oder als wenn Du über eine Schnittstelle (UART, I²C, SPI, ...) Kommandos empfängst, auswertest und in Abhängigkeit davon Schalthandlungen auslöst. Und wenn Du betreffs Controller noch "neu" bist, dann solltest Du erstmal kleinere Brötchen backen, ehe Du Dich mit einem Grafik-LCD mit Touchscreen beschäftigst. Das ist jetzt kein "Niedermachen", sondern ein gut gemeinter Rat. Man schreibt auch keine Romane, ehe man das Alfabet gelernt hat. Es ist immer vorteilhaft, wenn man versteht, was man tut. Und dabei ist es hilfreich, etwas kleiner anzufangen und sich das Wissen Schritt für Schritt anzueignen. ...
Hallo Hannes, danke für den Tipp. Das ist schon richtig das man eigentlich am Anfang besser mit den kleinen Brötchen anfangen sollte, aber ich versuch mich gerne an großen Sachen um so größer ist hinterher auch die Freude. Zumindest habe ich es geschafft mittels Touch meine LED auf dem Testboard An/Aus zu schalten, Dank deines Denkanstoßes. Ob das so wie ich das gemacht die beste Art und Weise ist das sei mal dahin gestellt, zumindest freue ich mich über den kleinen Erfolg. Danke für Eure Hilfe ich hoffe ich kann weiterhin darauf zurück greifen.
Gast
#1619912
Hallo, im Anhang befindet sich ein Code hier aus dem Forum, den ich umgeändert habe auf meine Schaltung und wo ich die lcd lib von Benedikt eingefügt habe. In Main habe ich einen Buttom programmiert und dann einen Schriftzug einblenden lasse, wenn das touchg irgendwo berührt wird. Wie kann ich jetzt nur die koordinaten des Buttoms abfragen, damit nur etwas passiert, wenn auch der button berührt wird? Könnt ihr mir helfen ? hier noch mal der Ausschnitt:
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 | |
Gast
#1621046
Wenn du dir die adc.c anguckst findest du die Funktionen für die touchauswertung im folgenden Teil:
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 | |
Damit müsstest du da was machen können aber wie ganu kann ich dir jetzt so auch nich sagen.
Gast
#1622738
hallo habt ihr schon was rausgefunden wegen dem Erkenn, wo genau gedrückt wurde, um verschiedene Tasten nauswerten zu können ?? Wäre auch an sowas interessiert und probiere schon länger rum aber meine Kenntnisse sind nich so gut deswegen gabs noch keine fortschritte... Gruß Thomas
Gast
#1622927
Also warum fragt ihr nicht einfach ab ob ihr an der Stelle seit wo ihr den Button gesetzt habt ? Klaus schrieb: > lcd_gotoxy(28,24); > lcd_writestringP(PSTR("Button")); Hier habt ihr doch die Stelle wo der button ist! Also fragt ihr einfach das Touch ab und errechnet dann ob ihr an der Stelle seit wo der button liegt !! greetz. Oliver
Gast
#1623092
Also würde das einfach bedeuten, dass man mit tx und ty die Werte abfragt?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Oder wie muss ich das verstehen?
Gast
#1623143
Also ich löse das ganze anderst, im Moment arbeite ich nämlich an einer TouchScreenButton Steuerung... Ich mache folgendes.. ich kreiere Buttons die eine von mir festgelegte maxhöhe sowie maxbreite haben, dazu kommen noch die Koordinaten. Wenn ich also jetzt den Button definiert habe, nennen wir ihn Button1 werde ich in der Hauptschleife die Buttons auslesen, das geschieht in einer Schleife. Dazu frage ich jeweils das Touchscreen ab, speichere die X,Y Koordinaten in einem Strukt und vergleiche dann ob die Koordinaten in dem Bereich des Buttons liegen. Das dürfte ungefähr so aussehen. !!!!!!!!!ACHTUNG: KEIN VOLLWERTIGER CODE NUR GEDANKENGÄNGE !!!!!!!!
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 | |
Hauptprogrammteil dürfe ungefähr so aussehen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
! Wie gesagt sind nur Ideen von mir, welche ich im Moment umsetze, wenn ich was fertiges habe werde ich es hier natürlich präsentieren !! Greetz Oliver
Gast
#1623164
OHA, Das sieht doch schon ganz schön komplex aus. Funktioniert das denn schon bei dir?? Vll wäre es auch gut, wenn man die Buttons schon vordefiniert und sie nur an bestimmte stellen plazieren kann z.B. nur links oder rechts vom Touch also an dafür festgelegte Stellen oder so ^^ wäre jetzt mein erster Gedanke. Bin auch sehr an sowas interessiert. Kannst dich ja mal melden: ThomasH89@gmx.de gruß
Gast
#1623411
Thomas schrieb: > OHA, Das sieht doch schon ganz schön komplex aus. Funktioniert das denn > schon bei dir?? Also im Moment funktioniert das Button - anlegen, -löschen, -pushen schon einigermaßen,allerdings habe ich keine passenden grafiken um sie darzustellen. Deshalb ist es bei mir einfach nur ein TEXT welchen ich dann verarbeite. Thomas schrieb: > Vll wäre es auch gut, wenn man die Buttons schon vordefiniert und sie > nur an bestimmte stellen plazieren kann z.B. nur links oder rechts vom > Touch also an dafür festgelegte Stellen oder so ^^ wäre jetzt mein > erster Gedanke. Also meine Idee ist, einfach die "buttongrafik" genau an meine Stelle zu setzen welche ich vorgebe: Oliver schrieb: > // Button malen > void button_add(height,width,x,y,bitmap,funktion die aufgerufen wird wenn >gepushed wird(*push)) > { > > //Buttongrafik aus dem flash laden und zeichen > button_bitmap(bitmap,x,y,width,height); > > // Button zur Buttonliste hinzufügen > button[num_buttons].on_press = push; > button[num_buttons].x1 = x ; > button[num_buttons].y1 = y; > button[num_buttons].x2 = x + width; > button[num_buttons].y2 = y + height; > num_buttons++; > } Per -X, -Y Koordinaten übergebe ich den Startpunkt, an dem die Grafik anfangen soll (Kann diese also beliebig platzieren !!
1 | |
Vielleicht hat ja jemand lust kleine Grafiken zu zeichnen welche passend für die Größe des Displays sind, dann kann ich schauen dass ich eine passende Grafikausgabe programmiere. Greetz Oliver
Gast
#1623519
Mist Hatte ne falsche Email-Adresse angegeben, meine ist ThomasH89@gmx.net sonst schreib mir mal deine dann melde ich mich mal wäre dann interessiert eventuell ein wenig an deinem Projekt mitzuwirken............
Hallo, also die Auswertung von Schaltflächen mache ich auch wie von Oliver vorgeschlagen - allerdings in ASM. Im Anhang mal eine Exceldatei die ich mir zum testen gebastelt habe. Man kann dort mal malen und sich die Grafikdaten ausgeben lassen. (hier als ASM-Code, ab mit ein bisschen VBA sollte das auch für C machbar sein) In meiner Originaldatei hab ich noch ein paar Funkionen eingebaut, die über die RS232 auch den Transfer der Excelansicht auf das Display erlaubt - passende Software auf dem Controller vorrausgesetzt. Sascha
Oliver schrieb: > Vielleicht hat ja jemand lust kleine Grafiken zu zeichnen welche passend > für die Größe des Displays sind, dann kann ich schauen dass ich eine > passende Grafikausgabe programmiere. An was hast du da denn gedacht aus deinem Code kann man entnehmen, dass du das für servos nutzen möchtest. Also eher sonne Cursortasten in alle Richtungen oder welche Grafiken /Darstellung hast du dir so gedacht?? Gruß
Gast
#1624006
Stefan Feismann schrieb: >An was hast du da denn gedacht aus deinem Code kann man entnehmen, dass >du das für servos nutzen möchtest. Also eher sonne Cursortasten in alle >Richtungen oder welche Grafiken /Darstellung hast du dir so gedacht?? Also ich würde sagen wir können ja einfach mal ein paar Cursortasten,Zahlen, vielleicht Statussymbole (Kreis welcher einen kleinen gefüllten Kreis innerhalb hat für aktiviert und ein einfacher Kreis für inaktiv) gebrauchen. Buttons allgemein mit Text kann jeder sich selber anpassen, gibt es hier nicht iwo im Forum ein Programm welches aus bmp dateien direkt headerfiles erstellt ? Ich möchte nicht nur Servos ansteuern, dies war jetzt nur ein Beispiel welches ich im Quellcode veranschauliche. Ich möchte eine komplette Steuerung damit erledigen. Im Moment scheint alles recht zügig zu funktionieren, den Quellcode werde ich schon bald hier online stellen, wobei hier zu sagen ist dass alles noch ziemlich BETA Status hat denn ich habe ja noch keine GrafikPlitt Funktion um Buttons oder ähnliches anzeigen zu können. Hoffe das wir demnächst hier was ausarbeiten können, vielleicht kann ja jemand eine GrafikPlott Funktion im Ansatz ausarbeiten, ich verwende ja die lcd lib von Benedikt! Vielen Dank nochmal dafür ! Greetz Oliver
Ich mach mich morgen mal dran einfache Cursortasten zu erstellen ich will hoffen das das alle klappt. ich erstell die in paint und speicher die dann als .bmp und dann kann man die ja in sonem anderen Programm kleiner machen, etc ich stell einfach mal was on und guck ob du damit was anfangen kannst.
Also mein ertser gendanke wäre jetzt so ein cursor ^^...............Hab mal den Cursor Oben mit dem Programm LCD-Assistant verkleinert und so aber irgendwie kann man das dann nich mehr angucken weiß auch nich weiß jemand womit oder wie man die passend umwandelt ??
Gast
#1624075
Stefan Feismann schrieb: > Also mein ertser gendanke wäre jetzt so ein cursor ^^...............Hab > mal den Cursor Oben mit dem Programm LCD-Assistant verkleinert und so > aber irgendwie kann man das dann nich mehr angucken weiß auch nich weiß > jemand womit oder wie man die passend umwandelt ?? Also ich würde das mal mit "Image2Code" probieren, google einfach mal danach. Habe im Moment leider nicht die möglichkeit das selber zu testen da ich nicht zuhause bin und meine Hardware vorliegend habe ! Habe in einem anderen Forum gelesen, dass der dortige User erfolgreich grafiken damit konvertiert hatte, allerdings beschreibt er dass man die Einstellung "3" nehmen sollte da es bei den anderen nicht richtig klappt bzw der dort extrahierte Code anscheinend problematisch zu sein scheint. Habe mir deine Cursorgrafik angeschaut, sieht wirklich gut aus damit könnte man wunderbar ein nettes Steuerungsmenü basteln um z.B. eine Rolladensteuerung zu ermögliche oder ähnliches !! Greetz Oliver
Ok hab da mal was probiert it dem Programm. Jetzt ist ein Cursor 30 x 30 Pixel groß muss mal jemand ausprobieren, ob das so geht im Anhang das, was das Programm mir ausgespuckt hat ^^
Gast
#1625632
@ Sascha Weber: Ich habe mir mal deine MacroExcelDatei angeschaut und bin absolut begeistert. Das hast du wirklich genial hinbekommen. Im großen und ganzen ist es eigentlich kein Unterschied ob dein Programm die Tabelle für ASM ausgibt oder für C. Man könnte ganz einfach "Symbole" zeichnen, die .db als Array umportieren und somit schöne "Grafiken" auf dem Display basteln. Ich werde mal mit deiner ExcelDatei rumspielen und mal schauen was sich da so machen lässt, vielleicht ist deine Lösung für einfache Sachen leichter als ständig das ganze in Paint oder Photoshop in der passenden Größe zu zeichnen und anschließend mit einem Konvertierungsprogramm in hexwerte für Mikrocontroller umzuwandeln. Ich werde hoffentlich im laufe dieser Woche richtig Zeit haben um mich intensivere mit der Display & Grafikausgabe zu beschäftigen. Dann kann ich auch mal deine gebastelte Grafik mir anschauen welche du uns netterweise im Anhang dagelassen hast xD. Greetz Oliver
@ Oliver hast du schon was erreicht mit deiner grafikausgabe und hat das mit meinem erzeugten code geklappt, dann werde ich die anderen teile des Cursors noch online stellen.......... Schönen Abend noch
@ Hannes Lux: Kannst du mal das Layout von deinem Testboard hier einstellen?
Gast
#1631489
Hm Hi hab hier grade 2 frische von pollin bekommen die mit den weisen streifen am Touchscreen und invertierender HG-Beleuchtung. Kann es sein das es da auch nochmal unterscheide gibt, hab hier 3 unterschiedliche die alle mit der gleichen Ansteuerung laufen nur die 2 neuen scheinen eine andere Config zu haben. ist da was bekannt ?
Sebastian R. schrieb: > @ Hannes Lux: > Kannst du mal das Layout von deinem Testboard hier einstellen? Yea, I can... Nur das Layout??? - Oder auch den Schaltplan? ;-) Ist natürlich nicht professionell gemacht, war ja nur für einmaligen Tonertransfer gedacht. ...
Gast
#1631830
Hm, bekomme es nicht hin merkwürdig bei den anderen Displays geht es mit folgender INIT, bei den 2 neuen nicht glaub auch nicht das die defekt sind reagieren beide gleich und zeigen auch was an nur halt nicht richtig. Un hab die Rückseiten verglichen konnte da keine unterscheide feststellen scheint aber ne andere Charge zu sein weil die diesmal ohne Pinheader wahren.
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 | |
Hannes Lux schrieb: > Sebastian R. schrieb: >> @ Hannes Lux: >> Kannst du mal das Layout von deinem Testboard hier einstellen? > > Yea, I can... > > Nur das Layout??? - Oder auch den Schaltplan? ;-) > > Ist natürlich nicht professionell gemacht, war ja nur für einmaligen > Tonertransfer gedacht. > > ... Vielen Dank, dann kann ich das als Grundlage benutzen und ein bischen erweitern (ISP-stecker usw.)! :-)
@ K. J. ich benutze folgende init-Werte: Adresse wert 0 32 1 0x77 2 19 3 79 4 7 Thomas
Sebastian R. schrieb: > Vielen Dank, dann kann ich das als Grundlage benutzen und ein bischen > erweitern (ISP-stecker usw.)! :-) ISP-Stecker brauche ich nicht, den stülpe ich einfach von oben auf den Controller drauf, die Controllerpins sind dabei der Steckverbinder... ;-) ...
Gast
#1634208
Thomas Forster schrieb: > @ K. J. > > ich benutze folgende init-Werte: > > Adresse wert > > 0 32 > 1 0x77 > 2 19 > 3 79 > 4 7 > > > Thomas Hm, klappt leider auch nicht irgendwie scheint da was komplett anders zu sein, die anderen Displays laufen auf der Schaltung aber kann ich nicht verwenden da die diesen komischen Folienleiter haben den man nicht löten kann.
Mein Display sieht genau so aus wie deines, mit den lötbaren Anschlüssen. Bei mir funktionierts. Ist dein enable-Impuls lang genug? Thomas
Gast
#1636268
Hallo, möchte mal die hintergrundbeleuchtung ausprobieren und hab da auch schon einen Inverter bei reichelt gefunden mit 12V Eingang und 100V Ausgang aber dann mit 800Hz ist das schlimm oder funktioniert das auch mit 800Hz weil im Datenblatt steht ja was von ca 500Hz?? @ Oliver Wie weit bist du denn mit deiner Grafikausgabe schon gekommen ??
Gast
#1636315
Thomas schrieb: > @ Oliver > Wie weit bist du denn mit deiner Grafikausgabe schon gekommen ?? Sry Leute dass ich im Moment fast nix von mir gebe, ich habe im Moment mit nun noch 3 Abi-Vorklausuren zu kämpfen welche vorraussichtlich mitte nächster Woche vorbei sind, dann schätze ich kann ich mich endlich wieder ein bischen mehr mit diesem Thema beschäftigen. Leider kommt noch erschwerend dazu, dass ich nun auf meine neuen Displays warten muss da mein altes mitsamt dem Atmega kaputt gegangen ist (Defektes Netzteil,hatte ziemlich Glück dass nur die Teile an der etwas stark erhöhten Spannung hingen !!!). Offtopic: Werde wohl nie wieder ein Voltcraft Labornetzteil gebraucht kaufen, hatte zwar nun fast 1 Jahr perfekt seinen Dienst vollrichtet, allerdings jetzt scheint es irgentwie plötzlich die Vollmeise zu bekommen !!! Zurück zum Text.. Ich habe mir mal gedanken um die Grafikausgabe gemacht, hatte mir da auch anregung von dem Roboternetz-Code geholt, die dort entwickelte Grafikausgabe ist ja echt buggy... aber "eigentlich" einfach gelöst.. Wer Lust hat, kann sich diese mal schnappen und mal testen,ich meine damit schonmal halb erfolgreich (GUTE AUSSAGE xD) einen Button gemalt (plaziert) bekommen zu haben !!! Also wenn ich wieder richtig Zeit habe, werde ich hier natürlich wieder aktiver mitwirken und dann auch mal meinen Code veröffentlichen !! Bis dahin.. Greetz Oliver
Gast
#1637655
Hallo Leute, entschuldigt, dass ich euch mit einer neuerlichen Frage zu den Grafikdisplays stören muss, aber hier liegen drei Stück herum, die ich beim besten Willen nicht abgesteuert bekomme. Ich habe das Sanyo- und das Hitachi-Datenblatt durch und brüte nun zwei Tage an der blöden Initialisierung. Noch dazu arbeite ich lieber mit assembler und da sind die Codebeispiele nicht so reichlich zu finden. Mein aktueller Status: - Flash-Upload klappt, Fuses sind alle richtig gesetzt, der Prozessor (ATMega32) läuft mit 16 MHz. Mein Portmapping schaut so aus: PORTC PC0..PC7 : DB0 .. DB7 PORTA PA0: RS; PA1: R/W; PA2: EN; PA3: !CS; PA4: RST - Das Display bleibt hängen wie beim power-up, mal mit vertikalen Streifen, mal komplett leer. Bin ich jetzt total bescheuert oder total blind? Ich habe auch das timing so langsam gemacht, damit ich mir um die set-up und hold -Zeiten keine Sorgen machen muss, aber irgendwie tut sich nichts. Den "Einfach mal draufbrennen und es tut"-Code scheint ihr hier nur für den ATMega8 ausgeheckt zu haben :( Danke schonmal für die Hilfe! hboy
Gast
#1637659
es ist natürlich .equ LCD16080_CS = 3 ; display Pin15 .equ LCD16080_RST = 4 ; display Pin16 da stimmen die Kommentare nicht. Ich habe die Pinbelegung schon nachgeprüft (Pins mit pulsfolgen belegt und am Display nachgemessen)
Gast
#1637716
Thomas Forster schrieb: > Mein Display sieht genau so aus wie deines, mit den lötbaren > Anschlüssen. > Bei mir funktionierts. > Ist dein enable-Impuls lang genug? > > Thomas Hi thx für die Antwort hab den Fehler mittlerweile gefunden schuld ist der ICSP die internen pulups dessen ziehen die dl auf 3v runter und das Display erkennt kein high mehr.
@hboy007 also wenn man schon in ASM programmiert dann nicht unbedingt einen Compiler nachahmen. im Macro "LCD16080_Write" legst du die zwei Werte auf den Stack, dann ein call auf "_LCD16080_Write" macht wieder 2Byte auf dem Stack. und - was liest du nun im Unterprogramm mit deinen 2 Pop's aus?? Sascha
@hboy007
LCD16080_ToggleENA: ; refer to datasheet
rcall WAIT_10us
sbi LCD16080_BITS, LCD16080_ENA
rcall WAIT_10us
sbi LCD16080_BITS, LCD16080_ENA
rcall WAIT_10us
ret
Sollte das zweite sbi nicht besser ein cbi sein, um Enable zu toggeln.
Thomas
Gast
#1638012
hoppla, das sbi ist da beim Aufräumen durch copy&paste reingerutscht (da standen vorher Port und Bitnummer). Ich habs repariert und getestet, geändert hat diese Selbstverständlichkeit leider noch nichts. In der Zwischenzeit habe ich auch das Display mal gewechselt, falls das vorherige wider Erwarten über den Jordan gegangen sein sollte. Die Aufrufkonvention war ein kleines Experiment dem Interesse halber, aber ich bin mit dem Overhead auch nicht zufrieden :-)
Gast
#1638926
Ok, es tut noch immer nicht, aber ich habe nun den Grund gefunden: PortC 2..5 liefern keinen Strom. Ich hoffe nur, dass das nicht aufgrund der bidirektionalen Kommunikation mit dem Display zustande kam. Mit Pull-Up-Getrickse konnte ich auch keine Daten senden... schade.
Gast
#1638937
> PortC 2..5 liefern keinen Strom. Ein alter Hut: JTAG Enable in den Fuses ausschalten. Thomas
Gast
#1639108
Vielen Dank! Ich benutze AVRdude erst seit ein paar Tagen, es lag an dem jtag fuse bit. Nun läuft der Textmodus, Grafikmodus dürfte auch kein Problem sein. Ich hätte eine Frage bezüglich der Initialisierung: RST ist im Prinzip überflüssig, wenn ich lese, was im Datenblatt steht. Gibt es Fälle, bei denen man !CS ändern müsste? Ansonsten kann man sich diese beiden Leitungen sparen und alles läuft bequem über eine Parallelport-Schnittstelle (ich arbeite gerade mit dem NET-IO Board von Pollin). hboy007
hboy007 schrieb:
> Gibt es Fälle, bei denen man !CS ändern müsste?
Ja, die gibt es. Ich betreibe 2 Displays an einem ATMega32. Bis auf die
CS-Pins ist alles parallel geschaltet. Ausgewählt wird mit 2 Portpins.
Übrigens hat die Samsung-Variante des Pollin DG16080 32KByte an Board.
Wenn man 3 zusätzliche Drähte reinbastelt, ist der Speicher verwendbar
und man kann wunderschön durch ändern der Displaystartadresse die Seiten
umschalten.
Gruß allu
Gast
#1639325
Hey Leute, heute kam endlich mein erwartetes Päckchen, zwei neue Displays(Samsung) sowie reichlich kleinkram ! Und ich habe endlich mal ein paar Atmega32 mehr gekauft, wer weiß was da noch so alles kaputt gehen wird !! Werde hoffentlich nächste WE dann anfangen die Software einigermaßen auf vordermann zu bringen um sie dann hier zu veröffentlichen !! Alex D. schrieb: > Übrigens hat die Samsung-Variante des Pollin DG16080 32KByte an Board. > Wenn man 3 zusätzliche Drähte reinbastelt, ist der Speicher verwendbar > und man kann wunderschön durch ändern der Displaystartadresse die Seiten > umschalten. Könntest du das mal genauer beschreiben, das klingt verdammt interessant ! Hast du auch Codebeispiele und vorallem wofür nutzt du diese Technik ?? Bis dahin, Greetz Oliver
Gast
#1639435
Danke für die Info. Ich werde nun RST über Bord werfen. Um Die Portzahl zu begrenzen, werde ich eine 8-fach d-latch an den Datenbus hängen und dessen Clock an !CS klemmen, damit kann ich die Speicherseite durch Pulsen von !CS setzen. Von Vorteil ist dies, wenn man Animationen mit minimalem Rechenaufwand erzeugen möchte, da man nach Duplizieren der frames nurnoch in einem timer interrupt die Speicherseiten durchzappen muss :-)
Gast
#1639438
ich vergaß es zu erwähnen, das RAM ist ein KM62256DLG http://pdf1.alldatasheet.com/datasheet-pdf/view/37306/SAMSUNG/KM62256DLG-7.html die drei MSB sind pin 2, 26, 1 (ADR12, ADR13, ADR14)
Gast
#1639528
hboy007 schrieb: > Von Vorteil ist dies, wenn man Animationen mit minimalem Rechenaufwand > erzeugen möchte, da man nach Duplizieren der frames nurnoch in einem > timer interrupt die Speicherseiten durchzappen muss :-) Du meinst layer Funktion ? des wehre natürlich interessant, meins leuft grade im mischbetrib also text und grafig und dafür wer des ganz nett neu initialisieren Grafik nach vorne holen und andersherum mit dem textmode das gleiche.
Oliver schrieb: > Könntest du das mal genauer beschreiben, das klingt verdammt interessant > ! Der LC7981 könnte das 32KByte-RAM komplett ausnutzen, leider sind aber die drei Ausgänge MA12 bis MA14 nicht mit dem RAM verbunden. Ich habe die Pins A12 und A14 am RAM abgelötet und hochgebogen und vor Pin A13 die Leiterbahn durchtrennt und dann mit dünnen Drähten mit MA12, MA13 und MA14 des LC7981 verbunden. Allerdings nicht so wie die Wertigkeiten im Datenblatt stehen, sondern wie es am besten zu löten war. Aber das ist für die Funktion egal. Oliver schrieb: > Hast du auch Codebeispiele und vorallem wofür nutzt du diese Technik ?? Damit möchte ich einige Dinge im Haus überwachen, wie Türen, Rauchmelder, Temperaturen usw. und vielleicht auch mal eine Lampe schalten. Im oberen Display sind auf den ersten 4 Seiten die Grundrisse von Keller, Erdgeschoss, 1.Stock und Dach gespeichert. Im Moment schicke ich die Displaystartadresse noch "zu Fuss" zum Display. Gruß allu Do If Touch_meldet = Ja Then Select Case F_taste Case "K" : Gosub Keller Case "U" : Gosub Eg Case "O" : Gosub Og Case "D" : Gosub Dach End Select Touch_meldet = Erledigt End If Loop Until F_taste = _menue Gosub Auswahl Return Keller: Lcd_select = 2 Command = &H08 'Befehl: Display Start Low Datenwert = &H00 Gosub Zum_glcd Command = &H09 'Befehl: Display Start High Datenwert = &H00 Gosub Zum_glcd Lcd_select = 1 Return usw.: Eg: ..... Og: ... Dach: Lcd_select = 2 Command = &H08 'Befehl: Display Start Low Datenwert = &H80 ' Gosub Zum_glcd Command = &H09 'Befehl: Display Start High Datenwert = &H16 ' Gosub Zum_glcd Lcd_select = 1 Return
Gast
#1640117
@Alex D. Vielen Dank für die Informationen, das ist ja wirklich genial... Ich ändere die Adresse, schreibe mein Bild rein, nächste Adresse, nächstes Bild.... Gibt es dort festgelegte ADR Bereiche oder sind die dynamisch (wie hast du die Anfangsadressen gewählt) ??? Ich habe eigenlich so etwas ähnliches vor, allerdings wollte ich die "grafiken" von einer SD Karte holen und dann ausgeben.. wobei ja jetzt deine Möglichkeit das ganze noch erheblich vereinfachern würde !! Ich sehe auf deinem Bild dass du zwei Displays mit einem Inverter am laufen hast.... ich habe den Inverter vom großen C... der sackt mir leider ein bischen ein wenn ich das zweite Display mit anschließe.. Mal jetzt ne ganz blöde frage nebenbei... Ich würde gerne den Atmega32 unter das Display setzen (Platinentechnisch). Oberhalb des Displays sollen die Anschlüssen sowie der Inverter und das Kontrastpoti hin... Stört zufällig der Inverter vielleicht irgentwelche Sachen vom Display oder Controller ? Vielleicht kommt später noch ein RFM12 Modul dazu, ich denke spätestens dann wird es mit dem Inverter Probleme geben... Hoffe nur dass die zwei Leiterbahnen unter dem Display (welche aber mit Massefläche rundherum versehen sind) nicht auf das Touchscreen streuen !!! Vielleicht kann mir einer diese kleine Frage netterweise beantworten.. Greetz Oliver
Oliver schrieb: > Gibt es dort festgelegte ADR Bereiche oder sind die dynamisch (wie hast > du die Anfangsadressen gewählt) ??? Der Controller selbst kennt keine festgelegten Bereiche. Im ersten Schritt habe ich mal Seiten verwendet. Initialisiert wird das Display im Grafik Mode mit 23 Zeichen (nur gerade Adressen = 24 Byte) je Pixelzeile, ergibt einen Speicherbedarf von: 24 Byte/Pixelzeile * 80 Pixelzeilen = 1920 Byte (Hex 0780) Start: Seite_0 = 0, Seite_1 = 1920, Seite_2 = 3840, Seite_3 = 5760 (Hex 1680). Man könnte aber auch um 24 erhöhen um pixelzeilenweise zu scrollen. Oliver schrieb: > Ich sehe auf deinem Bild dass du zwei Displays mit einem Inverter am > laufen hast.... ich habe den Inverter vom großen C... der sackt mir > leider ein bischen ein wenn ich das zweite Display mit anschließe.. Der Inverter liefert nur etwa 80 V, reicht aber für den "Nachtbetrieb". Oliver schrieb: > Ich würde gerne den Atmega32 unter das Display setzen > (Platinentechnisch). Gute Idee, ist in meinem Versuchsaufbau auch so (unter dem oberen Display). Dadurch lässt sich der B-Port kreuzungsfrei mit dem Display-Datenbus verbinden. Und hat den weiteren Vorteil, dass man gleich den Programmieradapter parallel mit anschliessen kann. Vorsichtshalber hat noch jeder !CS einen 22kOhm-Pullup. Funktioniert mit meinem AVR ISP MK II problemlos. Oliver schrieb: > Stört zufällig der Inverter vielleicht irgentwelche > Sachen vom Display oder Controller ? Da habe ich noch nichts bemerkt. Oliver schrieb: > Vielleicht kommt später noch ein RFM12 Modul dazu Da das Ding etwas sinusähnliches erzeugt, ist keine Störung der RFM12 zu erwarten, eher wird der der ATMega Störungen verursachen. Gruß allu
So bin endlich mal dazu gekommen einen Schaltplan für meinen neuen Versuchsaufbau zu erstellen könnt ihr da mal eben drüber schauen, ob ich was gravierendes vergessen habe, oder ob das so passt. @ Oliver Hattest du schon wieder zeit dich mit der DisplayTouch-Auswetung zu beschäftigen ? Gruß Stefan Feismann
@Stefan: - Der Gleichrichter braucht noch einen dicken Elko. - Ich habe das Kontrast-Poti gegen Masse, nicht 5V. - Kondensator an AVCC gegen Masse.
Ok alles klar hab ich geändert. Beim letzten Mal habe ich immer beim Programmieren meinen Atmega8 zerschossen, weil das Display fest dran war( also auch beim Programmieren) Kann das auch hier passieren, oder muss ich noch Widerstände oder Kondensatoren an die ISP Pins hängen?
Hallo zusammen, ich habe mir auch mal so ein Display zu gelegt und habe ein funktionierendes (mit TP) bekommen. Auf dem Bild mit den verschiedenen Versionen das in der Mitte. Habe auch alles soweit angeschlossen und die Verbindungen überprüft. Das Display hängt bei mir an einem PIC18F4550. Wenn ich das Display initialisiere kriege ich auf dem Display alle möglichen Zeichen dargestellt (s. Foto). Also nochmal schnell eine Display Clear eingebaut und alles ist weg soweit so gut jetzt habe ich es als Charakter Display initialisiert und wollte mit dem eingebauten Generator mal ein bisschen was schreiben aber das Display will einfach nichts anzeigen? Vielleicht hatte ja jemand schon mal dieses Verhalten und kann mir sagen was ich falsch mache. Bei der Init war mir auch nicht ganz klar wofür die Einstellung "Cursor lower und upper Adress" ist. Wo das Display starten soll lege ich doch schon mit den Adressen "Display Start upper/lower" fest? Nun gut, hier mal meine Init.. und wie ich versuche was auf dem Display zu schreiben:
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 | |
und:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
LG Nico
Ok habe es selber hin bekommen! War nach dem löschen logischer weise am Ende des Displays und musste dann halt wieder an die Startadresse wechseln =)
Hallo, ich habe nochmal eine Frage an die Profis hier: Ich kann mit der Funktion von Benedikt, zum "springen" zu einer Adresse im Display:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
..nur bis zur Zeile 7 springen danach geht es nicht mehr, bzw. wird ab hier dann nichts mehr geschrieben =( Wenn ich aber keine Zeile anwähle sondern einfach nur wild aufs LCD drauf los schreibe schreibt er sauber das ganze Display voll aufgrund des inkrementieren um 1 je Datensatz. Meine Initialisierung sieht so 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 | |
..hier frage ich mich zum Bleistift auch, warum darf ich eigentlich nur 19 Zeichen einstellen? Ein Font ist doch 8x8 also würden rein theoretisch bei 160 Dots in der Breite doch genau 20 Zeichen neben einander passen, warum aber wird hier 19 eingestellt..mh UND: Auch wenn ich 19 einstelle, kann ich an der 20. Stelle dann trotzdem ein Zeichen schreiben =/! Im Anhang ist nochmal ein Foto wie das dann ausschaut, programmiert ist, dass er "eigentlich" bis zur Zeile 10 runter weiter das Muster verfolgt. Dann nochmal ein paar Kleinigkeiten: 1. Wo ist der unterschied zwischen Cursor Adresse und Start Adresse? 2. Warum wird ein Font o. Char von 8x8 eingestellt, wenn doch die Fonts vom integrierten Generator 5x7 (6x8) groß sind? 3. Die selbe Sache wie mit der Breite -> Warum stellt man 80-1 Zeilen ein? So das soll erstmal reichen, ich hoffe es nimmt sich jemand die Mühe auch wenn es vielleicht so trivial erscheint.. schönen Abend! Nico
Gast
#1667226
> ..hier frage ich mich zum Bleistift auch, warum darf ich eigentlich nur > 19 Zeichen einstellen? > 3. Die selbe Sache wie mit der Breite -> Warum stellt man 80-1 Zeilen > ein? Das steht doch im Datenblatt des LC7981 und außerdem in den Kommentaren der diversen Codebeispiele auf dieser Seite.
Ums mal das Suchen abzukürzen: 80 Zeilen, gerechnet wird aber 0-79 ;)
Ok ja jetzt hab ich es auch gesehen, wegen Binär also von 0 an, ok. Aber dann bleibt der Rest trotzdem offen, also das eigentliche Problem..
Wechsel mal short mit int aus ;) Hatte bei mir viele Probleme bereitet. Jedoch mußte ich den Code von AVR-GCC auf MicroC anpassen.
Hat leider nicht geholfen, in den Zeilen 8-10 schreibt er leider immer noch nichts. Er platziert den blinkenden Cursor beim 1 Zeichen der 8. Zeile (s. Foto) aber macht dann nichts =/
Was mich jetzt gerade ein wenig wundert... ich habe selber diese Displays, 4 Stück an der Zahl. Hab mir nun heute mal meinen Inverter gebaut und, zu meiner Freude, festgestellt das mein Display Weiß / Schwarz ist. Jedoch sieht man hier viele verschiedene Displaytypen... z.b. Nicolas seins ist ja schwarz / blau... Warum?!
Meines ist auch S/W.. schaut nur so aus ;)
Nicolas M. schrieb: > Meines ist auch S/W.. schaut nur so aus ;) Ja aber invertiert oder? Bei mir ist der Hintergrund weiß und die Pixel Schwarz?!
Achso! Ist doch auch schick =)
Nicolas M. schrieb: > Achso! Ist doch auch schick =) Jaja, sagt ja keiner was :D Wo wir da gerade bei sind: Tausche einmal Hintergrund weiß / Schrift schwarz zu Hintergrund schwarz / Schrift weiß XD
Hab mir leider nur eins gekauft =) Hast du alle mit heilem TP bekommen, bzw. alles die selben Modelle?
Rene K. schrieb: > Hab mir nun heute mal meinen Inverter gebaut haett ich auch interresse, haste ein schaltbild f. mich (uns)?, vielen dank & ein schoenes WE Charly
Charly B. schrieb: > haett ich auch interresse, haste ein schaltbild f. mich (uns)?, > vielen dank & ein schoenes WE Ja gut, was heißt gebaut... "Gebaut" in dem Sinne das ich ihn mit Anschlüssen "versehen" und am Eingang geglättet habe. Hatte mir für 2,95€ die EL Inverter 08 bei Reichelt gekauft. Klappt wunderbar. Und für den Preis stelle ich mich nicht hin und baue selber einen ;)
Gast
#1669995
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 ich glaube ich hab den Beitrag aus versehen, in den alten Forum ab gelegt.
Du brauchst einfach eine 1s Basis, einen Temperaturfühler + AD Wandler und die Befehle zur Ausgabe auf dem Display evtl. noch eine Zahlensystem Umwandlung und gut =) LG Nico
Gast
#1671545
Hallo Nico, wie es funktioniert weiß ich ja, habe es auch schon oft genug in ein normales LCD an zeigen lassen, nur hier für das GLCD bin ich nicht in der Lage. ach, übrigens ich versuche es in bascom. wie ich normale Wörter anzeige ist auch klar wie hier. Locate_zeile = 07 Locate_spalte = 0 'Muster = "01234567890123456789012" Lcd_string = " A U S W A H L" Gosub Lcd_write_string aber wie bindet man eine temp oder die zeit ein. gruß Migelito
Hi, ja blöd von Bascom hab ich gar keinen Schimmer. Aber es geht eigentlich immer am einfachsten so: 1. Z.B. mit einem KTY die Temperatur über einen Spannungsteiler messen, diese wird dann mit einem µC in einen digitalen Wert umgewandelt. 2. Jetzt musste die Spannung wohl noch entsprechend umrechnen, je nachdem wie der Temperaturkoeffizient im Datenblatt des Sensors ist. 3. Dann hast du ja immer noch einen Binärwert, den dann einfach in dezimal umrechnen (Division durch 10). 4. Jetzt ist es einfach, einfach identifizieren welche dez Zahl vorhanden ist (Einer, Zehner, evtl. Hunderter) und dann dem entsprechend die Zahlen aus dem ASCII Satz auf dem Display darstellen lassen. Aber das wusstest du wahrscheinlich eh schon... sry =/ LG Nico
Für die Temperatur würde ich mir die Mühe mit dem Umrechnen nicht machen. DS18S20(Pollin) heißt die Alternative. Da wird die Temperatur über OneWireBus aus dem Sensor gelesen. Für das Datum und die Zeit nehme ich den DS3234 mit SPI Interface. Der hat übrigens auch schon einen Temperaturfühler integriert, da kann man sich den DS18S20 u.U. sparen. Meik
Gast
#1672527
Hallo Maik, ich glaube ich habe mich total besch.... ausgedrückt ;) wie und was ich für Sensoren nehme, um eine Temperatur aus zu lesen oder berechnen, habe ich schon gemacht und ich weiß wie es geht, habe auch genug auf den normalen LCds angezeigt mit. Nur hir, im Programm von Allu, für das Pollin GLCD, bekomme ich es nicht zur anzeige. Am besten ihr schickt mir mal ein kurzen ausschnitt vom Programm wie ihr es in bascom auf das Display (Pollin GLCD) ausgibt, dann sehe ich wie es von statten geht. Also, noch mal, ich weiß wie es geht, mit herkömmlichen LCDs die Zeit oder dir Temperatur dort aus zu geben. Wie aber beim Pollin GLCS ?? ich habe mit GLCDs noch nicht gearbeitet. Gruß Migeleito
Gast
#1672804
Migelito schrieb: > Locate_zeile = 07 > Locate_spalte = 0 > 'Muster = "01234567890123456789012" > Lcd_string = " A U S W A H L" > Gosub Lcd_write_string Migelito schrieb: > Also, noch mal, ich weiß wie es geht, mit herkömmlichen LCDs die Zeit > oder dir Temperatur dort aus zu geben. "Gosub Lcd_write_String" schreibt ab der Position "Locate_zeile/Locate_spalte" den Text in "Lcd_string" ins Display. Wie für dein herkömmliches LCD berechnest Du den Anzeigestring, zum Beispiel: Temperatur_in_Ascii = "38,5". Diesen Wert möchstest Du in die 3. Zeichenzeile ab der 9. Spalte eintragen und "Grad" anhängen: Locate_zeile = 21 'Eine Zeichenenzeile = 10 Pixelzeilen / gerechnet ab 0 Locate_spalte = 8 ' gerechnet ab Spalte 0 Lcd_string = Temperatur_in_Ascii + " Grad" Gosub Lcd_write_string Gruß allu
Gast
#1673181
Hallo allu, ich habe nach deine vorgaben mal es so eingesetzt, mit meiner Temperatur Ausgabe. Aber er sagt, es wäre kein Wert vorgegeben und compiliert nicht ? In der normalen LCD Variante würde es so aussehen, wie du es sicherlich kennst. Locate 1 , 1 Lcd Fusing(temp1 , "#.&") ; Chr(0) ; "C " Locate_zeile = 10 Locate_spalte = 8 Lcd_string = Temp1 "Grad" Gosub Lcd_write_string Gruß Migelito
Gast
#1673223
Hallo Migelito Migelito schrieb: > Lcd_string = Temp1 "Grad" --> + fehlt Lcd_string = Temp1 + " Grad" Temp1 muss ein Ascii-String sein, sonst umwandeln mit str(Temp1). Gruß allu
Gast
#1674111
Problem: Viel Text mit kleinem Zeichensatz darstellen Hallo Displayprogrammierer danke an alle hier im Forum, mit Eurer Hilfe habe ich auch mein Display zum Laufen gebracht. Ich verwende die Anschlussbelegung von Benedikt, einen Atmega32 und Libs in C von Sebastian, der im Forum bei Roboternetz gepostet hat. Folgendes fehlt noch zum letzten Glück: Ich möchte gerne viel Text komprimiert auf dem GLCD ausgeben und einen 5x7 Zeichensatz verwenden. Ich habe dazu je einen Lösungsansatz für den Textmodus und den Grafikmodus, jeder natürlich jeder mit einem Problem, was sonst: 1) Textmodus + interner Zeichensatz, schön klein, spart Speicherplatz Das funktioniert allerdings nur mir 20 Zeichen pro Zeile statt 26 möglichen und ist mir nicht dicht genug. Bei 26 Zeichen gibt es irgendwo in der Mitte jeder Zeile Pixel die nicht angesprochen werden. Das gleiche Problem wurde hier im Forum schon einmal mit Foto nachgefragt. Man muss also die horizontal pitch und number of characters entsprechend Datenblatt anpassen. Die Erklärung ist sicher, dass mit einer Hp von 8 und einer Pixelanzahl von 160 pro Zeile eben nur 20 Zeichen glatt aufgehen. Sonst müsste man den LC7981 irgendwie überlisten, wie weiß ich leider nicht. So funktioniert es im Textmodus:
1 | |
2 | |
Frage 1: hat jemand einen Tip, wie ich auch 26 Zeichen pro Zeile im Textmodus fehlerfrei darstellen kann, 160/7 =26,6 das geht nicht auf!! Textmodus so einstellen, aber das gibt besagte Fehler:
1 | |
2 | |
2) Grafikmodus + selbst erstellter Zeichensatz 5x7 Das würde ja funktionieren, aber ich habe keinen freien Zeichensatzgenerator und die verfügbaren Zeichensätze sind anders kodiert als ich es brauche, nämlich SB last!! Frage 2: Kann jemand einen Zeichensatzgenerator oder einen Zeichensatz empfehlen? Gruß Tom_W
Gast
#1674395
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. Gruß Migelito Dim Temperatur As String * 3 Dim Temp As String * 3 Do Temperatur = Str(temp1) Temp = Format(temperatur , "00.0") Loop Locate_zeile = 10 Locate_spalte = 8 Lcd_string = temperatur + "Grad" Gosub Lcd_write_string
Hi zusammen ich bin jetzt von dem Charakter in den Grafik Modus umgestiegen und wollte zum Testen mal einfach einen Kasten rund ums Display darstellen also ein Rechteck so groß wie es geht (4 Linien) aber komischerweise kann ich nur eine Linie zeichnen und den Anfang einer zweiten, danach ist Schluss =( Wer kann mit weiter helfen? Ich verwende die Funktionen aus Benedikts Programm... LG Nico
Ich habe Not gedrungen mal ein zweites neues Display angeschlossen, es weist das selbe Verhalten auf. Ich verwende wie schon geschrieben die Zeilen von Benedikt, hier mal die wichtigsten: Die Initialisierung
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 | |
So will ich die Linien schreiben:
1 | |
2 | |
3 | |
4 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
Kann mir irgendjemand sagen, was ich falsch mache?? LG Nico
Hallo zusammen! Da ich auch schon lange mit dem Display rumspiele, möchte ich heute auch mein Beitrag dazu geben und hatte mir mal paar Gedanken zum Anzeigen von Bilder gemacht. Ich habe mal meinen kleinen Sohn auf dem Display gezaubert. Leider ist dabei auch zu sehen das die Pixel des LCD nicht quadratisch sind. Das Bild wird etwas in der Höhe gestreckt. Hier ein Ausschnitt der ergänzte Source von mir aus der lc7981.c die ich hier aus dem Forum habe. Ich benutze einen Atmega32 mit 16 MHz.
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 | |
Ich habe einen Grafikkonverter (Freeware) gefunden der bmp und jpg Bilder convertiert. Leider hat die Software einen kleinen Fehler... Man kann kein LSB first schreiben, deswegen auch der Umweg über "tausch()" Bei der Convertierung ist darauf zu achten das die Breite durch 8 Teilbar ist weil ich ja immer gleich 1 Byte auf das Display schreib. Also wie z.B. in meinem Beispiel Breite 152 Pixel und Höhe 80 Pixel. Bei der Höhe ist das egal. Bei dem Converter verwendet man das Floyd-Steinberg Verfahren. Dann kann das Bild als .c abgespeichert werden. Alle andere ist noch mal in der lcd_test.c erklärt. Anbei die Bilder, der Converter und mein Source. Ich hoffe ich hab nichts vergessen! :) Viel Spaß damit! MfG Tony
Hallo,
ich versuche gerade selbst ein Bild anzuzeigen.
Ich habe mir mit dem Grafikkonverter ein C18 Code ausgeben lassen.
Nun setzte ich meinen Coursor auf X0 Y0 und schiebe alle Bytes aus dem
Array nacheinander auf das Display...
Leider scheint es so nicht zu funktionieren das ganze Bild ist mehrfach
verschoben.
Das sollte doch eigentlich funktionieren oder mache ich einen Fehler???
hier mein C Code
lcd_coursor(0,0);
for (i=0;i<=1600;i++)
{
lcd_send_byte(data_demo_image[i]);
}
Gruß Max
Gast
#1683415
Max Pohl schrieb: > Leider scheint es so nicht zu funktionieren das ganze Bild ist mehrfach > verschoben. Hallo Max! Hast du eventuell ein Bild von dem verschobenen Bild? Dann kann ich dir vielleicht helfen. Ich denke mal das du hauptsächlich das Problem mit dem LSB und MSB hast. Das würde man daran erkennen das das gesendete Byte immmer spiegelverkehrt auf dem Display angezeigt wird. Also z.B "01100101" = 0x65 auf dem Display so angezeigt wird "10100110" = A6 weil der LC7981 das MSB zuerst schreibt. Was mir auch aufgefallen ist das du den Cursor mit "lcd_coursor(0,0)" setzt. Da gab es bei mir auch Probleme deswegen setze ich den Coursor so "lcd_setadress(xp/8,yp);" Schick mal ein Bild und deinen source dazu und dann sehen wir weiter! Gruß Tony
Migelito schrieb: > Hallo Allu, > irgendwie will es nicht, ich denke aber doch das ich es soweit richtig > umgesetzt habe, oder ? Weil Bascom, schau mal unter Beitrag "Re: Pollin 16080 Touch mit ATMEGA32 und BASCOM" dort findest Du meine Antwort. Gruß Allu
Hallo Tony, ich habe es mit deiner Tausch Funktion versucht. Nun funktioniert es einwandfrei. Dank dir!!! Gruß Max
Hallo miteinander! Ich fass es nicht, ich bin am Ende des Threads angekommen ;-) Ich hab alles gelesen, was in diesem Thread steht, hab auch das meißte verstanden ^^ und viele Beispielprogramme ausprobiert. Zuerst zu meiner Hardware/Software: Ich benutze einen ATmega168, den ich per avrisp programmiere, was wunderbar funktioniert. Das Display, das ich bekommen habe, entspricht dem Mittleren auf dem Bild von Benedikt (-> Beitrag "Re: Display mit Touchscreen bei Pollin?"). Ich programmiere mit AVR-Studio in C. Weder das Testprogramm von Benedikt, noch ein auf den ATmega168 angepasstes Programm funktioniert. Wenn der Kontrast richtig eingestellt ist, sehe ich nur einen komplett ausgefüllten Bildschirm, d.h. jedes Pixel ist schwarz. (Wenigstens weiß ich somit, dass das Display theoretisch funktioniert :-) ) Als ich vorgestern zum ersten Mal das Programm von Sigint 122 ausprobiert habe, hat es mir auf Anhieb das Sigint-Logo angezeigt! Zuvor habe ich im Sourcecode von Sigint die Ports auf meine Schaltung angeglichen und die Frequenz angepasst auf 16MHz, weil ich einen externen Oszi am ATmega168 verwende. Sogar der Touch hat soweit funktioniert, dass das Programm merkt, wenn er berührt wird und dann auf die nächste Seite, das Tastenfeld, umschaltet. Das ganze war aber nur ein winziger Lichtblick, der schnell wieder vorbei war: Seit dem einen Erfolg funktioniert garnichts mehr. Die Kontakte hab ich alle durchgemessen, die Widerstände und Kondensatoren stimmen, das Programm ist auf den ATmega168 zugeschnitten, aber der Bildschirm wird einfach nur schwarz. Vielleicht hilft das noch weiter: Wenn ich den Kontrast runter drehe, schaut mein Display wie das in diesem Post aus -> Beitrag "Re: Display mit Touchscreen bei Pollin?" Ich hoffe ich habe keine wichtige Angabe vergessen und dass jemand eine Lösung kennt, die ich noch nicht versucht habe. Grüße, Stefan
Stefan R. schrieb: > Ich hoffe ich habe keine wichtige Angabe vergessen und dass jemand eine > Lösung kennt, die ich noch nicht versucht habe. Hallo Stefan! Ich schätze mal das es kein Fehler in der Software ist sondern in deiner Hardware. Hast du mal alle Ports die das Display braucht geprüft, ob da auch was ankommt? Also einfach mal ein Testprogramm schreiben wo alles auf HIGH ist und mit nem Oszi oder Spannungsmesser nachprüfen. Ich habe auch schon den Fall gehabt das ein Portpin defekt war und dann sucht man sich dumm und dusslig! Oder versuch es mal mit einem anderen Controller wenn du einen rumliegen hast! Gruß Tony
@Tony: Hat leider nicht geholfen, alle Ports am leben (zum Glück :-) ), aber schöne Idee, darauf wär ich nicht allein gekommen. Ich hab leider nur noch den einen ATmega168 und sonst nur Tinys. Die Pins vom ATtiny2313 würden zwar reichen, aber das Programm passt nicht drauf. Ich werd demnächst mal wieder beim Reichelt bestellen, da nehm ich dann ein paar ATmegas mit. Vllt auch mal einen Mega8, den hatte ich noch nicht. Dann kann ich 1:1 die Schaltungen nachbauen, die hier beschrieben sind. Wenigstens liegts wohl nicht am Display. Bis dann! Stefan
Gast
#1688844
Stefan R. schrieb: > Wenigstens liegts wohl nicht am Display. kann trotzdem ein Irrtum sein. Bei mir hatten sich durch häufiges Löten Haarrisse in der Leiterbahn gebildet, die mit dem Auge nicht sofort erkennbar waren. MfG
Ich hab an das Display eine 20-Pol Stiftleiste gelötet, alle Kontakte in Ordnung. Der Rest ist nur Gesteckt auf nem Breadboard. Reicheltbestellung ist raus ;-) in ein paar Tagen kann ich's mit nem Mega8 versuchen... Stefan
Gast
#1693247
Wahrscheinlich habe ich es überlesen.
Bei mir werden mit dem IS TSC2003 die Koordinaten des berührten Punktes
ermittelt. (funktioniert schon)
Der Bildschirm des DG-16080 soll z. B. in 5 x 7 = 35 Planquadrate
(Schaltflächen) eingeteilt werden.
Schaltfläche 1 soll liegen bei
X Y
P1 40 40
P2 80 40
P3 40 80
P4 80 80
Schaltfläche 2 soll liegen bei
X Y
P1 80 40
P2 120 40
P3 80 80
P4 120 80
usw.
Werden z. B. die Koordinaten x=60 y= 65 ermittelt, dann sehe ich, dass
der berührte Punkt in der Schaltfläche 1 liegt.
Wie kann man dies jetzt programmtechnisch lösen bzw. wo nachlesen, um
die berührte Schaltfläche zu ermitteln? (MSP430, vorzugsweise in C)
MfG
Wolfgang_G schrieb: > Der Bildschirm des DG-16080 soll z. B. in 5 x 7 = 35 Planquadrate > (Schaltflächen) eingeteilt werden. > Wie kann man dies jetzt programmtechnisch lösen bzw. wo nachlesen, um > die berührte Schaltfläche zu ermitteln? (MSP430, vorzugsweise in C) > MfG Mein Display habe ich in 23*8 = 184 Planquadrate unterteilt. Welches Feld berührt wurde, wird aus den AD-Wandler Messwerten berechnet. Im wesentlichen ist es eine Multiplikation und ein Division. Das dauert unabhängig davon wo die Berührungsstelle liegt etwa 50usec. 5 x 7 = 35 Planquadrate gingen natürlich auch. In C habe ich leider nichts, das Prinzip sollte aber auch in C gut realisierbar sein. Kurze Beschreibung: Beitrag "Re: Display mit Touchscreen bei Pollin?" Gruß allu
Gast
#1694472
Recht vielen Dank an Alex D. (allu) Prima Lösung. Teilprogramm läuft schon. MfG
Nicolas M. schrieb: > Hallo, > > ich habe nochmal eine Frage an die Profis hier: Ich kann mit der > Funktion von Benedikt, zum "springen" zu einer Adresse im Display: > > ..nur bis zur Zeile 7 springen danach geht es nicht mehr, bzw. wird ab > hier dann nichts mehr geschrieben =( Wenn ich aber keine Zeile anwähle > sondern einfach nur wild aufs LCD drauf los schreibe schreibt er sauber > das ganze Display voll aufgrund des inkrementieren um 1 je Datensatz. Kann mir hier vielleicht nochmal jemand helfen =( ? LG Nico
Gast
#1698183
könntest du mir bitte einmal alles was du über das Display schon hast geben, denn ich habe auch dieses Display und den PIC 18F4550 und ich schaffe es einfach nicht das Display anzusprechen. Also wenn du mir helfen könntest wäre das super lg Johannes :)
Hi, na klar! Alles im Anhang.. Würde mich dann brennend interessieren ob du in die unteren Zeilen springen kannst...
Gast
#1698266
Danke :)
Gast
#1698277
Danke :) ja, ich werd mir das mal anschaun
Wenn irgendwas unklar ist kannst du einfach fragen. Hoffentlich funktioniert es bald =) dann kann ich das Display endlich voll ausnutzen! Hehe
Hallo Nicolas. Könntest du vielleicht auch eine Anschlussbelegung mit posten. Ich habe selber auch noch einige dieser LCD's rumliegen und würde sie gerne nutzen. Wahrscheinlich steht irgendwo oben auch welcher Schaltplan du benutzt. Es wäre aber trotzdem nett, wenn du den noch einmal hochladen könntest. Ein Bild davon würde mir schon reichen. besten dank und schöne grüße
Hi, hier: GLCD_RES LATBbits.LATB0 GLCD_RS LATCbits.LATC2 GLCD_RW LATCbits.LATC7 GLCD_E LATCbits.LATC6 GLCD_Data LATD edit: Und natürlich das Potentiometer (100K) zwischen Vdd und Pin 17 sowie den Schleifer an Pin 3!
Hi! Und wo hängt bei dir der Touch dran. Das wird aus der Beschreibung nicht ganz ersichtlich. Wenn ich deinen Code richtig verstehe müssten das dann Oben LATEbits.LATE0 Unten LATBbits.LATB3 Rechts LATBbits.LATB4 Links LATBbits.LATB5 sein. Gibt es einen Grund warum du Oben nicht auf LATB6 gesetzt hast? Spricht irgendetwas dagegen es dahingehend zu ändern, weil ich sehe da grade keinen Grund.
Hallo zusammen, ich musste eben feststellen das mein Display DG-16080 den Geist aufgegeben hat. Den größten Schock habe ich jedoch bekommen als ich bemerkt habe das Pollin keine mehr auf Lager hat. Hat jemand ein oder zwei Stück übrig bei denen auch der Touch funktioniert? Wäre bereit 20€ für beide zu zahlen. Bzw.10€ für eins. MfG Max
@Marco: Nein gibt keinen besonderen Grund!
Ich muss leider nochmal ganz dumm fragen, wafür genau ist die EL Drive Voltage und muss diese angeschlossen werden?
Hat sich erledigt das Ganze. Ich habe leider etwas auf dem Schlauch gestanden. Die Geschichte hat sich damit dann erstmal erledigt, ich werde mir die Tage erstmal einen Inverter besorgen gehen.
@Max hier gibt es das Display auch: http://www.neuhold-elektronik.at/catshop/product_info.php?products_id=3305
Also im Textmode funktioniert es jetzt bei mir zu 100% allerdings kann ich im Grafikmodus immer noch nicht richtig arbeiten... =( Man springt zu den Adressen doch in beiden Modis gleich oder? Also durch verändern der Cursor Adresse, oder nicht? Übrigens im Textmodus war die Busy Abfrage fehlerhaft kp warum habe sie einfach mal durch eine Schleife ersetzt! LG Nico
Nicolas M. schrieb: > Also im Textmode funktioniert es jetzt bei mir zu 100% allerdings kann > ich im Grafikmodus immer noch nicht richtig arbeiten... =( was geht nicht ?? > Man springt zu den Adressen doch in beiden Modis gleich oder? > Also durch verändern der Cursor Adresse, oder nicht? ja, aber in Y-Richtung adressierst du nur eine Pixelzeile und nicht ein ganzes Zeichen, das selbst aus n-Zeilen besteht. Und in X-Richtung must du dafür sorgen das ein Byte auch 8Bit breit ist, sonst wird's mist. > Übrigens im Textmodus war die Busy Abfrage fehlerhaft kp warum habe sie > einfach mal durch eine Schleife ersetzt! die Busy-Abfrage ist von der Betriebsart unabhängig. Sascha
Hi Sascha, ok also wie gesagt Textmode klappt! Im Grafikmodus allerdings nichts so richtig. Ich habe eigentlich das meiste fürs Display aus der Bibliothek von Benedikt. Also ich initialisiere das GLCD für den Grafikmodus so:
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 | |
dann wird das Display einmal gelöscht:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
die Adresse wird dabei über die Funktion ausgeführt:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Die habe ich z.B. auch von Benedikt übernommen verstehe sie aber kaum, bzw. verstehe ich das System vom Display nicht wie wird die Adresse eigentlich eingestellt. Der cursorcounter ist ja 16bit 0 bis 65535 und das Display hat 160x80=12800.. wie wird das jetzt gesteuert? Nagut und so versuche ich dann ein Pixel zu setzten:
1 | |
mit der Funktion:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Aber bei dem Versuch wird dann ein Pixel ganz oben und ca. 8-9 pixel von links gesetzt... häää? LG Nico
Hi also die Addressierung in der X Achse klappt wohl aber ich komme nicht nach unten (Y)... =(
Nicolas M. schrieb: > Hi also die Addressierung in der X Achse klappt wohl aber ich komme > nicht nach unten (Y)... =( Hallo Nicolas! Beim vergleich meiner INIT mit deiner ist mir aufgefallen das du sowas machst..
1 | |
2 | |
3 | |
4 | |
5 | |
Wozu soll das gut sein? Lass das einfach mal in deiner INIT weg und versuche es ohne den Zeilen! Den Code brauchst du erst später für:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
MfG Tony
Ich benutze übrigens
1 | |
und du
1 | |
und die lcd_writedat und lcd_writecom sehen so aus
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Hi Tony, ich habe die Init mal geändert hat nichts verändert. Auch das austauschen von int gegen short ändert nichts. Und meine Funktionen writecom und writedata sind identisch zu deinen! Mh.. Weitere Tipps?
Nicolas M. schrieb: > Mh.. Weitere Tipps? Hallo Nicolas! Um eine genaue Analyse zu machen, schick doch einfach mal deinen gesamten code! Dann kann ich vielleicht helfen. MfG Tony
Hatte ich oben schon mal gepostet aber hier nochmal... LG Nico
Gast
#1706238
Hi Leute! Ich hab folgendes Problem mit dem Display, das wir ja hier alle zu haben scheinen... Hab die Schaltung auf einem Steckbrett so weit aufgebaut... Mit einem Atmega88 funktioniert das ganze auch einwandfrei (Data: D0-D7, Ctrl: PB0-2). Sobald aber ein Atmega32 ins Spiel kommt, scheint das Display die beine Breit zu machen... Es funktioniert einfach nicht. Egal auf welchen Pins an welchem Port... Es will einfach nicht. Ich hab gelesen, dass sobald PortC verwendet werden will man die JTag Fuses deaktivieren soll. Hab ich gemacht... Gut, ich muss jetzt nicht zwangsweise PortC verwenden, Aber es funktioniert genauso wenig mit PortB und PortA. Habt ihr vielleicht irgendeine Idee? Der AVR läuft noch mit factory 1MHZ... aber daran wird es ja wohl nicht liegen, oder? Zum Glück hatte ich noch nen kleinen AVR rumliegen, sonst wüsst ich nicht mal, dass es nur mit dem 32er nicht geht... Immerhin :) Habt ihr Ideen? Grüße Armin
Hallo Armin, bei deinem ATmega32 könnte es nicht zufällig ein Problem mit der JTAG Fuse und PortC sein ? Gruß Dirk
Gast
#1706251
Hey Dirk! Danke für deine Antwort! Nein, da kann es kein Problem geben. Aber das steht ja schon in meinem letzten Post... es ist wie verhext :) Grüße Armin
Gast
#1706364
Hi! Ihr dürft mich jetzt steinigen! Datenbus vertauscht... shame on me. es geht :) Grüße Armin
Armin schrieb: > Datenbus vertauscht... shame on me. es geht :) Morgen! Hätte mich auch gewundert wenn es nicht geht! Ich benutze ja schließlich auch einen Atmega32! @Nicolas Ich hab deinen Code mal angeschaut, ich finde eigentlich keinen Fehler in der Soft! Ist soweit identisch mit meiner. Ich kann mir nur vorstellen das da irgendwas mit dem Timing nicht stimmt oder der Compiler was weg optimiert! Da ich leider keine PIC programmiere, kann ich auch nicht viel testen. MfG Tony
Gast
#1707551
Hi Tony, trotzdem danke! Also ich benutze den C18 Compiler von Microchip und den PIC18F4550 mit 20Mhz Taktung. Wie gesagt im Textmode funktioniert das Display wunderbar nur im Grafikmodus funktioniert die Y Adressierung nicht. Ich hoffe es gibt noch jemanden der mir helfen kann. LG Nico
@Nicolas setze in deiner INIT für GFX-Mode mal die Auswahl der Betriebsart (CMD 0x00) an den Anfang der Initroutine und nicht ans Ende! Nicht das dadurch irgendwelche Werte die du vorher einstellst verworfen werden. Sascha
Hi! Hab mich hier jetzt angemeldet... Hier mein Source... is mehr oder ne kleine Techdemo mit nem kleinen Menue... Alles einfach mal reingehackt... vielleicht hilft es ja jemanden weiter. Grüße Armin
Hallo! Ich habe mir auch noch 3 von diesen Displays ergattert (Bei Pollin gibts die ja im Augenblick nicht mehr :-O ). Ich habe das mittlere Modell im Bild oben bekommen. Zwischen den beiden Touchscreen Pins messe ich jeweils so ca. 300 und 600 Ohm. Zwischen den anderen beiden, ohne Berührung unendlich Ohm, bei Berührung ändert sich der Wert dementsprechend. Ich denke das der Touch funktioniert, oder? Und wenn ich das GLCD an die 5V Versorgungsspannung hänge, leuchten auch alle Pixel, es hat also soweit ich das beurteilen kann keine Zeilen die fehlen oder so. Ich habe folgende Hardware aufgebaut um meine Displays zu testen. (Schaltplan oben) Ist der gleiche Schaltplan wie in Benedikt weiter oben schon mal gepostet hat. Dann habe ich in einen neuen ATmega8 verschiedene der oberen Assembler-Testprogramme geladen (z.B.: "dg16080.hex" von Benedikt), aber so bald das Programm geflasht ist, erlöschen alle Pixel auf dem Display und dann tut sich gar nichts mehr! (Bei den meisten oberen Testprogrammen sollte man da ja dann was zeichen können) Wenn ich das Programm dann wieder vom mega lösche, leuchten wieder alle Pixel. Habe es auch mit einem oberen Programm, wo eigentlich nur Text angezeigt werden sollte, probiert geht aber auch nicht! Nun weiss ich nicht was ich falsch mache. Habe ich vielleicht was im Schema vergessen, oder muss ich irgend was machen wenn ich nen ATmega zum ersten mal brenne(habe noch nicht so viel Erfahrung mit uCs, binns am erlernen, aber ich will eben diese GLCDs mal schnell testen)? Ich hoffe es kann mir einer helfen. Gruss und gute Nacht ;-) Michi
Haste den Kontrast richtig eingestellt?
tach, ich hab da man ne Frage und zwar habe ich grade den Code 2 postings über mir runtergeladen und bin nu am verdrahten des Atmegas32, wie muss da die Beschaltung von RES und CS sein, davon steht im Code ja nichts beschrieben? Gruß
Gast
#1710457
Hi! Diese Leitungen hab ich auf feste Pegel gelegt... Reset ist low aktiv, also auf 5V und CS auf GND... Aber das kannst du auch im Datenblatt selbst nochmal nachsehen! Grüße Armin
Ja den Kontrast habe ich richtig eingestellt. Wenn der mega kein Programm geflasht hat, leuchtet jedes Pixel und ist gut zu erkennen. Ich habe auch schon wärhrend dem Programmablauf am Kontrastpoti herumgedreht, aber es tut sich einfach nichts! Ich denke mal dass ich es richtig verdratet habe, so wie im Schema, vielleicht ist es ein Softwarefehler? Gruss Michi
weil im Datenblatt steht, dass beide aktiv low sind. Aber dann mache ich das so wie du Res aktiv low und Cs aktiv high Gruß
@Michael Sutter: Also wenn selbst das "dg16080.hex" von Benedikt bei Dir nichts anzeigt, dann passt was anderes nicht. Weil die Datei funktioniert wunderbar. Von Deiner Beschreibung her, würde ich sagen, dass die HW auch in Ordnung ist. Ich tippe dann mal eher auf die Fuses. Hast Du auch den internen RC-Oszillator (und kein externes) auf 8MHz eingestellt? Die XTAL-Anschlüsse werden ja für das Display benötigt.
@Michael Sutter: Anbei mal ein Screenshot von den Fuse-Einstellungen... Überprüfe Deine doch einfach mal...
@ Armin Sch. Wie ist das denn mit den Datenleitungen, da hast du doch von Db0 bis Db7 alle auf den Port D 0 bis Port D 7 gelegt oder ? Gruß
Nein an den Fusebits habe ich nichts verstellt. Muss ich dann zuerst das Programm in den ATmega laden und dann diese Fusebits setzten oder? Wie stelle ich denn die Fuse-Bits bei PonnyProg richtig ein? Und was bedeutet HW? Gruss Michi
:-) HW = Hardware; damit meinte ich Dein Display ;-) Was PonnyProg angeht, kann ich Dir leider nicht helfen, da ich eben AVR-Studio benutze. Ich glaube, da muss man immer "invertiert" denken. Aber da kann Dir mit Sicherheit jemand anderes hier weiterhelfen. Prinzipiell würde ich jetzt vom Bauchgefühl her sagen, dass man zuerst die Fuses richtig setzen sollte; kann aber sein, dass das - vorallem bei dem Projekt hier - auch egal ist. EDIT: Schau mal hier: http://halvar.at/elektronik/kleiner_bascom_avr_kurs/fusebits_standard/ Das sollte weiterhelfen :-) Da ist ein Screenshot speziell für 8MHz interner RC-Oscillator. Keine Ahnung, ob das noch aktuell ist, aber klicke zuerst auf Read, dann ändere und dann auf Write
Vielen vielen Dank!!!! Es funktioniert nun! Ich habe die Fusebits nun so wie auf deiner verlinkten Seite gesetzt. Und noch ein wenig am Kontrast geschraubt, wahr anscheinend doch nicht ganz richtig. --> und siehe da es funktioniert! Gruss und DANKE! Michi
Sascha Weber schrieb: > @Nicolas > > setze in deiner INIT für GFX-Mode mal die Auswahl der Betriebsart (CMD > 0x00) > an den Anfang der Initroutine und nicht ans Ende! > Nicht das dadurch irgendwelche Werte die du vorher einstellst verworfen > werden. > > Sascha Hat leider nicht geholfen =( LG Nico
Stefan Feismann schrieb: > @ Armin Sch. > > Wie ist das denn mit den Datenleitungen, da hast du doch von Db0 bis Db7 > alle auf den Port D 0 bis Port D 7 gelegt oder ? > > Gruß Genau.
Gast
#1712901
@ Armin Sch. Und zwar hab ich mal eine frage bezüglich der grafikausgabe: Und zwar wenn ich Cursortasten selber erstellen will und dann mit image2Code umwandle und auf dem Display ausgeben will ( z.B. ein einfaches Viereck 30x30 ) erscheint wohl ein teil, aber der untere teil des Vierecks scheint zu fehlen. Woran kann das liegen? Gruß Stefan
Thorsten schrieb: > @ Armin Sch. > > Und zwar hab ich mal eine frage bezüglich der grafikausgabe: > > Und zwar wenn ich Cursortasten selber erstellen will und dann mit > image2Code umwandle und auf dem Display ausgeben will ( z.B. ein > einfaches Viereck 30x30 ) erscheint wohl ein teil, aber der untere teil > des Vierecks scheint zu fehlen. > Woran kann das liegen? > > Gruß Stefan Hi! Ja das Problem kenn ich... das Problem ist meine Funktion um diese Bitmaps auszugeben. Ich gebe immer ein Byte aus. D.h. mit dieser Funktion muss die Breite ein vielfaches von 8 sein... also mach das bild 32x30 gross, dann is alles gut :) Ich wollte mich eh mal ransetzen um eine neue Funktion schreiben, die auch andere Breiten als x*8 kann... Aber hab momentan dazu keine Zeit. Geht alles andere denn? Grüße Armin
Gast
#1713090
Ja echt super Programm hätt ich niemal hinbekommen ^^ hab schon ein eigenes Menü und alle sowas erstellt und durch deine Funktionen scheint alles klar und deutlich wie man das anstellen kann Wenn ich mal fragen darf wie lange hast du da dran gesessen ? Gruß
Thorsten schrieb: > Ja echt super Programm hätt ich niemal hinbekommen ^^ > hab schon ein eigenes Menü und alle sowas erstellt und durch deine > Funktionen scheint alles klar und deutlich wie man das anstellen kann > Wenn ich mal fragen darf wie lange hast du da dran gesessen ? > > Gruß ka.. n tag halt zwischen uni und schlafen :)
Hallo, habt ihr noch Dipslays, die ihr zum angemessenen Preis loswerden wollt, ich bräuchte noch welche ?? Gruß Stefan Feismann
Ich brauch auch noch ein oder zwei, die hälfte (1 von 2) geht ned, Umtausch, wegen haben keine mehr, nicht möglich........ oder nen Tip für ein anderes Bezahlbares GLCD mit Touch
Gast
#2262804
Joa, gibts denn jetzt noch Displays irgendwo im netz?! Oder eben ähnliche um den Preiß?! Vllt auch bissle teurer?
Gast
#2263304
hat jetzt jemand noch eins?!
lcdler schrieb: > hat jetzt jemand noch eins?! hab noch eins hier, komplett funktionsfähig. Ist eins wo die Beleuchtung den Hintergrund beleuchtet und die Pixel immer schwarz erscheinen - ist vom Kontrast nicht so besonders. zum Pollin Preis + VP&Porto abzugeben - bei Interesse PM Sascha
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
















