Firmware-Entwicklung für eine analoge Videokamera EVR-Y2022F

In einem früheren Artikel wurde das Gerät einer analogen Videokamera eingehend untersucht, um eine eigene Firmware zu erstellen. Wie bereits erwähnt, verfügt die Kamera über einen Mikrocontroller unbekannter Herkunft. Es ist viel reicher als die üblichen AVRs: Es hat zwei Versorgungsspannungen von 3,3 V und 1,8 V und eine DSP-Funktion. Zu diesem Schluss kam ich, als ich über die Implementierung des Autofokus-Algorithmus nachdachte. Trotzdem habe ich komplexe MKs wie STM32 und andere nicht bevorzugt, schon weil ich nie mit ihnen gearbeitet habe. Ich habe definitiv die Entscheidung getroffen, einen der AVR MKs zur Implementierung meiner Firmware zu verwenden. Daher wurde mir bereits zu diesem Zeitpunkt klar, dass die Implementierung der Autofokusfunktion nicht sehr einfach oder eher unmöglich zu handhaben sein wird.

Meine Wahl fiel auf den ATmega128 MK, da er in meinen Arm fiel. Der ATmega8 MK wird in Bezug auf die Anzahl der Schlussfolgerungen offensichtlich nicht ausreichen, zumal ich für alle Fälle beschlossen habe, einen ganzen MK-Port für den digitalen Videostream vom Videoprozessor zu reservieren. Zunächst habe ich herausgefunden, welche Funktionen in meiner eigenen Firmware enthalten sein werden, insbesondere Funktionen, die nicht in der ursprünglichen Firmware enthalten sind, und welche Funktionen vernachlässigt werden müssen.

Betrachten wir eine Variante des Autofokus-Algorithmus zur Analyse eines digitalen Videostreams. Es gelang mir herauszufinden, dass die Videostreamdaten eine Abwechslung von Bytes sind, die mit den "CK" -Pulsen synchronisiert sind. Bytes des Videostreams codieren die Pegel der Y-, Cr-, Cb-Komponenten des Videosignals mit 8-Bit-Abstufung (256 Pegel). Das heißt, die digitale Videoausgabe vom Videoprozessor dieser Kamera wird komponentenmultiplexiert. Informationen zur Helligkeit (Y) sind in jedem zweiten Byte des Videostreams enthalten, und Informationen zur Farbe sind zweimal seltener. Das heißt, Informationen über das Farbdifferenzsignal von Rot Cr sind in jedem vierten Byte enthalten, sowie Informationen über das Farbdifferenzsignal von Blau. Somit repräsentiert der Strom die folgende Sequenz: Cb0, Y0, Cr0, Y1, Cb2, Y2, Cr2, Y3, Cb4, Y4, Cr4, Y5, .... Also,Während Informationen über die Helligkeit jedes Pixels lückenlos sind, werden Informationen über die Farbe von Pixeln nacheinander komponentenweise eingegeben. Diese Ausdünnung ist auf die Eigenschaften der Unempfindlichkeit gegenüber der Farbe kleiner Details und einer Verringerung des Farbbandes im Videosignal zurückzuführen. Diese Eigenschaften werden bei der analogen Fernseh- und Videodigitalisierung verwendet. Die obige "Komprimierung" (Farbunterabtastung) hat ein Komponentenverhältnis von 4: 2: 2.

Damit der Autofokus-Algorithmus funktioniert, reicht es aus, nur die Helligkeitskomponente zu analysieren. Dies ist auch leicht zu erreichen, wenn der Videostream „Byte für Byte“ abgefangen wird. Wenn die CK-Frequenz etwa 18 MHz beträgt, beträgt CK / 2 9 MHz, was für den ATmega128 MK durchaus erreichbar zu sein scheint. Die horizontalen und vertikalen Synchronisationsimpulse ermöglichen es der Steuerung, jeden Bereich des Bildes zu „zählen“ und zu analysieren. Für den Autofokus-Algorithmus reicht es möglicherweise aus, nur die Mitte des Rasters zu analysieren. Je besser der Fokus, desto schärfer das Bild und desto breiter das Frequenzband des Videosignals (mehr HF-Komponenten). Das heißt, es ist möglich (sogar notwendig), den Fast Fourier Transform (FFT) -Algorithmus auf Fragmente eines digitalen Videostreams anzuwenden und die HF-Komponenten zu analysieren. In diesem Fall müssen Sie den Fokusfokus jedes Mal drehen.Verwendung der Methode der „halben Teilung“ als mathematische Optimierungsmethode. So können Sie das beste Ergebnis erzielen.

Ich habe mich nicht um die Autofokusfunktion gekümmert, da es auf MK mit einer einfachen Architektur unmöglich war, obwohl ich auf jeden Fall einen Port für digitales Video reserviert habe. Anstelle der Autofokussierung habe ich beschlossen, eine Reihe anderer Funktionen zu implementieren, die in der ursprünglichen Firmware nicht verfügbar waren. Dazu muss die Videokamera jedoch auf stationäre Bedingungen beschränkt werden, was für die Videoüberwachung typisch ist. Es wird davon ausgegangen, dass sich die Kamera anschließend mithilfe spezieller Mechanismen automatisch und manuell in der horizontalen und vertikalen Ebene drehen kann. Wenn die Kamera automatisch auf ein bestimmtes Objekt gerichtet ist, dessen sphärische Koordinaten im Speicher des Steuergeräts vorgespeichert werden, ändern sich auch die „Koordinaten“ von Zoom und Fokus, die ebenfalls vorgewählt und im Speicher gespeichert werden.Das Management kann nach dem PELCO-D-Protokoll organisiert werden. Darüber hinaus gibt es in der Spezifikation dieses Protokolls ein spezielles Team für dieses Unternehmen. Die Koordinaten von Zoom und Fokus werden natürlich für eine bestimmte Entfernung "gepaart". Das heißt, ein Objekt, das sich in einer bestimmten Entfernung befindet, wird scharfgestellt.

Bevor Sie mit dem Schreiben eines Firmware-Programms beginnen, müssen Sie sich überlegen, welche Peripheriegeräte von MK und welche Schlussfolgerungen daraus entstehen. Dann müssen Sie darüber nachdenken, wie Sie das Board mit einem eigenen MK in der Kamera platzieren und befestigen können. Und damit es so bequem und wartbar wie möglich war. Ich habe mich für ein Board mit MK entschieden, dessen Schlussfolgerungen vollständig nach links und rechts geleitet werden. Die Platine befindet sich an der Unterseite der Kamera, wo wenig Platz vorhanden ist, und wird an einer abnehmbaren Verbindung gehalten. Gleichzeitig befinden sich auf der Platine selbst „Stifte“ des Anschlusses und an den Seiten der Kamera befinden sich Steckdosen. Für die Antwortbuchsen habe ich mich entschieden, zwei weitere Adapterplatinen herzustellen, die so groß sind wie die Seite der Kamera. Die Lamellen dieser Karten befinden sich auf der Oberseite der Kamera direkt auf der Hauptplatine. Es wird davon ausgegangen, dass jede Lamelle an den gewünschten Punkt auf der Hauptplatine der Kamera angeschlossen wird.

Während der Entwicklung des Boards mit MK hatte ich die Idee, den Camcorder mit einer Uhr (RTC) zu ergänzen, und ich hob die I2C-Linie hervor, die auf dem RTC DS1307-Board (ich weiß schon was zum Teufel) mit Quarz und einer Batterie und für alle Fälle mit dem EEPROM 24AA512 platziert war von Hand. Auf der Platine am oberen Rand befinden sich außerdem Anschlüsse zum Anschließen von SPI- und JTAG-Programmierern. Auf dem Original-Motherboard wird MK mit 12-MHz-Quarz getaktet. Es ist für mich das gleiche. Im Allgemeinen ist es besser, dort Quarz auf 11,0592 MHz zu setzen, um einen klaren UART-Betrieb zu gewährleisten. Die Abstände zwischen den "Kämmen" abnehmbarer Gelenke habe ich vorher sorgfältig berechnet. Ich habe mich entschieden, MK aus dem Fünf-Volt-Krenka zu speisen, der auf den Rahmen unter der Hauptplatine geschraubt wird (er wird auch als Kühlkörper dienen). Die Eingangsspannung 12V wird unmittelbar nach der Sicherung FB801 mit Strom versorgt, wie in der Abbildung gezeigt.


Feige. 1. Energieverwaltung des Mikrocontrollers.

Beim Zeichnen von Brettern in "SprintLayout" habe ich mich gefragt, welchen Zweck jeder Pin des MK hat, der "out" an den Anschluss ausgegeben wird. Das Ergebnis ist ein solches Bild.


Feige. 2. Skizzen zusätzlicher Leiterplatten.

Um die Wahrheit zu sagen, habe ich die Seitenbretter (entlang der Kanten) beim Schreiben dieses Artikels gezeichnet. Aber tatsächlich habe ich sie mit einem Cutter gemacht. Es stellte sich heraus, dass dies nicht die erfolgreichste Option war. Und das Board selbst mit MK wurde schief gemacht. Ich habe irgendwie die seitlichen Hilfskarten an die Seiten des Kamerarahmens geschraubt und Flussmittelmuttern auf die Kupferoberfläche der Leiterplatte gelötet. Tatsache ist, dass an den Seiten nur sehr wenig Platz ist und der Deckel der Kamera praktisch Rücken an Rücken „festgezogen“ wird.

Die folgenden Abbildungen zeigen die Verteilung der Schlussfolgerungen des MK sowie deren Zweck.


Feige. 3. Der Zweck der Schlussfolgerungen des Mikrocontrollers.

Es gibt viele Punkte zu kommentieren.

Für den SPI-Programmierer (STK200 +) war die Ausgabe „PEN“ nicht erforderlich. Die Aktivierung erfolgt wie gewohnt durch „RESET“. Anstelle von „MISO“ und „MOSI“ verfügt der MK jedoch über eine separate Schnittstelle (PDI / PDO), und die Leitung „CLK“ wird kombiniert.

Als Referenzspannung für den ADC habe ich die gleichen 5 V gewählt, von denen der MK selbst gespeist wird. Ich habe versucht, separat 3,3 V zu bekommen (wie in der ursprünglichen Schaltung), aber gleichzeitig gab es Fallstricke. Um auf die 5-V-Referenzspannung umzuschalten, müssen Sie die Schaltung leicht ändern, wie in der Abbildung gezeigt.


Feige. 4. Übersetzung der Tasten auf die 5V Referenzspannung.

Das heißt, Sie müssen eine Seite des R505-Widerstands von der 3,3-V-Versorgungsseite ablöten und stattdessen 5 V von der MK-Stromleitung an ihn anlegen.

Von den Schlussfolgerungen von MK, die nur innerhalb des entworfenen Boards verwendet werden, sind nur drei beteiligt. Ein 1-Hz-Impulssignal mit RTC kommt bei PB7 an, um die Zeit zu aktualisieren. Die Pins PD0 und PD1 sind dem I2C-Bus zugeordnet. Es wird programmgesteuert unter Verwendung der CVAVR-Bibliothek „i2c.h“ implementiert, obwohl an diese Ausgänge eine Hardware-i2c-Schnittstelle (TWI) angeschlossen ist.

Der MC-Pin „RESET“ wird ausgegeben, aber der MK-Reset erfolgt von selbst ohne externe Reset-Kette.

Es wurde verstanden, dass die HD- und VD-Taktimpulse über externe Interrupt-Ports zum MK gelangen würden, um das Videofeld genau lesen zu können. Ohne die Autofokusfunktion werden sie jedoch nicht mehr benötigt. Signale von den Zoom- und Fokus-Endschaltern kommen zu benachbarten Ports externer Interrupts.

Port "A" MK ist für den digitalen Videostream reserviert. Port "C" ist vollständig für SD reserviert.

Pin PD4 wird zum Umschalten von TX / RX RS-485 verwendet. In der ursprünglichen Schaltung gab es kein Schalten: Der 2. und 3. Zweig des MAX485-Chips befanden sich am Boden. Der ursprüngliche MK konnte nur Daten zur Steuerung der Kamera über PELCO-D empfangen. Ich entschied mich für ein kleines Upgrade. Die Idee war dies. Wenn der Camcorder hoch und in einem geschlossenen Gehäuse hängt, ist es einfach unmöglich, die Firmware schnell zu aktualisieren. Und ein solches Bedürfnis wird sich sicherlich ergeben: Die Beseitigung verschiedener Fehler und die Verbesserung der Funktionalität werden zum ersten Mal zu einer regelmäßigen Praxis. Aus diesem Grund kam mir die Idee, einen Bootloader für MK zu implementieren und diesen bereits zu verwenden, um die Firmware über RS-485 remote zu aktualisieren. In diesem Fall ist ein wechselseitiger Austausch sehr wünschenswert. Informationen zum Bootloader finden Sie in diesem Artikel. Und um den MAX485 (2 und 3 Beine) an diesen MK-Pin anzuschließen,Sie müssen eine kleine Änderung an der ersten und zweiten Karte vornehmen. Diese Karten sind über ein Schleifenkabel verbunden, an dessen Anschlüssen sich ein nicht verwendeter „IRL“ -Kontakt zur Steuerung der Hintergrundbeleuchtung befindet. Auf der zweiten (Haupt-) Karte müssen Sie den Widerstand R520 ablöten und stattdessen den Draht, der durch die Adapterplatine zum ATmega128 MK führt, an den entsprechenden Ausgang löten. Und auf der ersten Platine müssen Sie 2 und 3 Beine von U202 ablöten und biegen, sie zusammenlöten und von der Verkabelung zum freien Ausgang von 1 Stecker J302 ziehen. Diese Vorgänge zum Ändern der Schaltung sind in der Abbildung dargestellt.Das geht über die Adapterplatine zum ATmega128 MK zum entsprechenden Ausgang. Und auf der ersten Platine müssen Sie 2 und 3 Beine von U202 ablöten und biegen, sie zusammenlöten und von der Verkabelung zum freien Ausgang von 1 Stecker J302 ziehen. Diese Vorgänge zum Ändern der Schaltung sind in der Abbildung dargestellt.Das geht über die Adapterplatine zum ATmega128 MK zum entsprechenden Ausgang. Und auf der ersten Platine müssen Sie 2 und 3 Beine von U202 ablöten und biegen, sie zusammenlöten und von der Verkabelung zum freien Ausgang von 1 Stecker J302 ziehen. Diese Vorgänge zum Ändern der Schaltung sind in der Abbildung dargestellt.


Feige. 5. Organisation der TRX-Leitung zur Steuerung des TX / RX MAX485.

An Bord des ATmega128 befinden sich zwei UART-Schnittstellen. In diesem Fall müssen Sie die zweite Schnittstelle (Pins 27, 28) verwenden, da die erste Schnittstelle an den Pins (Pins 2, 3) mit der Schnittstelle für den SPI-Programmierer kombiniert ist.

Im Vorstand sind fast alle Schlussfolgerungen des MK involviert. Die Schlussfolgerungen von Port „G“ erwiesen sich als ungenutzt. Die Uhr konnte übrigens programmgesteuert auf Basis von MK implementiert werden. Es bietet einen Ruhemodus mit einer Batterie zum Zählen der Zeit, wenn die Hauptstromversorgung ausgeschaltet ist. Es gibt sogar Schlussfolgerungen für den Anschluss eines separaten Niederfrequenzquarzes. Ich habe mich jedoch nicht darum gekümmert und den DS1307 geschlagen.

Die folgende Abbildung zeigt den Zweck jedes Ausgangs der Karte mit MK. Außerdem ist bedingt markiert, auf welcher Seite der Hauptplatine die Drähte von jedem Pin verlötet werden. Es ist auch notwendig, einige Kommentare abzugeben.


Feige. 6. Abtretung von Schlussfolgerungen einer zusätzlichen Zahlung mit MK.

Signale von den Zoom- und Fokus-Endschaltern kommen nicht nur zu den Interrupt-Ports, sondern auch zu den ADC-Eingängen. Tatsache ist, dass ich bereits in der Phase des SD-Studiums ein solches Merkmal bemerkt habe. Wenn der Zoom- oder Fokusmechanismus auf „Null“ steht, kann das Ausgangssignal vom Anhänger einen „Zwischenzustand“ annehmen. Um solche seltenen Fälle besser erfassen zu können, habe ich mich für den ADC entschieden. Natürlich ist dies kein sehr kompetenter Ansatz, aber auf diese Weise kam ich schnell aus dem Problem heraus, das manchmal in der Initialisierungsphase meiner Test-Firmware auftrat. Dadurch habe ich die Stabilität des Algorithmus erhöht.

Die SDA / SCL-Signale vom I2C werden nur für den Fall in den Anschluss eingesteckt und nicht außerhalb dieser Karte verwendet.

Die Namen der einzelnen Pins zur Steuerung der ID werden entsprechend der tatsächlichen Verbindung signiert. Das Verbinden von Daten mit Blick auf die Zukunft wurde schließlich in der Debugging-Phase korrigiert. Es gab viel Verwirrung, aber die Fehler waren nur im Wechsel der Phasen genau umgekehrt und nicht in ihrer Reihenfolge. Die Alternativen „4-1-2-3“ (für Zoom) und „2-3-4-1“ (für Fokus) sind ein und dieselbe sowie „1-2-3-4“ und wurde als Grundlage genommen.

Am Ende des Artikels (um nicht zu blamieren) werden zwei Fotos präsentiert. Die erste ist die Unteransicht des Camcorders mit Blick auf die zusätzliche Leiterplatte. Die zweite ist eine Ansicht von oben von oben auf die Hauptplatine einer Videokamera mit einem abgedichteten Standard-MK (genauer gesagt Mikroprozessor), einem Bündel Drahtbrücken und anderem Rotz.

Ich habe das Programm (Firmware) zusammen mit seinen vorläufigen Tests im ISIS 7 Professional (Proteus) -Programm geschrieben.


Feige. 7. Ansicht des Projekts in Proteus.

Anstelle der einzigartigen Chips des Zeichengenerators und des Videoprozessors (die natürlich nicht in Proteus enthalten sind) habe ich SPI-Debugger installiert. Mit ihrer Hilfe ist es bequem, die Bytes zu steuern, die MK per SPI sendet. Die tatsächliche Reaktion auf diese Bytes wird jedoch direkt auf der Hardware gesteuert. Mit Proteus können Sie PELCO-D-Befehle von einem echten DVR überwachen und debuggen. Zu diesem Zweck müssen Sie den DVR optional über den einfachsten Einwegadapter RS485-> RS232 an den COM-Anschluss des Computers anschließen.

Dann begann ich zu entwickeln und zu modellieren. Excel hat dabei sehr geholfen.

Zuerst müssen Sie die Timer und ihre Konfiguration festlegen. Ein Timer - um die Drehung des Schrittmotors und die Ausführung wiederholter Operationen der Tasten zu realisieren, während sie gedrückt gehalten werden. Wenn Sie diese oder jene Taste während der Einstellungen über das Menü gedrückt halten, wird der Betrieb der SD ausgeschlossen. Wenn Sie eine der Zoom- oder Fokussteuertasten außerhalb des Menüs gedrückt halten, dreht sich die SD mit dem entsprechenden Zeitparameter. Somit gibt es keine Konflikte. Ich hatte vor, den zweiten Timer zu verwenden, um PWM für die SD zu implementieren, aber im Laufe der Zeit habe ich beschlossen, ihn aufzugeben. In meinem Fall ist PWM nicht erforderlich, wenn kein Autofokus vorhanden ist. Darüber hinaus hat der Übertragungsmechanismus eine helikale Struktur, daher können Sie im Ruhezustand die SD nicht durch Gleichstrom "halten", der Mechanismus kriecht nirgendwo hin.

Anschließend müssen Sie das Zeichenalphabet des Zeichengenerators gemäß Datenblatt überarbeiten und mit dem Standardalphabet ASCII vergleichen. Das Alphabet des Zeichengenerators besteht aus 128 Zeichen, was der halben Größe des letzten entspricht. Zum Beispiel fehlen die kyrillischen Zeichen im Zeichengenerator vollständig, aber es gibt Sonderzeichen, die für seine Anwendung charakteristisch sind (Sonne, Sanduhr, kleiner Mann, Notiz, Telefon usw.). Ich habe ein Array von "smb [256]" aus 256 Elementen erstellt und es in das EEPROM MK eingefügt. Die Notation smb [i] = adr bedeutet, dass sich an der Adresse adr im Zeichengenerator ein Zeichen mit dem ASCII-Code i befindet. Und wenn das Symbol i nicht im Alphabet des Zeichengenerators enthalten ist, bezieht sich der Wert des Array-Elements auf das "Leerzeichen" mit der Adresse 0x7E. Das heißt, fast die Hälfte der Elemente im Array hat den Wert "0x7E". Dieses Array ist in der folgenden Abbildung in Tabellenform dargestellt.


. 8. ASCII PD6464A.

Als nächstes müssen Sie überlegen, wie Schaltflächen über den ADC verarbeitet werden. Nach dem Ohmschen Gesetz ist es einfach, die Spannungswerte am Eingang des ADC zu berechnen, wenn Sie auf eine Schaltfläche klicken. Danach ist es einfach, die Grenzen der Intervalle zu berechnen, deren Mitte die gleichen Spannungswerte aufweist. Insgesamt werden sechs Intervalle erhalten: fünf davon entsprechen jeder Taste und eines dem Fehlen eines Drucks (es wird keine Taste gedrückt). Auf Hardwareebene analysiert der ADC MK regelmäßig den Spannungswert über die Tasten. Der Timer für Anti-Bounce kann basierend auf der Berechnung der ADC-Taktzyklen implementiert werden, was ich getan habe. In der Debugging-Phase hatte dieser Teil des Programms seine Tücken. Ich denke, dass es sich nicht lohnt, Details zu schreiben. Um die klare Arbeit dieser Funktionalität zu erreichen, musste ich lange basteln. Die Tastenerkennungsfunktion befindet sich im ADC-Interrupt-Bereich, und an seinem Ausgang befindet sich die Tastennummer.Depressionsflagge und Freigabeflagge. Die Weiterverarbeitung der Tasten erfolgt im Hauptprogrammzyklus. Die Tastenabruffrequenz (ADC-Frequenz) betrug 12000/128 = 93,75 (kHz), wobei 128 der maximal mögliche Teiler ist.

Dann habe ich ein Array von Werten des UART-Registers UBRR1 der UART-Konfiguration erstellt, abhängig von dem einen oder anderen Bodyrate-Wert für PELCO-D, der aus der Liste in den Einstellungen über das Menü ausgewählt werden kann. Diese Werte können mithilfe der Formel aus dem Datenblatt des MK berechnet und auch mit dem automatischen Konfigurator des AVR-Assistenten abgerufen werden.

Dann fing ich an, das Menü zu modellieren. Dies ist die wichtigste und zeitaufwändige Phase beim Schreiben eines Programms. Im Prinzip wollte ich das Menü der Standard-Firmware nicht wiederholen, außer dass ich mich entschied, es zu einer hierarchischen Struktur zu komplizieren (Abschnitt im Abschnitt). Unten finden Sie eine Beschreibung des Modells und die Definitionen des Menüs, das ich für mich selbst erstellt habe.

Kann nicht lesen
.
.
.
.
«MENU».

«» .
«» «» .
«» .
«» .
( ) , .
« », .

:
— ;
— ;
— ;
— .

, , .
<>.
.
"<..>".
«».
, .
( ) .
"<..>" .
, .
.

.
.
.
"<•>" ( ).
"< >" ().
«».

.
.
«l*l» (, «l»).
«l l» (, «l»).
«».

, .
.
.
.
: «000», «00», «0».
.
: ": ".
— ( ) .
, , «» «».
«» 1.
«» 1.

.
.

Daher ähnelt die Menünavigation der Navigation durch Dateien und Ordner über „Total Commander“. Der Implementierungscode für dieses Menümodell ist nicht sehr kompliziert, aber sehr umständlich. Es gibt zwei Schlüsselvariablen: die Nummer der aktiven Seite und die Nummer der aktiven Position auf der Seite. Für beide Variablen arbeiten zwei "Switch-Case" -Funktionen ineinander. Dieses Funktionspaar ist am Drücken der Tasten "Links", "Rechts" und "Menü" beteiligt. An jedem Ort (für jede Schaltfläche, Seite und jedes aktuelle Element) werden bestimmte Aktionen registriert. Jede Menüseite verfügt über eine Funktion, die die Anzeige der Seite auf dem Bildschirm mit allen Beschriftungen und Parametern implementiert. Bevor ich die Seitenausgabefunktionen implementierte, habe ich sie zuvor in Excel modelliert, wie sie "nach Zellen" sagen.So werden die Koordinaten der Zellen jedes Symbols auf dem Bildschirmfeld klarer dargestellt, und diese Informationen sind in der Programmierphase erforderlich. In der folgenden Abbildung habe ich als Beispiel die Ansicht von Seite 9 gegeben, auf der die PELCO-D-Baudrate aus der Liste ausgewählt ist. Das Schnittstellenelement auf der Seite ist ein Optionsfeld. Darüber hinaus soll der erste Absatz <..> diesen Abschnitt verlassen.


Feige. 9. Modellieren des OSD in Excel.

Ich habe auch ein Array erstellt, das die Anzahl der Punkte auf jeder Seite widerspiegelt. Es wird beim Drücken der Auf- und Ab-Tasten verwendet. Dies geschieht, um den Code zu reduzieren und die Verwendung der Switch-Case-Funktion zu vermeiden.

Wiederholtes virtuelles Drücken bei gedrückter Taste wird im Hauptteil des Timer-Interrupts durch die Funktion „Switch-Case“ implementiert, die mit einer Ganzzahlvariablen arbeitet, die ein Flag ist. Der Flag-Wert ist für jede Aktion einer Schaltfläche auf einer bestimmten Seite und einem bestimmten Menüpunkt eindeutig. Es wird dem Flag nur an den Stellen als Seriennummer zugewiesen, an denen virtuelle Klicks erforderlich sind. Gleichzeitig werden innerhalb der Funktion „Switch-Case“ (im Hauptteil des Timer-Interrupts) Kopien von Funktionen platziert, die die Aktionen der Tasten implementieren. Um Speicherplatz zu sparen, konnten bei regelmäßigen Aufrufen der Tastenverarbeitungsfunktion Verknüpfungen (Links) platziert werden. Es ist noch vernünftiger, aber in diesem Moment hatte ich nicht die Geduld darüber nachzudenken, wie ich es besser machen könnte, weil ich das Projekt so schnell wie möglich abschließen wollte. Und der Speicher in ATmega128 stellte sich als ziemlich viel heraus.

Schließlich habe ich „Bibliotheken“ für die Arbeit mit einem Videoprozessor, einem Zeichengenerator und einer RTC DS1307 mit den erforderlichen Funktionen implementiert. Danach habe ich die Adressen des EEPROM MK ermittelt, um diese oder jene Informationen zu speichern. Die ersten 32 Bytes sind zum Speichern von Menüeinstellungsinformationen reserviert. Die nächsten 32 Bytes sind für das Speichern von Text reserviert, der auf dem Bildschirm angezeigt oder mit dem Standardbefehl „Pelco-D Write Char. Zum Bildschirm. " Die nächsten 256 Bytes des EEPROM-Bereichs sind für das Alphabet reserviert (Konvertierung eines Zeichens von ASCII in eine Adresse für einen Zeichengenerator, wie oben erwähnt). Schließlich sind die nächsten 128 Bytes für das Speichern von „Voreinstellungen“ (Vorlagen) für Zoom / Fokus reserviert. Ich habe diese Funktion aufgrund des fehlenden Autofokus eingeführt. Ich habe darüber am Anfang des Artikels geschrieben. Insgesamt 32 Vorlagen. Die Koordinaten des Zooms oder Fokus werden in zwei Bytes codiert.

Unabhängig davon lohnt es sich, über die Implementierung des SD-Managements zu schreiben. Die Drehung der SD wird durch Aufrufen der Funktionen StepF () und StepZ () im Timer-Interrupt-Block erreicht. Die Drehzahl wird durch die Konfiguration dieses Timers bestimmt. Und die Implementierung der obigen Funktionen implementiert die Förderung des Fokus bzw. des Zooms in einem minimalen Schritt. Während der Drehung des Zoomobjektivs und des Fokus werden ihre Endpositionen gesteuert. Die Position des maximalen Fokus und die Position des minimalen Zooms werden im Programm durch Konstanten (280 bzw. -600) dargestellt. Aber die Position des minimalen Fokus und die Position des maximalen Zooms - in Form der Variablen F_min und Z_max (genauer gesagt Funktionen). Dieser Ansatz wurde durch einen nicht rechteckigen Arbeitsbereich mit einer abgeschnittenen unteren rechten Ecke erleichtert. Zur Berechnung der Werte von F_min und Z_max werden stückweise definierte Funktionen F_min (Z) und Z_max (F) verwendet. Außerdem,Wenn sich der SD-Zoom bei Z (Zoomkoordinate)> 500 in die positive Richtung dreht, dreht sich der SD-Fokus gleichzeitig in die gleiche Richtung, wenn dieser Koordinaten <(- 180) hat. Das heißt, die maximale Zoomposition ist im Prinzip nicht durch die aktuelle Fokusposition begrenzt, sondern auf 600. Es kommt einfach vor, dass sich zwei SDs gleichzeitig drehen, wenn der entsprechende Winkelrand des fünfeckigen Bereichs erreicht ist, und die Bewegung in diesem Stadium entlang der „Schnittseite“ erfolgt (wenn grafisch interpretiert). ) Aus mechanischer Sicht entspricht dies dem im vorherigen Artikel beschriebenen Prozess, wenn in Abwesenheit von SD und beim manuellen Verschieben der Zoom- und Fokusknoten der Zoomknoten am Ende des Pfads den Fokusknoten „zieht“. Aufgrund der Tatsache, dass die Zoomkoordinate die Fokuskoordinate dominiert (weshalb ich die F (Z) -Abhängigkeit betrachte,aber nicht umgekehrt), ich habe nicht begonnen, ein ähnliches Zoom-Scrolling-Verfahren in der Funktion Step_F () zu implementieren.

In der ursprünglichen Firmware hatte die Geschwindigkeit zum Ändern von Zoom und Fokus feste Werte. Dies ist nicht immer bequem. In meiner Firmware habe ich vier Werte für die Zoom- und Fokusgeschwindigkeit (unabhängig voneinander) angegeben, die sowohl über das Menü als auch mit dem dieser Funktion zugewiesenen PELCO-D-Befehl ausgewählt werden können. Diese vier Werte werden in der Debugging-Phase nach Belieben vorgewählt und dann in die Firmware eingegeben.

Die BD-Initialisierungsfunktion init_MR () wird benötigt, um die Mechanik des Zooms und des Fokus an das Koordinatensystem zu binden. Es wird jedes Mal einmal ausgeführt, wenn Sie den Camcorder einschalten. Der Algorithmus ihrer Arbeit ist ungefähr der folgende. Zunächst wird angenommen, dass sich der Zoom oder Fokus auf dem Nullpunkt befindet, und es wird versucht, den Abprall des Signals von den Endschaltern durch externe Interruptfunktionen zu erfassen. Ich werde sofort feststellen, dass das Signal am Ausgang des Anhängers einen "Zwischen" -Zustand zwischen logischer "0" und "1" hat, wenn der Zoom oder Fokus auf "Null" (an der Grenze der Aufteilung des optischen Anhängers) liegt. Solche Fälle sind sehr unwahrscheinlich, können aber nicht ausgeschlossen werden. Die Interrupt-Funktion interpretiert jedoch kein Signal wie Bounce. Aus diesem Grund habe ich den ADC MK verwendet, der Signale von den End- und Zoom-Endschaltern auf seinen beiden freien Kanälen auslöst. Damit,Der erste Schritt ist die "Digitalisierung" der Signale von den Endschaltern mit 8-Bit-Genauigkeit. Dies erfolgt mit einer einzigen Analog-Digital-Wandlung. Es ist zu beachten, dass die Referenzspannung in unserem Fall 5 V beträgt und der logische Pegel „1“ vom Endschalter 3,3 V beträgt. Für eine logische "0" ist der ADC-Wert Null und für eine "1" - 3,3 / 5 * 255 = 168. Wenn der Signalwert von dem einen oder anderen Trailer in den Bereich von beispielsweise 2 bis 165 fällt (ein Fuzzy-Intervall wird verwendet), bedeutet dies, dass der entsprechende Knoten bereits "auf Null" ist und der Initialisierungsvorgang für diesen Knoten gestoppt werden kann. Andernfalls müssen Sie anhand des logischen Werts des Anhängersignals („0“ oder „1“) bestimmen, in welchem ​​Teil (zur Hälfte) sich der Knoten befindet. Die Drehrichtung des SD hängt davon ab. Auf die eine oder andere Weise sollte der SD in diese Richtung gedreht werden.so dass sich der entsprechende Knoten in Richtung "Null" (Endschalter) bewegt. Somit wird die Drehung des Motorantriebs mit der gleichzeitigen Berechnung der Anzahl von Schritten gestartet, bis der Endschalter erreicht ist. Sobald der entsprechende Endschalter erreicht ist, der die Funktion der externen Unterbrechung entsprechend der Differenz der logischen Ebene bestimmt, erfolgt eine Rückwärtsdrehung des Motorantriebs. Es dreht sich in der gleichen Anzahl von Schritten in die entgegengesetzte Richtung und kehrt dadurch in seine ursprüngliche Position zurück. Der Wert der Anzahl der Schritte für jede BD mit dem entsprechenden Vorzeichen wird vor dem Verlassen der Initialisierungsfunktion in die entsprechenden Variablen kopiert. Das oben beschriebene Verfahren erfolgt unabhängig voneinander für Fokus und Zoom innerhalb derselben Funktion (nicht wiederum).Die Drehzahl des Motorantriebs in der Initialisierungsphase wird durch eine separate Konstante bestimmt und entspricht der maximalen Drehzahl für eine sichere korrekte Drehung des SM.

Stellen Sie sich das Beispiel vor, in dem sich der Zoom vor dem Einschalten der Kamera im negativen Bereich und der Fokus im positiven Bereich befand. Die Abbildung zeigt schematisch die Flugbahn des Punktes (Z; F) während des Initialisierungsvorgangs des Schrittmotors.


Feige. 10. Der Vorgang zum Initialisieren von Zoom und Fokus.

Punkt A ist die Anfangsposition von Zoom und Fokus. Die Bewegung beider Knoten erfolgt in Richtung "Null" mit gleicher Geschwindigkeit (Initialisierungsgeschwindigkeit). Bei Punkt B erreicht der Fokus Null, da er näher an Null als der Zoom lag. Dann wird der Fokus umgekehrt. Bei Punkt C schließt der Fokus den Initialisierungsprozess ab und kehrt zu seiner ursprünglichen Position zurück. Gleichzeitig bewegt sich der Zoom immer noch in Richtung seiner „Null“. Am Punkt D erreicht es seine „Null“ und kehrt zu seiner ursprünglichen Position zurück (Punkt A).

Zusätzlich zur Initialisierungsfunktion init_MR () gibt es eine Funktion goto_zf (z, f). Basierend auf dem Namen soll von einem Preset zu einem anderen gewechselt werden, über das ich am Anfang des Artikels geschrieben habe. Die Drehzahl des Schrittmotors während des Übergangs ist dieselbe wie während der Initialisierung. Der Übergangsprozess in Zoom und Fokus wird gleichzeitig ausgeführt. Das heißt, wenn es erforderlich ist, vom Punkt (z1; f1) zum Punkt (z2; f2) zu gelangen, wird die gleichzeitige Drehung von zwei SDs gestartet. Wenn zum Beispiel | f2-f1 | <| z2-z1 |, wird die Fokus-SD früher gestoppt. Dies ist in der folgenden Abbildung dargestellt.


Feige. 11. Der Vorgang zum Ändern des Zooms und des Fokus bei der Auswahl einer Voreinstellung.

Während der gesamten Betriebszeit des Schrittmotors während des Durchlaufs des Nullmarkenbegrenzers wird die entsprechende Koordinate auf Null gesetzt. Und das trotz der Tatsache, dass dies theoretisch nicht möglich ist. In der Praxis tritt jedoch immer noch ein Fehler von 1-2 Schritten der SD auf.

Es ist erwähnenswert, dass ich im Gegensatz zur ursprünglichen Firmware in meinem Fall bei der Steuerung von Zoom und Fokus (sowohl über die Tasten als auch über PELCO-D) die Möglichkeit einer schrittweisen Bewegung vorgesehen habe. Dies funktioniert wie folgt. Wenn Sie auf eine der 4 Schaltflächen klicken, um den Zoom oder Fokus zu steuern, wird die entsprechende SD um einen Schritt gedreht, wodurch die Bewegung des Zoom- oder Fokusknotens minimiert wird. Wenn Sie die Taste nicht loslassen, beginnt nach kurzer Zeit die normale Drehung des Schrittmotors. Diese Verzögerung wird empirisch im Voraus ausgewählt. Diese Funktion ähnelt virtuellen wiederholten Drücken, während Sie die Taste gedrückt halten. Dank dieser Funktion wird das Problem des „Festhaltens“ der Taste beim Steuern des Zooms oder beim Fokussieren auf ein PELCO-D-Remote-Gerät über eine schlechte Internetverbindung beseitigt. Genauer gesagt ergibt sich die Gelegenheit als unhöflich,und Feinabstimmung des Zooms oder Fokus.

Der Interpreter der PELCO-D-Befehle erfolgt nach der gleichen Analogie wie im Gerät zum Lastschalten über PTZ. Ich habe diesem einfachen Gerät zuvor einen separaten kleinen Artikel über Habré gewidmet. Im Gegensatz zur ursprünglichen Firmware beziehen sich Zoom- und Fokussteuerbefehle vollständig auf das Drücken der entsprechenden Tasten. Das heißt, es ist möglich, das Menü mit den PELCO-D-Zoom- und Fokustasten zu „klettern“. Und um das Menü über PELCO-D aus der Ferne aufzurufen oder vielmehr die Taste „MENU“ zu drücken, habe ich die Taste zum Öffnen der Blende damit verglichen, da diese Funktion in diesem Kameramodell nicht verwendet wird. Somit gibt es fünf grundlegende PELCO-D-Befehle zum Drücken sowie fünf grundlegende Befehle zum Loslassen von Tasten. Darüber hinaus werden, wie ich bereits beiläufig im gesamten Artikel geschrieben habe, zusätzliche Befehle verarbeitet: "Voreinstellung festlegen", "Voreinstellung löschen","Gehe zu Preset", "Write Char. Zum Bildschirm “,„ Bildschirm löschen “,„ Zoomgeschwindigkeit einstellen “,„ Fokusgeschwindigkeit einstellen “.

Datum und Uhrzeit mit RTC werden in Analogie zu alten VHS-Kameras in der unteren linken Ecke des Bildes angezeigt, wenn diese Option im Menü aktiviert ist. Außerdem können Sie im Menü das Ausgabeformat auswählen, das ich auch im Voraus angegeben habe. Auch auf dem Bildschirm neben Datum und Uhrzeit kann der Wochentag angezeigt werden. Zusätzlich zur Uhr werden die aktuellen Koordinaten von Zoom und Fokus als zusätzliche Informationen auf dem Bildschirm angezeigt. Diese Option wird hauptsächlich in der Debugging-Phase benötigt.

Ich werde Ihnen die Funktionen des von mir implementierten Menüs erläutern. Im Laufe der Zeit wird das Menü bei Bedarf überarbeitet: Einige Funktionen können entfernt und andere hinzugefügt werden. Die Menüstruktur, die ich in SPlan mit Seitenaufrufen gezeichnet habe, ist in der folgenden Abbildung dargestellt. Rote Pfeile - betreten Sie den Abschnitt. Blaue Pfeile - Verlassen Sie den Abschnitt. Ich habe nicht auf jeder Seite des Menüs blaue Pfeile gezeichnet, sondern nur zwei.


Feige. 12. Die Struktur des Bildschirmmenüs.

Einige Abschnitte meines Menüs sind ein bisschen wie Abschnitte des Originals. Dies sind zunächst die ersten beiden Abschnitte: Weißabgleich und Belichtung. Im dritten Abschnitt können Sie die Adresse der PELCO-D-Kamera angeben und die Datenrate (Baudrate) aus der Liste auswählen. Der vierte Abschnitt ist Datum und Uhrzeit gewidmet. Sie können Datum, Uhrzeit und Wochentag einstellen, eines von vier Anzeigeformaten auswählen und eine Anzeigemethode auswählen. Der fünfte Abschnitt - Arbeiten mit Voreinstellungen (Vorlagen) für Zoom und Fokus, wo Sie ihn nach Nummer aufrufen sowie löschen oder überschreiben können. Auch in diesem Abschnitt des Menüs können Sie eine von vier Geschwindigkeiten zum Ändern des Fokus oder des Zooms auswählen. Im fünften Abschnitt können Sie die Parameter des Videoprozessors bearbeiten, der sich im Byte 9 der Kategorie 3 befindet. Dies ist der Pegel und die Inversion der Burst-Komponente des Videosignals sowie die Videospiegelung. Der letzte Abschnitt des Menüs dient zum Debuggen.Mit ihm können Sie einen beliebigen Wert eines beliebigen Bytes in einer beliebigen Kategorie in den Videoprozessor schreiben. Der Wert kann sowohl in Dezimal- als auch in Binärform eingestellt werden.

Jetzt werde ich ein paar Worte über den Bootloader sagen. Wie ich bereits geschrieben habe, wird der Bootloader zum Remote-Flashen des Camcorders über RS-485 benötigt. Anfangs dachte ich, den Bootloader selbst vollständig zu implementieren. Um Zeit zu sparen, habe ich mich jedoch für einen der bereits implementierten fertigen Downloader entschieden, die im Internet zu finden sind. Außerdem habe ich sie nie benutzt und nur auf theoretischer Ebene eine Vorstellung von ihnen gehabt. Eines der wichtigsten Kriterien für die Auswahl eines Bootloaders ist die RS-485-Unterstützung. Normalerweise arbeiten AVR-Downloader mit UART RS-232. Und der Bootloader mit RS-485-Unterstützung unterscheidet sich nur dadurch, dass auf der MK-Seite ein zusätzlicher Ausgang zum Umschalten des RS-485-Transceivers (z. B. MAX485) während der Datenübertragung vom MK zum PC zugewiesen wird. Beim Flashen von MK überträgt der Bootloader Informationen über erfolgreiche oder nicht erfolgreiche Aufzeichnung an den Computer. Erster BootloaderMit dem, was ich gefunden habe, können Sie nicht nur den FLASH-Speicher von MK mit Firmware, sondern auch das EEPROM aufzeichnen. Neben dem Schreiben können Sie auch Daten lesen. Aber dieses Projekt mit Assembler-Quellcode war ziemlich verwirrend und ich habe es nicht verstanden. Darüber hinaus lag der Schwerpunkt dieses Bootloaders auf der Möglichkeit, mehrere Geräte einzeln zu flashen, ohne sie vom RS-485-Netzwerk zu trennen, und auf jedes Gerät unter einer zuvor eingenähten Adresse zuzugreifen. Ich benötige solche Funktionsmerkmale nicht, da ich eine andere Topologie des RS-485-Netzwerks verwende und der Camcorder schnell vom DVR auf den PC umgeschaltet werden kann. Der zweite Bootloader ist der deutsche Chip45. Der Quellcode ist nicht gemeinfrei, er kann vom Autor gekauft werden. Stattdessen gibt es mehrere hundert HEX-Dateien für verschiedene AVR-MKs, verschiedene UART-Schnittstellen (wenn es mehrere gibt, wie in meinem Fall),RS-485 oder RS-232 zur Auswahl. Kurz gesagt, für alle Gelegenheiten. Gleichzeitig stellt der Autor fest, dass im Fall von RS-485 der TX / RX-Schaltstift fest ist und dem XCK-UART-Stift der Controller-Schnittstelle entspricht, der in UART praktisch nicht verwendet wird. In meinem Fall ist der 30. Pin des XCK der zweiten UART-Schnittstelle des Atmega128 MK PORTD.5 ​​und wird zum Aktivieren der Zoom- und Fokus-Endschalter verwendet. Im Prinzip wird diese Funktion nicht benötigt, da, wie Studien gezeigt haben, Endschalter immer aktiv sind, wie ich bereits geschrieben habe. Bei Bedarf können Sie diese Funktion auf jeden anderen freien Ausgang MK übertragen. Aber dieser Bootloader hat mich auch nicht beeindruckt, zumal ich auf einen interessanteren Bootloader namens „AVR Universal Bootloader“ mit chinesischem Design gestoßen bin. Wie Chip45 kann es nur schreiben und nur im FLASH-Speicher von MK.Aber er hat eine Vielzahl von Möglichkeiten, und deshalb habe ich mich entschieden, daran festzuhalten. Es kommt als AVR Studio-Projekt mit C-Quellcode. Aufgrund der Tatsache, dass ich in CodeVisionAVR arbeite, musste ich AVR Studio zusammen mit WinAVR installieren. Um die HEX-Datei für die Bootloader-Firmware zu erhalten, müssen Sie das Projekt kompilieren, indem Sie vorläufige Änderungen am Quellcode für die Konfiguration Ihres Geräts vornehmen, und Sie benötigen Ihre eigene. Die Kompilierung des Projekts besteht darin, eine Bat-Datei (Batch-Datei) zu starten, in die die Kompilierungsbefehle geschrieben werden. Daher muss ein Projekt in AVR Studio nicht geöffnet werden. Änderungen im Quellcode können entweder manuell (auf Programmiererebene) oder mithilfe des Konfigurators vorgenommen werden. Die Rolle des letzteren ist ein zusätzliches Fenster des Dienstprogramms, das mit dem ebenfalls angehängten Bootloader funktioniert.Im Konfigurator können Sie festlegen, dass der MK-Pin für die TX / RX RS-485-Umschaltung, der MK-Pin für die blinkende LED der Steuerung, der MK-Pin für die Eingabe des Bootloaders, die Art und Weise, wie der Bootloader eingegeben wird, der MK-Name und die Frequenz usw. nicht aufgeführt werden können. Darüber hinaus kann das bekannte Standardprogramm „HyperTerminal“ als Dienstprogramm zum Laden eines Benutzerprogramms in MK dienen, dh zum Arbeiten mit dem Bootloader. Es verwendet das Protokoll „Xmodem“ zum Herunterladen der Firmware. Und um bequem und visuell mit dem Bootloader über das Textterminal arbeiten zu können, steht im Konfigurator die Sonderfunktion „Ausführlicher Modus“ zur Verfügung. Trotz der Attraktivität des Hyperterminals habe ich mich für das Dienstprogramm entschieden, das mit dem Bootloader geliefert wurde. Tatsache ist, dass ich mit der im Konfigurator aktivierten praktischen Funktion Verbose, die über das Terminal funktioniert, auf die folgende Situation gestoßen bin.Manchmal passierte es, wenn der Datenverkehr in der Leitung „kollidierte“ (beide Geräte im TX-Modus), wodurch der MAX485 im Camcorder sehr heiß wurde und ausfiel, oder vielmehr nicht vollständig, sondern nur der RX-Bereich (Datenübertragung über RS-485 an die Kamera). . Aus diesem Grund habe ich HyperTerminal aufgegeben. Und es gibt noch eine weitere Unannehmlichkeit. HyperTerminal funktioniert nicht mit HEX-Textdateien und akzeptiert nur eine Binärdatei. Daher müsste ich eine zusätzliche Konvertierung von hex zu bin anwenden. Nachdem die Bootloader-HEX-Datei von mir generiert wurde, habe ich sie mit dem PonyProg-Programm und dem üblichen SPI-Programmierer in den MK eingenäht. Infolgedessen funktioniert der Bootloader wie folgt. Wenn Sie den Camcorder einschalten, wird der Bootloader sofort aktiviert. Er wartet eine Sekunde lang auf eine Verbindung vom Dienstprogramm, dann funktioniert die Hauptfirmware. Wenn die Verbindung erfolgreich hergestellt wurde,dann beginnt der Blinkvorgang. Gleichzeitig muss das andere Ende der RS-485-Leitung vorab vom DVR getrennt und über den RS485 <-> RS232- oder RS485 <-> USB-Adapter mit dem PC verbunden werden. Übrigens über die Adapter. Es stellte sich die Frage, wie man einen solchen Adapter selbst herstellt, da gekaufte Adapter teuer sind. Beim Stöbern im Internet fand ich eine einfache RS485 <-> RS232-Adapterschaltung. Es ist in der folgenden Abbildung dargestellt. Es besteht hauptsächlich aus bekannten MAX232- und MAX485-Mikroschaltungen, und TX / RX wird durch das Signal vom 3. Ausgang des COM-Port-Anschlusses des Computers über eine Zenerdiodenschaltung geschaltet. Das heißt, der MAX485 wird durch den vom PC übertragenen Datenverkehr geschaltet. Alles ist einfach und genial.RS232 oder RS485 <-> USB. Übrigens über die Adapter. Es stellte sich die Frage, wie man einen solchen Adapter selbst herstellt, da gekaufte Adapter teuer sind. Beim Stöbern im Internet fand ich eine einfache RS485 <-> RS232-Adapterschaltung. Es ist in der folgenden Abbildung dargestellt. Es besteht hauptsächlich aus bekannten MAX232- und MAX485-Mikroschaltungen, und TX / RX wird durch das Signal vom 3. Ausgang des COM-Port-Anschlusses des Computers über eine Zenerdiodenschaltung geschaltet. Das heißt, der MAX485 wird durch den vom PC übertragenen Datenverkehr geschaltet. Alles ist einfach und genial.RS232 oder RS485 <-> USB. Übrigens über die Adapter. Es stellte sich die Frage, wie man einen solchen Adapter selbst herstellt, da gekaufte Adapter teuer sind. Beim Stöbern im Internet fand ich eine einfache RS485 <-> RS232-Adapterschaltung. Es ist in der folgenden Abbildung dargestellt. Es besteht hauptsächlich aus bekannten MAX232- und MAX485-Mikroschaltungen, und TX / RX wird durch das Signal vom 3. Ausgang des COM-Port-Anschlusses des Computers über eine Zenerdiodenschaltung geschaltet. Das heißt, der MAX485 wird durch den vom PC übertragenen Datenverkehr geschaltet. Alles ist einfach und genial.Es besteht hauptsächlich aus bekannten MAX232- und MAX485-Mikroschaltungen, und TX / RX wird durch das Signal vom 3. Ausgang des COM-Port-Anschlusses des Computers über eine Zenerdiodenschaltung geschaltet. Das heißt, der MAX485 wird durch den vom PC übertragenen Datenverkehr geschaltet. Alles ist einfach und genial.Es besteht hauptsächlich aus bekannten MAX232- und MAX485-Mikroschaltungen, und TX / RX wird durch das Signal vom 3. Ausgang des COM-Port-Anschlusses des Computers über eine Zenerdiodenschaltung geschaltet. Das heißt, der MAX485 wird durch den vom PC übertragenen Datenverkehr geschaltet. Alles ist einfach und genial.


. 13. RS-232 <-> RS-485.

Nachdem ich den Bootloader beherrscht hatte, beschloss ich in meiner Freizeit, die Optik des Camcorders zu erforschen. Genauer gesagt wurde es für mich interessant, welche Kombinationen von Zoom- und Fokuswerten fokussierte Bilder in unterschiedlichen Abständen vom Objektiv zum Motiv erzeugen. Ich möchte Sie daran erinnern, dass der Bereich verschiedener gegenseitiger Werte für Zoom und Fokus durch einen fünfeckigen Bereich (fast rechteckig) beschrieben wird. Nehmen Sie beispielsweise den Abstand vom Objektiv zum Motiv 10 cm. Das Argument (entlang der Abszissenachse) des Zooms hat einen Wertebereich von -600 bis 600. Sie müssen den Fokuswert bei jedem Zoomwert auswählen, bei dem das Motiv vor dem Objektiv im Videobild scharfgestellt wird. Dann müssen Sie einen Tisch machen. Natürlich macht es keinen Sinn, alle 1200 Zoomwerte zu sortieren. Es reicht aus, ein paar Dutzend Werte mit einem bestimmten gleichen Schritt zu verwenden. Als solchen Schritt habe ich den Wert 50 gewählt.Bei jedem Zoomwert mit diesem Schritt (-600, -550, -500, ...) habe ich den Fokuswert ausgewählt und die Messergebnisse aufgezeichnet. Ich habe ein ähnliches Verfahren mit anderen Abständen vom Objektiv zum Motiv durchgeführt: 50 cm, 1 m, 10 m, 100 m. Das Ergebnis war eine Kurvenfamilie, die ich in Excel angezeigt habe.


. 14. Z-F .

Mit Blick auf die Grafiken möchte ich viele Kommentare abgeben. Bei minimalem Zoom liegen die Fokuswerte für fast jede Entfernung etwas unter der „Mitte“ (Null). Die rosa Kurve für einen Abstand von 10 cm endet bei einem Zoomwert von ca. 250, was dem minimalen Fokuswert entspricht. Diese Kurve hat abnehmenden Charakter und ist nach oben konvex. Die rote Kurve für eine Entfernung von 1 m hat eine völlig andere Form. Erstens ist es nicht eintönig, und zweitens gibt es hinsichtlich der Konvexitätseigenschaft einen Wendepunkt. Die Kurven für Entfernungen von 10 m und 100 m sind von ähnlicher Natur. Letztere stimmen übrigens praktisch überein, was ich bereits im Voraus wusste. Daher habe ich die gemessenen Entfernungen von 10 und 100 Metern natürlich ungefähr genommen. Was die blaue Kurve für einen halben Meter beeinflusst - anfangs wollte ich keine Messungen daran vornehmen.Ich habe diesen Abstand ungefähr nach dem Prinzip gewählt, dass sich ein Fragment der entsprechenden Kurve so nah wie möglich der Eckgrenze der Region nähert (Schnitt). Und so geschah es: Diese Grenze berührt praktisch ein Fragment der Kurve. Im Allgemeinen ist anzumerken, dass die obere Hälfte der Region (positive Fokuswerte) praktisch nicht verwendet wird. Die Ausnahme ist in großer Entfernung vom Motiv zum Objektiv und beim größten Zoom. Bei fast allen Entfernungen (mit Ausnahme der nächsten, weniger als einem halben Meter) sind die Fokuswerte bei geringem Zoom (150 oder weniger) nahezu gleich. Im Allgemeinen sollten alle angegebenen Messdaten eine theoretische Interpretation haben, die auf den Gesetzen der Optik basiert. Gegenwärtig habe ich jedoch keine Ahnung von den Geräten solcher Objektive. Maximal,Was mir auf dem Gebiet der Optik begegnet ist, ist der Aufbau eines einfachen Refraktorteleskops mit zwei Linsen. Und bei diesem Camcorder habe ich die Mechanik der Optik nicht verstanden. Am Ausgang sind nur zwei sich bewegende Knoten nicht verfügbar: der Fokusknoten (verantwortlich für den Fokus) und der Zoomknoten. Und ich weiß nicht, wie viele Objektive sich insgesamt befinden. Ich nehme an, zwei, die mit diesen sich bewegenden Knoten verbunden sind. Es ist auch erwähnenswert, dass sich der Zoom beim Einstellen des Fokus auch optisch geringfügig ändert, selbst wenn der entsprechende Knoten fest ist.verbunden mit diesen sich bewegenden Knoten. Es ist auch erwähnenswert, dass sich der Zoom beim Einstellen des Fokus auch optisch geringfügig ändert, selbst wenn der entsprechende Knoten fest ist.verbunden mit diesen sich bewegenden Knoten. Es ist auch erwähnenswert, dass sich der Zoom beim Einstellen des Fokus auch optisch geringfügig ändert, selbst wenn der entsprechende Knoten fest ist.

Am Ende des Artikels fahren wir mit dem praktischen Testen des Camcorders fort. Ich habe beschlossen, nicht viele Standbilder zu machen, sondern sofort das gesamte Video hochzuladen. Ich habe die Videoaufnahme über das Gerät aufgenommen, der Ton wurde separat auf den Audiorecorder geschrieben. Die ursprüngliche Auflösung beträgt 720 x 576. Nach dem Hochladen des Videos auf YouTube hat sich die Qualität merklich geändert.


Wenn Sie die Kamera einschalten, werden zunächst die Schrittmotoren des Zooms initialisiert und auf den Hintergrund des Videobilds fokussiert. Dieses Bild ist schwarzweiß und ohne AGC, da das Initialisierungsverfahren für den Videoprozessor noch nicht abgeschlossen ist. Unten links zeigen das aktuelle Datum und die aktuelle Uhrzeit das Datum und die Uhrzeit der Kompilierung der aktuellen Kamera-Firmware an. Im Firmware-Quellcode habe ich die entsprechenden Variablen erstellt, die sich an festen Adressen im HEX-Code befinden. Es wird davon ausgegangen, dass in der Kompilierungsphase, genauer danach, automatisch ein Programm ausgeführt wird, das die Werte der Variablen aus der Systemzeit entnimmt und an den gewünschten Adressen in die HEX-Datei einfügt. Darüber hinaus müssen die Prüfsummen noch nachgezählt werden. Vielleicht gibt es einen einfacheren Weg. Im Beispiel im Video sind diese Variablen gleich Null, da ich diese Funktion noch nicht implementiert habe.

Nach der Initialisierung der SD wird der Videoprozessor initialisiert und sofort eine Begrüßung auf dem Hintergrund des Videobildes angezeigt. Beim Anpassen von Zoom und Fokus werden deren Koordinaten unten rechts angezeigt. Im Video zeige ich die Verwendung der Funktion zum Speichern und Abrufen von Vorlagen (Voreinstellungen) für Zoom und Fokus in verschiedenen Teilen des Bildes. Beim Löschen einer Voreinstellung erhalten die entsprechenden Variablen den Wert 0xFFFF, der einem Wert von -1 entspricht. Diese Funktion ist grundsätzlich überflüssig, sie kann ausgeschlossen werden.

Im letzten Abschnitt des Menüs, der zum Debuggen verwendet wird, zeige ich den Datensatz von Byte 3 der Kategorie 9. Die diesem Byte entsprechenden Funktionen befinden sich im vorherigen Abschnitt des Menüs, über den ich viele Male geschrieben habe. Aufgrund der Tatsache, dass der aktuelle Status des Bytes nicht vom Videoprozessor gelesen wird, habe ich ihn manuell auf „48“ als einen der akzeptablen Werte gesetzt. Danach ändere ich die einzelnen Bits dieses Bytes und zeige dabei die Funktionen "Mirror" und "Inverse Burst".

Wenn Sie den Burst-Pegel im vorletzten Abschnitt des Menüs anpassen, werden Sie einen kleinen Firmware-Fehler bemerken, der leicht zu beheben ist. Von den anderen Mängeln - manchmal treten beim Aktualisieren der Zeit Lücken in den Zeichen auf. Ich denke, das liegt an der „krummen“ Installation der Elektronik im Camcorder.

Im Allgemeinen wurden beim Bedienen der Kamera geringfügige Unannehmlichkeiten im Zusammenhang mit der Menünavigation festgestellt. Daher ist es durchaus möglich, dass die erforderliche Überarbeitung im Laufe der Zeit vorgenommen wird.

Ja, ich hätte es fast vergessen. Wie versprochen bringe ich zwei Fotos mit, wie sich die Füllung des Camcorders nach der Entwicklung entwickelt hat.


Feige. 15. Eine aktualisierte Ansicht des Camcorders unten.


Feige. 16. Eine aktualisierte Ansicht des Camcorders oben.


All Articles