Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Caméra OV7670
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » mer. 27 juil. 2022 20:03

Bonjour tout le forum,

Essai de mise en fonction d'une caméra OV7670, en langage ASM :langue:

Prix d'achat avec port compris de la caméra OV7670 2,52 Euros, voici son datasheet

Voici les dimensions de la caméra OV7670

Caméra OV7670.jpg


Pour la mise en fonction de cette caméra OV7670 je me suis servi d'un microcontrôleur Pic18F26K22, voici son datasheet

****************************************************************************************************************************************************************************************

L'alimentation de la caméra

L'alimentation de la caméra OV7670 et du Pic18F26K22 se fera en 3,3 volts, ce qui évite bien des problèmes, je vous le conseille.

Protocole de communication

Pour communiquer avec cette caméra OV7670 on utilise le I2C en mode 8 bits, mais pour faire fonctionner le I2C il faut envoyer une fréquence sur la broche XCLK, chez moi cette broche s'appelle MCLK

:eek: Cette fréquence d'après la datasheet et d'un minimum de 10MHz à un maximum de 48MHz, le plupart du temps on l'utilise en 24MHz

Pour générer cette fréquence et éviter un circuit supplémentaire on se servira du PWM de notre pic, qui sera réglé à 50% de modulation.

Le Pic18F26K22 a une fréquence d'horloge maximum de 64MHz et ne peut pas créer un PWM à plus de 8 MHz, alors que faire .... :-D et ben, c'est notre caméra OV7670 qui va nous aider, car elle possède une PLL qu'il faut bien sur activer, de plus elle est réglable sur quatre niveaux 0, 4, 8, 16 (essai à faire avec cette PLL)

La vitesse du I2C ne doit pas dépasser 400 KHz, d'après ce qui est marqué dans la datasheet, pour les tests je vous conseille très fortement de réglé le I2C à la vitesse de 100KHZ

L'adresse que j'ai trouvé avec mon programme de détection I2C et 0x42 pour le mode écriture, et 0x43 pour le mode lecture.

Voici un schéma pour vous illustrez comment est câblé ma caméra OV7670

Schéma du branchement de la caméra 0V7670.jpg


Un peu d'explication et de technique

La caméra OV7670 prend en charge 4 formats de couleur : YCbCr, RGB565/RGB555, Bayer raw RGB, Processed raw

Coté résolution voici les 5 formats : VGA (640x480), QVGA (320x240), QQVGA (160x120), CIF (352x288), QCIF (176x144)

Le reste arrive .... soyer patient faut que je fasse le programme....


Signaux analysé sur la caméra OV7670

Voici ce que j'obtiens à l'oscilloscope numérique sur le balayage horizontal,

Balatage horizontal.jpg


Visualisation d'une image vidéo sur PC

La visualisation d'une image vidéo se fera sur PC avec un programme que je vais écrire en RapidQ,

Dans ce programme les données de la caméra OV7670 seront reçu par USART par l’intermédiaire du module Ch340E

Module CH340E

Prix d'achat avec port compris du module Ch340E 1,50 €, voici son datasheet

Ch340 - 1.jpg


Premier test avec Usart, qui est réglé à 115200 Bauds, soit 11520 octets par secondes

OV7670.jpg


Le test consiste à contrôler le nombre d'octet reçus, par rapport à la demande, dans un temps de 1 seconde, de plus il faut éviter les erreurs de réception sinon l'image sera détérioré, le mode Asynchrone n'est pas parfait, mais c'est le plus pratique

Pour 1 seconde on reçois 11520 octets, c'est pas assez pour une image, et même si une image faisait 11520 octets par seconde, il faudrait multiplier
par au moins 15 images secondes pour une vidéo, on obtiendrais 11520 octets x 15 images secondes = 172800 octets, :eek: ça voudrai dire qu'il faut tourner à 1728000 Bauds, j'ai bien peur qu'il faut se contenter d'une résolution très base au niveau de l'image :cry:,

Dernièrement j'ai fait un test avec l'usart à 1000000 Bauds, ça fonctionne bien, si on augmente la vitesse, ça ne suit plus, d’où ça peut venir ?

Plusieurs hypothèse

1) Code de mon programme trop lent
2) Module CH340E qui ne suis pas
3) L'ordinateur qui ne peut pas suivre
4) Microcontrôleur qui envoi mal les données, ou vitesse mal synchronisé(car il est à fond)

Régler à fonds le Pic peut être régler à 2000000 Bauds maximum... on ne peut pas aller plus vite, j'en ai terminer avec l'usart, je ferais quand même des tests d'image à base résolution, histoire de voir ce que ça donne.

Reste à voir avec l'USB que possède certain Pic

Voici ce que j'ai appris sur l'USB natif

La première version de la norme,USB 1.0, voit ses spécifications publiées en 1996.

En 1998 la version USB 1.1 lui apporte des corrections.

Deux vitesses de communication sont possibles dans ces normes : 1,5 Mbit/s (faible vitesse, ou Low Speed), et 12 Mbit/s (soit 1.5 Mo/s) (pleine vitesse ou Full Speed).


:eek: 15 fois plus rapide, le seule problème, comment paramétrer l'USB avec mon programme et le Pic en version ASM pour la partie Pic ? ..... j'ai bien dit coté Pic en ASM pas sur l'ordinateur, Quoique :roll:

Il me reste à voir si l'usb du Pic peut tourner aussi rapidement que 1.5 Mo/s... :sifflotte: j'ai comme un gros doute dessus...


==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le dim. 20 nov. 2022 13:14, modifié 58 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Caméra OV7670
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#2 Message par satinas » ven. 29 juil. 2022 21:02

Bonsoir Temps-x,

Bon courage pour ce nouveau projet, il y aura beaucoup de travail pour le paramétrage de la caméra : taille d'image, format, vitesse d'échantillonnage. J'avais arrêté les essais après avoir obtenu une première image.

Tu en es où pour l'I2C, il faut les 2 résistances de tirage au 3,3V, et câbler les 3 broches Mclk, Reset et PowerDown.Au choix vitesse 100kHz ou 400kHz. A l"oscillo cela donne quoi ?

Le 18F27K42 possède 2 canaux DMA, on pourrait peut-être les utiliser pour automatiser les transferts entre ram et registre SFR, ou entre 2 registres SFR.

Caméra OV7670
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#3 Message par Temps-x » sam. 30 juil. 2022 02:24

Bonjour satinas, et tout le forum,

Merci pour tes réponses,

satinas a écrit :Source du message il y aura beaucoup de travail pour le paramétrage de la caméra

Une fois que j'arriverais à communiquer avec cette caméra OV76770 je pourrais la paramétrer avec eursart via un petit programme PC,
écrit en RapidQ :-D

Ça me permettras de voir tout de suite ce que j’obtiens, et modifier si nécessaire, ce programme sera disponible sur le forum de Fantas-Pic, :sifflotte: enfin si j'arrive à communiquer...

Une fois que les paramètres seront ok, enregistrement tout en eeprom(1024 octets)

satinas a écrit :Source du message Tu en es où pour l'I2C

Au point zéro... :?

satinas a écrit :Source du message il faut les 2 résistances de tirage au 3,3V


J'ai fait un schéma ci-dessus pour que tu puisses voir comment est câblé la caméra OV7670

satinas a écrit :Source du message Au choix vitesse 100kHz ou 400kHz. A l"oscillo cela donne quoi ?

Mon oscilloscope et en panne :cry: la résistance de haute tension à encore claqué, il faut que je la change, de toute façon ça ne servira pas à grand chose, car l'oscilloscope n'aura pas le temps de voir le signal, le mieux c'est d'utiliser mon bon vieux analyseur logique.

Je vais paramétré I2C à 100KHz dans le registre SSPADD

satinas a écrit :Source du message Le 18F27K42 possède 2 canaux DMA, on pourrait peut-être les utiliser pour automatiser les transferts entre ram et registre SFR, ou entre 2 registres SFR


Pour commencer je vais faire simple avec un Pic18F26K22, car je le maitrise plus facilement, mais je reviendrais sur ta méthode avec le PIC18F27K42 par la suite, :-D histoire de dire à paulfjujo qu'on a réussi à faire fonctionner le I2C avec ce pic en ASM :langue:

A voir si la caméra fonctionne, car elle à était livré sans cache obturateur, et de plus avoir une broche qui porte le non de MCLK au lieu de XCLK, j'ai des gros doute sur une contre façon... je vais peut être en commandé une autre, mais cette fois si avec un obturateur, de toute façon je continu pour l'instant avec celle là.

En ce qui concerne le I2C , j'ai fais un petit programme pour la détection du I2C en 8 bits qui est fonctionnelle, car il me trouve toujours les adresses, je l'utilise très fréquemment, et celui-ci ne trouve rien, j'en conclus que I2C ne fonctionne pas.


==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Caméra OV7670
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#4 Message par paulfjujo » sam. 30 juil. 2022 09:18

Bonjour TempsX, Satinas et à tous

sur la datasheet on ne voit rien sur I2C ?
par contre :
... controleed trough the serial Camera Control Bus ( SCCB) interface ..

.. qui ressemble plus à du SPI
il faut peut etre faire un control Bit Bang personalisé.

ou la datasheet est incomplete ?
Aide toi, le ciel ou FantasPic t'aidera

Caméra OV7670
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#5 Message par satinas » sam. 30 juil. 2022 10:24

Bonjour à tous,

C'est de l'I2C standard. Tu fais une boucle Start/0x42/Stop/100ms et tu regardes à l'oscillo ce que cela donne, le ACK de la caméra pourrait arriver avec un peu de retard.
Le fait de tester en boucle la centaine d'adresses n'est pas garanti, un device peut bloquer le bus, cela m'est arrivé et seul l'oscillo peut le signaler.
Et si tu n'as pas d'oscillo, j'en ai en rab, je peux t'en envoyer un, mais attention c'est du lourd (Tektro), faut se planquer quand il retombe.

Caméra OV7670
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#6 Message par satinas » sam. 30 juil. 2022 13:39

Les 2 résistances de 4,7k servent à l'adaptation de niveau en sortie de l'Arduino alimenté en 5V.
Si tu alimentes le pic en 3,3V, il faut les enlever, j'en ai pas mis sur le pic32 qui est aussi en 3,3V.

Caméra OV7670
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » sam. 30 juil. 2022 17:39

Bonjour paulfjujo, satinas, et tout le forum,

:-D Adresse trouvé avec mon petit programme de détection de I2C, il y avait 2 erreurs, en premier, les résistances de 4700 ohms ne sont pas nécessaire, comme le précis satinas, qu'on on alimente en 3,3 volts notre Pic,

En deuxième, il est impératif de tourner à une vitesse de 100 KHz à 400 KHz en I2C, pour les essais je vous conseille fortement de prendre la plus petite vitesse 100 KHz

L'adresse trouvé et 01000010 soit 0x42 comme le précis satinas.

paulfjujo a écrit :Source du message sur la datasheet on ne voit rien sur I2C ?


Exacte paulfjujo, et c'est vraiment mal documenté, mais en page 6 en trouve ceci, 400 kHz maxi

I2c_maxi.jpg


Je tourne à fond avec le PWM qui est réglé à 8 Mhz, sans PWM il n' y pas de I2C, j'ai fait l'essai ...

Avec tous les fils qu'il y a j'ai bien envi de faire un PCB, je vais remettre ses informations en première page

Maintenant il faut élaborer un plan pour configurer la caméra, les idées sont les bien venu ....

Merci ! à vous deux

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Caméra OV7670
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#8 Message par Temps-x » dim. 31 juil. 2022 02:16

Bonsoir satinas,

satinas a écrit :Source du message Et si tu n'as pas d'oscillo, j'en ai en rab, je peux t'en envoyer un, mais attention c'est du lourd (Tektro), faut se planquer quand il retombe.


Merci de cette proposition, mais je préfère une fois de plus réparer le mien, je sais d’où vient la panne, je qui m'en bête c'est que ça me fait perdre un Week-end de programmation, :sifflotte: à moins d'utiliser mon petit oscilloscope Oled 128x64, là... je risque rien si il vient à tomber :-D

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 45 invités