venerdì 7 marzo 2014

Raspberry Pi: come ottenere la risoluzione ottimale per il vostro monitor o televisore

Nella guida precedente (leggi qui) abbiamo visto come risolvere i problemi con il collegamento HDMI al televisore o al monitor del Raspberry Pi, in questo post vediamo invece come ottenere la risoluzione ottimale per il vostro schermo.
Spesso infatti la risoluzione scelta dal Raspberry Pi con i valori di default è la classica VGA 640x480, decisamente bassa!
il file di riferimento è sempre config.txt che troviamo in /boot, ci sono due opzioni che regolano la modalità video e la risoluzione, sono hdmi_group e hdmi_mode.

hdmi_group definisce il tipo di HDMI del display collegato, i valori possibili sono:
0 = valore di default
1 = CEA
2 = DMT

Il valore di default sceglierà il tipo in base alle informazioni ottenute dall'EDID (Extended Display Identification Data), che è una struttura di dati forniti dal display, in pratica sono le informazioni che utilizzano i computer per conoscere che tipo di monitor è collegato e quali risoluzioni sono supportate.

hdmi_mode imposta la modalità video e la risoluzione, c'è una lunga lista di valori possibili che evito di riportare qui, ma che potete vedere su questo sito.

Ora che conosciamo un minimo di teoria, passiamo alla pratica: come faccio a sapere quale sia la risoluzione ottimale del mio monitor o televisore?

Aprite il file di configurazione per modificarlo da terminale con

sudo nano /boot/config.txt

Prima cosa da fare è abilitare le due opzioni hdmi_group e hdmi_mode cancellando il carattere '#' all'inizio delle righe ed impostiamo entrambi i valori a 1, così da ottenere una risoluzione standard VGA (640x480).

Salvate le modifiche premendo i tasti Ctrl + o, premete il tasto Invio per confermare il nome del file, quindi uscite dall'editor con Ctrl + x.

Ora riavviate il Raspberry Pi con

sudo reboot

Dopo il login digitate questo comando per ottenere le informazioni dal vostro monitor/TV

/opt/vc/bin/tvservice -d edid.dat

Avete così ottenuto l'EDID, ora andiamo a leggere le informazioni contenute con il seguente comando

/opt/vc/bin/edidparser edid.dat

Verranno visualizzate sul terminale molte informazioni, dal costruttore del display alla lista di tutte le risoluzioni supportate. Sarà qualcosa di simile a quello che ho ottenuto io:


Enabling fuzzy format match...
Parsing edid.dat...
HDMI:EDID version 1.3, 1 extensions, screen size 16x9 cm
HDMI:EDID features - videodef 0x80 !standby !suspend !active off; colour encoding:RGB444|YCbCr422; sRGB is not default colourspace; preferred format is native; does not support GTF
HDMI:EDID found monitor range descriptor tag 0xfd
HDMI:EDID monitor range offsets: V min=0, V max=0, H min=0, H max=0
HDMI:EDID monitor range: vertical is 49-61 Hz, horizontal is 15-46 kHz, max pixel clock is 80 MHz
HDMI:EDID monitor range does not support GTF
HDMI:EDID found monitor name descriptor tag 0xfc
HDMI:EDID monitor name is SAMSUNG
HDMI:EDID found preferred CEA detail timing format: 1280x720p @ 60 Hz (4)
HDMI:EDID found CEA detail timing format: 1280x720p @ 50 Hz (19)
HDMI:EDID established timing I/II bytes are 20 00 00
HDMI:EDID found DMT format: code 4, 640x480p @ 60 Hz in established timing I/II
HDMI:EDID standard timings block x 8: 0x0101 0101 0101 0101 0101 0101 0101 0101
HDMI:EDID parsing v3 CEA extension 0
HDMI:EDID monitor support - underscan IT formats:no, basic audio:yes, yuv444:yes, yuv422:yes, #native DTD:1
HDMI:EDID found CEA detail timing format: 1920x1080i @ 60 Hz (5)
HDMI:EDID found CEA detail timing format: 1920x1080i @ 50 Hz (20)
HDMI:EDID found CEA detail timing format: 720x480p @ 60 Hz (2)
HDMI:EDID found CEA detail timing format: 720x576p @ 50 Hz (17)
HDMI:EDID found CEA format: code 4, 1280x720p @ 60Hz (native)
HDMI:EDID found CEA format: code 19, 1280x720p @ 50Hz
HDMI:EDID found CEA format: code 5, 1920x1080i @ 60Hz
HDMI:EDID found CEA format: code 20, 1920x1080i @ 50Hz
HDMI:EDID found CEA format: code 3, 720x480p @ 60Hz
HDMI:EDID found CEA format: code 18, 720x576p @ 50Hz
HDMI:EDID found audio format 2 channels PCM, sample rate: 32|44|48 kHz, sample size: 16|20|24 bits
HDMI:EDID found HDMI VSDB length 6
HDMI:EDID HDMI VSDB has physical address 1.0.0.0
HDMI:EDID HDMI VSDB supports AI:yes, dual link DVI:no
HDMI:EDID HDMI VSDB deep colour support - 48-bit:no 36-bit:no 30-bit:no DC_yuv444:no
HDMI:EDID HDMI VSDB has no latency information
HDMI:EDID adding mandatory support for CEA (1) 640x480p @ 60Hz
HDMI:EDID filtering formats with pixel clock > 162 MHz or h. blanking > 1023
HDMI:EDID best score mode initialised to CEA (1) 640x480p @ 60 Hz with pixel clock 25 MHz (score 0)
HDMI:EDID best score mode is now CEA (1) 640x480p @ 60 Hz with pixel clock 25 MHz (score 61864)
HDMI:EDID best score mode is now CEA (2) 720x480p @ 60 Hz with pixel clock 27 MHz (score 3066472)
HDMI:EDID CEA mode (3) 720x480p @ 60 Hz with pixel clock 27 MHz has a score of 66472
HDMI:EDID best score mode is now CEA (4) 1280x720p @ 60 Hz with pixel clock 74 MHz (score 5190888)
HDMI:EDID DMT mode (4) 640x480p @ 60 Hz with pixel clock 25 MHz has a score of 18432
HDMI:EDID CEA mode (5) 1920x1080i @ 60 Hz with pixel clock 74 MHz has a score of 4273832
HDMI:EDID CEA mode (17) 720x576p @ 50 Hz with pixel clock 27 MHz has a score of 2566472
HDMI:EDID CEA mode (18) 720x576p @ 50 Hz with pixel clock 27 MHz has a score of 66472
HDMI:EDID CEA mode (19) 1280x720p @ 50 Hz with pixel clock 74 MHz has a score of 4617160
HDMI:EDID CEA mode (20) 1920x1080i @ 50 Hz with pixel clock 74 MHz has a score of 3732360
HDMI:EDID preferred mode remained as CEA (4) 1280x720p @ 60 Hz with pixel clock 74 MHz
HDMI:EDID has HDMI support and audio support
edid_parser exited with code 0


Ho evidenziato in grassetto e sottolineato due righe in particolare, perché sono quelle che ci dicono qual'è la modalità video preferita.
Nel mio caso, come potete vedere dall'ultima riga evidenziata qui sopra, la risoluzione preferita è CEA (4), corrispondente a 1280x720p @ 60 Hz.

CEA è il tipo di HDMI, quindi imposterò hdmi_group=1, il numero tra parentesi corrisponde invece al valore da inserire per impostare la modalità video, quindi nel mio caso hdmi_mode=4.

Una volta a conoscenza dei valori ottimali per il vostro monitor/TV, andate a modificare di nuovo il file di configurazione con

sudo nano /boot/config.txt

sostituite i valori di hdmi_group e hdmi_mode con quelli ottimali e ricordatevi di verificare che l'opzione hdmi_safe sia disabilitata, altrimenti la risoluzione sarà bloccata su VGA (640x480).
Vi ricordo che un opzione, per essere disabilitata, deve avere il carattere '#' all'inizio della riga.
Ora salvate con la solita combinazione Ctrl + o, Invio, Ctrl + x e riavviate con

sudo reboot

Ora il vostro Raspberry Pi utilizza la risoluzione ottimale del vostro monitor/TV.