venerdì 31 gennaio 2014

OSD on screen display

Ciao a tutti volevo aggiornarvi sul mio impianto di domotica. Nell'ultimo post vi ho parlato di come visualizzavo le info provenienti dai vari sensori e relè, praticamente usavo una libreria chiamata TVOUT molta pratica e facile da usare ma chiaramente con molti limiti dovuti alla bassa risoluzione praticamente avevo a disposizione una decina di righe e colonne e quindi costretto a scrivere tutto in sintesi. Di seguito la funzione che usavo per stampare a video come si può intuire la risoluzione era solo di 96 x 96 px anche se è possibile leggermente aumentarla.
void monitor() // funzione che stampa a video le info richieste
{
 TV.end();
       TV.begin(_PAL,96,96); // for PAL system
       TV.clear_screen();
       TV.select_font(font8x8); // utilizzando font8x8 
       TV.set_cursor (0, 0); 
       for (generica2 = 0; generica2 <10; generica2++)
       {
      TV.print(ritorno[generica2]); 
      TV.println(valore[generica2+1]);
       }
}
Girando per il Web ho trovato una scheda prodotta dalla sparkfun che utilizza come circuito integrato il Max7456
è un On Screen Display e chiaramente permette di mettere delle scritte in sovraimpressione a delle immagini. E' un circuito che viene usato spesso dagli aereomodellisti e mandano su un video ripreso dall'aereomodello, tutte le info di cui necessitano. Con questo circuito oltre ad avere una risoluzione decisamente maggiore ho in pratica recuperato anche un canale del dvr in quanto le scritte vanno in sovraimpressione. Ho collegato questo circuito ad arduino ai pin 10-11-12-13, in rete si trova anche qualche libreria denominata appunto MAX7456 ma ho preferito non usarle in quanto ho avuto problemi con la gestione del protocollo rs485 che utilizzo per i comandi ptz dal dvr ad arduino tramite lo shield 485. I pin indicati sopra non possono essere cambiati in quanto la scheda OSD usa il protocollo SPI che a sua volta comunica tramite tali pin.Il pin 13 viene usato per il clock il pin 11 per il MOSI ovvero i dati escono dal master e vanno allo slave, Master output Slave input.Il pin 12 è per il MISO ovvero Master input Slave output e infine il 10 per selezionare lo slave con cui comunicare. infatti se ci fosse un'altro slave andrebbe collegato tutto in parallelo con l'altro slave tranne il pin 10 che invece gli assegneremo il 9 e cosi via.
Come potete vedere dall'immagine sulla vostra sinistra ho la libertà di scrivere in modo più leggibili le frasi e ho potuto usare anche ON / Off invece di 1 / 0. Ho aggiunto anche una guida ai comandi, cosa impossibile da fare col vecchio sistema oltre ad avere la possibilità di mettere varie pagine.Usando la maggior parte dei pin di arduino per indirizzare le mie schede modom636, che pilotano dei relè che a loro volta collegano varie utenze, è capibile che un uso inappropriato dei pin condivisi può portare a non pochi problemi.Dimenticavo, un'altro vantaggio di usare la scheda osd è che ho ridotto del 40% il programma in quanto prima il lavoro veniva svolto sempre da arduino ora si limita a comunicare solo i dati al max7456.Non ho pubblicato il programma in quanto la parte dell'osd è ripartito in vari punti del programma e la pubblicazione della sola funzione monitor servirebbe a ben poco.