Hi, ich hab ein kleines Problem: Das EA DOGM132 kann man über SPI ja nicht auslesen. Wie mache ich nun am geschicktesten die Diaplayverwaltung? Mir würden spontan diese Dinge einfallen (Page = 8Bit-Teil einer Spalte): - Kein DisplayRAM, einfach jede Page schreiben (Nachteil bei Page- übergreifenden Operationen, deswegen eher nicht) - DisplayRAM als Byte Array "usigned char vram[4][132]" - DisplayRAM als 32bit Long Array "usigned long vram[132]" Auch beim Beschreiben tu ich mir mit dem Konzept etwas schwer: - Nach jeder Grafikoperation den geänderten Teil erneut schreiben (zusätzliche Rechenzeit zum Berechnen dieses Teils) - Nach jeder Grafikoperation einfach den gesamten Bildschirm neu schreiben - Feste Wiederholrate, in einem 10Hz (z.B.) Intervall das Display komplett neu schreiben, Timer wird vor einer Grafikoperation ausgeschaltet, und danach wieder eingeschaltet. Es sollte auf Geschwindigkeit optimiert sein, Platz hab ich mit nem Mega64 (zur Not 2561) genug. Danke
Ciao Christoph Ich habe bereits ein 64x128 Display von dieser Serie Angesteuert. Ich habe auf dem Microcontroller ein Array erstellt, welches 8x128 8bit Integerzahlen speichert. Je nach uC könnte das Probleme geben, da die Kapazität nicht ausreicht. Item. Ich habe bei jeder Displayänderung das Displayarray gelöscht und neu beschrieben. Danach via SPI an das Display übermittelt. Ist zwar etwas unschön, da man nur den zu ändernden Teil umschreiben müsste, aber ich war unter Zeitdruck und wollte das so schnell und einfach wie möglich beenden. Das mit den 10Hz würde ich dir abraten, da mindestens eine frequenz von 25Hz benötigt wird, damit das menshcliche Auge kein Flackern erkennt. Ich weiss nicht ob dir das geholfen hat. Ich aber hoffe es. mfg
Hi, danke für Deine Antwort... Wenn ich 132x4 bytes übertragen will, dann sind das 528 Bytes, bei 4MBit macht das theoretisch 950 Aktualisiserungen / Sekunde :) das sollte also mit 25Hz gehen, ich hab dann nur mit Interruptjitter zu kämpfen, die MCU soll ja nebenher was anderes auch machen (soll ein wecker werden). Und vom RAM her ist in nem AtMega64 genug Platz, und den VRAM zu realisieren... Wie hast Du das gelöst, wenn du zB einen Text ausgeben willst von y=4 bis y=12 also über 2 Bytes/Pages? Denn wenn ich ein Array von 132 Longs (32bit) hätte, dann könnte ich "einfache" Shiftoperationen machen, sonst müßte ich das von Hand in C programmieren und das wird bestimmt nicht so schnell, wie die nativen Compilerfunktionen, oder? Bye, Chris
Hallo, ich weiß nicht ob dir diese Info was hilft. Aber ich habe ein 2x16 DOG Display dieser Serie. Mein Display-Treiber ist in C für einen MC9S08QE128 geschrieben (target eigentlich egal..) In einem Teil meines Systems muss ich zur Anzeige eines Test-Sequenz Fortschritts, die aktuelle Schritt Nummer auf dem Display anzeigen. Z.b: 1. Zeile "Pruefsequenz run" 2. Zeile" Step: 001 / 230" Ich merke mir einfach die Start x Position meiner zu aktualisierden Zahl in diesem Fall der Bereich wo "001" steht und ueberschriebe diesen Bereich zyklisch, in dem ich den internen AdressCounter genau auf diese Display-Adresse setzt und dann die Zeichen inkrementell von dort aus ausgebe... ist der schnellste Weg... die Schritte brauchen minimal eine Dauer von 10 ms(!) -- also 100 Hz, dies ist aber ein Problem für mein Display, da dies die Daten so schnell über SPI nicht verarbeiten kann (380 kHz SPI Baudrate - trotz Wartezeit).. deshalb gebe ich nicht jeden Zwischenschritt aus... ist für das Auge sowieso nicht sichtbar... beispielsweise.. gebe ich nur alle 100 ms eine Wert-Änderung aus.. 10 Hz.. und wegen Flackern... Helligkeitsintensitätsänderungen unter 50 Hz (Fernsehbild) nimmt das Auge als flackern wahr.. Was mir aber aufgefallen ist: Wenn ich die Lichtintensität meines Displays auf maximum stelle (habe eine pwm-display dimm schaltung eingebaut) dann werden "häufige" Änderungen des gesamten bildschirms eher als "fleckige" oder "unsaubere" pixel sichtbar.. also ein komplettes Zeichen mit nur einsern.. wird nicht sauber aktualisiert... während der aktualisierung entstehen "schmutz" effekte.. wie gesagt ist das aber nur bei voller aussteuerung der helligkeit sichtbar... viele grüße sebastian
Also ich habe alles in C geschrieben. Für den Text musst du Arrays machen mit jedem Buchstaben (es ist zu Empfehlen wenn du sie nach ASCI-Zahlen anordnest). Danach musst du eine Subroutine erstellen in der du mit einer for-schlaufe an einem beliebigen Ort den Wert in dem Array des Buchstabens in das Displayarray überspielst. Du kannst natürlich auch mit pointers arbeiten, ist aber schwieriger. Einfachste Formen wie eine Gerad oder ein Rechteck sind auch ziemlich simpel. wenn du aber dann eine schräge Linie erstellen willst, wird das ziemlich aufwendig, also zeitlastig. Wenn du das Programm mit zusätzlichen Interrupts Arbeiten lässt, ist das im Grunde ja kein Problem, da nach dem Interrupt an der gleichen Position weitergearbeitet wird. Was sollte den dein Display anzeigen? Eine analoge uhr, oder eine Digitale? Bei beiden sollte eigetlich ein Update von 1s reichen. dann ist es kein Flimmern mehr das Kopfschmerzen verursacht (was am Morgen beim ersten Blick auf den Wecker unschön wäre, wer will schon so den Tag beginnen? :)), sondern ein leichtes hüpfen. Und so ein schreibvorgang dauert ja auch nicht alle Welt, da sollte es ausreichen, wenn du alle 40ms kurz ein Update rüberschickst, und bei einer änderun das array auf den neusten Stand bringst. Wenn du das so machst, würde ich aber nur wenige bis keine Interrupt-Serviceroutinen verwenden, weil es dann ziemlich unübersichtlich wird. Ist ein wenig ein gestuss. wenn du nach kommst dann freut es mich :D mfg
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.