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 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
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?!)
Wie wäre es mit einem parallelen ADC (<3€ z.B. ADC1175 von TI) der sowohl Abtastung + Digitalisieung macht.
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.
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.
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?
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.
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.
@ 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.
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
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.
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.
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.
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
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
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.
@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.
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.