Forum: Mikrocontroller und Digitale Elektronik Schnelle ADC (max 4bit) für BAS-Signal


von Rechenknecht (Gast)


Lesenswert?

Hallo,

ich möchte ein BAS Signal (von einer s/w Kamera) mit dem Atmega328p 
auslesen.

Als erstes habe ich mir eine Schaltung entworfen (teilweise empirisch, 
aber funktioniert), die die Sync Signale als Flanken ausgibt. Mit einem 
12MHz Atmega8 im Free-Running ADC Modus (Prescaler 2 (niedrigster)). 
Schaffe ich geschätzt 50 Bildpunkte in einer Zeile auszulesen. Die 
Genauigkeit ist so knapp 6bit würd ich schätzen. So weit so gut.

Es geht um ein Standbild. Ziel ist es am Ende spaltenweise auszulesen. 
So hat man mehr Zeit die Daten zu verarbeiten.

Jetzt habe ich mir einen Atmega328p genommen und diesem einen 20MHz 
Quarz verpasst. Jetzt gibt es das Problem, dass er nur Highbits einließt 
sobald der Prescaler auf 2 ist. Niedriger ist für ihn kein Problem. 
Testen kann man das ja immer, wenn man "Clk Div 8" bei den Fusebits 
einstellt.

So der Takt ist dem ADC zu schnell. Schade. 3Bit Auflösung würden 
wahrscheinlich auch schon reichen. Da ich das Bild ja Spaltenweise 
auslesen will, muss es nicht unbedingt der Free-Running Modus sein.

Frage 1: Gibt es eine Möglichkeit den ADC auch bei 20MHz zum laufen zu 
bringen?

Frage 2: Habt ihr einfache Schaltungsvorschläge für ein externes 
Sample&Hold, so dass der ADC gemütlich ausgelesen werden kann?
Mein Traum wären 200 Helligkeitswerte Horizontal.

Wie gesagt, es reicht erstmal 1 Wert pro Zeile. Im nächsten (Halb)Bild 
wird dann der Nachbarpixel eingelesen. So bleibt Zeit, die Daten zu 
verarbeiten.

Es handelt sich um eine Spielerei+Lerneffekt. Das Bild wird dann auf 
einem Kassenbondrucker ausgegeben. Quasi Sofortbildkamera.




MfG

von Joe F. (easylife)


Lesenswert?

Von Cypress gibts einige FIFOs, die deine ADC Daten in Echtzeit entgegen 
nehmen und dann vom uC langsam ausgelesen werden können.
Die sind teilweise so groß, dass das gesamte Videobild reinpasst (144 
Mbit).

Oopsie, sehe gerade, dass das nen bischen sehr teuer ist (200 EUR+).

Aber der FIFO muss ja nicht so riesig sein. Guck mal bei den üblichen 
Verdächtigen (z.B. TI), ob da was brauchbares und bezahlbares zu finden 
ist.

: Bearbeitet durch User
von Rechenknecht (Gast)


Lesenswert?

Problem ist (erstmal) nicht die Datenmenge, sondern die Samplingzeit. 
Das S&H Glied / bzw. der ADC sollte ja (im Idealfall) nur so ca 250nS 
sampln. Ich habe aber noch genug IO-Ports frei für externe Dinge. 
(Komperatorlösung?! / externer ADC ?! / S&H?!)

von Schorsch X. (bastelschorsch)


Lesenswert?

Wie wäre es mit einem parallelen ADC (<3€ z.B. ADC1175 von TI) der 
sowohl Abtastung + Digitalisieung macht.

von Erich (Gast)


Lesenswert?


von Dr. Sommer (Gast)


Lesenswert?

Der allseits beliebte STM32F407VG Mikrocontroller kann bis 6 MHz bei 
12bit samplen und diese Datenmenge dank DMA auch verarbeiten. Das reicht 
für über 200 Werte pro Zeile, bei jedem Frame.

von Name: (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Der allseits beliebte STM32F407VG Mikrocontroller kann bis 6 MHz bei
> 12bit samplen und diese Datenmenge dank DMA auch verarbeiten. Das reicht
> für über 200 Werte pro Zeile, bei jedem Frame.

Wenn du schon mit STM32 daherkomst, dann nimm modernere Derivate, nicht 
solchen mittelalterlichen Schrott. Das Ding ist 10 Jahre alt, und 
entsprechend angegraut ist die Peripherie.

Wie die G4-Serie zum Beispiel.

von Rechenknecht (Gast)


Lesenswert?

Danke, das sieht vielversprechend aus. Paralleler ADC ist super.

Nur woher bezieht man den, im besten Fall nicht mehr als 3 Stück. Segor 
hat ihn leider nicht mehr, C0nrad schon garnicht und Reichelt leider 
auch nicht. Vielleicht gibts da einen Ersatztyp?

von Rechenknecht (Gast)


Lesenswert?

Uuii sorry, hab die anderen Posts noch nicht gelesen. STM32 wäre eine 
Lösung, die ich dann vermutlich erst in einem halben Jahr umsetzen 
würde. Mir das zu erarbeiten schaffe ich nicht an zwei Wochenenden.

von Axel S. (a-za-z0-9)


Lesenswert?

Rechenknecht schrieb:
> Problem ist (erstmal) nicht die Datenmenge, sondern die Samplingzeit.
> Das S&H Glied / bzw. der ADC sollte ja (im Idealfall) nur so ca 250nS
> sampln.

Richtig. Deswegen wirst du mit dem integrierten ADC auch nicht weit 
kommen. Dessen Samplingzeit ist 1.5 Perioden des ADC-Taktes. Und der 
geht nur bis ~1MHz.

Ein externes S&H Glied würde helfen. Das Timing (Lage bzgl. 
Synchronsignal) und die Länge des Sample-Impulses ist dann zwar immer 
noch kritisch, aber immerhin machbar. Evtl. könnte es sinnvoll sein, die 
Taktfrequenz des AVR per PLL fest mit dem Videotiming zu verkoppeln.

Das Ausgangssignal der S&H Stufe kannst du dann mit dem internen ADC 
erfassen. Wenn das ein Standbild ist, hast du ja genug Zeit.

von Rechenknecht (Gast)


Lesenswert?

@ Axel S. (a-za-z0-9):  Das war auch meine erste Idee. Ich habe ja ein 
paar µS Zeit. Vielleicht reicht ja schon ein Impedanzwandler OPV + 
"Schalter"+Kondensator ->ADC(vom µC). Der OPV zieht den C auf den 
Helligkeitspegel. Der ADC von µC wird den nicht so schnell leer ziehen. 
Muss dann mal tüfteln, wie ich das mit dem "Schalter" löse. Optokoppler 
fällt ja bei den Geschwindigkeiten aus.

Wie ich den Takt (zwecks Wartezeiten) mit dem BAS Signal synchronisieren 
muss werde ich sehen. Vom Gefühl her würde ich sagen, dass es gehen 
sollte. Meinst du die Zeilen würden unterschiedlich skaliert dargestellt 
werden ? Der H-Sync geht direkt auf den Int0.


Zum ADC: Beim AtMega8 (mit 12MHz) kann ich die ADC Frequenz wohl bis auf 
6 MHz einstellen (Teiler 2). Ich sehe auf dem Monitor dann schön die 
Zeile aus 50 bis 70 Helligkeitswerten.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Rechenknecht schrieb:
> Frage 2: Habt ihr einfache Schaltungsvorschläge für ein externes
> Sample&Hold, so dass der ADC gemütlich ausgelesen werden kann?
> Mein Traum wären 200 Helligkeitswerte Horizontal.

Hm - im Datenblatt les ich was von: "The ADC contains a Sample and Hold 
circuit which ensures ... blabla"
Schon mal probiert, den ADC nur so schnell zu takten, dass er in 64µsec 
fertig gewandelt hat, dann den immer nur einmal in jeder Videozeile 
anstossen, und dann in jedem (Halb)Bild die Zeit zwischen Hsync und ADC 
start ein bisschen zu erhoehen? Keine Ahnung ob die ominoese interne S&H 
Schaltung mit einem Videosignal zurechtkommt...

Gruss
WK

von Radionuklid (Gast)


Lesenswert?

Hi!
Wie wäre es mit einem lf398 als s&h? Du mußt den Systemtakt allerdings 
wirklich auf Deine Videoquelle synchronisieren, sonst gibt das nur 
Generve mit der Bildstabilität.

von -gb- (Gast)


Lesenswert?

Dergute W. schrieb:
> Schon mal probiert, den ADC nur so schnell zu takten, dass er in 64µsec
> fertig gewandelt hat, dann den immer nur einmal in jeder Videozeile
> anstossen, und dann in jedem (Halb)Bild die Zeit zwischen Hsync und ADC
> start ein bisschen zu erhoehen?

Du meinst immer nur ein Pixel je Zeile abtasten? Beim ersten Bild das 
erste Pixel jeder Zeile, beim 2. Bild das 2. Pixel jeder Zeile, ... der 
Abtastzeitpunkt muss mit der Zeitauflösung eines Pixels verschoben 
werden können, aber schicke Idee. Quasi das was manche Oszilloskope mit 
dem Equivalent-Time sampling machen.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Früher gab es mehr AD-Wandler speziell für Video, z.B. den TDA8703 von 
Philips. Den hatte Reichelt im Programm, heute ist er ausgestorben.

Dann gab es noch ein paar höher integrierten RGB-Video-Wandler wie den 
TDA8708, die  PAL/NTSC/SECAM-Signale decodierten und als digitale 
RGB-Daten ausgaben. Die findet man auf alten TV-Karten für den PC mit 
PCI-Bus.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

-gb- schrieb:
> Du meinst immer nur ein Pixel je Zeile abtasten?

Yep. Der ADC im AVR ist halt nicht direkt fuer Videoabtastung gedacht. 
Und der Rest auch nicht fuer die daraus resultierenden Datenraten. Aber 
so kann man die Datenrate um den Faktor 864 erniedrigen und ist dann mit 
15.625 KSamples/sec in einem Bereich wo im AVR schon was gehen kann - 
wenn man nicht troedelt.

Gruss
WK

von Andreas M. (amesser)


Lesenswert?

Ich habe nicht viel Ahnung über die internas vom AVR,
aber eine Idee: betreibe den ADC differentiell:
1
OPAMP--+--| ADC+
2
     |    |
3
     C    |
4
     |    |
5
     +----| ADC-
6
     +----| IOP

- zum samplen IOP auf Masse schalten, der OPAMP kann dann gegen Masse 
arbeiten, ADC- ist fest
- zum Messen IOP floaten lassen (Input ohne pullup), der OPAMP 
verschiebt dann beide Eingänge parallel kann sie aber nicht mehr 
gegeneinander verschieben.

Eventuell reicht das für deine Spielerei

von Axel S. (a-za-z0-9)


Lesenswert?

Rechenknecht schrieb:

[externe S&H]

> Das war auch meine erste Idee. Ich habe ja ein
> paar µS Zeit. Vielleicht reicht ja schon ein Impedanzwandler OPV +
> "Schalter"+Kondensator ->ADC(vom µC). Der OPV zieht den C auf den
> Helligkeitspegel. Der ADC von µC wird den nicht so schnell leer ziehen.
> Muss dann mal tüfteln, wie ich das mit dem "Schalter" löse. Optokoppler
> fällt ja bei den Geschwindigkeiten aus.

S&H Stufen gibt es als fertige IC. Der Klassiker wäre der LF198 - der 
könnte aber evtl. etwas langsam sein. Als Schalter nimmt man einen FET 
bzw. einen CMOS-Analogschalter. Wenn es schnell sein muß, darf der 
Sample-Kondensator nur klein sein, deswegen braucht man einen OPV als 
Impedanzwandler dahinter. Schau dir das Datenblatt an, da wird die 
Funktion erklärt.

> Wie ich den Takt (zwecks Wartezeiten) mit dem BAS Signal synchronisieren
> muss werde ich sehen. Vom Gefühl her würde ich sagen, dass es gehen
> sollte. Meinst du die Zeilen würden unterschiedlich skaliert dargestellt
> werden ?

Wenn die Takte asynchron sind, jittert der Abtastzeitpunkt. Das macht 
sich bei einem Standbild mindestens als extra Rauschen bemerkbar. Wenn 
du aufeinanderfolgende Frames als Video zusammensetzt, wirst du ein 
Zittern von Objekten im Bild sehen.

> Beim AtMega8 (mit 12MHz) kann ich die ADC Frequenz wohl bis auf
> 6 MHz einstellen (Teiler 2). Ich sehe auf dem Monitor dann schön die
> Zeile aus 50 bis 70 Helligkeitswerten.

Das ist dann Glück. So wie du auch nicht jedes Mal überfahren wirst, 
wenn du bei Rot über die Ampel gehst.

Spezifiziert ist der ADC nur bis 200kHz. Später hat Atmel das auf 1MHz 
"bei verringerter Auflösung" erhöht. Ohne allerdings eine genauere 
Spezifikation, wieviele Bits man bei wievielen MHz noch erwarten kann. 
Es ist aber klar, daß die Funktion des ADC oberhalb einer gewissen 
Frequenz einfach komplett aussetzen wird.


-gb- schrieb:
> Dergute W. schrieb:
>> Schon mal probiert, den ADC nur so schnell zu takten, dass er in 64µsec
>> fertig gewandelt hat, dann den immer nur einmal in jeder Videozeile
>> anstossen, und dann in jedem (Halb)Bild die Zeit zwischen Hsync und ADC
>> start ein bisschen zu erhoehen?
>
> Du meinst immer nur ein Pixel je Zeile abtasten?

Genau das schrieb der TE doch schon im Eröffnungspost. Er nannte es da 
"spaltenweises Auslesen" des Bildes.

von Rechenknecht (Gast)


Lesenswert?

@Dergute W. (derguteweka):

Das war ja auch meine Idee. Hab mich wohl uneindeutig ausgedrückt. Quasi 
Spaltenweise einlesen des Bildes. Quasi 1 Sample pro Zeile. Und nach 200 
Bildern hat man das gesamte Bild. Ich dachte nur, dass die Samplingtime 
von der ADC Geschwindigkeit abhängt?!? Sonst mittelt der doch die 
Helligkeitswerte der Zeile aus, oder???

Er sollte - bei 20MHz µC Takt- nur 5 Takte lang samplen.

Ich kann ja mal fix Probieren, wie unscharf das dann Bild wird.


@Radionukleid:

Kann doch nicht mehr als 1-2 Taktzyklen unsynchron sein. Schließlich 
triggert der h-sync Impuls den Int0.
Danke für den LF398. Genau solche Bezeichnungen finde ich in diesem 
Bauteildschungel nicht so auf die schnelle. Den gibts sogar hier im Ort.


@Christoph db1uq K.: Den TDA8703 gibts hier noch erhältlich (: Das mache 
ich nach dem S&H Versuch.


@Axel S.: Bei diesem Versuch das Bild Zeilenweise auszulesen mit dem 
6MHz Takt. Verbraucht die Software (16 Bit adc Register ausleen + 
Speicherung+Zähler) ja auch noch Takte. So käme ich auch auf ~1MHz. Ob 
die Zwischentakte dem ADC zugute kommen weiß ich nicht.


Ich habe ja schon gute Tipps bekommen. Insbesondere den LF389 (1,6€) und 
den TDA8703 (7€).

Ich teste erstmal was beim spaltenweisen Auslesen rauskommt.

von Joe F. (easylife)


Lesenswert?

Mal ne andere Frage:
warum muss es denn eine BAS Kamera sein? Heute gibts ja für schmales 
Geld kleine Kameramodule, teilweise mit Framebuffer, die man bequem über 
SPI in jedem beliebig langsamen Tempo auslesen kann...

https://www.arducam.com/product-category/spi-camera-for-arduino/

https://www.watterott.com/de/2MP-Mini-Kamera-Board-OV2640
30 EUR

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Axel S. schrieb:
> Genau das schrieb der TE doch schon im Eröffnungspost. Er nannte es da
> "spaltenweises Auslesen" des Bildes.

Rechenknecht schrieb:
> Das war ja auch meine Idee.

Ja, schon klar. Wollt auch kein Patent drauf haben. Gabs schon zu 
Amigazeiten (noch mit einer RGB-Transparent Filterscheibe fuer 
Farbbilder).Ich mein' ja auch hauptsaechlich, dass im Datenblatt des 328 
was drinnensteht, dass der ADC eine interne S&H Stufe hat. Wenn die 
hurtig genug "sample-and-holded", dann braucht man keine externe mehr...
Dass bei sowas nicht direkt 4kp60 mit HDR rauskommt, sollt' auch allen 
klar sein.

Gruss
WK

von Axel S. (a-za-z0-9)


Lesenswert?

Dergute W. schrieb:

> Ich mein' ja auch hauptsaechlich, dass im Datenblatt des 328
> was drinnensteht, dass der ADC eine interne S&H Stufe hat. Wenn die
> hurtig genug "sample-and-holded"

Das hatten wir doch schon. Die interne Stufe hat 1.5 ADC-Takte 
Sample-Zeit. Bei 1MHz ADC-Takt (dem maximal offiziell erlaubten) sind 
das 1.5µs. Faktor 6 zu langsam.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Dergute W. schrieb:
> Gabs schon zu
> Amigazeiten (noch mit einer RGB-Transparent Filterscheibe fuer
> Farbbilder)

Auch der alte 'MacVision' Zusatz für die serielle Schnittstelle am 
Macintosh hat das spaltenweise gemacht.
Der aktive Inhalt einer CCIR Zeile ist 52µs. Wenn man also nach der 
fallenden Flanke des H-Sync 12µs wartet und dann den ADC startet, 
erwischt man die erste µs des aktiven Inhaltes. (D.h., man startet etwas 
früher, weil der ADC ja noch Zeit braucht) Diesen Vorgang wiederholt man 
für alle aktiven Zeilen und verzögert im nächten Durchlauf den Start des 
ADC um z.B. 1µs. Macht man das 51-52 mal, hat man die Zeilen in 1µs 
Häppchen.
Ist der ADC zu langsam, sampelt man z.B. jede 2. Zeile.

Wichtig ist, das der ADC niederohmig angetrieben wird, um den S&H 
Kondensator zügig auf den Wert zu laden.

: Bearbeitet durch User
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.