Forum: Mikrocontroller und Digitale Elektronik ADC "Flackert" ca. Bit 0-6 und mehr


von René (Gast)


Lesenswert?

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é

von Benedikt K. (benedikt)


Lesenswert?

Wie schnell laüft dein ADC ? Ist das Bild gleichbleibend, wie hast du 
das Signal angeschlossen ?

von Mathi (Gast)


Lesenswert?

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.

von René (Gast)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Mathi (Gast)


Lesenswert?

Was möchstest Du denn mit dem gesampleten Bild machen?

von René (Gast)


Lesenswert?

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

von Benedikt K. (benedikt)


Lesenswert?

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.

von Axel R. (Gast)


Lesenswert?

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

von René (Gast)


Lesenswert?

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.

von René (Gast)


Lesenswert?

Meinst Du den Controller statt mit 8MHz mit 25.175 Mhz betreiben?

von Axel R. (Gast)


Lesenswert?

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.

von Axel R. (Gast)


Lesenswert?

René wrote:
> Meinst Du den Controller statt mit 8MHz mit 25.175 Mhz betreiben?

Etwas Schnell, oder?

Hälfte:12,5875
Viertel:6.29375Mhz

von Mathi (Gast)


Lesenswert?

25.175Mhz Pixeltakt/32 gibt meiner Meinung etwa 780kHz.

von René (Gast)


Lesenswert?

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?

von Axel R. (Gast)


Lesenswert?

Mathi wrote:
> 25.175Mhz Pixeltakt/32 gibt meiner Meinung etwa 780kHz.

Stimmt, Komma verrutscht (uups)

von Axel R. (Gast)


Lesenswert?

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. :-)

von Mathi (Gast)


Lesenswert?

Im Datenblatt zum ATmega16 steht eine maximale Samplerate von 15kSPS.

von Axel R. (Gast)


Lesenswert?

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.

von Axel R. (Gast)


Lesenswert?

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?

von Mathi (Gast)


Lesenswert?

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...

von René (Gast)


Lesenswert?

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?

von Mathi (Gast)


Lesenswert?

Ich versteh nicht genau was Du vor hast. Du willst den Bildschirm in 
vier Bereiche auteilen und jeweils alle Pixel aus diesen Quadraten 
auswerten?

von Simon K. (simon) Benutzerseite


Lesenswert?


von Axel R. (Gast)


Lesenswert?

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.

von René (Gast)


Lesenswert?

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.

von Axel R. (Gast)


Lesenswert?

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?

von René (Gast)


Lesenswert?

mit welchem Vorteiler?


damit: ldi tempL, (1<<CS10) ; Systemtakt Timer1
  out TCCR1B, tempL

Vorteiler 1

von René (Gast)


Lesenswert?

PS das mit dem PC monitor hab ich probiert.

meiner sagt kein Signal und schaltet ab

von Benedikt K. (benedikt)


Lesenswert?

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.

von René (Gast)


Lesenswert?

Sorry aber was ist ein Jitter?

von René (Gast)


Lesenswert?

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?

von Axel R. (Gast)


Lesenswert?

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.

von Axel R. (Gast)


Lesenswert?

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 ,-)

von René (Gast)


Lesenswert?

Sorry vergessen
Zähler wird auch zurückgesetzt.

von René (Gast)


Lesenswert?

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?

von René (Gast)


Lesenswert?

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?

von Axel R. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.