Bildmuster-Generator Programm mit BascomAVR möglich
Hallo,
an alle Bascom-, Assembler- und C-Programmierer.
Eine unverblümte Frage ich die Experten-Runde:
Haltet ihr es für möglich, mit BascomAVR (Inline-Assembler eingeschlossen), ein Bildmuster-Generator-Programm zu erstellen, das folgendes können soll:
- verschiedene Bildmuster (Testbilder) erzeugen
(als BAS-Signal (sw) und RGB in Farbe)
- Ton erzeugen (1kHz / anschaltbar)
- AV-Umschaltung per PWM für AV-Aus, AV-An und 16:9
- RGB-Austastung (an/aus)
- komplette Menüführung per Tasten und LCD-Display
Das ganze soll mit nur einem einzigen AVR-Controller umgesetzt werden.
Nochmal die Frage:
Ist das möglich oder nicht.
Bei Antwort bitte angeben, in was du programmierst.
Gruß Mitch.
Liste der Anhänge anzeigen (Anzahl: 1)
Bildmuster-Generator Bauanleitung
Hallo,
und vielen Dank für eure Antworten.
Ich habe mich mal daran versucht, einen Bildmuster-Generator zu entwerfen. Was dabei heraus kam ist beeindruckend.
Das ganze Projekt kann hier bewundert werden:
http://mitchsoft.de/Elektronik/Proje...dex.html<br />
Das dürfte einer der wenigen Bildmuster-Generatoren sein, der vollständig mit Bascom entwickelt wurde. Natürlich mit ein paar Zeilen Inline-Assembler. Es können Schaltbilder, Layouts und Firmware heruntergeladen werden. Ein Beschreibung (PDF) gibts dort auch.
Aber seht selbst.
Gruß Mitch
Nochmal der Link Bildmuster-Generator
Hallo,
leider hat sich da beim Link setzen ein Fehler eingeschlichen.
Hier also nochmal der Link:
http://mitchsoft.de/Elektronik/Proje...tor/index.html
Der Link funktioniert!
Gruß Mitch
Liste der Anhänge anzeigen (Anzahl: 5)
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):
Anhang 27536Anhang 27537Anhang 27543
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:
Anhang 27538Anhang 27539
Gruß Mitch