Hallo,
ich lese ein VGA Signal in einen AT Mega 16 ein (rot an Pin A0) und
gleichzeitig noch das Hsync Signal das dann Timer 1 Startet und dann zu
einer
bestimmten Zeit einen überlauft Interrupt in dem Dann die AD-Wandlung
gemacht wird.
Das Problem ist nur das ich Teilweise Stabile werte bekomme aber auch
teilweise ein Flackern der unteren ca. 6 Bit. Ich habe schon diverse ADC
Einstellungen geändert alles ohne viel erfolg habe Kondensatoren in den
Eingang gegen Masse geschalten mit mäßigem erfolg. Gebt mir doch bitte
mal noch ein paar Tipps die ich noch versuchen könnte.
Sollte ich die Werte Mitteln aber mir sind die 6 Bit Toleranz ranz
einfach zu viel.
Ist der ADC zu langsam für den relativ schnellen Pixeltakt des VGA
Signals.
oder Brauche ich noch externe Hardware. Wenn ja welche?
Sorry für meine Blöde Fragestellung aber ich hab gerade geschrieben wie
es mir gerade eingefallen ist.
Mfg
René
Wenn ich das richtig verstehe, benutzt Du den ADC im AT Mega 16?!
Der ist bei weitem zu langsam!!!
Der Pixeltakt eines VGA-Signals beträgt 25,175MHz. Dann brauchst Du auch
die Samplerate. Oder zumindest etwas in der Nähe. Es gibt ADCs, gen. AFE
(Analog Front End), die extra für Videosignale da sind. Wie z.B. der
Intersil ISL98001. Wird über I2C konfiguriert und hat eine PLL die am
HSync einrastet.
Was willst Du mit den Bilddaten machen? Wahrscheinlich in irgendner
Weise analysieren. Dafür dürfte der Mega16 zu langsam sein.
Hallo,
das Bild ist gleichbleibend. die wenigst Flackerei hatte ich mit
(0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) bei 8 MHz Taktfrequenz.
Das Signal habe ich mit einem LM258 1:5 verstärkt (Flackert aber auch
ohne OPV). und dann an den ADC Eingang. Controller steckt im STK 500 und
Jumper ARef ist gesetzt. VGA GND gegen Masse GND.
Dieser Prescaler müsste 77kHz Samplerate ergeben, also Faktor 5 vom
maximalen empfohlenen Wert, aber noch OK.
Der LM258 ist viel zu langsam. Lass den besser weg und reduziere die
Referenzsspannung des ADC.
Hast du schonmal versucht das Videosignal wegzulassen, und einen festen
Wert zu messen ?
Dann kannst du schonmal rausfinden, ob es ein Software oder
Hardwareproblem ist.
Mit einem Potti am Anschluß geht alles bestens nicht Flackert die Werte
sind Stabil. Ich denke wenn der Timer den ADC Startet und das signal
wird gesampelt dann kann es sein das der ADC dann Misst wenn das VGA
Signal gerade zum nächsten Pixel wandert und der ADC dann was anderes
ausgibt. Der ADC rastet sozusagen nicht richtig ein. Um Stabile werte zu
kriegen müsste man die Pixel sozusagen "langziehen" oder Richtig
einrasten lassen aber
Ja, so in etwa würde ich es auch vermuten. Allerdings ist die S&H Stufe
nur begrenzst schnell, und dein LM258 sehr langsam. Von daher her macht
das schon von selbst eine Tiefpassfilterung.
Bzw. mach doch einfach mal das ganze Bild eine Farbe, dann kannst du
sowas auch ausschließen.
probiers mit 78.671khz Samplerate (25.175Mhz Pixeltakt/32) wenn Du ein
Roten Schirm "erzeugst", sollten die Werte halbwegs stehen
(Undersampling).
Von EIZO gibt es ein nettes Monitortesttool, da kann man Testbilder
generieren, auch "Dauerrot" ;-)
edit: gefunden
http://www.eizo.de/pool/files/de/Eizo_Monitortest.zip
Wenn das Bild eine Farbe ist dann ist der Wert auch stabil z.B. Rot im
Piowerpoint Rot wer 255 eingestellt und alles Rot dann flackern nur och
2 Bit das ist OK so. wenn ich aber eine Farbe mit Rot z.B 127 nehme dann
wird es schon schlechter Flackriger eben. Im allgemeinen kann man sagen
umso größer die Fläche mit der Gleichen Farbe umso Stabiler.
interessant:
dann mach mal folgendes:
im ADC Interrupt toggelst Du ein Portpin.
Diesen Ausgang legst Du über 10pF mit auf den "roten Draht". Jetzt
kannst Du im Monitor sehen, Wann dein ADC, und wie oft, und WO GENAU er
sampelt.
Zitat:
interessant:
dann mach mal folgendes:
im ADC Interrupt toggelst Du ein Portpin.
Diesen Ausgang legst Du über 10pF mit auf den "roten Draht". Jetzt
kannst Du im Monitor sehen, Wann dein ADC, und wie oft, und WO GENAU er
sampelt.
Zitat Ende
muß ich dann auch das Hsync Signal zum Monitor schicken?
also sinds 786.718 khz. Da sind aber nicht mehr als 6Bit drinn.
Ich glaube 1Mhz ist als max. Takt für den ADC angegeben...
Du kannst ja Bildweise in Zeile 50 nach dem Einrasten auf Sync immer
einen halben NOP dazugeben. :-)
Mathi wrote:
> Im Datenblatt zum ATmega16 steht eine maximale Samplerate von 15kSPS.
Ja, wissen wir
Irgentwo steht auch was vom Maximalen Takt für den ADC.
Die S&H Stufe macht nur bis 15kS vernünftig mit, es geht aber unter
Einbuße der Auflösung einiges mehr.
Ich habe jetzt nur das Datenblatt vom Mega48 hier:
Seite 307, Tabelle 27-4
ADC-Clock: 50-1000khz
Genauigkeit: 4.5LSB bei 1Mhz Clock.
(Seit wann lässt sich aus den Datenblättern nichts mehr rauskopieren?)
Wenn er allerdings 13 Clocks zum Wandeln braucht, sind das dann immer
noch 786,x Khz? denke schon, oder?
Da der ADC aber das sukzesive Approximationsverfahren verwendet, braucht
man einen Takt pro aufgelösten Bit.
Der maximal einstellbare Takt für den ADC ist Clk/2. Damit erreicht man,
bei 8MHz, einen sampletakt von 4MHz.
Bei 10 Bit genauigkeit erreicht man eine Samplerate von 400kHz. Bei 5
Bit 800kHz...
Wenn ich das jetzt richtig verstehe hilft hier nur externe Hardware die
das Signal Controllerfreundlich auswertet.
Was brauche ich denn um den Bildschirm in 4 je Seite in 4 Quadrate
aufteilen zu können um von denen Die RGB werte zu bekommen?
René wrote:
> Wenn ich das jetzt richtig verstehe hilft hier nur externe Hardware die> das Signal Controllerfreundlich auswertet.> Was brauche ich denn um den Bildschirm in 4 je Seite in 4 Quadrate> aufteilen zu können um von denen Die RGB werte zu bekommen?
Hast Du nicht richtig verstanden.
Geht ohne Hardware. Mit den NOPs war durchaus Ernst gemeint.
Wozu willst Du ein ganzes Bild, bzw eine ganze Zeile mit einem Mal
aufnehmen.
Du musst nur zur EXAKT gleichen beim nächsten Bild da weitermachen, wo
Du aufgehört hast.
Mehr sach ich aber nicht.
Ich will mein Axlight noch bei ebay verkaufen.*gg*
Wenn ich 4.43 aufgelöst bekomme, sollte das beim VGA Signal auch gehen.
Zumal Du ja nicht mal auf die Phasenlage achten musst, sondern nur auf
die Amplitude.
Man kann aber auch 'ne externe Hardware nehmen. Für ein Einzelstück geht
das. Aber man kann ja nicht 50 Fernseher in der Hoffnung schlachten, das
überall die gleichen Chips verbaut sind. Der AVR ist dagegen immer
gleich.
Gruß
Axelr.
oder liegt es am Hsync?
Ich habe einfach das Hsync Signal an einen Portpin angeschlossen und
habe eine Schleife mit sbci drin wenn Hsync high ist dann get es weiter
aus der Schleife Raus startet Timer 1 und löst bei Oberlauf einen
Interrupt aus der die ADC Messung startet in der Theorie sollte immer
die selbe Stelle getroffen werden.
Die Zeit von Start des Timers bis zum Sampeln sollte Theoretisch immer
gleich sein. Ist Sie wahrscheinlich aber nicht.
René wrote:
> oder liegt es am Hsync?>> Ich habe einfach das Hsync Signal an einen Portpin angeschlossen und> habe eine Schleife mit sbci drin wenn Hsync high ist dann get es weiter> aus der Schleife Raus startet Timer 1 und löst bei Oberlauf einen> Interrupt aus der die ADC Messung startet in der Theorie sollte immer> die selbe Stelle getroffen werden.>> Die Zeit von Start des Timers bis zum Sampeln sollte Theoretisch immer> gleich sein. Ist Sie wahrscheinlich aber nicht.
probiers mit dem 10pf aus.
EDIT:
>startet Timer 1
mit welchem Vorteiler?
René wrote:
> Ich habe einfach das Hsync Signal an einen Portpin angeschlossen und> habe eine Schleife mit sbci drin wenn Hsync high ist dann get es weiter> aus der Schleife Raus startet Timer 1 und löst bei Oberlauf einen> Interrupt aus der die ADC Messung startet in der Theorie sollte immer> die selbe Stelle getroffen werden.>> Die Zeit von Start des Timers bis zum Sampeln sollte Theoretisch immer> gleich sein. Ist Sie wahrscheinlich aber nicht.
Bis auf dem Jitter durch die Schleife. Besser:
HSync an Input Compare. Die Verzögerung zu dem Input Compare Wert
addieren und ins Output Compare Register schreiben, dass den ADC
triggert. Damit ist ein Jitter von < 1 CPU Takt garantiert.
> PS das mit dem PC monitor hab ich probiert.>> meiner sagt kein Signal und schaltet ab
Hast du an dem Monitor auch HSync und VSync vom PC angeschlossen ? Die
10pF alleine reichen nicht.
Zitat
Bis auf dem Jitter durch die Schleife.
Z-ende
nach dem Timer 1 Interrupt wird der Timer wieder ausgeschalten und erst
beim nächsten Hsync wieder gestartet hatte ich vergessen zu schreiben.
Müsste dann nicht immer die selbe Stelle getroffen werden?
René wrote:
> mit welchem Vorteiler?>>> damit: ldi tempL, (1<<CS10) ; Systemtakt Timer1> out TCCR1B, tempL>> Vorteiler 1
Somit braucht der Prescaler nicht resettet zu werden.
zum 10pF
Ich ging davon aus, das Du die Verbindung Grafikkarte PC-Monitor nur
angezapft hast, also alle Verbindungen weiterhin Bestand hatten. (Macht
ja sonst auch eher wenig Sinn, Du willst ja was sehen)
Der 10pf kommt nur zusätzlich als "Debugausgabe" mit auf den Farbkanal
am Monitor, den Du überprüfen willst.
René wrote:
> Zitat> Bis auf dem Jitter durch die Schleife.> Z-ende>>> nach dem Timer 1 Interrupt wird der Timer wieder ausgeschalten und erst> beim nächsten Hsync wieder gestartet hatte ich vergessen zu schreiben.> Müsste dann nicht immer die selbe Stelle getroffen werden?
Nein, muss nicht, der Zähler muss auch resettet werden.
Lass den Zähler laufen und nimm nicht den Overflow, sondern den
Outputcomparematch(hies der so?). wenn ein Ereignis auftritt, setzt Du
den Zähler auf Null. Dann läuft er bei Null los und erzeugt bei
Erreichen des OCRxn Registers einen Interrupt. Beim AD-Wandeln kannst Du
ihn ja anhalten, beim Start des Sync resetten, starten und beim Ende des
Sync nochmal resetten. Der syncImpuls liegt ja auch ne ganze Weile an.
dann läuft der timer bei der ersten Messung nicht über. für die anderen
Messungen lässt Du dden timer einfach Weiterlaufen und hast definierte
Abstände deiner Messungen, nur beim sync setzt Du ihn auf Null
Oder so ähnlich ,-)
Hallo in die Runde,
wie war dan nochmal mit dem Portpin an einen PC Monitor und den 10pf
Müssen es 10Pf sein habe nur 27pf da geht das auch?
Es geht nicht liegt es nun am Kondensator oder was mache ich Falsch?
OK geht habe den kleinen Punkt einfach nicht gesehen.
Mein Timer Konstrukt ist doch schon recht ungenau wenn ich sehe wie der
Punkt in einer Zeile wandert.
Tja was tun?
Toggeln tu ich den Portpin vor der ADC Wandlung war das so gemeint?
René wrote:
> OK geht habe den kleinen Punkt einfach nicht gesehen.>> Mein Timer Konstrukt ist doch schon recht ungenau wenn ich sehe wie der> Punkt in einer Zeile wandert.> Tja was tun?>> Toggeln tu ich den Portpin vor der ADC Wandlung war das so gemeint?
Der Punkt soll Dir einfach nur zeigen, an welcher Stelle der ADC
wandelt.
Wie du das machst, bleibt Dir überlassen...
Du könntest, beim Start des ADc den Pin auf HIGH legen und beim ADC
Interrupt wieder auf low ziehen.(wäre dann ein heller Punkt beim Start
und ein dunkler im ADC Complete Int.)
Klar geht auch ein 27pf, oder 100p - war nur so ne Hausnummer. Du kannst
auch ne Diode und einen Widerstand nehmen, dann bleibt der Rote Kanal so
lange hell, wie du die Portpinspannung dem Rot überlagerst. Nimm aber
nicht so viel Spannung, so 1V max - denke ich. musst Du einfach mal ein
wenig probieren.
EDIT
Springt der Punkt hinundher, wandert er in der Zeile, oder siehst Du
mehrere Punkte in einer Zeile?