Come far apparire la fotocamera e il display su una scheda carrier del modulo di calcolo

Abbiamo sviluppato la nostra Compute Module Carrier Board, chiamata PCCB. È compatibile con i Raspberry Pi Compute Module 1 - 3 Plus, e ha una serie di caratteristiche molto utili per l'uso industriale (RS232, CAN Bus, RS485, TPM, DC/DC Stepdown).

Oggi, ho verificato la fotocamera e l'interfaccia del display da 7'' che forniamo anche sulla scheda.

Bild 1 Szene 1

Notate i connettori DISP1 e CAM1.

Conoscenza di base della macchina fotografica

Il modulo della telecamera ha due pin GPIO aggiuntivi. Questi sono designati:

  • CAM_IO0 o CAM_GPIO / CAMERA_0_SHUTDOWN
  • CAM_IO1 o linea LED / CAMERA_0_LED

CAM_IO0 è usato per pilotare la telecamera, e alimentarla su / giù, quando è richiesto. Questo non può essere fatto manualmente impostando il pin alto a runtime - il VideoCore Blob deve essere in grado di farlo.

(possibilmente è possibile tirare questo a sempre alto, ma questo lascerà la telecamera alimentata e aumenterà l'assorbimento di energia).

Il CAM_IO1 (LED Line) è stato usato precedentemente sulla fotocamera v1 per pilotare il LED. Non è in uso su Raspberry Pi Camera v2, secondo gli ingegneri di Raspberry Pi.

La piedinatura del connettore della fotocamera (sia sulla Raspberry Pi Camera che sulla nostra scheda) è:

  • GND
  • CAM_D0_N
  • CAM_D0_P
  • GND
  • CAM_D1_N
  • CAM_D1_P
  • GND
  • CAM_CK_N
  • CAM_CK_P
  • GND
  • CAM_IO0
  • CAM_IO1
  • CAM_SCL
  • CAM_SDA
  • CAM_3V3

La telecamera di solito utilizzerà il bus I2C interno (SDA0 e SCL0 disponibili, per esempio, su GPIO0 e GPIO1)

immagine

Schemi

Questi sono gli schemi del nostro layout hardware:

immagine

Come potete vedere (e come discusso in precedenza), stiamo usando GPIO_27 come CAM_IO0 e GPIO_26 come CAM_IO1.

Il display non ha bisogno di pin GPIO aggiuntivi.

Sia il display che la telecamera utilizzano il bus I2C interno, sui pin GPIO_1 e GPIO_0.

dt-blob.bin

Questo file è una parte opzionale dei file di avvio del Raspberry Pi. È posto in /boot e sovrascrive un dt-blob.bin incorporato che è compilato in start.elf.

Comunica la configurazione dei pin GPIO al firmware in esecuzione sul VideoCore (VCOS, Video Core OS). Poiché le schede Compute Module Carrier, come la nostra, avranno spesso configurazioni di pin personalizzate, questo dt-blob.bin deve essere fornito.

Qui ci sono più informazioni su questo file, incluso un processo di avvio passo dopo passo:

Raspberry Pi fornisce il sorgente per diverse possibili configurazioni con il dt-blob.bin qui:

Ho selezionato il file dt-blob-disp1-cam1.dts come sorgente e l'ho rinominato in dt-blob-disp1-cam1_pccb.dts.

Potete scaricare il file sorgente originale da Raspberry Pi qui:

Questo file deve essere modificato per riflettere la nostra scelta di pin GPIO (che a sua volta permetterà al firmware VideoCore di alimentare la telecamera e parlare con essa).

Questo file sorgente include configurazioni per molti modelli diversi di Pi. Siamo interessati solo alle configurazioni del modulo di calcolo: pins_cm3 e pins_cm

immagine

immagine

(Notate che i vostri numeri di linea potrebbero essere sballati di alcuni contatori, poiché ho incluso alcune cose aggiuntive nel file che non sono rilevanti per la nostra discussione qui).

Qui dovreste modificare quattro linee. Nella nostra specifica (!) configurazione hardware, ho modificato:

immagine

a

immagine

e

immagine

a:

immagine

Le stesse modifiche devono essere applicate sia per CM3 che per CM.

pin@p26 { funzione = "output"; terminazione = "no_pulling"; }; // CAMERA 0 LED
pin@p27 { funzione = "output"; terminazione = "no_pulling"; }; // CAMERA 0 SHUTDOWN

(...)

pin_define@CAMERA_0_LED {
    tipo = "interno";
    numero = ;
};
pin_define@CAMERA_0_SHUTDOWN {
    tipo = "interno";
    numero = ;
};
pin_define@CAMERA_0_UNICAM_PORT {
    tipo = "interno";
    numero = ;
};

Nota che hai anche la possibilità di usare un diverso CAMERA_0_I2C_PORT e CAMERA_0_SDA_PIN / CAMERA_0_SCL_PIN se la tua configurazione hardware lo richiede.

Lo stesso vale per il display, ci sono voci DISPLAY_SDA, DISPLAY_SCL, DISPLAY_I2C_PORT che possono essere modificate.

Nel nostro caso li ho lasciati al valore predefinito, poiché questo è il modo in cui la nostra scheda è progettata.

Compilare questo file

Sul pi, eseguire:

sudo dtc -I dts -O dtb -o dt-blob-disp1-cam1_pccb.dtb dt-blob-disp1-cam1_pccb.dts

immagine

Questo vi darà un muro di avvertimenti, che possono essere tranquillamente ignorati.

Installare dt-blob.bin

sudo cp dt-blob-disp1-cam1_pccb.dtb /boot/dt-blob.bin

E riavviare.

Test

i pin 26 e 27 sono ora impostati come pin di uscita e vengono pilotati bassi:

immagine

vcgencmd get_camera

rendimenti:

supportato=1 rilevato=1

immagine

Si può prendere un fermo usando:

raspistill -v -o test.jpg

(Non dimenticate di abilitare anche la videocamera con raspi-config!)

Video streaming

Un piccolo suggerimento bonus. Sul vostro Pi, potete avviare un flusso usando:

raspivid -o - -t 0 -hf -w 800 -h 400 -fps 24 |cvlc -vvv -h264-fps=24 stream:///dev/stdin -sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264

Notate il -fps 24 e -h264-fps=24 sia a raspivid che a cvlc, per sincronizzare i loro framerate!

immagine

immagine

utilizzare VLC per visualizzare il flusso (utilizzando l'IP della tua scheda di calcolo):

immagine

immagine

Visualizza

Il display richiede anche il dt-blob.bin.

Ho usato una fonte di alimentazione esterna per alimentare il display, in una revisione del PCCB avremo un'alimentazione a +5 V su un header da usare con il display.

Si prega di notare che non ho potuto usare il cavo flessibile della fotocamera per far funzionare il display; è stato necessario collegarlo con il suo proprio cavo (corto).

Metto in sequenza l'alimentazione prima al display, poi al PCCB

Il tocco funziona.

b2461dd4-c434-4882-b277-baab25b705eeb700c161-0009-4e3f-ba0b-5759cfdbe78cadd6926c-45c2-4293-a506-3f2fdd8d752f

Display e fotocamera insieme

Anche questo funziona, il flusso della telecamera viene anche visualizzato in diretta sul display.

WhatsApp Immagine 2020-09-01 alle 21.01.21WhatsApp Immagine 2020-09-01 alle 21.01.20

immagine

Errori

quando si esegue

raspistill -v -o test.jpg

otterrete:

mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)

anche

vcgencmd get_camera

visualizzerà uno dei due:

supportato=0 rilevato=0

o

supportato=1 rilevato=0

Se supportato=0 dovresti controllare se il tuo dt-blob.bin è installato correttamente in /boot.

Se rilevato=0, dovreste verificare che i pin GPIO siano impostati correttamente nel dt-blob.bin.

Assicuratevi anche che la telecamera sia attivata usando raspi-config.

Corretto orientamento della flessione

I cavi flex devono essere orientati correttamente per fare la connessione. Puoi dare un'occhiata alla piedinatura, e vedere se i pin GND e +3V3 si comportano come previsto, o se non c'è connessione / nessuna tensione.

Servizio di pi3g

Possiamo portare su l'hardware per voi, offrire servizi di consulenza o lo sviluppo di hardware e software Raspberry Pi su misura. contattateci oggi stesso.

Rif