Dirk (Diskussion | Beiträge) K |
Dirk (Diskussion | Beiträge) K (→Autoren) |
||
(188 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | [[bild:Phase4_B.JPG|right|400px]] | ||
= RP6 Kamera - Mitmach-Projekt: Hardware = | = RP6 Kamera - Mitmach-Projekt: Hardware = | ||
− | |||
[[:Kategorie:Projekte]] | [[:Kategorie:Projekte]] | ||
Zeile 7: | Zeile 7: | ||
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. | 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 | + | Im RN-Forum hat radbruch mit der [http://www.roboternetz.de/phpBB2/viewtopic.php?t=33228 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! |
− | [http://www.roboternetz.de/phpBB2/viewtopic.php?t=33228 Minimallösung: Kamera für den RP6] | + | |
− | + | ||
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. | 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. | ||
Zeile 80: | Zeile 78: | ||
* 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). | * 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. | * 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. | ||
+ | |||
+ | Hier noch ein Bild von den beiden Video-Kabeln, die man sich anfertigen kann: | ||
+ | |||
+ | [[bild:Videokabel.jpg]] | ||
+ | [[bild:Videokabel_SP.jpg]] | ||
+ | |||
+ | Ein Kabel dient zum Anschluß der Kamera (5-polig mit Abschirmung für das Video-Signal). Das andere abgeschirmte Kabel verbindet einen der ADC-Video-Ausgänge (PG3, PG5, PG6) mit einem ADC-Eingang der RP6Base (PG4) oder der M32 oder M128 (ADC-Wannenstecker). Ein 2-adriges Kabel wird zusätzlich für die IR-LEDs benötigt. Alle Kabel sind steckbar. ''Hinweis: Es geht bei den kurzen Kabeln auch ohne die Abschirmung. Man sollte die Kabel dann aber verdrillen.'' | ||
So weit dieser erste Abschnitt. Testen, ob alles funktioniert, kann man mit der Software von radbruch (Link siehe oben!) | So weit dieser erste Abschnitt. Testen, ob alles funktioniert, kann man mit der Software von radbruch (Link siehe oben!) | ||
Zeile 88: | Zeile 93: | ||
* 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. | * 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. | * 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. | + | * 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 mit der Software von radbruch 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! | * 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! | ||
Zeile 98: | Zeile 103: | ||
== Phase 2 == | == Phase 2 == | ||
− | Hier die | + | Hier die Stückliste! |
Man braucht folgende Bauteile (3,33€ ohne Versand CONRAD) für die 2. Phase: | Man braucht folgende Bauteile (3,33€ ohne Versand CONRAD) für die 2. Phase: | ||
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
Zeile 135: | Zeile 140: | ||
|} | |} | ||
− | + | Schaltplan der Phase 2: | |
[[bild:RP6_CMOSCamera_SP_2.jpg]] | [[bild:RP6_CMOSCamera_SP_2.jpg]] | ||
− | Jetzt funktioniert der Videoverstärker bei mir wie er soll. Es | + | Jetzt funktioniert der Videoverstärker bei mir wie er soll. Es soll ein einfacher Verstärker sein, der das Video-Signal von 1V p-p auf 2V p-p bringt. |
Warum die 2-fache Verstärkung: | Warum die 2-fache Verstärkung: | ||
Zeile 149: | Zeile 154: | ||
DC-ADC-Video (PG5): | DC-ADC-Video (PG5): | ||
− | [[bild:Video_PG5.jpg]] | + | [[bild:Video_PG5.jpg]] |
Zeile 180: | Zeile 185: | ||
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!'' | 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 | + | Jetzt kann es auch an den Aufbau der Phase 2 gehen: |
[[bild:RP6_Exp_CMOSCamera_Step2_Bruecken_H.jpg]] | [[bild:RP6_Exp_CMOSCamera_Step2_Bruecken_H.jpg]] | ||
Zeile 193: | Zeile 198: | ||
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". | 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". | ||
+ | |||
+ | So kann die Phase 2 aufgebaut aussehen: | ||
+ | |||
+ | [[bild:Phase2neu_B.jpg]] | ||
+ | [[bild:Phase2neu_L.jpg]] | ||
+ | |||
+ | Radbruch hat vorgeschlagen, den 75 Ohm Widerstand jumperbar zu machen. Man müßte den Widerstand dann stehend einlöten. So könnte das aussehen: | ||
+ | |||
+ | [[bild:JP_75_Ohm.jpg]] | ||
Viel Erfolg beim Löten! | Viel Erfolg beim Löten! | ||
Zeile 198: | Zeile 212: | ||
== Phase 3 == | == Phase 3 == | ||
− | Hier | + | Hier die Stückliste! |
− | Man braucht | + | Man braucht folgende Bauteile (9,41€ ohne Versand CONRAD) für die 3. Phase: |
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
|- | |- | ||
Zeile 208: | Zeile 222: | ||
| 1 || 155080 || Transistor BC 556B | | 1 || 155080 || Transistor BC 556B | ||
|- | |- | ||
− | | 1 || 175951 || IC LM 1881N | + | | 1 || 175951 || IC LM 1881N * |
|- | |- | ||
| 1 || 189502 || IC Fassung 8-pol | | 1 || 189502 || IC Fassung 8-pol | ||
Zeile 220: | Zeile 234: | ||
| 1 || 418595 || Widerstand Metall 1% 680 kOhm | | 1 || 418595 || Widerstand Metall 1% 680 kOhm | ||
|- | |- | ||
− | | 1 || 457191 || Keramischer Kondensator 39 pF | + | | 1 || 457191 || Keramischer Kondensator 39 pF |
|- | |- | ||
− | | 1 || 457302 || Keramischer Kondensator 470 pF | + | | 1 || 457302 || Keramischer Kondensator 470 pF |
|- | |- | ||
| 2 || 455393 || MKS 2 Folien-Kondensator 100 nF | | 2 || 455393 || MKS 2 Folien-Kondensator 100 nF | ||
Zeile 229: | Zeile 243: | ||
|} | |} | ||
− | Zu *) | + | '''Zu *)''' Beim großen C scheint der LM 1881N nur noch in begrenzter Stückzahl vorrätig zu sein. |
+ | Es gibt Vergleichstypen, die pin-kompatibel sind: | ||
+ | |||
+ | * '''EL 1881CN (Digi-Key: 2,59 €):''' Es gibt nichts zu beachten. Der Ausgang Burst gibt einen negativen Impuls von 3,5 µs (anstelle von 4 µs beim LM 1881N) aus. | ||
+ | |||
+ | * '''EL 1882CN (z.B. Farnell):''' Auch dieser Typ kann anstelle des LM 1881N eingesetzt werden. Der Ausgang Burst gibt einen negativen Impuls von 3,5 µs (anstelle von 4 µs beim LM 1881N) aus. Der Ausgang VSync gibt einen negativen Impuls von 270 µs (anstelle von 230 µs beim LM 1881N) aus. | ||
+ | |||
+ | * '''EL 4581CN (Digi-Key: 6,23 €):''' Bei diesem Typ sind die Bauteile Widerstand 620 Ohm, keram. Kondensatoren 470 pF und 39 pF nicht einzubauen. Der 620 Ohm Widerstand wird durch eine Drahtbrücke ersetzt. Der Ausgang Burst gibt einen negativen Impuls von 3,5 µs (anstelle von 4 µs beim LM 1881N) aus. | ||
+ | |||
+ | ''Alle Vergleichstypen funktionieren mit dem Rset Widerstand von 680 kOhm wie der LM 1881N. In den Datenblättern von intersil wird jeweils ein Widerstand von 681 kOhm als Rset angegeben. Das liegt gut in der Toleranz von 1% des 680 kOhm Widerstands. Wer es ganz genau nehmen will, mißt einige 680 kOhm Widerstände aus und baut den ein, der 681 kOhm am nächsten kommt, oder nimmt 2 ausgemessene Widerstände in Reihe, die zusammen 681 kOhm erreichen.'' | ||
+ | |||
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: | 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: | ||
Zeile 245: | Zeile 269: | ||
''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.'' | ''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.'' | ||
− | + | Jetzt gibt es auch den Schaltplan der Phase 3: | |
− | + | [[bild:RP6_CMOSCamera_SP_3.jpg]] | |
− | - wird | + | 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.1 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. Dies funktioniert sehr gut, Nachteil dieser (einfachen) Lösung ist aber der hohe Abschaltimpuls am Ende der hinteren Schwarzschulter, der zu einem geringen Verlust von Bildinformationen an den Zeilenanfängen führt (2 µs oder knapp 14 Bildpunkte, die in der Regel sowieso nicht sichtbar sind). | |
− | + | Und so sieht's aus: | |
− | + | ||
− | + | ||
− | Man | + | AC-ADC-Video MIT Schwarzwert-Klemme (PG6): |
+ | |||
+ | [[bild:Video_PG6_mitKlemme_CSync.jpg]] | ||
+ | |||
+ | Abschließend der Bestückungsplan der Phase 3: | ||
+ | |||
+ | [[bild:RP6_Exp_CMOSCamera_Step3_Bruecken.jpg]] | ||
+ | |||
+ | Der LM 1881N wird nicht direkt eingelötet, sondern auf einen Sockel gesetzt. Die Kerbe des Sockels kommt nach oben (in Richtung JP1,2). Es gibt wieder einige Drahtbrücken (14). Die graue Fläche ist eine größere Massefläche, die man mit Drähten und etwas Lötzinn herstellen kann, wenn alle Bauteile, die da dran sitzen, eingelötet sind. Der 4k7 Widerstand wird stehend eingesetzt. Der Stecker I/O M32/M128 ist ein 10-poliger Wannenstecker. Man kann ihn aber auch als 2-reihige Stiftleiste aufbauen. Hier wird auf einfache Weise mit Flachbandkabel eine Verbindung zum I/O-Stecker der Control M32 oder CCPro M128, die die Sync-Signale auswertet, hergestellt. | ||
+ | |||
+ | Viel Erfolg beim Aufbau! | ||
+ | |||
+ | '''Erster Funktionstest des Sync-Separators mit der RP6Control M32:''' | ||
+ | |||
+ | * Jumper in die Standard-Stellung für die M32 bringen (Siehe Absatz "1.7.2 Jumper"!) | ||
+ | * I/O-Stecker der Exp mit dem der M32 verbinden (falls kein 10-poliges Flachkabel vorhanden ist, reicht es, nur Pin 8 zu verbinden!) | ||
+ | * Das [http://www.roboternetz.de/phpBB2/viewtopic.php?t=53021 RP6Control M32: Impulslängen-Meßgerät] in die M32 laden, vor dem Kompilieren in der Zeile "//#define FREQUENCY" die "//" entfernen, um die Frequenz zu messen. | ||
+ | * Jetzt wird die '''HSync-Frequenz''' gemessen. Anzeige: | ||
+ | CNT 1024 | ||
+ | FRQ 15625.002 | ||
+ | Wenn das so aussieht, ist der Sync-Separator erst einmal intakt. | ||
+ | |||
+ | Wie wäre es, zur Kontrolle noch die '''VSync-Frequenz''' zu messen? | ||
+ | |||
+ | Die Anzeige sollte sein: | ||
+ | CNT 320110 | ||
+ | FRQ 49.983 | ||
+ | |||
+ | Wie habe ich das auf der Exp gemessen? | ||
+ | |||
+ | Antwort: JP 9 nach ganz Rechts rücken | ||
+ | |||
+ | === Alternativer Aufbau === | ||
+ | |||
+ | Der Anschluß der Sync-Signale erfolgt beim normalen Aufbau (siehe oben!) über den XBUS und den I/O-Stecker an die RP6Base, RP6Control M32 oder RP6 CCPro M128, wobei Jumper eingesetzt werden, um die Signale zu verteilen. | ||
+ | |||
+ | Das mag nicht jedermanns Sache sein. Vielleicht möchten einige von euch nichts mit dem XBUS, I/O-Stecker oder mit vielen Jumpern zu tun haben, sondern die Sync-Signale lieber an einem einfachen Stecker zusammengeführt haben, von dem aus man sie dann mit Kabeln selbst zu Portpins eines Prozessors führen kann. | ||
+ | |||
+ | Dafür zeige ich hier den Schaltplan dieses alternativen Aufbaus der Phase 3: | ||
+ | |||
+ | [[bild:RP6_CMOSCamera_SP_3_S.jpg]] | ||
+ | |||
+ | An PG8 sind alle Sync-Signale und auch das ADC-Video-Signal zusammen gefasst. PG8 ist 2x 7-polig und kann als 2-reihige Stiftleiste oder als 14-poliger Wannenstecker (das sind die, die auch mit der Exp mitgeliefert werden!) ausgeführt werden. An PG7 kann man das ADC-Video-Signal einspeisen (genau wie an PG4). Es kann dann über PG8 Pin 13 weiter zu einem ADC-Eingang geführt werden. | ||
+ | Ich werde hier auch noch den Bestückungsplan einstellen, sonst aber nicht auf diese Art des Aufbaus weiter eingehen. | ||
+ | |||
+ | Alternativer Bestückungsplan der Phase 3: | ||
+ | |||
+ | [[bild:RP6_Exp_CMOSCamera_Step3_Bruecken_S.jpg]] | ||
+ | |||
+ | == Phase 4 == | ||
+ | |||
+ | Hier die Stückliste! | ||
+ | Man braucht folgende Bauteile (4,65..6,21€ ohne Versand CONRAD) für die 4. Phase: | ||
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
|- | |- | ||
Zeile 277: | Zeile 351: | ||
'''Gesamtkosten des Projekts: Ca. 62€''' | '''Gesamtkosten des Projekts: Ca. 62€''' | ||
+ | |||
+ | Schaltplan der Phase 4: | ||
+ | |||
+ | [[bild:RP6_Exp_CMOSCamera_SP_4.jpg]] | ||
+ | |||
+ | Beim Jumper JP10 gibt es jetzt 2 neue Stellungen (S/IO). In Stellung S können die IR-LEDs mit SDA geschaltet werden, wobei SDA dann bei der RP6Base nicht mehr für HSync zur Verfügung steht. In Stellung IO werden die IR-LEDs durch die M32 oder M128 über den I/O-Stecker geschaltet. Dafür muss JP13 in Stellung SIO gebracht werden. | ||
+ | |||
+ | Neu in Phase 4 ist JP13. Er schaltet die Ansteuerung der IR-LEDs zwischen dem USRBUS (Stellung U) und dem I/O-Stecker (Stellung SIO) um. Wenn Y11 des USRBUS auf dem RP6 Mainboard mit SL1 (IO1) verbunden ist, können die IR-LEDs in Stellung U durch SL1 angesteuert werden. '''Wenn die SL1-LED des RP6 leuchtet, sind die IR-LEDs AUSgeschaltet!''' In Stellung SIO von JP13 erfolgt die Auswahl der IR-LED Ansteuerung durch JP10 (siehe oben!). | ||
+ | |||
+ | Bestückungsplan der Phase 4: | ||
+ | |||
+ | [[bild:RP6_Exp_CMOSCamera_Step4_Bruecken.jpg]] | ||
+ | |||
+ | So, jetzt sind wir am Ende unseres Hardware-Projekts angelangt. Für die Phase 4 müssen noch 5 Drahtbrücken eingesetzt werden. Der Transistor BC 556B schaltet die IR-LEDs gegen VCC über PG2. Maximal kann er 100 mA schalten, so dass wir mit den max. 40 mA für die IR-LEDs im sicheren Bereich liegen. '''Bitte aufpassen, dass PG2 nicht aus Versehen kurzgeschlossen wird, weil der Transistor dann u.U. zerstört wird.''' | ||
+ | |||
+ | So sieht die Endversion unseres Projekts bei mir aus: | ||
+ | |||
+ | [[bild:Phase4_B.JPG]] | ||
+ | [[bild:Phase4_L.JPG]] | ||
+ | |||
+ | '''Erster Funktionstest der IR-LED-Ansteuerung mit der RP6Control M32:''' | ||
+ | |||
+ | * Jumper in die Standard-Stellung für die M32 bringen (Siehe Absatz "1.7.2 Jumper"!) | ||
+ | * I/O-Stecker der Exp mit dem der M32 verbinden (falls kein 10-poliges Flachkabel vorhanden ist, reicht es, nur Pin 4 zu verbinden!) | ||
+ | * Falls die Kamera-Platine mit den IR-LEDs noch nicht aufgebaut ist, kann man an PG2 eine LED mit passendem Vorwiderstand anschließen. | ||
+ | * Jetzt ein Programm für die M32 schreiben, das den Pin IO_PC6 auf Ausgang umschaltet und dann in einer Endlosschleife toggelt. Die LED an PG2 muss dann im Rhythmus blinken. | ||
+ | |||
+ | === Alternativer Aufbau === | ||
+ | |||
+ | Auch hier gibt es für die Phase 4 einen alternativen Aufbau, den man nehmen muss, wenn man die Phase 3 schon in der alternativen Form aufgebaut hat. | ||
+ | |||
+ | Schaltplan des alternativen Aufbaus der Phase 4: | ||
+ | |||
+ | [[bild:RP6_Exp_CMOSCamera_SP_4_S.jpg]] | ||
+ | |||
+ | Bestückungsplan des alternativen Aufbaus der Phase 4: | ||
+ | |||
+ | [[bild:RP6_Exp_CMOSCamera_Step4_Bruecken_S.jpg]] | ||
+ | |||
+ | == Kamera-Platine == | ||
+ | |||
+ | [[bild:RP6_Exp_CMOSCamera_IR-LEDs_SP.jpg]] | ||
+ | |||
+ | Es können 2 bis 6 IR-LEDs eingebaut werden: | ||
+ | * Stromsparende Variante (20 mA) mit 2 oder 3 LEDs | ||
+ | * Variante mit höherer Leistung (40 mA) mit 4 bis 6 LEDs | ||
+ | |||
+ | Wer von euch könnte hier seine Kamera-Platine als "Bauanleitung" vorstellen? | ||
+ | |||
+ | == Letzte Arbeiten == | ||
+ | |||
+ | Was bleibt noch? | ||
+ | * Wenn die Platinen komplett aufgebaut sind, kann man sie mit Plastik 70 Spray auf der Lötseite gegen Korrosion schützen | ||
+ | * Eine Halterung für die Kamera bauen | ||
+ | * Sich Anwendungen überlegen | ||
+ | * Anwendungen programmieren | ||
+ | * ... | ||
== Allgemeine Daten und Tabellen == | == Allgemeine Daten und Tabellen == | ||
Zeile 284: | Zeile 415: | ||
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
|- | |- | ||
− | | Stecker || Signal(e) || Pins || Bedeutung | + | | Stecker || Signal(e) || Pins || Bedeutung |
|- | |- | ||
| PG1 || Video-in, GND, VCC, Gamma, Gain || 5 || Anschluß CMOS Kamera | | PG1 || Video-in, GND, VCC, Gamma, Gain || 5 || Anschluß CMOS Kamera | ||
Zeile 300: | Zeile 431: | ||
=== Jumper === | === Jumper === | ||
+ | |||
+ | Zeichenerklärung: | ||
+ | * Stellung ON = Jumper aufgesteckt (Kontakt geschlossen) | ||
+ | * Stellung OFF = Jumper abgezogen (Kontakt offen) | ||
{| {{Blauetabelle}} | {| {{Blauetabelle}} | ||
Zeile 318: | Zeile 453: | ||
|- | |- | ||
| JP5 || ON || AC-ADC-Video: Lastwiderstand 10 kOhm (JP3: 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 | ||
+ | |- | ||
+ | | JP10 || S ON || IR-LEDs durch SDA geschaltet (JP13: SIO!) | ||
+ | |- | ||
+ | | JP10 || IO ON || IR-LEDs durch M32/M128 geschaltet (JP13: SIO!) | ||
+ | |- | ||
+ | | JP11 || OE ON || M32/M128: IT3 = Odd/Even | ||
+ | |- | ||
+ | | JP12 || 6 ON || SCL = VSync | ||
+ | |- | ||
+ | | JP12 || 32 ON || M32: IT2 = VSync | ||
+ | |- | ||
+ | | JP13 || U ON || IR-LEDs durch SL1/IO1 (USRBUS Y11 *) geschaltet | ||
+ | |- | ||
+ | | JP13 || SIO ON || IR-LEDs NICHT durch SL1 geschaltet (JP10: S/IO!) | ||
|} | |} | ||
+ | '''Zu *)''' Falls SL1/IO1 auf dem RP6 Mainboard mit USRBUS Y11 verbunden wurde! | ||
+ | Wie aus der Tabelle oben ersichtlich gibt es also eine '''"Standard-Stellung der Jumper"''' im Vollausbau (Phase 4) der Exp. Diese Stellung kann man auf einen Blick aus diesem Bild erkennen: | ||
+ | |||
+ | [[bild:Jumper_Standardstellung_4.jpg]] | ||
+ | |||
+ | Dieses Bild zeigt die Jumper-Stellungen für die RP6Base, M32 und M128. Bei der RP6Base wird vorausgesetzt, dass man den ADC4 (an PG4) zur Auswertung des ADC-Video-Signals verwendet. Nimmt man stattdessen ADC0 oder ADC1 der RP6Base, müssen die Jumper JP3 und JP5 so wie bei der M32 oder M128 gesetzt werden. ''Bei der RP6Base bitte noch beachten: Der Jumper JP10 (Stellung H) darf erst aufgesteckt werden, wenn das Programm läuft! Nach dem Programmende oder nach einem Reset startet es evtl. wieder neu, wenn JP10 aufgesteckt bleibt. Daher sollte JP10 nach einem Programmabbruch immer wieder abgezogen werden! '' | ||
+ | '''Die Jumper 1, 2, 4, 6 und 7 sind in dieser Abbildung NICHT berücksichtigt (als offen eingezeichnet!), weil sie abhängig von der gewünschten Kamera-Einstellung (Gamma: JP1, Gain: JP2) oder vom Software-Konzept (Level Clamp Diode: JP4 ODER Black Level Clamp: JP6 und JP7) gesetzt werden!''' | ||
+ | |||
+ | === Verteilung der Sync-Signale und IR-LED Ansteuerung === | ||
+ | |||
+ | In dieser Tabelle habe ich aufgelistet, mit welchem Portpin das jeweilige Sync-Signal ab der Phase 3 und die Ansteuerung der IR-LEDs ab der Phase 4 verbunden wird. | ||
+ | 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. | ||
+ | |||
+ | {| {{Blauetabelle}} | ||
+ | |- | ||
+ | | System || Signal || Port || Name || XBUS || USRBUS || I/O-Stecker || RP6-Name | ||
+ | |- | ||
+ | | RP6Base || VSync || PC0 || SCL || SCL || - || - || SCL | ||
+ | |- | ||
+ | | || HSync || PC1 || SDA || SDA || - || - || SDA | ||
+ | |- | ||
+ | | || Odd/Even || - || - || - || - || - || - | ||
+ | |- | ||
+ | | || IR || PC4 || TDO || - || Y11 * || - || SL1 (IO1) | ||
+ | |- | ||
+ | | RP6Control M32 || VSync || PD3 || INT1 || IT2 || - || - || EINT2 | ||
+ | |- | ||
+ | | || HSync || PD6 || ICP1 || - || - || Pin 8 || IO_PD6 | ||
+ | |- | ||
+ | | || Odd/Even || PB2 || INT2 || IT3 || - || - || EINT3 | ||
+ | |- | ||
+ | | || IR || PC6 || TOSC1 || - || - || Pin 4 || IO_PC6 | ||
+ | |- | ||
+ | | 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 | ||
+ | |- | ||
+ | | || IR || PD6 || T1 || - || - || Pin 4 || PD6 | ||
+ | |} | ||
+ | |||
+ | '''Zu *)''' Falls SL1/IO1 auf dem RP6 Mainboard mit USRBUS Y11 verbunden wurde! | ||
+ | |||
+ | === ADC-Video === | ||
+ | |||
+ | Während die Sync-Signale fest verdrahtet sind und nur durch Jumper in ihrer Verteilung verändert werden können, gibt es für die ADC-Video-Ausgänge (PG3, PG5, PG6) nur drei 2-polige Stiftleisten. | ||
+ | |||
+ | In der Praxis stellt man einfach eine abgeschirmte Verbindung zwischen einem der ADC-Video-Ausgänge (PG3, PG5, PG6) und einem ADC-Eingang her. Die Masseverbindung (GND) braucht dabei nicht am ADC-Eingangsstecker verbunden zu werden, d.h. die Abschirmung des Kabels wird nur am ADC-Video-Ausgang an GND angeschlossen. | ||
+ | |||
+ | Die drei '''ADC-Video-Ausgänge''' noch einmal kurz zusammengefaßt: | ||
+ | * '''PG3 (Video 1V p-p) ->''' Dies ist das BAS-Videosignal der CMOS-Kamera. Das selbe Signal kann an der CINCH-Buchse für einen Monitor abgenommen werden. An einem Widerstand von 75 Ohm beträgt die Amplitude des Signals nominal 1V. Die Amplitude ändert sich, wenn z.B. ein Monitor angeschlossen oder wieder entfernt wird, daher kann eine Software, die die Sync-Signale im Videosignal mit einem festen Schwellenwert auswertet, u.U. nicht sicher funktionieren. Die CSync-Impulse liegen im BAS-Signal zwischen 0 V und 0,3 V. Oberhalb von 0,3 V bis 1 V findet sich der Bildinhalt (Helligkeit der Bildpunkte). | ||
+ | * '''PG5 (DC-ADC-Video) ->''' Dies ist das 2-fach verstärkte BAS-Videosignal. PG5 ist galvanisch (d.h. direkt leitend) mit dem Ausgang des Video-Verstärkers verbunden. Die Amplitude des verstärkten Videosignals ist natürlich abhängig vom Eingangs-Signal (= PG3), also auch in gewisser Weise vom dortigen Abschlußwiderstand bzw. angeschlossenen Monitor. Der Vorteil des DC-ADC-Video besteht in der höheren Spannung, die sowohl für die Sync-Impulse, als auch für den Bildinhalt besser auszuwerten ist. | ||
+ | * '''PG6 (AC-ADC-Video) ->''' Dies ist das 2-fach verstärkte BAS-Videosignal '''ohne Gleichspannungsanteil (d.h. reine Wechselspannung)'''. PG6 ist über einen Folien-Kondensator 100 nF mit dem Ausgang des Video-Verstärkers (= PG5) verbunden. Eine direkte Auswertung dieses Signals mit einem ADC ist nicht sinnvoll, weil nur Teile des Bildinhalts (die helleren Bereiche) eine positive Spannung aufweisen, die aber auch noch abhängig von der Gesamthelligkeit stark schwankt. '''Sinnvoll kann der Ausgang PG6 mit einem ADC nur ausgewertet werden, wenn das Signal "geklemmt" wird. Dafür gibt es zwei Möglichkeiten: Die Dioden-Klemme (Level Clamp Diode: JP4) ODER die Schwarzwert-Klemme (Black Level Clamp: JP6 und JP7).''' Dadurch wird das Video-Signal auf einen festen Spannungswert "geklemmt". Der Sinn besteht darin, die Bildinformationen optimal auswerten zu können, wobei idealerweise Schwarz immer gleich Null Volt ist. '''Das "geklemmte" Video-Signal enthält keine Sync-Impulse mehr, also ist man darauf angewiesen, zur Auswertung die Sync-Impulse vom Sync-Separator (LM 1881N) zu beziehen.''' | ||
+ | |||
+ | Ein paar Meßwerte der '''Signal-Amplitude [V p-p]''': | ||
+ | {| {{Blauetabelle}} | ||
+ | |- | ||
+ | | Stecker || Wert || Hell || Dunkel | ||
+ | |- | ||
+ | | PG3 || HSync || 0,25 || 0,12 | ||
+ | |- | ||
+ | | || Vpp || 0,8 || 0,4 | ||
+ | |- | ||
+ | | PG5 || DC || 0,6 || 1,1 | ||
+ | |- | ||
+ | | || HSync || 1,1 || 1,35 | ||
+ | |- | ||
+ | | || Vpp || 2,2 || 1,9 | ||
+ | |- | ||
+ | | PG6 * || HSync || 0,4 || 0,2 | ||
+ | |- | ||
+ | | || Vpp || 1,4 || 0,7 | ||
+ | |} | ||
+ | |||
+ | '''Zu *)''' JP3: ON; JP4..7: OFF (Lastwiderstand 5 kOhm, keine Klemme)! | ||
+ | |||
+ | Die '''ADC-Eingänge''', die benutzt werden können, sind: | ||
+ | * RP6Base: ADC4 (PG4) | ||
+ | * RP6Base: ADC0 oder ADC1 (gleichnamige Anschlüsse auf dem RP6 Mainboard,- man muss da ggf. eine 3-polige Stiftleiste einlöten) | ||
+ | * RP6Control M32: ADC2..ADC7 (am ADC-Wannenstecker auf der M32) | ||
+ | * RP6 CCPro M128: ADC0..ADC7 (am ADC-Wannenstecker auf der M128) | ||
+ | |||
+ | === Video-Klemme === | ||
+ | |||
+ | [[bild:Jumper_Videoklemme_3.jpg]] | ||
+ | |||
+ | Dieses Bild zeigt, welche Jumper (4, 6, 7) für die Auswahl der Video-Klemme gesetzt werden müssen. '''Die Jumper 1..3, 5, 8..13 sind in dieser Abbildung NICHT berücksichtigt (als offen eingezeichnet!).''' Wenn keine Video-Klemme eingesetzt werden soll, wird kein Jumper gesetzt (linkes Bild). Wenn die Dioden-Klemme (Level Clamp Diode) verwendet werden soll (mittleres Bild), muß JP4 geschlossen und JP6, JP7 offen sein. Für die Schwarzwert-Klemme (Black Level Clamp) muß JP4 offen sein und JP6 und JP7 geschlossen (rechtes Bild). | ||
+ | |||
+ | '''Das "geklemmte" ADC-Video-Signal kann am Stecker PG6 abgenommen werden!''' | ||
+ | |||
+ | ==== Dioden-Klemme ==== | ||
+ | |||
+ | Mit dieser Methode wird das ADC-Video-Signal durch eine Diode auf einen festen Wert "geklemmt". Die Abbildung "AC-ADC-Video MIT Dioden-Klemme (PG6)" im Absatz "1.2 Phase 2" zeigt ein Oszillogramm dieses Signals. Es hat einen negativen Anteil von ca. 0,6 V, so daß der CSync-Impuls abgeschnitten wird. Der Schwarzwert der Bildinformationen liegt etwa auf GND-Pegel (0 V). Durch dieses feste Bezugspotential kann man die Bildinformationen gut mit einem ADC auswerten: Je höher die Meßspannung in einer Zeile, umso heller ist das Bild an der Stelle. | ||
+ | |||
+ | ==== Schwarzwert-Klemme ==== | ||
+ | |||
+ | Mit dieser Methode wird das ADC-Video-Signal durch eine aktive Klemme bestehend aus 2 Transistoren auf einen festen Wert "geklemmt". Das Oszillogramm "AC-ADC-Video MIT Schwarzwert-Klemme (PG6)" im Absatz "1.3 Phase 3" zeigt dieses Signal. Auch hier wird der Schwarzwert annähernd auf GND-Pegel (0 V) festgehalten, indem der CSync-Impuls abgeschnitten wird. Einige Bildpunkte am linken Bildrand gehen verloren. Auch dieses "geklemmte" ADC-Video-Signal kann man gut mit einem ADC auswerten. | ||
= RP6 Kamera - Mitmach-Projekt: Software = | = 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 | + | 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 fleißig mitschreiben/bearbeiten! |
+ | |||
+ | == Die Synchronisations-Signale == | ||
+ | |||
+ | Die Darstellung jeder Zeile wird durch die '''horizontale Synchronisation''' ermöglicht. | ||
+ | |||
+ | [[bild:BAS-Zeilensynchronisation.jpg]] | ||
+ | |||
+ | 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. | ||
+ | |||
+ | Man kann jetzt ein paar Zahlen angeben, die man braucht, um die Punkte einer Zeile anzusteuern: | ||
+ | Von der fallenden (HI -> LO) Flanke des HSync-Impulses dauert es 10,5 µs bis zum Zeilenanfang (linker Bildrand). Bis zur Zeilenmitte sind es 36,5 µs und bis zum Zeilenende (rechter Bildrand) 62,5 µs. Bei unseren 352 horizontalen Bildpunkten kann man einen beliebigen Punkt [1..352] mit der Formel: | ||
+ | |||
+ | Verzögerung [µs] = 0,14773 * (Bildpunkt - 1) + 10,5 | ||
+ | |||
+ | ... ansteuern. | ||
+ | |||
+ | |||
+ | In diesem Bild zeige ich einen Teil der '''vertikalen Synchronisation''', und zwar ab der fallenden Flanke von VSync des Sync-Separators. Könnt ihr sie in der Grafik unten (Zeile Video oder CSync) wiederfinden? | ||
+ | |||
+ | Vertikale Synchronimpulse ab VSync: | ||
+ | |||
+ | [[bild:Video_PG6_VSync.jpg]] | ||
+ | |||
+ | [[bild:BAS-Bildsynchronisation.jpg]] | ||
+ | |||
+ | Dieses Bild zeigt die vertikale Bildsynchronisation. Das ist die Abfolge von Signalen, die zwischen den einzelnen Halbbildern oder Seiten gesendet werden. Auch unsere Kamera sendet diese Halbbilder/Seiten (Datenblatt: "2:1 Interlace"). | ||
+ | |||
+ | '''ANMERKUNG:''' In diesem Abschnitt werden die Begriffe ''Halbbild'' und ''Seite'' synonym gebraucht. | ||
+ | Das BAS-Signal unserer Kamera kann auf einem klassischen (analogen) Monitor als zwei Halbbilder | ||
+ | dargestellt werden, wobei die Zeilen des einen in die des anderen Halbbildes verschachtelt | ||
+ | gezeigt werden. Auf einem modernen digitalen Monitor können auch stattdessen zwei vollständige | ||
+ | Seiten nacheinander zu sehen sein. | ||
+ | |||
+ | In der oberen Bildhälfte ist die vertikale Synchronisation zwischen den geraden (even, field 2) und ungeraden (odd, field 1) Halbbildern dargestellt, in der unteren Bildhälfte die vertikale Synchronisation zwischen den ungeraden (odd) und geraden (even) Halbbildern. | ||
+ | |||
+ | Für die Auswertungs-Software ist natürlich wichtig, wie man mit den vertikalen Sync-Signalen Halbbilder und Zeilen ansteuern kann: | ||
+ | |||
+ | Die Frage, ob es sich aktuell um ein ungerades oder gerades Halbbild handelt, beantwortet Odd/Even des Sync-Separators: Ist Odd/Even HI, liegt ein ungerades Halbbild vor, sonst ein gerades Halbbild. Bei der RP6Base, die in der jetzigen Planung Odd/Even nicht auswerten kann (nicht angeschlossen!), kann man sich helfen, indem man eine Variable immer dann toggelt (1-2-1-2...), wenn ein VSync-Impuls kommt. Dadurch weiß man zwar nicht, ob man aktuell wirklich ein gerades oder ungerades Halbbild liest, aber letztlich ist das auch nicht so wichtig: Zwei Folgebilder werden sich nicht so dramatisch unterscheiden. | ||
+ | |||
+ | Wenn man aber ohne das Odd/Even-Signal doch wissen will, auf welcher Seite man gerade ist, dann geht das mit der Felderkennung. | ||
+ | |||
+ | [[bild:BAS-Felderkennung.jpg]] | ||
+ | |||
+ | Hier ist ein Ausschnitt der vertikalen Austastlücke gezeigt. Unten erkennt man wieder den VSync-Impuls. Sieht man sich das Video-Signal des 1. Halbbildes (odd, oben!) an, dann folgt 256 µs (oder 9 steigende CSync-Flanken) nach der fallenden VSync-Flanke ein Intervall von ca. 32 µs bis zum folgenden CSync-Impuls. | ||
+ | Beim 2. Halbbild (even, unten!) folgt an dieser Stelle ein Intervall von ca. 64 µs bis zum folgenden CSync-Impuls. Damit kann man die Seiten eindeutig auseinander halten. | ||
+ | |||
+ | Schwieriger wird es, wenn man eine bestimmte Zeile eines Bildes ansteuern will. Im Datenblatt des LM 1881N, S. 8, findet sich dazu ein interessanter Satz: | ||
+ | ''Since the vertical output pulse from the LM1881 coincides with the leading edge of the first vertical serration, sixteen positive or negative transitions later will be the start of line 14 in either field.'' | ||
+ | |||
+ | Das heißt in unserer Landessprache: '''16 positive oder negative Flanken nach dem VSync-Signal des LM 1881N (nach dessen fallender Flanke!) findet sich der Anfang der Zeile 14 jedes Halbbildes.''' | ||
+ | |||
+ | Abgesehen davon, dass diese Angabe auch nur auf NTSC zutrifft: Warum gerade die Zeile 14? Die Zeilen bis 13 werden nicht benutzt, danach kommt der Datenbereich (Untertitel, Videotext ...) ab Zeile 14 bis Zeile 21. Erst ab Zeile 22,5 sind im PAL-System Bildinformationen zu erwarten. | ||
+ | |||
+ | Wie ist das denn bei unserer Kamera? | ||
+ | |||
+ | Leider ist bei unserer Kamera einiges anders als beim Standard-PAL, wie der Blick auf den Oszi-Bildschirm zeigt. Im Datenblatt der Kamera sind 260 TV-Zeilen angegeben, tatsächlich sind es 288. | ||
+ | Hier das Ganze 'mal als Grafik: | ||
+ | |||
+ | [[bild:BAS-Vertikalaustastung_C-Cam-A.jpg]] | ||
+ | |||
+ | Die erste Zeile mit Bildinhalt findet sich im 1. Halbbild an Zeilen-Position 18. Zählt man die fallenden oder steigenden Flanken nach dem VSync-Signal, dann befindet man sich nach 22 Flanken an der 18. Zeilen-Position. Die letzte Zeile dieser 1. Seite (288) findet man nach 309 Flanken. | ||
+ | |||
+ | Im 2. Halbbild findet sich die 1. Zeile an Zeilen-Position 17 (Gerber-Zählung: 330). Zählt man die Flanken nach dem VSync-Signal, dann befindet man sich nach 21 Flanken an dieser Zeilen-Position. Die letzte Zeile (288) dieser 2. Seite findet man nach 308 Flanken. | ||
+ | |||
+ | Man braucht also nur direkt nach der fallenden Flanke von VSync die CSync-Flanken zu zählen, um eine beliebige Zeile zu wählen. | ||
+ | Eine beliebige Zeile [1..288] kann man mit der Formel: | ||
+ | |||
+ | 1. Halbbild: Zeile = Flankenzahl - 21 | ||
+ | 2. Halbbild: Zeile = Flankenzahl - 20 | ||
+ | |||
+ | ... ansteuern, wobei der Bereich von Flankenzahl auf der 1. Seite zwischen 22 und 309, auf der 2. Seite zwischen 21 und 308 liegt. | ||
== Grundlagen und erste Überlegungen == | == Grundlagen und erste Überlegungen == | ||
Auf Wikipedia (siehe Quelle1!) findet man gute Informationen zum Aufbau des BAS Signals, das auch unsere Kamera ausspuckt. | 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 | + | Sie ist zwar nicht sehr hochwertig, das Bildelement kann aber laut Datenblatt 352 x 288 Punkte darstellen, was für unsere Zwecke völlig ausreicht. Von den 260 TV-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. | 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! | Man sieht schon, dass das nichts werden kann! | ||
− | Es ist unmöglich, jeden Punkt der Zeile "live" einzulesen. Es stellt sich die Frage, | + | Es ist unmöglich, jeden Punkt der Zeile "live" einzulesen. Es stellt sich die Frage, wie viele 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: | Das Datenblatt zum ATMega32 sagt dazu: | ||
Zeile 348: | Zeile 678: | ||
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. | 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. | 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 | + | Wie groß 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. | 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 | + | 16 Graustufen sind für die Aufgabe einer Kamera an einem µC gut ausreichend. Man kann damit Linien folgen und sogar eine einfache Orientierung im Raum erreichen. |
Jetzt ist wohl eine Entscheidung fällig: | Jetzt ist wohl eine Entscheidung fällig: | ||
Zeile 356: | Zeile 686: | ||
Ich entscheide mich dafür, eine Bildgröße von 52 x 39 Punkten mit 16 Graustufen zu erreichen. | 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 | + | Kann das klappen? Die 39 Zeilen mache ich dann aus ca. 230 sichtbaren Zeilen der Kamera (Zeilen 15..245). 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. | 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. | ||
Zeile 372: | Zeile 702: | ||
... Baustelle! Hier wird noch weiter gedacht! .......... | ... Baustelle! Hier wird noch weiter gedacht! .......... | ||
+ | == Software-Projekte == | ||
+ | |||
+ | Hier schlage ich einfach 'mal erste Software-Projekte vor. Wer hat Lust, mitzumachen? | ||
+ | |||
+ | === Ist die 1. Zeile des Bildes wirklich an Zeilenposition 18 im 1. Halbbild zu finden? === | ||
+ | |||
+ | Wo finde ich genau die 1. Zeile? Ist ja wichtig, wenn ich eine bestimmte Zeile lesen will. | ||
+ | Wo ist die 1. Zeile im 2. Halbbild zu finden? | ||
+ | |||
+ | Wer schreibt ein Programm, das die 1. Zeile mit Bildinformationen findet? | ||
+ | |||
+ | === Wie viele Zeilen gibt unsere Kamera aus? === | ||
+ | |||
+ | Wer schreibt ein Programm (egal für die PP6Base, M32 oder M128 und egal ab welcher Phase des Aufbaus), das anzeigt, wie viele Zeilen unsere Kamera wirklich ausgibt? Sind es wirklich 260 wie das Datenblatt sagt bzw. auf jeder Halbseite 130? | ||
+ | |||
+ | Eine Anregung dazu: [http://www.roboternetz.de/phpBB2/viewtopic.php?t=54190 RP6Control M32: Video Zeilenzähler 1] | ||
+ | |||
+ | === Wie kann ein "Graukeil" auf dem Terminal aussehen? === | ||
+ | |||
+ | Wenn man ein Bild mit z.B. 16 Graustufen mit dem vorhandenen Zeichensatz darstellen will, muss man 16 Zeichen definieren, die die "Graustufen" wiedergeben. Was klar ist: Das Leerzeichen ist Schwarz. Ein sehr dunkler Bildpunkt ist z.B. der Punkt selbst ... | ||
+ | und welches Zeichen ist das hellste? | ||
+ | |||
+ | Wer schreibt ein Programm, das einen "Graukeil" auf dem Terminal ausgibt? | ||
+ | |||
+ | === Wer stellt einen Video-Grabber vor? === | ||
+ | |||
+ | Ein Video-Grabber holt den Inhalt eines Videobildes aus dem Video Stream und stellt ihn irgendwie dar. | ||
+ | |||
+ | Eine Anregung für die RP6Base: [http://www.roboternetz.de/phpBB2/viewtopic.php?t=54071 RP6Base: Video Grabber 1] | ||
+ | |||
+ | ... und für die RP6Control M32: [http://www.roboternetz.de/phpBB2/viewtopic.php?t=54044 RP6Control M32: Video Grabber 1] | ||
+ | |||
+ | === Erkennung des Syncs mit dem internen Analogkomparator === | ||
+ | |||
+ | Zusätzlich benötigte Hardware: Ein Poti zum Einstellen des Sync-Pegels | ||
+ | |||
+ | [http://www.roboternetz.de/community/threads/29906-Minimall%F6sung-Kamera-f%FCr-den-RP6/page10?p=520992&viewfull=1#post520992 Umsetzung in Bascom] | ||
+ | |||
+ | |||
+ | Es geht sicher noch viel besser! | ||
= Quellen = | = Quellen = | ||
Zeile 383: | Zeile 753: | ||
;Quelle8: [http://www.soselectronic.com/a_info/resource/pdf/king/l-53f3bt.pdf IR-LED L-53F3BT Datasheet] | ;Quelle8: [http://www.soselectronic.com/a_info/resource/pdf/king/l-53f3bt.pdf IR-LED L-53F3BT Datasheet] | ||
+ | |||
+ | =Siehe auch= | ||
+ | * [[RP6]] | ||
+ | * [[RP6 - Programmierung]] | ||
+ | * [[RP6v2]] | ||
+ | * [[RP6 Sensor Board und Xtra Module]] | ||
+ | * [[RP6v2_I2C-Portexpander]] | ||
+ | * [[RP6v2 USB-RS232-Adapter]] | ||
+ | * [[RP6v2 Orientierung]] | ||
+ | * [[RP6 Multi IO Projekt]] | ||
+ | * [[RP6 Multi IO Projekt - Software]] | ||
+ | * [[RP6 ArduIO]] | ||
+ | * [[RP6 ArduIO - Software]] | ||
+ | * [[Induktive_Ladestation_f%C3%BCr_den_RP6|Induktive Ladestation für den RP6]] | ||
+ | * [[IR-bake_f%C3%BCr_den_RP6|IR-bake für den RP6]] | ||
+ | * [[CCRP5]] | ||
+ | * [[Yeti]] | ||
+ | * [[Asuro]] | ||
+ | * [[C't-Bot]] | ||
+ | |||
+ | <br/><br/> | ||
+ | |||
+ | =Autoren= | ||
+ | --[http://www.roboternetz.de/community/members/1972-Dirk Dirk] 13:36, 11. Jan 2015 (CET) | ||
− | + | [[Kategorie:Elektronik]] | |
+ | [[Kategorie:Projekte]] |
Aktuelle Version vom 11. Januar 2015, 13:36 Uhr
Inhaltsverzeichnis
- 1 RP6 Kamera - Mitmach-Projekt: Hardware
- 2 RP6 Kamera - Mitmach-Projekt: Software
- 3 Quellen
- 4 Siehe auch
- 5 Autoren
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 mit der 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.
Hier noch ein Bild von den beiden Video-Kabeln, die man sich anfertigen kann:
Ein Kabel dient zum Anschluß der Kamera (5-polig mit Abschirmung für das Video-Signal). Das andere abgeschirmte Kabel verbindet einen der ADC-Video-Ausgänge (PG3, PG5, PG6) mit einem ADC-Eingang der RP6Base (PG4) oder der M32 oder M128 (ADC-Wannenstecker). Ein 2-adriges Kabel wird zusätzlich für die IR-LEDs benötigt. Alle Kabel sind steckbar. Hinweis: Es geht bei den kurzen Kabeln auch ohne die Abschirmung. Man sollte die Kabel dann aber verdrillen.
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 mit der Software von radbruch 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 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 |
Schaltplan der Phase 2:
Jetzt funktioniert der Videoverstärker bei mir wie er soll. Es soll 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 kann es auch an den Aufbau der Phase 2 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".
So kann die Phase 2 aufgebaut aussehen:
Radbruch hat vorgeschlagen, den 75 Ohm Widerstand jumperbar zu machen. Man müßte den Widerstand dann stehend einlöten. So könnte das aussehen:
Viel Erfolg beim Löten!
Phase 3
Hier die 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) |
Zu *) Beim großen C scheint der LM 1881N nur noch in begrenzter Stückzahl vorrätig zu sein. Es gibt Vergleichstypen, die pin-kompatibel sind:
- EL 1881CN (Digi-Key: 2,59 €): Es gibt nichts zu beachten. Der Ausgang Burst gibt einen negativen Impuls von 3,5 µs (anstelle von 4 µs beim LM 1881N) aus.
- EL 1882CN (z.B. Farnell): Auch dieser Typ kann anstelle des LM 1881N eingesetzt werden. Der Ausgang Burst gibt einen negativen Impuls von 3,5 µs (anstelle von 4 µs beim LM 1881N) aus. Der Ausgang VSync gibt einen negativen Impuls von 270 µs (anstelle von 230 µs beim LM 1881N) aus.
- EL 4581CN (Digi-Key: 6,23 €): Bei diesem Typ sind die Bauteile Widerstand 620 Ohm, keram. Kondensatoren 470 pF und 39 pF nicht einzubauen. Der 620 Ohm Widerstand wird durch eine Drahtbrücke ersetzt. Der Ausgang Burst gibt einen negativen Impuls von 3,5 µs (anstelle von 4 µs beim LM 1881N) aus.
Alle Vergleichstypen funktionieren mit dem Rset Widerstand von 680 kOhm wie der LM 1881N. In den Datenblättern von intersil wird jeweils ein Widerstand von 681 kOhm als Rset angegeben. Das liegt gut in der Toleranz von 1% des 680 kOhm Widerstands. Wer es ganz genau nehmen will, mißt einige 680 kOhm Widerstände aus und baut den ein, der 681 kOhm am nächsten kommt, oder nimmt 2 ausgemessene Widerstände in Reihe, die zusammen 681 kOhm erreichen.
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.
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.1 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. Dies funktioniert sehr gut, Nachteil dieser (einfachen) Lösung ist aber der hohe Abschaltimpuls am Ende der hinteren Schwarzschulter, der zu einem geringen Verlust von Bildinformationen an den Zeilenanfängen führt (2 µs oder knapp 14 Bildpunkte, die in der Regel sowieso nicht sichtbar sind). Und so sieht's aus:
AC-ADC-Video MIT Schwarzwert-Klemme (PG6):
Abschließend der Bestückungsplan der Phase 3:
Der LM 1881N wird nicht direkt eingelötet, sondern auf einen Sockel gesetzt. Die Kerbe des Sockels kommt nach oben (in Richtung JP1,2). Es gibt wieder einige Drahtbrücken (14). Die graue Fläche ist eine größere Massefläche, die man mit Drähten und etwas Lötzinn herstellen kann, wenn alle Bauteile, die da dran sitzen, eingelötet sind. Der 4k7 Widerstand wird stehend eingesetzt. Der Stecker I/O M32/M128 ist ein 10-poliger Wannenstecker. Man kann ihn aber auch als 2-reihige Stiftleiste aufbauen. Hier wird auf einfache Weise mit Flachbandkabel eine Verbindung zum I/O-Stecker der Control M32 oder CCPro M128, die die Sync-Signale auswertet, hergestellt.
Viel Erfolg beim Aufbau!
Erster Funktionstest des Sync-Separators mit der RP6Control M32:
- Jumper in die Standard-Stellung für die M32 bringen (Siehe Absatz "1.7.2 Jumper"!)
- I/O-Stecker der Exp mit dem der M32 verbinden (falls kein 10-poliges Flachkabel vorhanden ist, reicht es, nur Pin 8 zu verbinden!)
- Das RP6Control M32: Impulslängen-Meßgerät in die M32 laden, vor dem Kompilieren in der Zeile "//#define FREQUENCY" die "//" entfernen, um die Frequenz zu messen.
- Jetzt wird die HSync-Frequenz gemessen. Anzeige:
CNT 1024 FRQ 15625.002
Wenn das so aussieht, ist der Sync-Separator erst einmal intakt.
Wie wäre es, zur Kontrolle noch die VSync-Frequenz zu messen?
Die Anzeige sollte sein:
CNT 320110 FRQ 49.983
Wie habe ich das auf der Exp gemessen?
Antwort: JP 9 nach ganz Rechts rücken
Alternativer Aufbau
Der Anschluß der Sync-Signale erfolgt beim normalen Aufbau (siehe oben!) über den XBUS und den I/O-Stecker an die RP6Base, RP6Control M32 oder RP6 CCPro M128, wobei Jumper eingesetzt werden, um die Signale zu verteilen.
Das mag nicht jedermanns Sache sein. Vielleicht möchten einige von euch nichts mit dem XBUS, I/O-Stecker oder mit vielen Jumpern zu tun haben, sondern die Sync-Signale lieber an einem einfachen Stecker zusammengeführt haben, von dem aus man sie dann mit Kabeln selbst zu Portpins eines Prozessors führen kann.
Dafür zeige ich hier den Schaltplan dieses alternativen Aufbaus der Phase 3:
An PG8 sind alle Sync-Signale und auch das ADC-Video-Signal zusammen gefasst. PG8 ist 2x 7-polig und kann als 2-reihige Stiftleiste oder als 14-poliger Wannenstecker (das sind die, die auch mit der Exp mitgeliefert werden!) ausgeführt werden. An PG7 kann man das ADC-Video-Signal einspeisen (genau wie an PG4). Es kann dann über PG8 Pin 13 weiter zu einem ADC-Eingang geführt werden. Ich werde hier auch noch den Bestückungsplan einstellen, sonst aber nicht auf diese Art des Aufbaus weiter eingehen.
Alternativer Bestückungsplan der Phase 3:
Phase 4
Hier die Stückliste! Man braucht 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€
Schaltplan der Phase 4:
Beim Jumper JP10 gibt es jetzt 2 neue Stellungen (S/IO). In Stellung S können die IR-LEDs mit SDA geschaltet werden, wobei SDA dann bei der RP6Base nicht mehr für HSync zur Verfügung steht. In Stellung IO werden die IR-LEDs durch die M32 oder M128 über den I/O-Stecker geschaltet. Dafür muss JP13 in Stellung SIO gebracht werden.
Neu in Phase 4 ist JP13. Er schaltet die Ansteuerung der IR-LEDs zwischen dem USRBUS (Stellung U) und dem I/O-Stecker (Stellung SIO) um. Wenn Y11 des USRBUS auf dem RP6 Mainboard mit SL1 (IO1) verbunden ist, können die IR-LEDs in Stellung U durch SL1 angesteuert werden. Wenn die SL1-LED des RP6 leuchtet, sind die IR-LEDs AUSgeschaltet! In Stellung SIO von JP13 erfolgt die Auswahl der IR-LED Ansteuerung durch JP10 (siehe oben!).
Bestückungsplan der Phase 4:
So, jetzt sind wir am Ende unseres Hardware-Projekts angelangt. Für die Phase 4 müssen noch 5 Drahtbrücken eingesetzt werden. Der Transistor BC 556B schaltet die IR-LEDs gegen VCC über PG2. Maximal kann er 100 mA schalten, so dass wir mit den max. 40 mA für die IR-LEDs im sicheren Bereich liegen. Bitte aufpassen, dass PG2 nicht aus Versehen kurzgeschlossen wird, weil der Transistor dann u.U. zerstört wird.
So sieht die Endversion unseres Projekts bei mir aus:
Erster Funktionstest der IR-LED-Ansteuerung mit der RP6Control M32:
- Jumper in die Standard-Stellung für die M32 bringen (Siehe Absatz "1.7.2 Jumper"!)
- I/O-Stecker der Exp mit dem der M32 verbinden (falls kein 10-poliges Flachkabel vorhanden ist, reicht es, nur Pin 4 zu verbinden!)
- Falls die Kamera-Platine mit den IR-LEDs noch nicht aufgebaut ist, kann man an PG2 eine LED mit passendem Vorwiderstand anschließen.
- Jetzt ein Programm für die M32 schreiben, das den Pin IO_PC6 auf Ausgang umschaltet und dann in einer Endlosschleife toggelt. Die LED an PG2 muss dann im Rhythmus blinken.
Alternativer Aufbau
Auch hier gibt es für die Phase 4 einen alternativen Aufbau, den man nehmen muss, wenn man die Phase 3 schon in der alternativen Form aufgebaut hat.
Schaltplan des alternativen Aufbaus der Phase 4:
Bestückungsplan des alternativen Aufbaus der Phase 4:
Kamera-Platine
Es können 2 bis 6 IR-LEDs eingebaut werden:
- Stromsparende Variante (20 mA) mit 2 oder 3 LEDs
- Variante mit höherer Leistung (40 mA) mit 4 bis 6 LEDs
Wer von euch könnte hier seine Kamera-Platine als "Bauanleitung" vorstellen?
Letzte Arbeiten
Was bleibt noch?
- Wenn die Platinen komplett aufgebaut sind, kann man sie mit Plastik 70 Spray auf der Lötseite gegen Korrosion schützen
- Eine Halterung für die Kamera bauen
- Sich Anwendungen überlegen
- Anwendungen programmieren
- ...
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 |
JP10 | S ON | IR-LEDs durch SDA geschaltet (JP13: SIO!) |
JP10 | IO ON | IR-LEDs durch M32/M128 geschaltet (JP13: SIO!) |
JP11 | OE ON | M32/M128: IT3 = Odd/Even |
JP12 | 6 ON | SCL = VSync |
JP12 | 32 ON | M32: IT2 = VSync |
JP13 | U ON | IR-LEDs durch SL1/IO1 (USRBUS Y11 *) geschaltet |
JP13 | SIO ON | IR-LEDs NICHT durch SL1 geschaltet (JP10: S/IO!) |
Zu *) Falls SL1/IO1 auf dem RP6 Mainboard mit USRBUS Y11 verbunden wurde!
Wie aus der Tabelle oben ersichtlich gibt es also eine "Standard-Stellung der Jumper" im Vollausbau (Phase 4) der Exp. Diese Stellung kann man auf einen Blick aus diesem Bild erkennen:
Dieses Bild zeigt die Jumper-Stellungen für die RP6Base, M32 und M128. Bei der RP6Base wird vorausgesetzt, dass man den ADC4 (an PG4) zur Auswertung des ADC-Video-Signals verwendet. Nimmt man stattdessen ADC0 oder ADC1 der RP6Base, müssen die Jumper JP3 und JP5 so wie bei der M32 oder M128 gesetzt werden. Bei der RP6Base bitte noch beachten: Der Jumper JP10 (Stellung H) darf erst aufgesteckt werden, wenn das Programm läuft! Nach dem Programmende oder nach einem Reset startet es evtl. wieder neu, wenn JP10 aufgesteckt bleibt. Daher sollte JP10 nach einem Programmabbruch immer wieder abgezogen werden! Die Jumper 1, 2, 4, 6 und 7 sind in dieser Abbildung NICHT berücksichtigt (als offen eingezeichnet!), weil sie abhängig von der gewünschten Kamera-Einstellung (Gamma: JP1, Gain: JP2) oder vom Software-Konzept (Level Clamp Diode: JP4 ODER Black Level Clamp: JP6 und JP7) gesetzt werden!
Verteilung der Sync-Signale und IR-LED Ansteuerung
In dieser Tabelle habe ich aufgelistet, mit welchem Portpin das jeweilige Sync-Signal ab der Phase 3 und die Ansteuerung der IR-LEDs ab der Phase 4 verbunden wird. 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 | - | - | - | - | - | - | |
IR | PC4 | TDO | - | Y11 * | - | SL1 (IO1) | |
RP6Control M32 | VSync | PD3 | INT1 | IT2 | - | - | EINT2 |
HSync | PD6 | ICP1 | - | - | Pin 8 | IO_PD6 | |
Odd/Even | PB2 | INT2 | IT3 | - | - | EINT3 | |
IR | PC6 | TOSC1 | - | - | Pin 4 | IO_PC6 | |
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 | |
IR | PD6 | T1 | - | - | Pin 4 | PD6 |
Zu *) Falls SL1/IO1 auf dem RP6 Mainboard mit USRBUS Y11 verbunden wurde!
ADC-Video
Während die Sync-Signale fest verdrahtet sind und nur durch Jumper in ihrer Verteilung verändert werden können, gibt es für die ADC-Video-Ausgänge (PG3, PG5, PG6) nur drei 2-polige Stiftleisten.
In der Praxis stellt man einfach eine abgeschirmte Verbindung zwischen einem der ADC-Video-Ausgänge (PG3, PG5, PG6) und einem ADC-Eingang her. Die Masseverbindung (GND) braucht dabei nicht am ADC-Eingangsstecker verbunden zu werden, d.h. die Abschirmung des Kabels wird nur am ADC-Video-Ausgang an GND angeschlossen.
Die drei ADC-Video-Ausgänge noch einmal kurz zusammengefaßt:
- PG3 (Video 1V p-p) -> Dies ist das BAS-Videosignal der CMOS-Kamera. Das selbe Signal kann an der CINCH-Buchse für einen Monitor abgenommen werden. An einem Widerstand von 75 Ohm beträgt die Amplitude des Signals nominal 1V. Die Amplitude ändert sich, wenn z.B. ein Monitor angeschlossen oder wieder entfernt wird, daher kann eine Software, die die Sync-Signale im Videosignal mit einem festen Schwellenwert auswertet, u.U. nicht sicher funktionieren. Die CSync-Impulse liegen im BAS-Signal zwischen 0 V und 0,3 V. Oberhalb von 0,3 V bis 1 V findet sich der Bildinhalt (Helligkeit der Bildpunkte).
- PG5 (DC-ADC-Video) -> Dies ist das 2-fach verstärkte BAS-Videosignal. PG5 ist galvanisch (d.h. direkt leitend) mit dem Ausgang des Video-Verstärkers verbunden. Die Amplitude des verstärkten Videosignals ist natürlich abhängig vom Eingangs-Signal (= PG3), also auch in gewisser Weise vom dortigen Abschlußwiderstand bzw. angeschlossenen Monitor. Der Vorteil des DC-ADC-Video besteht in der höheren Spannung, die sowohl für die Sync-Impulse, als auch für den Bildinhalt besser auszuwerten ist.
- PG6 (AC-ADC-Video) -> Dies ist das 2-fach verstärkte BAS-Videosignal ohne Gleichspannungsanteil (d.h. reine Wechselspannung). PG6 ist über einen Folien-Kondensator 100 nF mit dem Ausgang des Video-Verstärkers (= PG5) verbunden. Eine direkte Auswertung dieses Signals mit einem ADC ist nicht sinnvoll, weil nur Teile des Bildinhalts (die helleren Bereiche) eine positive Spannung aufweisen, die aber auch noch abhängig von der Gesamthelligkeit stark schwankt. Sinnvoll kann der Ausgang PG6 mit einem ADC nur ausgewertet werden, wenn das Signal "geklemmt" wird. Dafür gibt es zwei Möglichkeiten: Die Dioden-Klemme (Level Clamp Diode: JP4) ODER die Schwarzwert-Klemme (Black Level Clamp: JP6 und JP7). Dadurch wird das Video-Signal auf einen festen Spannungswert "geklemmt". Der Sinn besteht darin, die Bildinformationen optimal auswerten zu können, wobei idealerweise Schwarz immer gleich Null Volt ist. Das "geklemmte" Video-Signal enthält keine Sync-Impulse mehr, also ist man darauf angewiesen, zur Auswertung die Sync-Impulse vom Sync-Separator (LM 1881N) zu beziehen.
Ein paar Meßwerte der Signal-Amplitude [V p-p]:
Stecker | Wert | Hell | Dunkel |
PG3 | HSync | 0,25 | 0,12 |
Vpp | 0,8 | 0,4 | |
PG5 | DC | 0,6 | 1,1 |
HSync | 1,1 | 1,35 | |
Vpp | 2,2 | 1,9 | |
PG6 * | HSync | 0,4 | 0,2 |
Vpp | 1,4 | 0,7 |
Zu *) JP3: ON; JP4..7: OFF (Lastwiderstand 5 kOhm, keine Klemme)!
Die ADC-Eingänge, die benutzt werden können, sind:
- RP6Base: ADC4 (PG4)
- RP6Base: ADC0 oder ADC1 (gleichnamige Anschlüsse auf dem RP6 Mainboard,- man muss da ggf. eine 3-polige Stiftleiste einlöten)
- RP6Control M32: ADC2..ADC7 (am ADC-Wannenstecker auf der M32)
- RP6 CCPro M128: ADC0..ADC7 (am ADC-Wannenstecker auf der M128)
Video-Klemme
Dieses Bild zeigt, welche Jumper (4, 6, 7) für die Auswahl der Video-Klemme gesetzt werden müssen. Die Jumper 1..3, 5, 8..13 sind in dieser Abbildung NICHT berücksichtigt (als offen eingezeichnet!). Wenn keine Video-Klemme eingesetzt werden soll, wird kein Jumper gesetzt (linkes Bild). Wenn die Dioden-Klemme (Level Clamp Diode) verwendet werden soll (mittleres Bild), muß JP4 geschlossen und JP6, JP7 offen sein. Für die Schwarzwert-Klemme (Black Level Clamp) muß JP4 offen sein und JP6 und JP7 geschlossen (rechtes Bild).
Das "geklemmte" ADC-Video-Signal kann am Stecker PG6 abgenommen werden!
Dioden-Klemme
Mit dieser Methode wird das ADC-Video-Signal durch eine Diode auf einen festen Wert "geklemmt". Die Abbildung "AC-ADC-Video MIT Dioden-Klemme (PG6)" im Absatz "1.2 Phase 2" zeigt ein Oszillogramm dieses Signals. Es hat einen negativen Anteil von ca. 0,6 V, so daß der CSync-Impuls abgeschnitten wird. Der Schwarzwert der Bildinformationen liegt etwa auf GND-Pegel (0 V). Durch dieses feste Bezugspotential kann man die Bildinformationen gut mit einem ADC auswerten: Je höher die Meßspannung in einer Zeile, umso heller ist das Bild an der Stelle.
Schwarzwert-Klemme
Mit dieser Methode wird das ADC-Video-Signal durch eine aktive Klemme bestehend aus 2 Transistoren auf einen festen Wert "geklemmt". Das Oszillogramm "AC-ADC-Video MIT Schwarzwert-Klemme (PG6)" im Absatz "1.3 Phase 3" zeigt dieses Signal. Auch hier wird der Schwarzwert annähernd auf GND-Pegel (0 V) festgehalten, indem der CSync-Impuls abgeschnitten wird. Einige Bildpunkte am linken Bildrand gehen verloren. Auch dieses "geklemmte" ADC-Video-Signal kann man gut mit einem ADC auswerten.
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 fleißig mitschreiben/bearbeiten!
Die Synchronisations-Signale
Die Darstellung jeder Zeile wird durch die horizontale Synchronisation 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.
Man kann jetzt ein paar Zahlen angeben, die man braucht, um die Punkte einer Zeile anzusteuern: Von der fallenden (HI -> LO) Flanke des HSync-Impulses dauert es 10,5 µs bis zum Zeilenanfang (linker Bildrand). Bis zur Zeilenmitte sind es 36,5 µs und bis zum Zeilenende (rechter Bildrand) 62,5 µs. Bei unseren 352 horizontalen Bildpunkten kann man einen beliebigen Punkt [1..352] mit der Formel:
Verzögerung [µs] = 0,14773 * (Bildpunkt - 1) + 10,5
... ansteuern.
In diesem Bild zeige ich einen Teil der vertikalen Synchronisation, und zwar ab der fallenden Flanke von VSync des Sync-Separators. Könnt ihr sie in der Grafik unten (Zeile Video oder CSync) wiederfinden?
Vertikale Synchronimpulse ab VSync:
Dieses Bild zeigt die vertikale Bildsynchronisation. Das ist die Abfolge von Signalen, die zwischen den einzelnen Halbbildern oder Seiten gesendet werden. Auch unsere Kamera sendet diese Halbbilder/Seiten (Datenblatt: "2:1 Interlace").
ANMERKUNG: In diesem Abschnitt werden die Begriffe Halbbild und Seite synonym gebraucht. Das BAS-Signal unserer Kamera kann auf einem klassischen (analogen) Monitor als zwei Halbbilder dargestellt werden, wobei die Zeilen des einen in die des anderen Halbbildes verschachtelt gezeigt werden. Auf einem modernen digitalen Monitor können auch stattdessen zwei vollständige Seiten nacheinander zu sehen sein.
In der oberen Bildhälfte ist die vertikale Synchronisation zwischen den geraden (even, field 2) und ungeraden (odd, field 1) Halbbildern dargestellt, in der unteren Bildhälfte die vertikale Synchronisation zwischen den ungeraden (odd) und geraden (even) Halbbildern.
Für die Auswertungs-Software ist natürlich wichtig, wie man mit den vertikalen Sync-Signalen Halbbilder und Zeilen ansteuern kann:
Die Frage, ob es sich aktuell um ein ungerades oder gerades Halbbild handelt, beantwortet Odd/Even des Sync-Separators: Ist Odd/Even HI, liegt ein ungerades Halbbild vor, sonst ein gerades Halbbild. Bei der RP6Base, die in der jetzigen Planung Odd/Even nicht auswerten kann (nicht angeschlossen!), kann man sich helfen, indem man eine Variable immer dann toggelt (1-2-1-2...), wenn ein VSync-Impuls kommt. Dadurch weiß man zwar nicht, ob man aktuell wirklich ein gerades oder ungerades Halbbild liest, aber letztlich ist das auch nicht so wichtig: Zwei Folgebilder werden sich nicht so dramatisch unterscheiden.
Wenn man aber ohne das Odd/Even-Signal doch wissen will, auf welcher Seite man gerade ist, dann geht das mit der Felderkennung.
Hier ist ein Ausschnitt der vertikalen Austastlücke gezeigt. Unten erkennt man wieder den VSync-Impuls. Sieht man sich das Video-Signal des 1. Halbbildes (odd, oben!) an, dann folgt 256 µs (oder 9 steigende CSync-Flanken) nach der fallenden VSync-Flanke ein Intervall von ca. 32 µs bis zum folgenden CSync-Impuls. Beim 2. Halbbild (even, unten!) folgt an dieser Stelle ein Intervall von ca. 64 µs bis zum folgenden CSync-Impuls. Damit kann man die Seiten eindeutig auseinander halten.
Schwieriger wird es, wenn man eine bestimmte Zeile eines Bildes ansteuern will. Im Datenblatt des LM 1881N, S. 8, findet sich dazu ein interessanter Satz: Since the vertical output pulse from the LM1881 coincides with the leading edge of the first vertical serration, sixteen positive or negative transitions later will be the start of line 14 in either field.
Das heißt in unserer Landessprache: 16 positive oder negative Flanken nach dem VSync-Signal des LM 1881N (nach dessen fallender Flanke!) findet sich der Anfang der Zeile 14 jedes Halbbildes.
Abgesehen davon, dass diese Angabe auch nur auf NTSC zutrifft: Warum gerade die Zeile 14? Die Zeilen bis 13 werden nicht benutzt, danach kommt der Datenbereich (Untertitel, Videotext ...) ab Zeile 14 bis Zeile 21. Erst ab Zeile 22,5 sind im PAL-System Bildinformationen zu erwarten.
Wie ist das denn bei unserer Kamera?
Leider ist bei unserer Kamera einiges anders als beim Standard-PAL, wie der Blick auf den Oszi-Bildschirm zeigt. Im Datenblatt der Kamera sind 260 TV-Zeilen angegeben, tatsächlich sind es 288. Hier das Ganze 'mal als Grafik:
Die erste Zeile mit Bildinhalt findet sich im 1. Halbbild an Zeilen-Position 18. Zählt man die fallenden oder steigenden Flanken nach dem VSync-Signal, dann befindet man sich nach 22 Flanken an der 18. Zeilen-Position. Die letzte Zeile dieser 1. Seite (288) findet man nach 309 Flanken.
Im 2. Halbbild findet sich die 1. Zeile an Zeilen-Position 17 (Gerber-Zählung: 330). Zählt man die Flanken nach dem VSync-Signal, dann befindet man sich nach 21 Flanken an dieser Zeilen-Position. Die letzte Zeile (288) dieser 2. Seite findet man nach 308 Flanken.
Man braucht also nur direkt nach der fallenden Flanke von VSync die CSync-Flanken zu zählen, um eine beliebige Zeile zu wählen. Eine beliebige Zeile [1..288] kann man mit der Formel:
1. Halbbild: Zeile = Flankenzahl - 21 2. Halbbild: Zeile = Flankenzahl - 20
... ansteuern, wobei der Bereich von Flankenzahl auf der 1. Seite zwischen 22 und 309, auf der 2. Seite zwischen 21 und 308 liegt.
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, das Bildelement kann aber laut Datenblatt 352 x 288 Punkte darstellen, was für unsere Zwecke völlig ausreicht. Von den 260 TV-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, wie viele 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 groß 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 µC 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 15..245). 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! ..........
Software-Projekte
Hier schlage ich einfach 'mal erste Software-Projekte vor. Wer hat Lust, mitzumachen?
Ist die 1. Zeile des Bildes wirklich an Zeilenposition 18 im 1. Halbbild zu finden?
Wo finde ich genau die 1. Zeile? Ist ja wichtig, wenn ich eine bestimmte Zeile lesen will. Wo ist die 1. Zeile im 2. Halbbild zu finden?
Wer schreibt ein Programm, das die 1. Zeile mit Bildinformationen findet?
Wie viele Zeilen gibt unsere Kamera aus?
Wer schreibt ein Programm (egal für die PP6Base, M32 oder M128 und egal ab welcher Phase des Aufbaus), das anzeigt, wie viele Zeilen unsere Kamera wirklich ausgibt? Sind es wirklich 260 wie das Datenblatt sagt bzw. auf jeder Halbseite 130?
Eine Anregung dazu: RP6Control M32: Video Zeilenzähler 1
Wie kann ein "Graukeil" auf dem Terminal aussehen?
Wenn man ein Bild mit z.B. 16 Graustufen mit dem vorhandenen Zeichensatz darstellen will, muss man 16 Zeichen definieren, die die "Graustufen" wiedergeben. Was klar ist: Das Leerzeichen ist Schwarz. Ein sehr dunkler Bildpunkt ist z.B. der Punkt selbst ... und welches Zeichen ist das hellste?
Wer schreibt ein Programm, das einen "Graukeil" auf dem Terminal ausgibt?
Wer stellt einen Video-Grabber vor?
Ein Video-Grabber holt den Inhalt eines Videobildes aus dem Video Stream und stellt ihn irgendwie dar.
Eine Anregung für die RP6Base: RP6Base: Video Grabber 1
... und für die RP6Control M32: RP6Control M32: Video Grabber 1
Erkennung des Syncs mit dem internen Analogkomparator
Zusätzlich benötigte Hardware: Ein Poti zum Einstellen des Sync-Pegels
Es geht sicher noch viel besser!
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
Siehe auch
- RP6
- RP6 - Programmierung
- RP6v2
- RP6 Sensor Board und Xtra Module
- RP6v2_I2C-Portexpander
- RP6v2 USB-RS232-Adapter
- RP6v2 Orientierung
- RP6 Multi IO Projekt
- RP6 Multi IO Projekt - Software
- RP6 ArduIO
- RP6 ArduIO - Software
- Induktive Ladestation für den RP6
- IR-bake für den RP6
- CCRP5
- Yeti
- Asuro
- C't-Bot
Autoren
--Dirk 13:36, 11. Jan 2015 (CET)