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é
Wie schnell laüft dein ADC ? Ist das Bild gleichbleibend, wie hast du das Signal angeschlossen ?
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.
Meinst Du den Controller statt mit 8MHz mit 25.175 Mhz betreiben?
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.
René wrote:
> Meinst Du den Controller statt mit 8MHz mit 25.175 Mhz betreiben?
Etwas Schnell, oder?
Hälfte:12,5875
Viertel:6.29375Mhz
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?
Mathi wrote:
> 25.175Mhz Pixeltakt/32 gibt meiner Meinung etwa 780kHz.
Stimmt, Komma verrutscht (uups)
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. :-)
Im Datenblatt zum ATmega16 steht eine maximale Samplerate von 15kSPS.
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?
Ich versteh nicht genau was Du vor hast. Du willst den Bildschirm in vier Bereiche auteilen und jeweils alle Pixel aus diesen Quadraten auswerten?
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?
mit welchem Vorteiler? damit: ldi tempL, (1<<CS10) ; Systemtakt Timer1 out TCCR1B, tempL Vorteiler 1
PS das mit dem PC monitor hab ich probiert. meiner sagt kein Signal und schaltet ab
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?
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.