Forum: Projekte & Code KS0108 GLCD Routinen


von Klaus W. (mfgkw)


Lesenswert?

Genauso viel wie mit der Frage.

Genau genommen sogar deutlich mehr.
Es stecken nämlich folgende Weisheiten darin:
1. man kapert nicht für ein neues Problem alte Threads
2. Ein Quelltext, von dem die Hälfte fehlt, ist nichts wert
   (von der fehlenden Foramtierung hatte ich gar nichts erzählt)
3. weil es evtl. um ein fehlendes volatile geht, steht die
   Lösung vielleicht im Tutorial, das man gerne lesen darf,
   bevor man fragt.

von NochEinGast (Gast)


Lesenswert?

Versteh zwar immer noch nicht was das mit sei() zu tun habe könnte, aber 
jetzt hab ich zumindest einen Ansatz.

von Gast (Gast)


Lesenswert?

Tutorial:

#include <avr/interrupt.h>

von lcd17 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe auch das 128x64 Display von Pollin. Für erste Tests habe ich 
die Lib von Ape verwendet. Das klappt soweit auch ganz gut. Leider 
bekomme ich mehr oder weniger zufällige Pixelfehler und/oder ganze 
Verschiebungen der Schrift, wie auf dem Bild zu sehen.

Woran kann das liegen? Ist bei jemanden schon mal das selbe Problem 
aufgetaucht?


Vielen Dank schon mal

von Klaus W. (mfgkw)


Lesenswert?

Klaus Wachtler schrieb:
> 1. man kapert nicht für ein neues Problem alte Threads

von lcd17 (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Klaus Wachtler schrieb:
>> 1. man kapert nicht für ein neues Problem alte Threads

Ja aber dieses Thema befasst sich doch mit der Lib von Ape. Warum sollte 
ich ein neues Thema starten, wenn sich mein Problem GENAU darauf 
bezieht??????

Zurück zum Thema: Hat jemand schon ähnliche Erfahrungen mit der Lib von 
Ape gemacht?

von Klaus W. (mfgkw)


Lesenswert?

lcd17 schrieb:
> Warum sollte
> ich ein neues Thema starten, wenn sich mein Problem GENAU darauf
> bezieht??????

Weil es nichts mit der Originalfrage zu tun hat.
Oder hast du zur Originalfrage einen sinnvollen Beitrag?

Und es gibt auch hier Spielregeln, in denen so etwas steht.

von Android (Gast)


Lesenswert?

Servus,

hat jm von euch schon mal das Datenbyte auf PortB des ATMega32 gelegt? 
es geht alles, nur leider das Programmieren per ISP nicht mehr....

Habe dann Widerstände zwischen µC und den betroffenen Datenleitungen 
gesetzt:

MISO braucht keinen Widerstand.
SCK 2,2kOhm
MOSI 2,2kOhm

Nun geh das Programmieren fehlerfrei...jedoch leuchtet Zeile 6, 14, 22, 
... dauerhaft....???

Es scheint am MOSI Pin zu liegen...Gehe ich allerdings mit dem 
WIderstand herunter geht die Programmierung wieder nicht mehr :(


WAS TUN???

von holger (Gast)


Lesenswert?

>Es scheint am MOSI Pin zu liegen...Gehe ich allerdings mit dem
>WIderstand herunter geht die Programmierung wieder nicht mehr :(

Mach 10k Pulldowns an die CS Pins.

von Android (Gast)


Lesenswert?

holger schrieb:
>>Es scheint am MOSI Pin zu liegen...Gehe ich allerdings mit dem
>>WIderstand herunter geht die Programmierung wieder nicht mehr :(
>
> Mach 10k Pulldowns an die CS Pins.

Das hat funktioniert! Danke!!!

Fehlt nur noch die Erklärung warum dies so ist?

von Adam P. (adamap)


Lesenswert?

hallo zusammen,

habe mein tg12864b-13 display funktionsfähig vor mir liegen, soweit ist 
ja auch alles schön und gut...nun zu meiner frage:

gibt es eine möglichkeit erst die daten in das display ram zu laden und 
dann erst die ausgabe zu aktivieren.

einfaches bsp.: ein "fillrect" zeichen
jedes pixel wird einzeln in das ram geschrieben, wenn das rechteck im 
ram vollständig ist, dann erst ausgeben.

wenn ich das datenblatt des ks0108 richtig verstanden habe, dann ist das 
data latch für das dauerhafte anzeigen zuständig und das display data 
ram zum zwischenspeichern (oder auch zum vorladen)?!

ich möchte damit verhindern, dass ein objekt ausgegeben wird obwohl es 
noch nicht vollständig ist.

hoffe ihr könnt mir da helfen.

gruß
adam

von Wolfgang S. (bluenature)


Lesenswert?

Wie Du schon erkannt hast, es bei der Abtastung aus dem RAM das Display 
ständig aufgebaut, also jede Änderung eines Bytes im RAM ist sofort 
aktiv. Da es keine 2 Pages direkt gibt, kannst du es daher auch nicht 
direkt RAM-Pages switchen.
Es gibt nur eine Möglichkeit den Aufbau zu beschleunigen. Dazu muß man 
im ansteuernden µC ein simultanes RAM-Abbild schaffen. Dieses beschreibt 
man direkt und schickt in gewissen Zeitintervallen bzw. Ereignissen auf 
schnellstem Weg alle RAM-Daten in den Display-RAM. Verhindert Flimmern 
und langsamen Bildaufbau. Kostet aber einiges an RAM (Pixelzahl / 8 
Bytes), was sich aber im Ergebniss auszahlt, wenn dies gefordert ist.

Grüße Wolfgang

von Adam P. (adamap)


Lesenswert?

nun gut, das mit dem ram abbild ist natürlich eine gute idee, doch mehr 
als 1 byte kann ich doch dann trotzdem nicht aufeinmal übertragen, 
sprich das flimmern würde sich evtl. verringern.
oder habe ich dich da falsch verstanden?

von Wolfgang S. (bluenature)


Lesenswert?

Mehr als ein Byte bekommst du parallel je Enable-Takt eh nicht in den 
Display-RAM geschrieben. Wenn du das Ganze jedoch optimal programmierst 
kommst du locker unter 1ms je Transfer weg (Schau dir dazu die 
Pixel-Zeit im Datenblatt einmal näher an). Zudem sind selbst bewegte 
Animationen alle 20ms (50 Frames/Sek) weitaus ausreichend. Da wird dir 
das Display so oder so einen Streich spielen, da die Pixel im Wechsel 
nicht so schnell hinterherkommen und du daher Schlieren sehen wirst. Von 
diesem Aspekt aus ist diese Methodik weitaus angemessen anzusehen.

kurz die Fakten:
----------------
- Direktes Arbeiten im µC-RAM vereinfacht viele Aktionen, da man direkt 
ohne dauerndes Lesen im Display-RAM im µC-RAM die Aktionen und 
Bitoperationen ausführen kann.
- Der Transfer muß eh stattfinden, ob du ihn nun auf einen Rutsch oder 
gestückelt im Algorithmus überträgst ist daher eher unwesentlich.
- RAM-Pages kannst du auf diese Weise auch einfach bauen, einfach 2. 
Array anlegen und hast es schon (so viele wie der µC-RAM reicht).
- Optimierungen der Übertragungen kannst du auch durchführen. Einfach 
Nur Bereiche übertragen die auch geändert wurden (am idealsten 
rechteckiger Bereich). Da sind deiner Kreativ kaum Grenzen gesetzt.
- Aktualisierungen auf diese Weise bei diesem Display sind unter 70ms 
kaum merklich optimaler.
- Viel Erfolg...

Grüße Wolfgang

von Adam P. (adamap)


Lesenswert?

danke erstmal :)

hab noch eine idee, nur bin ich mir nicht sicher ob das evtl. ein 
falscher weg ist:

ich dachte mir, man könnte einen zähler benutzen, der bei überlauf ein 
interrupt auslöst (z.b. jede 40ms).
sollte zu diesem zeitpunkt ein flag gesetzt sein, das ein neuzeichnen 
signalisiert, werden die neuen daten ans display gesendet.

damit hätte ich einen festen zeitpunkt zu dem das neuzeichnen bzw. 
abändern geschieht. frage mich jedoch ob das überhaupt sinnvoll ist.

gruß
adam

von Wolfgang S. (bluenature)


Lesenswert?

Macht man meist so, ist kein Fehler. Nur sollte das Bild natürlich 
komplett aufgebaut sein zum übertragen. Hast du keien freien 
Timer-Interrupt? Würde ebenso genügen...

Grüße Wolfgang

von Adam P. (adamap)


Lesenswert?

klar...
im moment habe ich noch alles frei, soweit.
hab mir nun überlegt, eine eigene library zu schreiben, mit ram-abbild 
usw.
bis ich die frei verfügbaren lib's angepasst habe, vergeht genau soviel 
zeit :)

aber dann werde ich das direkt so auslegen, dass es mit dem timer 
zusammen passt - weis ja nun, dass die idee garnicht so schlecht war.

danke

gruß
adam

von kruemeltee (Gast)


Lesenswert?

Ich habe hier gerade den FontCreator offen und versuche eine Font aus 
einer vorhandenen zu erstellen. Am liebsten windings/webdings aus einer 
.ttf Datei. Leider kam ich da nicht weiter, weiss jemand von euch, ob 
und wenn ja, wie das geht?

von michael (Gast)


Lesenswert?

hi! ... actually i using your library in my proyect, but i have a doubt 
about that, what is the conection for PIN RESET?

von Corny (Gast)


Lesenswert?

Die Lib scheint ziemlich broken zu sein. Bei mir kommen nur warnings und 
errors beim compile-versuch:

(Long Version: http://pastebin.com/3U3DPL41 )

Short Version:

> avr-gcc --version
avr-gcc (GCC) 4.8.2

> uname -a
Linux foo 3.10.22-1-MANJARO #1 SMP Wed Dec 4 22:15:26 UTC 2013 i686 
GNU/Linux



... glcd_ks0108_v11/ > ls
arial_bold_14.h  corsiva_12.h  ks0108.c  ks0108.h  ks0108Test.c 
makefile  readme.txt
> make


In file included from ks0108Test.c:16:0:
arial_bold_14.h:48:16: error: variable 'Arial_Bold_14' must be const in 
order to be put into read-only section by means of 
'__attribute__((progmem))'
 static uint8_t Arial_Bold_14[] PROGMEM = {
                ^
In file included from ks0108Test.c:17:0:
corsiva_12.h:48:16: error: variable 'Corsiva_12' must be const in order 
to be put into read-only section by means of '__attribute__((progmem))'
 static uint8_t Corsiva_12[] PROGMEM = {
                ^
..............
                ^
ks0108.h:97:16: warning: inline function 'ks0108ReadData' declared but 
never defined [enabled by default]
makefile:376: recipe for target 'ks0108Test.o' failed
make: *** [ks0108Test.o] Error 1
>

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.