La
caméra utilisée et
un module miniature qui à la particularité
d'encoder
directement les captures réalisées sous un format JPEG. La documentation PdF est ICI |
Sont brochage est le
suivant :
Le module et pilotable à l'aide d'un jeu de 11 instructions résumées ci après. Les commandes respectent le protocole série RS232 dont voici un exemple de trame :
Le jeu d'instructions du module :
Pour plus d'informations concernant l'utilisation du jeu
d'instructions, merci de bien vouloir consulter le datasheet
constructeur.
A
la mise sous tension la vitesse de communication par défaut du
module
est de 9600 Bds. C'est à cette vitesse que nous effectuerons
sont
initialisation. La phase d'initialisation consiste à envoyer la
commande SYNC (AA 0E 0D xx 00 00) jusqu'a ce que le module
réponde par un acquittement (ACK) et une
synchronisation (SYNC).
Cette opération est à effectué 60 fois au maximum,
imparti ce nombre
d'essaie, il est préférable de réaliser un hard
reset. Généralement le
module répond au bout de la 25 ème tentatives. Une fois
la réponse
reçue, il faut impérativement la validé par un
nouvelle commande SYNC
Ci dessous l'organigramme de la procédure de reset :
Dans le projet Camrecorder, nous utiliserons la
caméra à sa vitesse de communication maximale, soit
115200 Bps.
Aussitôt après la phase de reset et d'établissement
de la communication avec le module, le microcontrôleur enverra la
commande
SET BAUDRATE suivante : AA 07 0F 01 00 00, vérifiable
à l'aide du tableau d'instructions.
Ensuite et dans l'ordre il faut envoyer les commandes suivantes afin de récupérer un snap JPEG de dimension 320 x 480 :
Bien entendu, la prise en compte de chaque commande est
validée du coté module par un ACK.
Interessons nous maintenant à la structure des
paquets retournés aussitôt envoyé la commande GET
PICTURE; Ils contiennent l'image compressée sous format JPEG.
Tous
les fichiers JPEG comprennent un entête contenant les
informations de
taille, palette de couleur et type de compression. La suite du fichier
JPEG est constituée de l'image par elle même. Cette image
et bien sur
inexploitable sans le Codec correspondant.
Ce qui nous interresse
n'est pas de décoder l'image en temps
réel, bien que cela reste possible,
mais de récupérer les paquets que
l'on va coller les uns à la suite des autres pour parvenir
à la
construction du fichier totale. Je rappelle au passage que la
caméra
peut très bien être utilisée sans Codec : noir et
blanc ou couleur...
mais la taille de l'image récupérée et bien
évidement supérieure au JPEG
Pour revenir sur la structure des paquets, nous avions décidé de fixer leurs taille à 512 octet, on récupérera dans un paquet les informations suivantes visualisées à l'aide de winhex :
Comme
le datasheet nous l'indique, les 2 premiers octets nous donne le
numéro
de paquet, par conséquent comme il s'agit du premier, il est
identifié
00 00 , le deuxième lui sera 01 00, il faut effectivement
inverser les
octets.
Les 2 octets suivants renseigne sur la taille utile occupée
pas les informations du fichiers JPEG par lui même sans celles
spécifiques au module JPEG; comme expliqué
précedement , nous avons la
valeur FA 01, qui une fois inversé donne $01FA soit en
décimale : 506.
Les 2 derniers octets sont un code de vérification, un genre de checksums, bien que je n'ai aucune information à ce sujet.
Maintenant, il reste donc à enlever les octets ne faisant pas partis de l'image elle même, puis de créer un fichier dans lequel sera mis suite à suite les prochains paquets en effectuant le même type d'ablations d'informations. En le nommant monfichier.jpg, il pourra être visualisé dans toute sorte de logiciels photos ou navigateurs.
Une dernière précision : aussitôt envoyé la commande GET PICTURE, le module retourne 12 octets , les 6 premiers étant l'ACK normale et les 6 autres contenants la taille du snap.
Exemple D'utilisation:
On retrouve les convertisseurs MAX485 afin de remettre en forme les signaux de communications. Un petit diviseur de tension composé de R3 et R4 est nécessaire afin de faire chuter la tension de sortie du drivers MAX485 de 5 à 3 Volts.