Anbei die geänderte Version für den ATMega8, bei dem nun Timer0 vorgeladen wird.
Es handelt sich aber noch um ungetesteten Code für das ursprüngliche Display, sollte also erst getestet werden ob's auf dem überhaupt hinhaut, sowohl von der prinzipiellen Code-Funktion, als auch mit der Ausgabe jeweils 1 Linie pro ISR-Aufruf.
Sobald das dort läuft, kannst Du die Änderung
selbst in der .S vornehmen, oder C-Beispielcode einstellen, dann schau' ich's mir an.jedes Frame wechselt M zwischen high und low. (1.Frame high | 2.Frame low | ...)
Leider musste meine Kalkulation für den Zähler-Topwert über das #define in der .h über Bord gehen. Der GCC hatte kein Problem damit, aber der GNU Assembler war nicht dazu zu bewegen die Rechnung aufzulösen.
top_val muss also nun selbst ausgerechnet werden, ist für 75Hz bereits erledigt, bei dieser Wiederholrate sind noch ungefähr 27% der Prozessorleistung für anderen Code verfügbar.
Danke für die ganze Arbeit.
Inzwischen überfordert mich Dein Code komplett
Er funktioniert trotzdem tadellos.
Er lässt sich auch am neuen Display testen, allerdings verblasst das Bild nach ein paar Sekunden, daran ist aber M schuld.
Soweit ich das mitbekommen hab, ändert M die Polarität der Kristalle und hält so den Kontrast aufrecht, deswegen der ständige Wechsel.
Die Ansteuerung ist sehr einfach. Nach jedem Frame wird gewechselt.
Ich habe dafür noch den übrigen Port genommen um den original Code nicht ändern zu müssen. M hängt an Pin D0.Code:PORTD=~PORTD;
Meine Pixelfehler waren ein gelegentlicher Kurzschluss zwischen D1 und D2...
Bitte. Ich fand's natürlich interessant, auch wenn die einfach zu versorgenden Displays nicht mehr erhältlich sind.
Um es in eine .S auszulagern, war der Umbau komplett auf Assembler notwendig.Inzwischen überfordert mich Dein Code komplett
Prima.Er funktioniert trotzdem tadellos.
Ich hatte mich nicht mit der eigentlichen Funktion des Displays auseinandergesetzt, sondern nur Deinen Beispielcode umgesetzt.Die Ansteuerung ist sehr einfach. Nach jedem Frame wird gewechselt.
D.h., wenn Du einen funktionierenden Code einstellst, an dem ich sehe wann genau M kommen muss, dann ist's für mich am einfachsten danach meinen Code zu ändern.
Sind auf dem Kontrollport PORTB noch Pins verfügbar ?
Ich habe fix mal einen Code fetig gemacht.
M liegt mit auf PortB, Pin B3 um genau zu sein.
Läuft mit 114,6 Hz bei -O1.
Die Versorgung mit den +23V ist doch kein Problem mit einer Spannungspumpe.
edit: Natürlich meine ich eine Ladungspumpe![]()
Geändert von MisterMou (01.05.2012 um 19:24 Uhr) Grund: B4 nach B3 umbenannt
Du meinst sicher eine Ladungspumpe.![]()
Grüße,
Daniel
Laut Deinem Code liegt er auf PB3, nicht auf 4.
Kannst es im .h einfach ändern, wenn's doch PB4 sein sollte.
Anbei der angepasste Code, sollte theoretisch funktionieren. Basierend auf der momentanen Vorlage unter Verwendung von M wäre man mit den Opcodes CBI/SBI (statt Out) etwas besser gefahren.
Es dürfte kein großartiger Unterschied sein, hätte aber eine deutliche Veränderung des Codes erfordert, das wollt' ich vermeiden.
In der momentanen Version ist der Code dagegen einfach auf höhere Port-IO-Adressen anpassbar, was mit CBI/SBI nicht so problemlos ginge, bzw. dann deutlich länger brauchen würde.
Danke, du hast aber noch ne Kleinigkeit in der main() vergessen
Läuft wunderbar mit 75.0719Hz.Code:CTRL_DDR=0x0F;
Es ist in der Tat Pin B3![]()
Lesezeichen