Utilisation d'une caméra avec un microcontrôleur

From Eric

(Difference between revisions)
Jump to: navigation, search
(Created page with " == Les différentes caméras == === Caméra à sortie vidéo === Il s'agit de caméra dont la sortie est un signal vidéo (NTSC, SECAM) que l'on peut directement connecter à ...")
Line 1: Line 1:
-
 
== Les différentes caméras ==
== Les différentes caméras ==
 +
 +
On peut distinguer (au moins) deux catégories de caméras en fonction de leur signal de sortie :
 +
* Les caméras à sortie vidéo analogique (PAL, SECAM, etc.),
 +
* Les caméras à sortie numérique non USB
 +
* Les caméras à sortie USB
 +
 +
Il existe bien sûr d'autres critères de classific))]]ation tels le type de capteur (CCD, CMOS, etc.), par exemple.
=== Caméra à sortie vidéo ===
=== Caméra à sortie vidéo ===
-
Il s'agit de caméra dont la sortie est un signal vidéo (NTSC, SECAM) que l'on peut directement connecter à un écran, un magnétoscope ou tout autre équipement disposant de ce type d'entrée.
+
Il s'agit de caméras dont la sortie est un signal vidéo composite (PAL, NTSC, SECAM) que l'on peut directement connecter à un écran, un magnétoscope ou tout autre équipement disposant de ce type d'entrée.
Ce sont les caméras les moins onéreuses puisqu'on en trouve à moins de 10€ sur ebay. Voici, par exemple, celle que j'utilise :
Ce sont les caméras les moins onéreuses puisqu'on en trouve à moins de 10€ sur ebay. Voici, par exemple, celle que j'utilise :
Line 19: Line 25:
* un espace mémorie suffisamment grand pour stocker une image.
* un espace mémorie suffisamment grand pour stocker une image.
-
L'extraction des signaux de synchronisation peut se faire facilement grace au circuit LM<<à completer>> qui fournit, à partir du signal vidéao, deux signaux correspondant au début d'une ligne et au début d'une image.
+
L'extraction des signaux de synchronisation peut se faire facilement grace au circuit [[http://www.national.com/ds/LM/LM1881.pdf LM1881]]qui fournit, à partir d'un signal vidéo, les signaux de synchronisation horizontal, vertical et de parité de ligne (entrelacement).
-
Ces signaux peuvent alors être utilisés par le microcontrôleur pour démarrer une séquence d'échantillonnage. Voir la sectino concernant la connection de ce type de caméra sur un Atmega32 pour plus d'iformations.
+
Ces signaux peuvent alors être utilisés par le microcontrôleur pour démarrer une séquence d'échantillonnage. La limite du procédé est évidemment liée à la vitesse du convertisseur analogique / numérique utilisé.  
-
=== Caméra à sortie numérique ===
+
Voir la section concernant la connection de ce type de caméra sur un Atmega32 pour plus d'informations.
-
Il s'agit de caméra dont la sortie est une image codée sous forme numérique. On trouve de telles caméras pour une dizaine d'euros. Voici, par exemple, celle que j'utilise (composant OV7620 d'Omnivision placé sur une ''break-out board'').
+
=== Caméra à sortie numérique non USB ===
-
Cette caméra dispose propose un nombre important de fonctions accessible via un bus I2C. L'image, quant à elle, n'est ''pas '' accessible sur le port I2C : elle est transmise de façon autonome sur un bus parallèle rapide auquel il conviendra de connecter soit un microprocessuer suffisamment rapide pour acquérir les données, soit une mémoire intermédiaire.
+
Il s'agit de caméra dont la sortie est une image codée sous forme numérique. On trouve de telles caméras pour une dizaine d'euros.  
-
C'est cette dernière solution que nous allons mettre en oeuvre. La mémoire intermédiaire est une mémoire FIFO rapide à deux ports de 3Mbits.  
+
Voici, par exemple, celle que j'utilise (composant OV7670]] d'Omnivision placé sur une ''break-out board'') ; il s'agit d'une caméra VGA (640x480 pixels).
 +
 
 +
<insérer image>
 +
 
 +
Cette caméra dispose propose un nombre important de fonctions accessibles via un bus compatible I2C (SCCB). L'image, quant à elle, n'est ''pas '' accessible sur le port I2C : elle est transmise de façon autonome sur un bus parallèle rapide auquel il conviendra de connecter soit un microprocesseur suffisamment rapide pour acquérir les données, soit une mémoire intermédiaire.
 +
 
 +
C'est cette dernière solution que nous allons mettre en oeuvre. La mémoire intermédiaire est une mémoire FIFO rapide à deux ports de 3Mbits, la [[http://www.datasheetarchive.com/pdf-datasheets/Datasheets-6/DSA-115945.html AL422B]] produite par Avermedia.
Dans cette configuration, la séquence d'opération est la suivante :  
Dans cette configuration, la séquence d'opération est la suivante :  
-
* le microconrtôleur demande une acquisition à la caméra par le biais du bus I2C ;
+
* le microcontôleur configure la caméra par le biais du bus I2C ;
-
* la caméra effectue l'acqusition et transmet l'image dans la FIFO ;
+
* la caméra effectue l'acquisition vidéo et stocke l'image dans la FIFO ;
* le microcontrôleur attend la fin de la transmission (au moyen du bus I2C) :
* le microcontrôleur attend la fin de la transmission (au moyen du bus I2C) :
* le microcontrôleur récupère l'image dans la FIFO.
* le microcontrôleur récupère l'image dans la FIFO.
 +
 +
La caméra fournit les signaux nécessaires au pilotage direct de la FIFO :
 +
* un signal d'horloge (XCLK) 
 +
* un signal de synchronisation horizontal (HREF)
 +
* un signal de synchronisation vertical (VREF)
 +
* un bus de données de largeur 8 bits (D0 à D7)
 +
 +
La FIFO dispose quant à elle des signaux suivants (en entrée):
 +
* Un bus de données de largeur 8 bits
 +
* Un signal d'horloge en écriture (WCK). Si l'écriture est autorisée (signal WE actif), la donnée présente sur le bus est stockée en mémoire et le compteur interne (qui fournit l'adresse) est incrémenté. Le compteur peut être réinitialisé à zéro en activant le signal WRST (Write reset).
 +
 +
La connexion de la caméra à la mémoire consiste simplement à :
 +
* connecter les deux bus de données
 +
* réaliser un ET logique entre le signal d'horloge et le signal HREF et connecter la sortie du ET à l'entrée WCK de la FIFO.
 +
 +
Voici le chronogramme d'accès en écriture de la FIFO :
 +
 +
 +
[[File:al422b_write|400px|thumb|none]]
 +
 +
Et voici le chronogramme de production des données par la caméra :
 +
 +
[[File:ol7670_data_write|400px|thumb|none]]
 +
 +
Dans cette configuration, les données produites par la caméras sont stockées "automatiquement" dans la FIFO.
 +
 +
Le schéma est donné ci-après:
 +
 +
[[File:ov7620_al422b|400px|thumb|none]]
 +
 +
 +
=== Caméra à sortie numérique USB ===
 +
 +
Il s'agit de ce que l'on a coutume d'appeler "WebCam". Il s'agit en vérité d'une caméra à sortie numérique CCD ou CMOS (surtout) à laquelle est associé un composant d'interface USB.
 +
== Expérimentations ==
== Expérimentations ==
-
== Connexion d'une caméra analogique à un ATMEGA / PIC ==
+
=== Connexion d'une caméra analogique à un ATMEGA / PIC ===
Le principe général est le suivant :
Le principe général est le suivant :
Line 46: Line 93:
* Le délai minimum entre deux échantillonnages détermine la résolution de la caméra. Dans le cas où ce délai est trop important, on peut jouer sur le décalage initial entre l'occurrence de l'événement "début de ligne" et le premier échantillon pour améliorer la résolution spatiale. Ceci se fait naturellement aux dépens de la résolution temporelle puisqu'il faudra échantillonner plusieurs fois une même ligne ''n'' pour obtenir une résolution suffisante sur cette ligne.  
* Le délai minimum entre deux échantillonnages détermine la résolution de la caméra. Dans le cas où ce délai est trop important, on peut jouer sur le décalage initial entre l'occurrence de l'événement "début de ligne" et le premier échantillon pour améliorer la résolution spatiale. Ceci se fait naturellement aux dépens de la résolution temporelle puisqu'il faudra échantillonner plusieurs fois une même ligne ''n'' pour obtenir une résolution suffisante sur cette ligne.  
-
== Connexion d'une caméra numérique à un Cortex M3 ==
+
''A compléter''
-
<<A compléter>>
+
=== Connexion d'une caméra numérique à un Cortex M3 ===
-
La caméra utilisée est un modèle OV7620 d'Omnivision. La FIFO est un modèle d'Avermedia. (On aurait probablement pu utiliser une mémoire plus classique, type SDRAM, mais je ne sais aps encore les utiliser !).
+
La caméra utilisée est un modèle OV7670 d'Omnivision. La FIFO est le modèle AL422B d'Avermedia qui intègre gentillement de la DRAM avec sa logique de rafraîchissement. (J'aurais probablement pu utiliser une mémoire plus classique, type DRAM voire SDRAM, mais c'est plus lourd. A voir... )
 +
''A compléter''
-
== Connexion d'une WebCam à un Cortex M3  ==
+
=== Connexion d'une WebCam à un Cortex M3  ===
-
<<A compléter>>
+
En cours d'investigation : ceci requiert la présence d'un ''host'' USB, ce qui nécessite une prise en compte matérielle.
-
 
+
''A compléter''
-
En cours d'investigation : ceci requiert la présence d'un ''host'' USB, ce qui nécessite une prise en compte matérielle.
+

Revision as of 12:13, 2 February 2011

Contents

Les différentes caméras

On peut distinguer (au moins) deux catégories de caméras en fonction de leur signal de sortie :

  • Les caméras à sortie vidéo analogique (PAL, SECAM, etc.),
  • Les caméras à sortie numérique non USB
  • Les caméras à sortie USB

Il existe bien sûr d'autres critères de classific))]]ation tels le type de capteur (CCD, CMOS, etc.), par exemple.

Caméra à sortie vidéo

Il s'agit de caméras dont la sortie est un signal vidéo composite (PAL, NTSC, SECAM) que l'on peut directement connecter à un écran, un magnétoscope ou tout autre équipement disposant de ce type d'entrée.

Ce sont les caméras les moins onéreuses puisqu'on en trouve à moins de 10€ sur ebay. Voici, par exemple, celle que j'utilise :

<<photo à joindre>>

Le signal vidéo en sortie de ces caméras a la forme suivante :

<<A compléter.>>

La mise en oeuvre d'une telle caméra avec un microcontrôleur nécessite :

  • l'extraction des signaux de début de ligne, début d'image ;
  • une conversion analogique numérique suffisamment rapide (elle déterminera la résolution)
  • un espace mémorie suffisamment grand pour stocker une image.

L'extraction des signaux de synchronisation peut se faire facilement grace au circuit [LM1881]qui fournit, à partir d'un signal vidéo, les signaux de synchronisation horizontal, vertical et de parité de ligne (entrelacement).

Ces signaux peuvent alors être utilisés par le microcontrôleur pour démarrer une séquence d'échantillonnage. La limite du procédé est évidemment liée à la vitesse du convertisseur analogique / numérique utilisé.

Voir la section concernant la connection de ce type de caméra sur un Atmega32 pour plus d'informations.

Caméra à sortie numérique non USB

Il s'agit de caméra dont la sortie est une image codée sous forme numérique. On trouve de telles caméras pour une dizaine d'euros.

Voici, par exemple, celle que j'utilise (composant OV7670]] d'Omnivision placé sur une break-out board) ; il s'agit d'une caméra VGA (640x480 pixels).

Cette caméra dispose propose un nombre important de fonctions accessibles via un bus compatible I2C (SCCB). L'image, quant à elle, n'est pas accessible sur le port I2C : elle est transmise de façon autonome sur un bus parallèle rapide auquel il conviendra de connecter soit un microprocesseur suffisamment rapide pour acquérir les données, soit une mémoire intermédiaire.

C'est cette dernière solution que nous allons mettre en oeuvre. La mémoire intermédiaire est une mémoire FIFO rapide à deux ports de 3Mbits, la [AL422B] produite par Avermedia.

Dans cette configuration, la séquence d'opération est la suivante :

  • le microcontôleur configure la caméra par le biais du bus I2C ;
  • la caméra effectue l'acquisition vidéo et stocke l'image dans la FIFO ;
  • le microcontrôleur attend la fin de la transmission (au moyen du bus I2C) :
  • le microcontrôleur récupère l'image dans la FIFO.

La caméra fournit les signaux nécessaires au pilotage direct de la FIFO :

  • un signal d'horloge (XCLK)
  • un signal de synchronisation horizontal (HREF)
  • un signal de synchronisation vertical (VREF)
  • un bus de données de largeur 8 bits (D0 à D7)

La FIFO dispose quant à elle des signaux suivants (en entrée):

  • Un bus de données de largeur 8 bits
  • Un signal d'horloge en écriture (WCK). Si l'écriture est autorisée (signal WE actif), la donnée présente sur le bus est stockée en mémoire et le compteur interne (qui fournit l'adresse) est incrémenté. Le compteur peut être réinitialisé à zéro en activant le signal WRST (Write reset).

La connexion de la caméra à la mémoire consiste simplement à :

  • connecter les deux bus de données
  • réaliser un ET logique entre le signal d'horloge et le signal HREF et connecter la sortie du ET à l'entrée WCK de la FIFO.

Voici le chronogramme d'accès en écriture de la FIFO :


Et voici le chronogramme de production des données par la caméra :

Dans cette configuration, les données produites par la caméras sont stockées "automatiquement" dans la FIFO.

Le schéma est donné ci-après:


Caméra à sortie numérique USB

Il s'agit de ce que l'on a coutume d'appeler "WebCam". Il s'agit en vérité d'une caméra à sortie numérique CCD ou CMOS (surtout) à laquelle est associé un composant d'interface USB.


Expérimentations

Connexion d'une caméra analogique à un ATMEGA / PIC

Le principe général est le suivant :

  • L'extraction des signaux de synchronisation est réalisé par le composant LM<<A compléter>>.
  • Les signaux de synchronisation sont délivrés au microcontrôleur qui les utilise pour démarrer une séquence de conversions analogique vers numérique
  • Le délai minimum entre deux échantillonnages détermine la résolution de la caméra. Dans le cas où ce délai est trop important, on peut jouer sur le décalage initial entre l'occurrence de l'événement "début de ligne" et le premier échantillon pour améliorer la résolution spatiale. Ceci se fait naturellement aux dépens de la résolution temporelle puisqu'il faudra échantillonner plusieurs fois une même ligne n pour obtenir une résolution suffisante sur cette ligne.

A compléter

Connexion d'une caméra numérique à un Cortex M3

La caméra utilisée est un modèle OV7670 d'Omnivision. La FIFO est le modèle AL422B d'Avermedia qui intègre gentillement de la DRAM avec sa logique de rafraîchissement. (J'aurais probablement pu utiliser une mémoire plus classique, type DRAM voire SDRAM, mais c'est plus lourd. A voir... )

A compléter

Connexion d'une WebCam à un Cortex M3

En cours d'investigation : ceci requiert la présence d'un host USB, ce qui nécessite une prise en compte matérielle.

A compléter

Personal tools