Realizziamo un multiplexer video-composito

Realizzare un Multiplexer Video-Composito, essenziale ma non privo di utili funzionalità, è estremamente semplice se si impiegano opportuni amplificatori video integrati dotati di ingressi di abilitazione. Logiche multiplexer anche piuttosto complesse possono allora essere implementate in firmware e attuate mediante un controllore che interfacci e piloti l’integrato video

La diffusione delle reti LAN Ethernet ha reso estremamente agevole la realizzazione di impianti di videosorveglianza anche complessi. L’impiego di telecamere IP, di apparati di rete e di registratori NVR (Network Video Recorder) permette di realizzare il monitoraggio video di siti mediante un semplice PC connesso alla stessa rete. Nonostante ancora oggi, se si deve realizzare un piccolo impianto poco esteso costituito da poche telecamere e magari caratterizzato da un unico punto di supervisione, come nella portineria di un piccolo stabile o di una piccola attività lavorativa, tanta tecnologia può risultare sprecata. Può essere sufficiente allora realizzare un impianto puramente analogico impiegando semplici telecamere analogiche (ben più economiche delle telecamere IP), alcuni cavi coassiali per la trasmissione del segnale video-composito e un monitor su cui visualizzare, in diretta, le immagini riprese.

Il Multiplexer Video-Composito

Oltre alle telecamere e al monitor (analogici), è opportuno, in questo caso, disporre di un Video-Multiplexer, cioè un dispositivo in grado di ricevere in ingresso il segnale video di n distinte telecamere e di inviarne al monitor, istante per istante, uno solo di questi (figura 1). Attraverso appositi tasti o una pulsantiera è possibile selezionare quale degli n segnali video trasferire a monitor. Questa funzionalità può essere realizzata anche con un solo pulsante: ogni volta che si preme il pulsante,  si abilita a monitor uno dei segnali video che giungono al multiplexer. Un video-multiplexer è generalmente dotato anche della funzione di oscuramento del monitor e di Video Rotate (per un tempo Dt è visualizzato  il primo degli n flussi video, nel successivo intervallo Dt è visualizzato  il secondo e così via fino all’intervallo n-esimo in cui è visualizzato l’n-esimo flusso, dopo il quale il ciclo ricomincia da capo).

Figura 1: schema generale di un impianto Video-Composito Multiplexer.

Figura 1: schema generale di un impianto Video-Composito Multiplexer.

L’hardware e la logica di controllo

Il circuito di figura 2 realizza un multiplexer Video-Composito a quattro ingressi attraverso l’integrato HA5024 (un quad-video Amplifier in cui ciascuno dei quattro video-amplifier è dotato di pin di abilitazione). Un integrato di questo tipo può essere impiegato come splitter video, come distributore oppure come multiplexer. Nel nostro caso si è implementato un multiplexer a quattro ingressi comandato da un controllore PIC di Microchip che ne detiene il controllo. L’interfaccia di comando utente è costituita da:

  •  un pulsante di controllo che ogni qual volta viene premuto consente di passare dalla visualizzazione del flusso video i a quello i+1 se 0<i<4; dal video i alla modalità rotate monitor se i=4; dalla modalità rotate-monitor (i=5) a monitor buio (i=0) se si è in modalità rotate monitor; da monitor buio (i=0) a visualizzazione Video 1 nel caso restante;
  • un potenziometro  attraverso il quale è possibile regolare la velocità di rotazione dei flussi se si è in modalità rotate monitor.

Premendo il  pulsante si passa da uno stato al successivo. Il  firmware implementa una macchina a stati finiti dove lo stato_i rappresenta l’abilitazione del flusso_i, eccetto che per lo stato0 che rappresenta il buio e lo stato5 che rappresenta lo stato di rotate video. Il flusso video da inviare al monitor è selezionato attraverso il pilotaggio da parte del controllore dei pin di abilitazione dell’integrato video HA5024.

Figura 2: schema elettrico del Multiplexer Video-composito. La funzione di multiplexer è ottenuta attraverso l’integrato video HA5024 pilotato dal controllore.

Figura 2: schema elettrico del Multiplexer Video-composito. La funzione di multiplexer è ottenuta attraverso l’integrato video HA5024 pilotato dal controllore.

 

Figura 3: il progetto firmware nell’interfaccia IDE MPLAB e la scheda di sviluppo EasyPic3 per il test hardware e firmware del progetto

Figura 3: il progetto firmware nell’interfaccia IDE MPLAB e la scheda di sviluppo EasyPic3 per il test hardware e firmware del progetto

Il firmware

Il firmware  (vedi listato 1) è scritto in C impiegando il CCS C Compiler for PIC12/14/16/18 installato come Plug-in nell’IDE MPLAB. In esso si notano:

  •  le inizializzazioni;
  • la gestione dell’interrupt sulla line B0 (risposta alla pressione del pulsante di controllo);
  • la presenza di un timer per la gestione della velocità di rotate video;
  • la funzione VideoRotate;
  • la funzione VideoDisable per la disabilitazione di tutti i flussi video;
  • la funzione RilevaSpeed che rileva (tramite ADC) il livello di un potenziometro che serve ad accelerare/rallentare la velocità di rotate (da Dt pari a circa 2 secondi a Dt pari a circa 40 secondi per ciascun flusso);
  • la Main Function nel cui ciclo principale sono gestite le suddette funzioni.
//________________________________________________
// MULTIPLEXER VIDEO
// Microcontroller: Microchip PIC16F877
// Compiler: CCS C Compiler for PIC12/14/16/18
//________________________________________________
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=8000000)
//__________________funzioni________________________
void Inizializza();
void VideoDisable();
void VideoRotate();
void RilevaSpeed();
#define ImpulsoCmd PIN_B0 //pulsante di comando
//ABILITAZIONE VIDEO DA INVIARE A MONITOR________
#define ENABLE_VIDEO_1 PIN_D1 // Enable video camera 1
#define ENABLE_VIDEO_2 PIN_D2 // Enable video camera 2
#define ENABLE_VIDEO_3 PIN_D3 // Enable video camera 3
#define ENABLE_VIDEO_4 PIN_D4 // Enable video camera 4
#define LED_ROTATE PIN_B2// segnala la modalità rotate
#define ACTIVITY_LED PIN_B1 // led di attività
// tempo di step ciclo (secondi)_________________________
#define TIME_OUT_STEP1 3 // 2 secondi
#define TIME_OUT_STEP2 7 // 4 secondi
#define TIME_OUT_STEP3 20 // 10 secondi
#define TIME_OUT_STEP4 40 // 20 secondi
#define TIME_OUT_STEP5 80 // 40 secondi
// Stato Comando ___________________________________
#define STATO0 0 // comando Video Monitor OFF
#define STATO1 1 // comando Video1 —> Monitor
#define STATO2 2 // comando Video2 —> Monitor
#define STATO3 3 // comando Video3 —> Monitor
#define STATO4 4 // comando Video4 —> Monitor
#define STATO5 5 // comando RotateON—>Monitor
#define ON 1
#define OFF 0
long int count_ms; // contatore dei millisecondi
long int secondi; // contatore dei secondi
int speed, time_out_step;
boolean StatoRichiesta; // new request da pulsante
unsigned char StatoCmd;
//_________________________________________________
#int_timer2 // Timer in overflow ogni 1ms
void clock_isr() {
count_ms++;
if ((count_ms>=1000)){
secondi=secondi+1;
output_toggle(ACTIVITY_LED);
count_ms=0;
}
RilevaSpeed();
if ((secondi > time_out_step)){
secondi=0;
count_ms=0;
}
}
//_________________________________________________
#INT_EXT //Interrupt da pulsante di comando (Pin B0)
void external_isr(){
while (ImpulsoCmd==1); //filtro anti-rimbalzo
if (StatoCmd<STATO5) StatoCmd++;
else (StatoCmd=STATO0);
StatoRichiesta=ON;
}
void main(){
Inizializza();
while (1){
if (StatoRichiesta==ON){
switch (StatoCmd) {
case STATO0:VideoDisable();
break;
case STATO1:VideoDisable();
output_high(ENABLE_VIDEO_1);
break;
case STATO2:VideoDisable();
output_high(ENABLE_VIDEO_2);
break;
case STATO3:VideoDisable();
output_high(ENABLE_VIDEO_3);
break;
case STATO4:VideoDisable();
output_high(ENABLE_VIDEO_4);
break;
case
STATO5:output_high(LED_ROTATE);
VideoRotate();
output_low(LED_ROTATE);
VideoDisable();
break;
default: break;
}
StatoRichiesta=OFF;
}
}
}
//____________________________Funzione di Inizializzazione
void Inizializza(){
set_tris_d(0b11100001);
set_tris_b(0b11111001);
set_tris_c(0b00000000);
enable_interrupts(global);
enable_interrupts(int_ext);
enable_interrupts(INT_TIMER2);
set_timer2(0);
setup_timer_2(T2_DIV_BY_4, 99, 3);
output_low(PIN_C5);
setup_adc_ports( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
StatoRichiesta=ON;
StatoCmd=STATO5;
}
//_________________________________Oscuramento Monitor
void VideoDisable(){
output_low(ENABLE_VIDEO_1);
output_low(ENABLE_VIDEO_2);
output_low(ENABLE_VIDEO_3);
output_low(ENABLE_VIDEO_4);
}
//_________________________________Rotate Video Monitor
void VideoRotate(){
unsigned char i_ciclo;
i_ciclo=1;
while(StatoCmd==STATO5){
if (secondi==0) {
switch (i_ciclo) {
case 1: VideoDisable();
output_high(ENABLE_VIDEO_1);
break;
case 2: VideoDisable();
output_high(ENABLE_VIDEO_2);
break;
case 3: VideoDisable();
output_high(ENABLE_VIDEO_3);
break;
case 4:
VideoDisable();
output_high(ENABLE_VIDEO_4);
break;
default:break;
}
while (secondi==0);
if (i_ciclo<4) i_ciclo++;
else i_ciclo=1;
}
}}
//__________________Rileva Speed Route da potenziometro
void RilevaSpeed(){
set_adc_channel( 3 ); //Lettura pin A3 (potenziometro)
speed = Read_ADC(); //conversione ADC==>speed Rotate
if ((speed<50)&&(speed>=0)) {
time_out_step = TIME_OUT_STEP1;
output_c(0b00011111); //Segnalazione led Speed
}
if ((speed>=50)&&(speed<100)) {
time_out_step = TIME_OUT_STEP2;
output_c(0b00001111);
}
if ((speed>=100)&&(speed<150)) {
time_out_step = TIME_OUT_STEP3;
output_c(0b00000111);
}
if ((speed>=150)&&(speed<200)) {
time_out_step = TIME_OUT_STEP4;
output_c(0b00000011);
}
if ((speed>=200)&&(speed<=255)) {
time_out_step = TIME_OUT_STEP5;
output_c(0b00000001);
}
}
Listato 1

Test dello schema e del firmware

Il circuito elettrico e il firmware  sono stati testati mediante la Development Board EasyPIC3 (figura 3), ma grazie alla portabilità del codice possono essere testati anche sulle versioni più recenti.  I comandi di abilitazione dei pin dell’integrato video HA5024 sono, in questo caso, simulati attraverso dei semplici LED. Il progetto integra un diodo di attività (activity led=Pin B1) lampeggiante (f=1Hz) e un LED di segnalazione della modalità Rotate (Led Rotate=Pin B2).

 

 

 

 

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 10 giugno 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS