-
-
Erfahrener Benutzer
Fleißiges Mitglied
Hallo Harry,
vielen Dank für deine umfangreiche Frage. Ich werde mal versuchen zu beantworten was geht. Manches verstehe ich aber auch noch nicht. Dazu später.
Das Hex-File zu meinem Bildmuster-Generator ist für den ATMega88 mit 20MHz Quarz-Takt compiliert worden.
Das Hexfile kann also nicht auf einen beliebigen anderen Controller eingespielt werden. Man könnte allerdings das Programm auf einen anderen Controller auslegen/anpassen und neu kompilieren. Der Aufwand (vermutlich aufwendiger) ist allerdings nicht abschätzbar, da kann es böse Überraschungen geben. Voraussetzung für ein solches Vorhaben ist allerdings ein Controller, der 20MHz getaktet werden kann, da alle Zeitkritischen Routinen darauf ausgelegt sind.
Ich denke mit den Syng-Signalen meinst du Sync-Signale (mit C geschrieben). Das hat mich erst etwas verwirrt.
Wenn du erst mal H-Sync und V-Sync Signale generiert hast, müssen die nur noch gemischt werden. Das Mischen erreicht man z.B. durch Toggeln eines Ports.
Wie man das im Einzelnen genau macht würde den Rahmen hier sprengen.
Das gleiche gilt für das Jittern. Aber kurz zur Erklärung. Der ein H-Sync Impuls wird per Hardware-PWM erzeugt. Sobald dieses Signal ausgegeben wird, muss nach einer bestimmten Zeit das Zeilensignal folgen. Ist das Timing zwischen H-Sync und Start der Zeienausgabe nicht exakt in jeder Zeile gleich, beginnt das Bild zu jittern. Jittern ist also der Zeitliche Versatz zwischen Sync-Impuls und dem Beginn des Zeilensignals, wenn er nicht immer gleich ist. Ursache ist hier das Assembler selbst, welches für unterschiedliche Instruktionen unterschiedlich lange braucht. Daher kommt der Versatz!
Um das auszugleichen gibt es mehrere Ansätze. Entweder die Zeilenausgabe vorbereiten und bevor bevor die Zeilenausgabe los geht den Controller schlafen legen, Der Zeitpunkt, an dem die Zeile beginnen soll wird durch einen Timer-Interrupt bestimmt, der den Controller synchron aufweckt. Das Programm startet dann direkt mit der Zeilenausgabe nach dem aufwecken. Also immer Zeitsynchron zum H-Sync.
Ich habe das anders gelöst. Da der Timer als Fast-PWM konfiguriert ist, wird der Timer dadurch auch auf 0 gesetzt, während das Sync-Signal ausgegeben wird. Ich nutze die Zeit, um die Zeilenausgabe vorzubereiten, Pointer berechen etc. Dann rufe ich meine Taktausgleichroutine auf, die das Jittern beseitigt. Diese liest eigentlich nur noch den Timer aus und weis somit die bereits verstrichene Zeit und kann die fehlende Zeit bis Zeilenausgabe bestimmen. Dies wird als Offset für einen Jump über NOPs verwendet, wodurch die Taktausgleichroutine immer Jitterfrei verlassen wird.
Wenn ich dich richtig verstehe brauchst du nur einen Generator, der dir ein Composite-Sync liefert? Also reine TTL-Pegel?
Nun das sollte nicht so schwierig sein. Welches Sync jittert denn bei dir? Horizontal oder Vertikal? Oder möchtest du mir man ein Code-Schnipsel zur Ansicht geben oder hier posten? Möchte mal sehen, wie du das realisiert hast.
Kannst du mir konkret etwas zeigen, wo ich dir weiter helfen kann?
Wenn du etwas nicht veröffentlichen willst, dannst du das auch als PN (Private Nachricht) an mich senden.
Gruß Mitch
kleiner Nachtrag.
Wie gefällt dir das (Comp.Sync-Signal):



Die Signale sind nach CCIR-Norm bis auf kleine Abweichungen in der Pulsbreite von H-Sync. Sollte aber nicht weiter stören.
Kannst du das Comp-Sync so gebrauchen? Oder brauchst du statt dessen H-Sync und V-Sync separat?
so sieht übrigens mein Bildmuster-Generator aus:


Gruß Mitch
Geändert von Mitch64 (16.02.2014 um 15:44 Uhr)
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen