Dirk (Diskussion | Beiträge) K |
Dirk (Diskussion | Beiträge) K (→Die Synchronisations-Signale) |
||
Zeile 446: | Zeile 446: | ||
In der unteren Bildhälfte ist die vertikale Synchronisation zwischen den ungeraden (odd) und geraden (even) Halbbildern dargestellt. | In der unteren Bildhälfte ist die vertikale Synchronisation zwischen den ungeraden (odd) und geraden (even) Halbbildern dargestellt. | ||
+ | |||
+ | In diesem Bild zeige ich einen Teil der VSync-Impulse, und zwar ab der fallenden Flanke von Odd/Even: | ||
+ | |||
+ | [[bild:Video_PG6_VSync.jpg]] | ||
= Quellen = | = Quellen = |
Version vom 10. April 2010, 12:36 Uhr
Inhaltsverzeichnis
RP6 Kamera - Mitmach-Projekt: Hardware
In diesem "Mitmach-Projekt" soll in den nächsten Monaten eine Experimentierplatine (CONRAD 191537) für den RP6 "gebaut" werden, mit der eine CMOS-Kamera an den RP6 angeschlossen werden kann. Die Teile, die man für das ganze Projekt braucht, kosten beim großen C ca. 62,- €. Natürlich gibt es auch andere Versender, bei denen es evtl. günstiger wird.
Wer mitmachen will, kann zu jeder Zeit selbst entscheiden, wann er aus dem Projekt aussteigen möchte, weil es in 4 Abschnitten ("Phasen") vorgestellt wird. Jede Phase ist ohne die nachfolgenden Abschnitte funktionsfähig.
Im RN-Forum hat radbruch hier: Minimallösung: Kamera für den RP6 ... schon eine einfache und tolle Lösung vorgestellt, mit der der RP6 "sehen" kann. Radbruch hat das eine "Minimallösung" genannt, weil keine weitere Hardware zum Anschluß der Kamera benutzt wurde. Dennoch war das wegen der gut beschriebenen Software-Entwicklung durchaus keine Minimallösung!
In diesem Projekt soll auf der Experimentierplatine (Exp) eine Schaltung "zum Mitmachen" in 4 Schritten aufgebaut werden. Man könnte das dann (wenn es 'mal fertig ist ...) als "Midi-Lösung" für eine Kamera für den RP6 bezeichnen.
So werden die 4 Phasen aussehen:
- Phase 1 -> Anschluß der CMOS-Kamera an den RP6 mit CINCH-Buchse zum Anschluß eines Video-Monitors
- Phase 2 -> Aufbau eines zweifach Video-Verstärkers zur Verbesserung der Qualität
- Phase 3 -> Aufbau eines Sync-Separators zur Abtrennung der Synchronisations-Signale
- Phase 4 -> Anbau von schaltbaren IR-LEDs
Der Aufbau wird so universell wie möglich sein, d.h. eine Auswertung der Kamera kann sowohl mit der Software von radbruch mit dem RP6 erfolgen (schon in Phase 1!), als auch mit der RP6Control M32. Auch an die CCPro M128 wurde hardwaremäßig gedacht,- ob man mit ihr auch eine Video-Auswertung hinbekommt, habe ich nicht probiert.
Was braucht man allgemein für den Aufbau einer Schaltung auf der Exp:
- Seitenschneider, Schere, Zange
- Kleinbohrer 1,5 ... 2,5 mm (zur Platinenbearbeitung)
- Lötkolben 25..30 Watt, Lötzinn
- Plastik 70 Schutzlack (CONRAD 813621)
- Isolierter Schaltdraht YV 0,20 mm² (CONRAD 606065)
- Versilberter CU-Draht 0,6 mm (CONRAD 605581)
- Isolierte Kupferlitze in verschiedenen Farben (z.B. CONRAD 605808, rot)
Mit dem versilberten CU-Draht stellt man auf der Unterseite (= Lötseite) der Exp Verbindungen zwischen den Bauteilen her; mit dem isolierten Schaltdraht werden Drahtbrücken auf der Oberseite (= Bestückungsseite) der Exp eingesetzt. Die Lage der Verbindungen zeige ich im Bestückungsplan jeder Phase. Man muss sich nicht an die genaue Lage der Verbindungen halten.
Wenn man die Drähte und Bauteile an anderen Positionen einlötet, kann es aber sein, dass man die nächste Phase nicht mehr so aufbauen kann, wie ich das hier zeige! Möglicherweise sind die weiteren Teile dann nur noch mit einer "wilden" Freiverdrahtung machbar!
Phase 1
In der Phase 1 werden Steckkontakte auf die Exp gelötet, an die die Kamera mit einem kurzen Kabel angeschlossen wird. An einer CINCH-Buchse kann das Videosignal abgenommen werden, um zu sehen, was der RP6 sehen sollte. Mit dieser Ausbaustufe kann man eine Auswertung des Bildes genau wie radbruch per Software machen. Für den RP6 existiert dafür die Software im RN-Forum, für die M32 müßte man sie noch etwas anpassen.
Man braucht folgende Bauteile (43,01€ inkl. Versand CONRAD) für die 1. Phase:
Anzahl | Bestell-Nr. | Bauteil-Bezeichnung: |
1 | 191537 | RP6 Experimentierplatine |
1 | 150001 | CMOS-Kameramodul 1 |
1 | 738699 | CINCH Einbaukupplung gelb |
1 | 741119 | 1-reihige Stiftleiste RM 2,54mm (36-polig) |
1 | 742902 | Zwei Codierbrücken (aus Set) |
1 | 500812 | Keramik Kondensator 100 nF |
1 | 472360 | Elektrolyt Kondensator 100 uF/16 V |
Hier erst einmal der Schaltplan:
Und dann der Bestückungsplan:
Die Schaltung wird in der rechten oberen Ecke der Exp aufgebaut (keine Angst: Der übrige Platz wird noch gebraucht!). Für die CINCH-Buchse muss man drei Löcher 1,6 mm für Haltestifte bohren (Kreise auf dem Plan!). Die 2 Kontakte der Buchse haben eine Breite von ebenfalls 1,6 mm,- man sollte aber mit vielleicht 2 mm bohren und die Kontaktzungen auf der Lötseite umbiegen. Es ist gut, die Buchse vor dem Verlöten noch festzukleben.
Wenn man die Platine nicht bearbeiten kann oder will, sollte man anstelle der Einbaubuchse eine gelbe CINCH-Kupplung (731080) bestellen, die mit kurzen Kabeln (am besten einem kurzen abgeschirmten Kabel von einem alten CINCH-Kabel) angeschlossen wird.
Wenn die CINCH-Einbaukupplung fest sitzt, geht es an den weiteren Aufbau:
- Die dicken schwarzen Verbindungen werden auf der Lötseite (unten) mit blankem Draht 0,6 mm hergestellt. Man lötet sie an wenigen Punkten an, aber nicht dort, wo noch ein Bauteil oder eine Drahtbrücke von oben durchgesteckt werden soll!
- Die dünneren schwarzen Verbindungen befinden sich auch auf der Lötseite der Platine. Sie werden hauptsächlich mit den Drähten der von oben eingesteckten Bauteile und der Drahtbrücken hergestellt.
- Die rechteckigen Felder sind die Stiftleisten (1x 5-polig und 5x 2-polig), die man ebenfalls (von oben) aufsetzt.
- Die zwei rot eingezeichneten Drahtbrücken entstehen aus isoliertem Draht und verlaufen auf der Oberseite der Platine. An dem Loch, wo sie enden, werden sie nach unten auf die Lötseite geführt. Man isoliert sie so weit ab, dass man auf der Unterseite das nächstgelegene Bauteil erreicht.
- Jetzt werden die beiden Kondensatoren eingelötet. Der Elektrolyt Kondensator (Elko) muss richtig herum eingesetzt werden (im Plan ist ein Plus + zu sehen, auf dem Elko ist aber meist der Minuspol markiert).
- Das CMOS-Kameramodul schließt man jetzt an die 5-polige Stiftleiste an. Die Kontakte auf der Exp haben die gleiche Anordnung wie die Stifte an der Kamera. Die Verbindung sollte nicht länger als 10 cm sein. Die Verbindung kann man löten, aber auch mit 5-poligen Stiftbuchsen steckbar machen. Die Kontakte "V out" und "GND" stellt man am besten mit einem abgeschirmten Kabel (von einem alten CINCH-Kabel) her,- die Abschirmung ist dann GND.
So weit dieser erste Abschnitt. Testen, ob alles funktioniert, kann man mit der Software von radbruch (Link siehe oben!)
Viel Erfolg!
Was bleibt noch:
- Es gibt 2 Codierstecker JP1 und JP2. Zunächst braucht man auf die 2-poligen Stiftleisten keine Codierbrücken (= Jumper) zu setzen. Steckt man bei JP1 einen Jumper auf, wird der Pin "Gamma" der Kamera auf GND gelegt. Laut Anleitung der Kamera ist damit Gamma = 1 gesetzt (sonst 0,45). Setzt man auf JP2 einen Jumper, wird die "Gain" (= Verstärkung) reduziert.
- Die Stiftleisten mit dem Namen PGx sind Plugs (= Stecker). Da darf man auf keinen Fall Jumper aufstecken! Hier wird ein Signal ausgegeben oder eingespeist. An PG1 wird die Kamera angeschlossen, PG2 soll einmal in Phase 4 für IR-LEDs dienen. An PG3 kann man das Videosignal abnehmen und an PG4 über eine lose Drahtverbindung (am besten abgeschirmt!) wieder einspeisen. PG4 ist an IT1 des XBUS angeschlossen, das ist der ADC-Eingang 4 (PA4) der RP6 Base (E_INT1). Dieser ADC-Eingang soll die Helligkeit der Bildpunkte auswerten.
- Wenn man keinen Monitor an die CINCH-Buchse angeschlossen hat und das Videosignal mit IT1 verbindet, sollte man einen 75 Ohm Widerstand statt dem Monitor an die CINCH-Buchse anschließen, damit der RP6 das Videosignal auswerten kann.
- Alternativen zu ADC4 der RP6 Base: Man kann auch ADC0 oder ADC1 nehmen (verfügbar auf dem RP6 Mainboard). Auch die M32 kann schon arbeiten: ADC2..7 sind frei und freuen sich auf diese Aufgabe!
So könnte das Ergebnis der Phase 1 bei euch aussehen:
Phase 2
Hier die nächste Stückliste! Man braucht folgende Bauteile (3,33€ ohne Versand CONRAD) für die 2. Phase:
Anzahl | Bestell-Nr. | Bauteil-Bezeichnung: |
1 | 154989 | Transistor BC 547C |
1 | 155080 | Transistor BC 556B |
1 | 162280 | Diode 1N4148 |
1 | 425052 | Spindel-Trimmpoti 200 Ohm |
1 | 420603 | Widerstand Metall 1% 75 Ohm |
2 | 418137 | Widerstand Metall 1% 100 Ohm |
1 | 418196 | Widerstand Metall 1% 330 Ohm |
1 | 418218 | Widerstand Metall 1% 470 Ohm |
1 | 418293 | Widerstand Metall 1% 2,2 kOhm |
1 | 418331 | Widerstand Metall 1% 4,7 kOhm |
1 | 411019 | Widerstand Metall 1% 4,99 kOhm |
1 | 418374 | Widerstand Metall 1% 10 kOhm |
1 | 500812 | Keramik Kondensator 100 nF |
1 | 455393 | MKS 2 Folien-Kondensator 100 nF |
1 | 472352 | Elektrolyt Kondensator 47 uF/16 V |
Hier erst einmal der Schaltplan der Phase 2:
Jetzt funktioniert der Videoverstärker bei mir wie er soll. Es sollte ein einfacher Verstärker sein, der das Video-Signal von 1V p-p auf 2V p-p bringt.
Warum die 2-fache Verstärkung:
- 1. Die Dynamik der Graustufen wird höher (damit wird der Wertebereich des ADC besser ausgenutzt)
- 2. Eine einfache "Dioden-Klemme" wird möglich (dazu später)
An das Video-Signal der Kamera wird der Verstärker mit einem Abschlußwiderstand von 75 Ohm und mit einem Elko 47µF angekoppelt. Die beiden Transistoren verstärken das Signal. Der Ausgang liegt am Collector vom BC556B, das ist die 2-polige Ausgangsstiftleiste PG5. Diesen Ausgang habe ich "DC-ADC-Video" genannt, weil hier das Signal für den ADC mit einem Gleichspannungsanteil (DC) aus dem Verstärker ausgekoppelt wird. Das Video-Signal "reitet" also auf einer Gleichspannung. Dieses Signal darf ich nur an eine hochohmige Schaltung anschließen, aber der Analog-Digitalwandler unseres ATMega32 ist ja mit 100 MOhm sehr hochohmig, wenn er nicht (wie bei der RP6 Base der Eingang ADC4) mit einem Pulldown-Widerstand (liegt zwischen dem Eingang und GND) beschaltet ist (RP6 Base: 10 kOhm, R34).
DC-ADC-Video (PG5):
Mit dem roten MKS 2 Kondensator 100 nF wird das Ausgangssignal als Wechselspannung (AC) ausgekoppelt. Das ist die 2-polige Ausgangsstiftleiste PG6. Dieser Ausgang heißt "AC-ADC-Video".
AC-ADC-Video (PG6):
Über die Codierstecker JP3, JP4 und JP5 können dort noch 3 Bauteile (2 Widerstände und 1 Diode) angeschlossen werden. Das sind die Bauteile der "passiven Klemme" mit Abschlusswiderständen.
Was ist das? Wenn man sich das AC-ADC-Video ansieht, dann fällt auf, dass der Null-Volt-Pegel mitten im Video-Signal, also in den Helligkeitsinformationen liegt. Da der ADC nur positive Spannungen (über 0 Volt) messen kann, würden die unteren (dunkleren) Werte abgeschnitten. Ideal wäre, wenn der Schwarzwert (Black Level) immer auf 0 Volt (GND) liegen würde und die Helligkeitsinformationen darüber. Man müßte das Signal also "anklemmen" können, daher der Name "Klemmschaltung" für Schaltungen, die eine Spannung auf einem festen Wert halten. Wenn es dabei um Video-Signale geht, dann braucht man eine "Schwarzwert-Klemme". Wenn ihr im Netz suchen wollt, werdet ihr bei den englischen Begriffen "Black Level Clamp", "Black Level Restauration" fündig. Da gibt es unendlich viele Schaltungen seit es die Fernsehtechnik gibt. Da kann man auch lesen, dass es eine "passive Klemme" eigentlich für das Video-Signal nicht gibt, sondern man braucht dafür aktive Bauteile (Transistoren, ICs). Die einfachste (passive) Klemme ist eine Diode (1N4148), die man hinter den Folien-Koppelkondensator 100 nF nach GND schaltet (Jumper auf JP4 stecken und als Lastwiderstand den 4,99 kOhm einschalten, d.h. Jumper auch auf JP3 stecken!).
In unserem weiteren Projekt werden wir IMMER einen Lastwiderstand von 5 kOhm für AC-ADC-Video verwenden. Daher schalte ich für die ADC-Kanäle der M32 oder M128 und für die Kanäle ADC0/1 der RP6 Base immer den 4,99 kOhm Widerstand mit JP3 ein. Ausnahme ist der Eingang ADC4 der RP6 Base (an PG4). Da dort auf dem RP6 Mainboard ein Lastwiderstand von 10 kOhm (R34) schon vorhanden ist, brauche ich für diesen ADC-Eingang nur noch einen 10 kOhm Widerstand (Jumper JP5 aufgesteckt, JP3 frei!). Damit errechnet sich wieder ein 5 kOhm Abschlusswiderstand (= 10 * 10 / (10 + 10) kOhm).
AC-ADC-Video MIT Dioden-Klemme (PG6):
Jetzt ist das Video-Signal so "festgeklemmt", dass der HSync-Impuls zwar noch unterhalb von 0 Volt liegt, aber der Schwarzwert fast bei 0 Volt. So kann man das schon gut auswerten. Die 0,6 V, die hier geklemmt werden, sind die Durchlaßspannung der Diode. Jetzt wird auch klar, warum ich das Video-Signal der Kamera 2-fach verstärke:
Bei 1 V p-p stehen ca. 0,7 V für die Helligkeitsinformationen zur Verfügung und ca. 0,3 V für den HSync-Impuls. Verstärke ich das 2-fach, ist der HSync-Impuls 0,6 V (= 2 x 0,3 V) hoch. Das paßt gut zur Durchlaßspannung einer Silizium-Diode, damit diese den HSync-Impuls klemmen kann.
Ich kann mit der Dioden-Klemmschaltung jetzt auch meinen Verstärker abstimmen, wenn ich ein Oszi habe: In meinem Bild oben liegt der Schwarzwert noch etwas unter dem 0 Volt Pegel, d.h. ich kann die Verstärkung des Video-Verstärkers noch etwas erhöhen, damit der Schwarzwert genau auf die Nulllinie fällt. Dazu dient der Trimmer 200 Ohm im Video-Verstärker. Rechts herum gedreht wird die Verstärkung größer. Der Regelbereich geht ca. von 1,8-fach bis 3,3-fach. Das sollte ausreichen. Wenn man kein Oszi, aber ein Widerstandsmessgerät hat, kann man VOR dem Einlöten den Trimmer so einstellen, dass das Messgerät ca. 140 Ohm zwischen den beiden enger zusammen liegenden Pins des Spindeltrimmers zeigt. Das ist dann eine Verstärkung von ca. 2-fach.
Wie sieht es eigentlich mit der Software-Auswertung aus, wenn ich ein "geklemmtes" Video-Signal verwende? Da ich ja die HSync-Impulse abschneide, kann ich die Software von radbruch nicht mehr zur Auswertung verwenden. Ich kann ja die Zeilensynchronisation nicht mehr erkennen. Sinn macht das "Klemmen" also nur, wenn ich die Synchron-Impulse auf andere Weise zur Verfügung stellen kann. Das geschieht in der 3. Phase mit dem "Sync-Separator". In dieser 2. Bauphase muß also JP4 offen bleiben!
Jetzt ist auch der Bestückungsplan der Phase 2 fertig, und es kann an den Aufbau gehen:
Ich habe wieder die Drahtbrücken (diesmal sind's 5) dick rot eingezeichnet. Ein paar Bauteile sind farbig, um zu zeigen, wie man die Drähte z.B. der Widerstände noch auf der Unterseite der Platine weiter führen kann. Dadurch braucht man fast keinen zusätzlichen blanken Draht auf der Unterseite (man kann das so eng auch nicht mit zusätzlichem blanken Draht verlöten!).
Nehmen wir z.B. den hellgrünen Widerstand 100 Ohm: Nachdem sein Draht am oberen Platinenrand nach unten durchgesteckt wurde, wird er nach links (von oben gesehen!) umgebogen, dann 2 Löcher nach unten geführt, 2 Löcher wieder nach links und 1 Loch nach unten. Er landet dann unter dem Spindeltrimmer 200 Ohm an dessen einem Kontakt und kann dort und an den 3 Stellen, wo er um 90° gebogen wurde, verlötet werden. Auf diese Weise können die Drähte aller Bauteile benutzt werden, wie ich es mit den Farben angedeutet habe. Natürlich kann man das auch gaaanz anders machen.
Der 100 nF MKS 2 Folien-Kondensator sitzt direkt rechts vom USRBUS, ich habe ihn hier 'mal als lila Kasten mit Rastermaß 5 mm eingezeichnet. Seine kurzen Drähte gehen rechts von Y1 und Y5 nach unten.
Die Diode 1N4148 überbrückt rechts von JP4 zwei Löcher, ihr schwarzer Strich (Kathode) schaut zum USRBUS.
Die beiden Transistoren sind gekennzeichnet. "E" ist jeweils der Emitter. Wenn man den Transistor so vor sich hält, dass man auf die abgeflachte Seite schaut (Beinchen nach unten), dann ist der Emitter das rechte "Bein".
Viel Erfolg beim Löten!
Phase 3
Hier schon einmal die nächste Stückliste! Man braucht folgende Bauteile (9,41€ ohne Versand CONRAD) für die 3. Phase:
Anzahl | Bestell-Nr. | Bauteil-Bezeichnung: |
1 | 154989 | Transistor BC 547C |
1 | 155080 | Transistor BC 556B |
1 | 175951 | IC LM 1881N |
1 | 189502 | IC Fassung 8-pol |
1 | 420719 | Widerstand Metall 1% 620 Ohm |
1 | 418315 | Widerstand Metall 1% 3,3 kOhm |
1 | 418331 | Widerstand Metall 1% 4,7 kOhm |
1 | 418595 | Widerstand Metall 1% 680 kOhm |
1 | 457191 | Keramischer Kondensator 39 pF |
1 | 457302 | Keramischer Kondensator 470 pF |
2 | 455393 | MKS 2 Folien-Kondensator 100 nF |
1 | 741119 | 1-reihige Stiftleiste RM 2,54mm (36-polig) |
Falls gewünscht, kann man zum sicheren Anschluß der Sync-Signale an die I/O-Wannen-Stecker der RP6Control M32 oder CCPro M128 noch folgende Teile bei Fa. Reichelt bestellen:
Anzahl | Bestell-Nr. | Bauteil-Bezeichnung: |
1 | WSL 10G | Wannenstecker 10-polig gerade RM 2,54 |
2 | PFL 10 | Pfostensteckverbinder 10-polig f. Flachbandkabel |
1 | AWG 28-10G 3M | Flachbandkabel grau 10-polig |
Bei Reichelt bekommt man übrigens auch einreihige Stiftleisten (SL 1X36G 2,54), die beim großen C offenbar z.Zt. knapp sind, und passende einreihige Buchsenleisten (BL 1X20G 2,54), mit denen man die Kamera, ADC-Videoverbindungen und die IR-LEDs steckbar anschließen kann.
So, jetzt gibt es auch den Schaltplan der Phase 3:
Der Sync-Separator ("Abtrenner der Synchronisierungs-Signale") besteht nur aus dem IC LM 1881N. Zu seinem Pin 2 wird das Video-Signal der Kamera über einen Folienkondensator 100 nF geführt. Die Bauteile 620 Ohm, 39 pF, 470 pF stellen einen Tiefpaß dar und halten die Frequenzen der Bildinformationen vom IC fern. Der Sync-Separator erzeugt die vier Ausgangssignale CSync, VSync, Burst/Back Porch und Odd/Even. Sie werden im Absatz "2.2 Die Synchronisations-Signale" genauer erklärt.
Mit dem Jumper JP8 wird ausgewählt, ob man CSync (Stellung C) oder Burst (Stellung B) für die horizontale Synchronisation (HSync) verwenden möchte. JP9 bestimmt, ob an den 10-poligen I/O-Wannenstecker (I/O M32/M128) eine RP6Control M32 (Stellung 32, 1 Jumper!) oder eine CCPro M128 Karte (Stellung 128, 2 Jumper!) zur Auswertung der Signale angeschlossen wird. Über JP10 (Stellung H) kann HSync mit SDA (für die RP6Base) verbunden werden. Wird JP11 geschlossen (Stellung OE), können die M32 oder M128 das Signal Odd/Even über XBUS IT3 auswerten. JP12 verbindet VSync entweder mit SCL (Stellung 6 für die RP6Base) oder mit XBUS IT2 (Stellung 32 für die M32). Eine Tabelle, die die Verbindungen der Sync-Signale zeigt, findet ihr unter "1.5.3 Verteilung der Sync-Signale".
Bleibt noch die Erklärung der "Aktiven Klemme", die aus den beiden Transistoren besteht. Werden JP6 und JP7 geschlossen (JP4: Offen!), dann steuert der Sync-Separator mit dem CSync-Signal den BC 556B so an, dass er während der horizontalen Sync-Impulse durchschaltet. Damit wird auch der BC 547C durchgeschaltet. Er liegt mit seinem Emitter an GND und mit dem Collector über JP6 am AC-ADC-Video-Signal und schließt das Video-Signal für die Dauer des HSync-Impulses kurz. Dadurch wird der HSync-Impuls gekappt und das Signal annähernd auf den Schwarzwert geklemmt. Nachteil dieser (einfachen) Lösung ist der hohe Abschaltimpuls am Ende der hinteren Schwarzschulter, der evtl. zu einem Verlust von Bildinformationen an den Zeilenanfängen führen kann. Und so sieht's aus:
- alles Weitere in Planung ... -
Phase 4
- wird's geben ... -
Frage an euch:
Wie viele IR-LEDs sollen wir nehmen?
- Stromsparende Variante (20 mA) mit 2 oder 3 LEDs
- Variante mit höherer Leistung (40 mA) mit 4 bis 6 LEDs
Hier schon einmal die übernächste geplante Stückliste!
Man braucht (voraussichtlich) folgende Bauteile (4,65..6,21€ ohne Versand CONRAD) für die 4. Phase:
Anzahl | Bestell-Nr. | Bauteil-Bezeichnung: |
1 | 155080 | Transistor BC 556B |
2 | 406996 | Widerstand Metall 1% 60,4 Ohm |
2 | 418145 | Widerstand Metall 1% 120 Ohm |
1 | 418331 | Widerstand Metall 1% 4,7 kOhm |
2..6 | 154434 | IR-LEDs 5 mm, Typ L-53F3BT |
1 | 529593 | Lötpunktrasterplatte 160 x 100 |
Gesamtkosten des Projekts: Ca. 62€
Allgemeine Daten und Tabellen
Stecker
Stecker | Signal(e) | Pins | Bedeutung |
PG1 | Video-in, GND, VCC, Gamma, Gain | 5 | Anschluß CMOS Kamera |
PG2 | IR-LEDs+, GND | 2 | Ausgang für IR-LEDs |
PG3 | Video-out, GND | 2 | Ausgang Video 1V p-p |
PG4 | ADC-Video-in, GND | 2 | Eingang ADC4 der RP6Base |
PG5 | DC-ADC-Video-out, GND | 2 | Ausgang DC-ADC-Video |
PG6 | AC-ADC-Video-out, GND | 2 | Ausgang AC-ADC-Video |
Jumper
Zeichenerklärung:
- Stellung ON = Jumper aufgesteckt (Kontakt geschlossen)
- Stellung OFF = Jumper abgezogen (Kontakt offen)
Jumper | Stellung | Bedeutung |
JP1 | ON | Kamera: Gamma = 1 |
JP1 | OFF | Kamera: Gamma = 0,45 |
JP2 | ON | Kamera: Gain low |
JP2 | OFF | Kamera: Gain high |
JP3 | ON | AC-ADC-Video: Lastwiderstand 5 kOhm (JP5: OFF!) |
JP4 | ON | AC-ADC-Video: Level Clamp Diode (JP6,7: OFF!) |
JP5 | ON | AC-ADC-Video: Lastwiderstand 10 kOhm (JP3: OFF!) |
JP6,7 | ON | AC-ADC-Video: Black Level Clamp (JP4: OFF!) |
JP8 | C ON | HSync = CSync |
JP8 | B ON | HSync = Burst |
JP9 | 32 ON | I/O-Stecker der RP6Control M32 |
JP9 | 128 ON (2x) | I/O-Stecker der RP6 CCPro M128 (2 Jumper!) |
JP10 | H ON | SDA = HSync |
JP11 | OE ON | M32/M128: IT3 = Odd/Even |
JP12 | 6 ON | SCL = VSync |
JP12 | 32 ON | M32: IT2 = VSync |
Verteilung der Sync-Signale
In dieser Tabelle habe ich aufgelistet, mit welchem Portpin das jeweilige Sync-Signal ab der Phase 3 verbunden werden soll. Dabei habe ich möglichst interruptfähige Pins genommen (auf der RP6Base waren aber keine mehr frei!). Für die horizontale Synchronisation habe ich den ICP-Pin genommen, weil man damit gut Timer starten/stoppen kann, was für das Einlesen der Zeile nützlich sein kann.
System | Signal | Port | Name | XBUS | USRBUS | I/O-Stecker | RP6-Name |
RP6Base | VSync | PC0 | SCL | SCL | - | - | SCL |
HSync | PC1 | SDA | SDA | - | - | SDA | |
Odd/Even | - | - | - | - | - | - | |
RP6Control M32 | VSync | PD3 | INT1 | IT2 | - | - | EINT2 |
HSync | PD6 | ICP1 | - | - | Pin 8 | IO_PD6 | |
Odd/Even | PB2 | INT2 | IT3 | - | - | EINT3 | |
RP6 CCPro M128 | VSync | PD2 | INT2 | - | - | Pin 8 | PORT_RXD1 |
HSync | PD4 | ICP1 | - | - | Pin 6 | PD4 (A16) | |
Odd/Even | PE6 | INT6 | IT3 | - | - | PORT_PE6_INT |
RP6 Kamera - Mitmach-Projekt: Software
Da dies ein "Mitmach-Projekt" sein soll, hoffe ich für die Programmierung einer Software für die RP6 Kamera, dass sich viele beteiligen und hier fleissig mitschreiben/bearbeiten!
Grundlagen und erste Überlegungen
Auf Wikipedia (siehe Quelle1!) findet man gute Informationen zum Aufbau des BAS Signals, das auch unsere Kamera ausspuckt. Sie ist zwar nicht sehr hochwertig, kann aber laut Datenblatt 352 x 288 Punkte darstellen, was für unsere Zwecke völlig ausreicht. Von den 288 Zeilen, die ausgegeben werden, sind nur ca. 230 Zeilen auf einem Video-Monitor sichtbar.
Jede Zeile wird in 64 µs übertragen, davon sind nur 52 µs für den Bildinhalt vorgesehen. Für einen µC wie den ATMega32 ist das schon eine Herausforderung: Wollte er jeden der 352 Punkte der Zeile lesen, dann hätte er dafür rechnerisch knapp 0,15 µs Zeit. Beim RP6 dauert ein Taktzyklus 0,125 µs (bei 8 MHz Takt), bei der RP6Control M32 0,0625 µs (bei 16 MHz Takt). Mit der M32 hätte man also 2,4 Taktzyklen Zeit für jeden Punkt.
Man sieht schon, dass das nichts werden kann! Es ist unmöglich, jeden Punkt der Zeile "live" einzulesen. Es stellt sich die Frage, wieviele Punkte man denn nun einlesen kann. Ich brauche dazu ja den Analog-Digitalwandler Eingang (ADC) des ATMega32, weil ich die Helligkeit jedes Punktes (also eine Spannung) lesen möchte.
Das Datenblatt zum ATMega32 sagt dazu: Im "free running modus" (auf jede Messung folgt sofort die nächste) braucht jede Analog-Digitalwandlung 13 ADC-Taktzyklen. Das Ergebnis steht dann nach weiteren 0,5 ADC-Taktzyklen zur Verfügung. Was ist eigentlich der "ADC-Takt"? Man muss den Haupttakt des µC für den Analog-Digitalwandler teilen. Das Ergebnis ist dann der ADC-Takt. Der Maximalwert liegt laut Datenblatt bei 1 MHz für den ATMega32. Bei 13 ADC-Taktzyklen pro ADC-Wandlung dauert also jede Wandlung 13 µs.
Das heißt, dass man max. nur 4 Punkte pro Zeile (= 52 / 13) lesen kann. Das ist ja sehr schade! Man hätte dann kaum Auflösung.
Diese Feststellungen sind auch nicht vereinbar mit den Ergebnissen von radbruch (siehe Quelle2!), der viel mehr Punkte pro Zeile einlesen kann. Er verwendet als ADC-Takt 4 MHz, was weit außerhalb der Spezifikationen für den ATMega32 ist. Geht das überhaupt? Kann man mit einer Wandlungszeit von 3,25 µs (= 1 / 4 * 13 µs) realistische 8-Bit-Werte ermitteln? Immerhin würde man so rechnerisch auf eine Auflösung von 16 Punkten pro Zeile (= 52 / 3,25 µs) kommen.
Bevor wir die Fragen beantworten: Überlegen wir erst einmal weiter ...
Mit dem Einlesen der Punkte ist es noch nicht getan. Wir brauchen auch Zeit, um den gewandelten Wert in einer Byte-Variable zu speichern. Dafür stehen die jeweils 13 µs zur Verfügung, während der der ADC-Wandler mit der nächsten Wandlung beschäftigt ist. Bei 8 MHz Takt der RP6 Base sind das 104 Zyklen, in denen man das in GCC gut auch ohne Optimierung durch Assembler-Teile hinkriegt. Wenn eine ADC-Wandlung nur 3,25 µs braucht, hat man bei der RP6 Base noch 26 Taktzyklen zur Verfügung. Auch das reicht noch aus, um in einer Schleife einen Byte-Wert nach jeder Wandlung zu speichern. Wie gross kann denn ein Bild sein, mit dem der ATMega32 nicht überfordert ist? Er hat 2024 Byte SRAM, den Speicherplatz braucht er für Variablen und den Stack (Stapel). Wenn man kein sehr umfangreiches Programm mit vielen Variablen und Unterprogrammen hat, kann man vielleicht die Hälfte (1024 Byte) für ein Bild verwenden. Das wäre eine Auflösung bei 8 Bit Helligkeitswerten von 32 x 32 Punkten. Reduziert man die Helligkeitswerte auf 4 Bit (16 Graustufen), kann man 45 x 45 Bildpunkte darstellen. Auf ein Seitenverhältnis von 4 : 3 des Fernsehbildes bezogen wären in 1024 Byte RAM Bilder von 36 x 28 (8 Bit) oder 52 x 39 (4 Bit) Punkten zu speichern. 16 Graustufen sind für die Aufgabe einer Kamera an einem uC gut ausreichend. Man kann damit Linien folgen und sogar eine einfache Orientierung im Raum erreichen.
Jetzt ist wohl eine Entscheidung fällig:
Ich entscheide mich dafür, eine Bildgröße von 52 x 39 Punkten mit 16 Graustufen zu erreichen.
Kann das klappen? Die 39 Zeilen mache ich dann aus ca. 230 sichtbaren Zeilen der Kamera (Zeilen 30..260). Ich würde also jede 6. Zeile (= 230 / 39) lesen. Jede Zeile dauert 64 µs, also beträgt der Abstand vom Ende der 1. bis zum Anfang der 6. Zeile 256 µs. Das ist genügend Zeit, um die Werte jeder Zeile zu verarbeiten (z.B. in eine Tabelle zu speichern). Kritischer ist die Zeile selbst. Ich will 52 Punkte pro Zeile darstellen. Damit müßte ich jede µs einen Punkt einlesen. Selbst mit der hohen Übertaktung des ADC (4 MHz), die radbruch verwendet hat, komme ich nur auf 16 Punkte pro Zeile. Was tun? Ich könnte das 2. Halbbild benutzen. Bei meiner geringen Auflösung von 52 x 39 Pixeln kann ich ruhig wenige aufeinanderfolgende Zeilen als EINE Zeile betrachten. Wenn ich z.B. Zeilen 5 und 7 eines Halbbildes und Zeile 6 des anderen Halbbildes lesen würde, dann käme ich auf 16 x 3 = 48 Punkte. Natürlich müßte ich nach der Zeile 5 die Zeilen 6 und 7 um je 1,08 µs (= 3,25 / 3) versetzt lesen, damit ich in meiner "dicken Zeile" (besteht aus 3 echten Zeilen!) 48 Punkte (= 16 x 3) lesen kann. Das kommt dem Ziel von 52 Punkten pro Zeile schon nahe.
Bevor ich das als Methode feststampfe, noch eine letzte Überlegung:
Wie wäre es, wenn ich das zeitkritische Lesen einer Zeile vermeide und nur Spalten lese? Das hat radbruch auch in seiner Software gemacht und klingt erfolgversprechend. Ich würde also wie beim 1. Ansatz jede 6. Zeile lesen, um meine vertikale Zeilenauflösung von 39 Zeilen zu erreichen. Das mache ich dann 52 mal, indem ich in jedem Halbbild das Lesen der Zeilenpunkte um 1 µs verzögere. Ich lese also mein Bild spaltenweise ein. Eindeutiger Vorteil: Ich komme nicht in Zeitdruck beim Einlesen, weil ich nur alle 64 µs einen Punkt lesen muss. Nachteil: Ich brauche 52 Halbbilder Zeit, um mein Bild mit allen Zeilenpunkten komplett eingelesen zu haben. Das ist über eine Sekunde.
Schlimm ist das nicht: Ein Bild pro Sekunde ist besser als Nichts. Beim 1. Ansatz wäre das komplette Bild in 60 ms "im Kasten", also 17x schneller.
Hier braucht's wohl wieder eine Entscheidung:
Ich entscheide mich für den 1. Ansatz, der nach 3 Halbbildern fertig ist. Grund: Ich will ja z.B. einer Linie folgen, da kann eine Abtastrate von 1 Sekunde schon zu wenig sein. Sicher könnte man das auch mit der 2. Methode des Spaltenlesens schaffen, wenn man nur wenige Spalten liest und die Kamera um 90° dreht. Ich möchte aber nicht die Kameraposition ändern, sondern immer mein ganzes Bild lesen und verarbeiten. Das ermöglicht mir, im selben Programm einer Linie zu folgen, aber auch einen hellen Gegenstand in der Ferne zu "sehen". Ist sicher Geschmackssache ...
... Baustelle! Hier wird noch weiter gedacht! ..........
Die Synchronisations-Signale
Die Darstellung jeder Zeile wird durch den horizontalen Synchronisations-Impuls (HSync) ermöglicht.
Oben erkennt man das Videosignal, das hier mit fast 2 Zeilen dargestellt ist. HSync ist 4,7 µs lang und wird gefolgt von der hinteren Schwarzschulter (5,8 µs). Danach werden 52 µs lang die Bildinformationen der Zeile gesendet. Es folgt die vordere Schwarzschulter (1,5 µs) vor dem HSync der nächsten Zeile. In der Mitte ist das Signal CSync des Sync-Separators zu sehen. Es führt normalerweise High-Pegel und wird nur Low (0 V), solange der HSync-Impuls dauert. Ein weiteres Signal, das der Sync-Separator ausgibt, heißt Burst (Back Porch). Es führt für 4 µs Low-Pegel, nachdem der CSync-Impuls beendet ist. Hier liegt beim FBAS-Videosignal (Farb-BAS) der Burst, der die Farbinformationen enthält. Bei unserer S/W-Kamera gibt es keinen Burst.
Dieses Bild zeigt die vertikale Bildsynchronisation. Das ist die Abfolge von Signalen, die zwischen den einzelnen Halbbildern gesendet werden. Auch unsere Kamera sendet diese Halbbilder (Datenblatt: "2:1 Interlace").
In der oberen Bildhälfte ist die vertikale Synchronisation zwischen den geraden (even) und ungeraden (odd) Halbbildern dargestellt. Das ungerade Halbbild ("Field 1") enthält die Zeilen 1, 3 ... 285, 287. Das gerade Halbbild ("Field 2") enthält die Zeilen 2, 4 ... 286, 288.
In der unteren Bildhälfte ist die vertikale Synchronisation zwischen den ungeraden (odd) und geraden (even) Halbbildern dargestellt.
In diesem Bild zeige ich einen Teil der VSync-Impulse, und zwar ab der fallenden Flanke von Odd/Even:
Quellen
- Quelle1
- Wikipedia Fernsehsignal
- Quelle2
- Minimallösung: Kamera für den RP6
- Quelle3
- Maxim: AC-Kopplung, Vorspannung und Clamp
- Quelle4
- Intersil: Technical Brief TB462.1
- Quelle5
- LM1881N Datasheet
- Quelle6
- BC 547C Datasheet
- Quelle7
- BC 556B Datasheet
- Quelle8
- IR-LED L-53F3BT Datasheet
--Dirk 19:19, 27. Mär 2010 (CET)