Non classé

1 2 3 20

Dernière mise à jour le 28/04/18

Présentation


En quelques ligne, cette interface, vous permettra d’observer si la communication entre le PIC et le PC est bien établie.
 




 
Fonctionnement
Oh!! vous savez rien de bien compliqué!! L’interface proposée ici, permet de piloter par une liaison USB n’importe quel PIC (PIC18/PIC24/PIC32/…). Bien entendu!!! il faut que ces PIC puissent communiquer avec les données USB (D+/D-).

Lorsque le logiciel Interface UsbHid est ouvert, il suffit de cliquer sur le bouton « Connection » afin d’établir une première connection entre le port USB de votre ordinateur et le PIC. Pour le reste il suffit de visualiser les indicateurs qui vous permettra de voir si les données via le PIC sont bien transmises.

Attention!!
L’interface fonctionne si le PIC que vous utilisé est configuré avec un PID = 1234 et VID = 0001, merci de vous basé sur ce numéro de produit et son numéro d’identification pour le bon fonctionnement si vous ne savez plus comment créer le PID/VID je vous laisse consulter l’article
Configuration port USB – VID/PID

PIC18F4550


Vous utilisé un PIC de la famille 18F comme le célèbre 18F4550 ou bien le 18F2455 ou encore le 18F2550 voir même le 18F4455 ?

Je vous laisse le programme à télécharger en MikroC et en MikroPascal afin de tester la connection entre le port USB et le PIC18F4550, et aussi de vous permettre à avoir une première approche sur les lignes de programmation utilisé pour faire fonctionner votre PIC 18F4550 grâçe à l’interface UsbHid.
 
Pour les plus pressés je vous laisse le fichier Fichier HEX afin de le flasher directement dans le PIC18F4550. Ensuite il vous suffira d’utiliser l’interface UsbHid.

Logiciel


InterfaceUSB

Problèmes rencontrés


  • 1) Vous rencontrés des problèmes lors de la connection ? Vous vous êtes assuré d’avoir créé le VID/PID ? Dans ce cas je vous laisse regarder les manipulations dans cet article Configuration port USB – VID/PID

 

  • 2) Pour le fonctionnement merci d’utiliser PID = 1234 et VID =0001, si vous ne le fait pas dans ce cas l’interface UsbHid ne fonctionnera pas !! En effet, celui-ci a été conçu avec un PID = 1234 et VID = 0001 – je sais c’est sa petite faiblesse on fera mieux la prochaine fois 😉

Historiques


28/04/18
– Première mise à disposition

Dernière mise à jour le 17/03/18

Présentation



En quelques ligne, cette interface, vous permettra en cliquant sur les boutons prévus à cet effet d’allumer ou d’éteindre les leds qui sont reliées à votre PIC, afin d’observer si la communication entre le PC et le PIC est bien établie.
 




 
Fonctionnement
Oh!! vous savez rien de bien compliqué!! L’interface proposée ici, permet de piloter par une liaison USB n’importe quel PIC (PIC18/PIC24/PIC32/…). Bien entendu!!! il faut que ces PIC puissent communiquer avec les données USB (D+/D-).
 
Lorsque le logiciel Interface UsbHid est ouvert, il suffit de cliquer sur le bouton « Connection » afin d’établir une première connection entre le port USB de votre ordinateur et le PIC. Pour le reste il suffit d’appuyer sur chaque bouton prévu à cet effet afin de pouvoir allumer ou éteindre les leds.
 
Je vous laisse un exemple Interface USB – PIC32 – Sorties numériques à cette adresse ou j’utilise le Mini-32 (PIC32).

 
Attention!!
L’interface fonctionne si le PIC que vous utilisé est configuré avec un PID = 1234 et VID = 0001, merci de vous basé sur ce numéro de produit et son numéro d’identification pour le bon fonctionnement si vous ne savez plus comment créer le PID/VID je vous laisse consulter l’article
Configuration port USB – VID/PID

PIC18F4550


Vous utilisé un PIC de la famille 18F comme le célèbre 18F4550 ou bien le 18F2455 ou encore le 18F2550 voir même le 18F4455 ?

Je vous laisse le programme à télécharger en MikroC et en MikroPascal afin de tester la connection entre le port USB et le PIC18F4550, et aussi de vous permettre à avoir une première approche sur les lignes de programmation utilisé pour faire fonctionner votre PIC 18F4550 grâçe à l’interface UsbHid.
Pour les plus pressé je vous laisse le fichier Fichier HEX afin de le flasher directement dans le PIC18F4550. Ensuite il vous suffira d’utiliser l’interface UsbHid.

Logiciel


Interface UsbHid

Problèmes rencontrés


  • 1) Vous rencontrés des problèmes lors de la connection ? Vous vous êtes assuré d’avoir créé le VID/PID ? Dans ce cas je vous laisse regarder les manipulations dans cet article Configuration port USB – VID/PID

 

  • 2) Pour le fonctionnement merci d’utiliser PID = 1234 et VID =0001, si vous ne le fait pas dans ce cas l’interface UsbHid ne fonctionnera pas !! En effet, celui-ci a été conçu avec un PID = 1234 et VID = 0001 – je sais c’est sa petite faiblesse on fera mieux la prochaine fois 😉

Historiques


17/03/18
– Première mise à disposition

Dernière mise à jour le 17/03/18

Présentation



Nous allons voir pour ce montage électronique comment “piloter” les 8 bits de sorties du Mini-32 (composé du PIC32MX534F064H) en utilisant le port USB.
Pour assurer le pilotage des 8 bits de sorties, un petit logiciel sans prétention a été conçu et que vous pouvez télécharger sur mon site à cet adresse Interface UsbHid – communication PC -> PIC

Schéma



Fonctionnement
Pour que ce montage électronique fonctionne, il faut avant tout faire une Configuration port USB – VID/PID. Si vous utilisé l’interface UsbHid, merci de bien mettre un VID = 1234 et un PID = 0001 afin que la communication PC vers PIC se fasse correctement.
 
Une fois tout ces réglages réalisés, il suffira d’insérer ces ligne dans votre comparateur,de compiler, puis de flasher votre Mini-32.

 




 

Logiciel du PIC


Ici vous trouverez le langage en MikroC et en MikroPascal et enfin le Fichier HEX prêt à être flashé dans le PIC32 (Mini-32)

Prototype en vidéo



Une connection par USB et une interface on peu encore imaginer plein de choses ….

Historiques


– 17/03/18
Première mise à disposition.

 

Dernière mise à jour le 27/03/18

Présentation


Dans ce présent article nous allons voir comment réaliser ou bien plutôt créer un numéro d’identification du périphérique, afin de pouvoir relier un PIC à l’ordinateur via le port USB.
 
Nous allons voir en détails les manipulations à effectuer et comment rattacher le numéro d’identification à votre programme.

 




 

VID/PID


Le VID est le nom court pour Numéro d’identification du Vendeur et PID Numéro d’identification du produit. En général, le VID, PID de périphérique est composé d’une série de caractères comme VID_05A9&PID_2800. La valeur concrète est affichée derrière «-». La valeur de VID, PID est en fait le numéro d’identification unique du périphérique de USB connecté au système Windows. Le numéro d’identification peut être utilisé comme l’information de périphérique, et le pilote pour un périphérique, qui est relié à l’ordinateur via USB dépend de ce numéro.

Afin de créer ce numéro d’identification je vous laisse lire les présentation ci-dessous

Création du VID et PID


Une fois le logiciel MikroC ou MikroPascal ouvert cliquer afin de créer un nouveau projet

Ensuite il faudra choisir l’emplacement du répertoire la ou vous voulez enregistrer votre projet.

Ensuite faire “Next” jusqu’à ce que vous obtenez la figure ci-dessous (Dans l’exemple il s’agit de MikroPascal, mais cela ne change rien en MikroC vous faites exactement les même manipulation)

Maintenant que vous êtes arrivé jusqu’ici, j’ai récupérer dans l’aide de MikroPascal (et MikroC) un morceau de code il suffit juste de le copier et de le coller dans la page la ou vous êtes situé. Vous avez le choix en MikroPascal et en MikroC (je tiens aussi à préciser que ces 2 programmes sont utilisés pour les PIC de la famille 32F (Mini-32 de chez MikroElectronika).

Une fois votre programme copié et collé dans la page du code, il suffit de faire “CTRL + F9” simultanément afin de pouvoir compiler votre programme, et normalement vous dévirez obtenir ces erreurs

Pas d’inquiétude c’est tout à fait normal!! c’est ici que nous allons voir comment créer VID/PID. Pour cela il suffit de cliquer sur “tools” et de sélectionner “HID terminal”

Lorsque la fenêtre est ouverte, je vous ai encadrés les parties que vous devez remplir. A vous de mettre les valeurs que vous voulez mais attention!!! il ne faut pas que ces valeurs soient identiques avec un de vos périphériques qui sont déjà connectés à votre ordinateur!!

Une fois terminé, il suffit de sauvegarder en cliquant sur “save descriptor” dans le répertoire ou se trouve votre projet, et normalement si vous n’avez pas changer le nom du fichier,vous devriez retrouvez ce fichier la:

Je vous promet!! c’est bientôt terminé maintenant il suffit de l’ajouter à votre projet pour cela faite ceci cliquer sur “projet” et ensuite “add file to projet”et recherche le fichier (pour ceux qui utilise MikroC il faut recherche le fichier nommé USBdsc.c)

Ajouter le fichier identifié précédemment

il ne reste plus qu’à faire “CTRL + F9” et le tour est joué!!!

Pour le PIC32 (Mini-32) Réglage dans “Edit Project”


Vous allez me dire que rien ne fonctionne!! Oui c’est sur!! nous avons créer uniquement le VID/PID, mais il reste une chose importante encore c’est de régler l’horloge. Je vous laisse vérifier si les capture écran sont en adéquation avec vos paramètres.
Remarque importante!! Les captures d’écran ci-dessous ont été réalisé sur un PIC32 (Mini-32) à vous de bien faire la différence.





Maintenant vous pouvez faire un “CTRL + F9” pour de bon!!.

Pour la familles des PIC 18F Réglages dans “Edit Project”


Je me disais pourquoi pas aussi évoquer les PIC de la famille 18F comme le 18F4550, le 18F2455, mais encore le 18F2550 et pourquoi pas finir aussi avec le 18F4455? Merci à vous de vérifier les captures écrans ci-dessous



Vérification de la connexion USB


Vous pouvez retournez dans le HID terminal et vérifier que votre PIC est bien connecté à votre ordinateur en faisant cette manipulations


Vous pouvez remarquer que cela correspond tout à fait à ce qu’on a rentré précédemment

Les tests


Pas très compliqué, il suffit d’ouvrir le HID terminal d’aller dans l’onglet “Terminal” et ensuite d’écrire dans la fenêtre de communication puis faire envoyer en cliquant sur “Send” et vous verrez en dessous votre message s’afficher instantanément. Cela veut dire que votre PIC et opérationnelt et utilise bien la liaison USB.

Historiques


– 27/03/18
Première mise à disposition.

 

Dernière mise à jour le 18/02/2018

Présentation


Comment afficher une valeur analogique en une valeur numérique et que celle-ci peut être lue sur un afficheur 7 segments multiplexé ? En voilà une de bonne question !
Le microcontrôleur qui sera utilisé pour lire une valeur analogique sera de la famille 18F plus précisement le 18F4550 qui celui-ci sera testé sur la platine EasyPic 7.

 




 
L’entrée analogique se fait sur 10 bits ce qui donne 1023 possibilités. Pour une tension maxi de 5V à ses broches, la tension analogique et convertie en une valeur numérique qui correspond pour 5V 1023, pour 0V nous avons 0, il suffit de faire le produit en croix (ou règle de trois) pour trouver la valeur numérique. Mais vous avez de la chance car cette règle est déjà intégrée dans le programme du PIC donc nul besoin de prendre de calculette.

Schéma


Fonctionnement

Le schéma électronique est une amélioration de l’Afficheur 002 puisqu’ici, nous utilisons un PIC18F4550 et nous avons 3 afficheurs qui permettent de lire 2 chiffres après la virgule.

On parle de signaux multiplexés lorsque sur un seul fil nous envoyons plusieurs données les unes à la suite des autres. L’avantage de multiplexer des informations, c’est que nous utilisons moins de fils de liaisons électriques.

La lecture de la tension est faite sur la broche RA5 du PIC. En faisant varier le potentiomètre RV1 celui-ci fera varier la tension qui est comprise entre 0 et 5V.

La broche RA0 étant configurée comme une entrée analogique, cette tension analogique (0 ..5V) sera convertie en une valeur numérique (0..1023), c’est ce qu’on appel une conversion Analogique/Numérique (A/N).

Affichage des valeurs converties

Comme son non l’indique l’afficheur permettra de donner les informations des tensions lues sur la broche RA0 du PIC 18F4550 avec 2 chiffres significatif après la virgule ce qui donne à ce montage une meilleur performance.

Réglages “EDIT PROJECT”


Merci de respecter ces captures ci-dessous pour le bon fonctionnement du programme que vous pouvez télécharger ci-dessous


Pour tout le reste il suffit de désactiver.

Logiciel du PIC


Vous allez trouver la programmation en:
MikroPascal
MikroC
– Et le Fichier.HEX afin de tester directement

Prototype



  

Utilisation d’un filtre

Au niveau de la persistance rétinienne j’ai mis du papier sur l’afficheur pour filtrer la fréquence d’allumage des afficheurs 7 segments. En effet, il est plus facile à lire les chiffres lorsqu’un filtre est présent et on arrive mieux à les distinguer l’un de l’autre. Il est aussi possible d’utiliser d’autre sorte de filtre plutôt que du papier.. Mais bon je n’avais que ça sous la mains!!

Circuit imprimé


Aucun, juste une vue en 3D pour faire jolie.

Historiques


– 18/02/17
Première mise à disposition.

Dernière mise à jour le 10/02/18

Présentation



Le Mini-32 de chez MikroElectronika s’agit d’un outil de développement miniature et puissant et qui peut être utilisé sur la Carte EasyPic puiqu’il dispose de 40 broches (DIP40). A vous de bien mettre les cavalier sur la platine EasyPic (pour ma part j’utilise la platine EasyPic 7). Je ne connais pas les autres platines EasyPic mais je pense que si il est possible de pouvoir utiliser le Mini-32 si la platine possède des DIP40.
 




 
Le MINI-32 est pré-programmé avec le bootloader USB HID donc il n’est pas nécessaire d’avoir un programmeur externe puisque il est possible de compiler et d’envoyer directement le fichier (.hex) via la liaison USB en utilisant le bootloader que vous pouvez télécharger gratuitement sur le site de Mikroe

Réglages


Avant de se lancer tête dans le guidon dans la programmation, nous allons effectuer des réglages afin que vous puissiez faire fonctionner votre Mini-32. Dans le menu nommé “EDIT PROJECT” (vous pouvez l’ouvrir en faisant CTRL+SHIFT+E), vous allez avant tout vérifier si tout ce qui va suivre ci-dessous est exactement identique avec votre “EDIT PROJECT”.




Voilà!! c’est terminé pour le code Edit Project!

Quartz non représenté?


Dans tout les schémas électroniques effectivement je n’ai jamais représenté le quartz de 8Mhz, puisque celui-ci est intégré directement sur le Mini-32. Ce composant Mini-32 intègre 2 quartz:
– 8Mhz
– 32.768kHz
Je ne vais pas rentrer trop dans les détails pour le moment.

MikroPascal et MikroC


Et oui enfin!! j’avais envie de me mettre sérieusement à la programmation en MikroC puisque cette programmation est très utilisée. Mais je vous rassure je ne laisse pas tomber le MikroPascal, cela permettra de vous faire la mains sur ces 2 modes de programmation et de pouvoir observer les différences entre les deux. Ne prenez pas peur !! car oui il y’a bien des changements au niveau de la syntaxe mais ce n’est pas la mer à boire!!

Historiques


– 10/02/18
Première mise à disposition.

16/12/17
– [Programmations C#] Mise à jour Ecrire dans un fichier texte (ou bloc note)
– [Programmations C#] Mise à jour Effacer fichier texte (ou bloc note)
 
01/11/17
– [Théories] Mise à jour Théories montage RC avec diode
 
22/10/17
– [Electronique] Mise à jour Générateur de courant constant – AOP
 
09/10/17
– [Théories] Mise à jour Théories fonction de transfert transistor JFET
– [Théories] Mise à jour Théories Fonction de transfert transistor NPN
 
30/09/17
– [Théories] Mise à jour Théories transistor JFET (calculs/amplification…)
– [Théories] Mise à jour Théories fonctionnement de la technologie infrarouge
– [Electronique] Mise à jour Oscillateur CD4011
– [Electronique] Mise à jour Trigger de Schmitt
 
22/09/17
– [Théories] Mise à jour Théories charge / décharge d’un condensateur
 
19/09/17
– [Logiciels] Mise à jour Easy HDL – Proteus – Protocole RC5
 
09/09/17
– [Logiciels] Mise à jour Easy HDL – Proteus – Protocole RC5
– [Electronique] Mise à jour Mesure d’une largeur d’impulsion

30/04/17
– [Programmations C#] Mise à jour Comment remplir un ComboBox
– [Programmations C#] Mise à jour Activer ou désactiver RowHeaderVisible pour un DataGridView
– [Programmations C#] Mise à jour Export DataGridView vers Excel avec enregistrement du fichier Excel

08/04/17
– [Programmations C#] Mise à jour Couleur d’une ligne DataGridView par double clic
– [Programmations C#] Mise à jour Couleur d’une Colonne DataGridView par double clic
– [Programmations C#] Mise à jour Mettre titre de colonnes en gras dans un DataGridView

01/04/17
– [Programmations C#] Mise à jour Ajouter des lignes dans un datagridview
– [Programmations C#] Mise à jour Ecrire dans cellule d’un datagridview
– [Programmations C#] Mise à jour Insérer couleur dans une cellule d’un datagridview par double clic

25/03/17
– [Programmations C#] Mise à jour Export datagridview vers excel
– [Programmations C#] Mise à jour Import excel vers datagridview
– [Programmations C#] Mise à jour Effacer contenu d’un datagridview

18/03/17
– [Programmations C#] Mise à jour Ajouter/modifier/supprimer colonnes ListView
– [Programmations C#] Mise à jour Export ListView vers Excel
– [Programmations C#] Mise à jour Supprimer ligne dans une ListView

12/03/17
– [Programmations C#] Mise à jour Tableur – C# – 001
– [Programmations C#] Mise à jour Tableur – C# – 002

08/03/17
– [Programmations C#] Mise à jour Boîte de dialogue

07/03/17
– [Programmations C#] Mise à jour Ouvrir un fichier en C#

05/03/17
– [Electronique] Mise à jour PIC32

11/02/17
– [Site] Mise à jour Mise à jour du site

05/02/17
– [Electrotechnique] Mise à jour Moteur asynchrone

14/01/17
– [Electrotechnique] Mise à jour Moteur asynchrone
– [Electrotechnique] Mise à jour Transformateur triphasé

Dernière mise à jour le xx/xx/18

En cours et pas terminé…

Présentation


Le Mini-32 possèdes 5 broches qui fournissent des sorties de comparaison (PWM) avec plusieurs possibilités que nous allons détailler ci-dessous. Mais avant de rentrer dans ces détails, ciblons ces 5 broches de comparaisons.

– PIN 46 (Broche RD0 du PIC) = OC1 correspond à la sortie de comparaison 1
– PIN 49 (Broche RD1 du PIC) = OC2 correspond à la sortie de comparaison 2
– PIN 50 (Broche RD2 du PIC) = OC3 correspond à la sortie de comparaison 3
– PIN 51 (Broche RD3 du PIC) = OC4 correspond à la sortie de comparaison 4
– PIN 52 (Broche RD4 du PIC) = OC5 correspond à la sortie de comparaison 5
 




 

Configuration des broches


Registre OCxCON


Le registre OCxCON (avec « x » à remplacer par 1 ou 2 ou 3 ou 4 ou 5 qui correspond aux 5 sorties de comparaisons toutes indépendantes) permet d’attribuer des bits correspondant dans chaque registres que nous désirons utiliser.

Ce registre est composé de plusieurs bits avec le bit :

ON : Permet d’activer le module de comparaison (non fonctionnel si le bit est à «0 »)
SIDL : Utilisation quand le CPU est en sommeil ou non
OC32 : Soit on utilise le timer sur 32 bits (plus de comptage) ou 16 bits (moins de comptage)
OCFLT : Une condition est survenue
OCTSEL : Permet de choisir le Timer 3 ou le Timer2
OCM : Encore là aussi beaucoup de choix (des pulsations en continu/ un seul impulsion/… (voir DataSheet)

Historiques


– xx/xx/18
Première mise à disposition.

Dernière mise à jour le 10/02/18

Présentation


Le MINI-32 possédant le PIC32MX534F064H dispose sur ces broches de 5 captures d’entrées (Input capture). Ces broches sont :
 
PIN 42 (Broche RD8 du PIC) = IC1 correspond à l’entrée de la capture 1
PIN 43 (Broche RD9 du PIC) = IC2 correspond à l’entrée de la capture 2
PIN 44 (Broche RD10 du PIC) = IC3 correspond à l’entrée de la capture 3
PIN 45 (Broche RD11 du PIC) = IC4 correspond à l’entrée de la capture 4
PIN 52 (Broche RD4 du PIC) = IC5 correspond à l’entrée de la capture 5
 
La particularité de ces broches, c’est qu’elles peuvent au total réaliser 5 captures différentes!! Reste à savoir ce qu’est une capture, et quelles sont les plus prioritaires par rapport aux autres situés sur ces 5 entrées.

Configuration des broches


Essayons de comprendre comment fonctionne ces captures en entrée de notre PIC32

Les cadres rouge représentes les entrées de capture.

Registre ICxCON


Le registre ICxCON (avec « x » à remplacer par 1 ou 2 ou 3 ou 4 ou 5 qui correspond 5 captures toutes indépendantes) permet d’attribuer des bits correspondant dans chaque registres que nous désirons utiliser.
 
Si nous décidons uniquement d’activer le module via le bit « ON » , il faudra donc attribuer le chiffre 1 dans la case ou est situé ON ce qui donnera d’après le tableau sur 32 bits :
00000000 00000000 10000000 00000000
(de gauche à droite 1er ligne du tableau de 8bits, 2ème ligne du tableau de 8 bits, 3ème ligne de tableau de 8 bits, etc…)
 




 
Si pour une autre raison vous décidez de rajouter le bits ICI ( sur 2 bits : bit 0 et bits 1) à 1 cela nous donne :
00000000 00000000 10000000 01100000
 
Vous voyez cela en fait des « 0 » et des « 1 » à écrire !! Vous ne trouvez pas ? La chance que vous avez puisque c’est uniquement sur 32 bits quand serait-t-il de 64 bits ou voir même 128 ??!! Attention aux tendinites !!!

Routine MikroPascal nous sauves !!!


Ouf !!! Oui !! Comme dis précédemment, heureusement que les routines sont là pour nous faciliter la tâche. Plutôt que d’attribuer des « 0 » ou des « 1 » logique, il suffit de récupérer ces bits situés dans la routine MikroPascal. En reprenant les exemples précédents cela nous donnerais :
 
L’activation du module “ON” devient avec la routine de MikroPascal:

ON__IC1CON_bit:=1;

Et pour activer “ICI” sur les 2 bits cela devient:

ON__IC1CON_bit:=1;
ICI0_bit:=1; // bit « 0 » à l’état logique 1
ICI1_bit:=1; // bit « 1 » à l’état logique 1

On s’aperçoit que c’est beaucoup plus parlant, plus simple et cela nous évite de faire des erreurs qu’en pensez-vous ?

Les autres bits ?

ON/SIDL/FEDGE/C32/ICTMR/ICI/ICOV/ICBNE/ICM ???? Mais c’est quoi tout ça? Et à quoi cela peut bien servir ? Si vous voulez des détails vous pouvez voir sur le DataSheets du constructeur.
 
Pour faire simple :
 
ON : Permet d’activer le module de capture 1/2/3/4/5 capture en même temps à vous de choisir
SIDL : soit en mode sommeil soit en mode continu (tout le temps actif)
FEDGE : la capture sur l’entrée correspondante se fait soit sur un front montant soit sur un front descendant
C32 : Vous utiliser soit un compteur qui compte sur 32 bits (de 0 à 429 496 72 95) soit sur 16 bit (de 0 à 65535)
ICTMR : Timer 2 / Timer 3 pour compter soit sur 16 bits soit sur 32 bits.
ICI : Un déclenchement d’interruption est réalisé soit sur 1 évènement soit sur 2 évènements soit sur 3 ou voir même sur 4 événements.
 
Remarques : Lorsque vous réglé le bit ICI , ce bit est à mis à l’état 1 logique sur le premier événements de capture et restera à l’état logique 1 tant que tous les événements de captures non pas été lus à partir du FIFO ou buffer (ICxBUF). Il en résulte qu’il faut lire ces évènements pour vider le Buffer.
 
– 1 évènement, il faut lire le buffer au moins 1 fois ou plus pour le vider
– 2 évènements, il faut lire le buffer au moins 2 fois ou plus pour le vider
– 3 évènements, il faut lire le buffer au moins 3 fois ou plus pour le vider
– 4 évènements, il faut lire le buffer au moins 4 fois ou plus pour le vider
 
Attention !! Ceci est primordial afin de pouvoir vider complétement et correctement le buffer !!
 
ICOV/ICBNE : sont des bits en lectures seules on ne peut uniquement lire ces bits mais on ne peut pas écrire dedans seul le PIC pilote ces bits !!
Le bit ICBNE est utilisé afin de vérifier si le buffer est vidé totalement. Le buffer se vide via le bit ICxBUF (x à remplacerpar 1 ou 2 ou 3 ou bien 4) voir plus bas…
 
ICM : l’entrée permet de compter le nombre de front qui arrive sur ces broches ICx (x à remplacer soit par 1 ou 2 ou 3 ou 4 ou 5). Soit un seul front soit 4 soit 16 ou bien un front montant et un front descendant il suffit de tester pour en avoir le cœur net !!

ICxBUF

Ce bit permet de lire le Buffer et par la même occasion une fois lu, le buffer est vidé en fonction de nombre d’évènements autorisés (1 événement = 1 lecture /2 événements = 2 lecture / etc…)

Schéma


Programme PIC32 Input Capture – 1 évenement et 4 fronts montant


Programme disponible aussi en MikroC

program PIC32_Input_Capture;

var
ViderBufferLecture1:word;
 
procedure init;
begin
AD1PCFG := $FFFF; // Utilisation des entrées en numériques
TRISB := $0000; // Les broches du PORTB sont configurées en sorties
LATB := $0000; // Initialise toutes les sorties du PORTB à l’état logique BAS
PORTB :=$0000; // ON fixe les sorties à l’état zéro
 
TRISD8_bit:=1; // La broche du PORTD.8 est configurée en entrée
LATD := 0; // Initialise toutes les sorties du PORTD à l’état logique BAS
 
EnableInterrupts(); // Activations des interruptions IVT
 
ON__IC1CON_bit:=1; // On active le module de Capture 1
//IC1CON := $83E3; // la même chose en HEX
//IC1CON := 00000000000000001000001111100011// et en BIN
 
SIDL_IC1CON_bit:=0; // Mode continu
FEDGE_bit:=1; // Capture sur front montant
C32_bit:=0; // mode 16 bits Timer 2 uniquement
 
ICTMR_bit:=1; // Timer 2
 
ICI0_bit:=0; // | Déclenchement de l’interruption
ICI1_bit:=0; // | sur le 1er événement
 
ICM0_bit:=0; // |
ICM1_bit:=0; // | ICM réglé sur 4 fronts montant
ICM2_bit:=1; // |
 
IC1IE_bit:=1; // On active les interruptions sur les captures
 
IC1IP0_bit:=1; // |
IC1IP1_bit:=1; // | Capture 1 sur le niveau 7
IC1IP2_bit:=1; // |
end;
 
procedure Capture_1();
iv IVT_INPUT_CAPTURE_1; // entrée RD8 pour la capture 1
ilevel 7;
begin
 
begin
LATB.1:=1; // Une interruption survient
delay_ms(1000); // On attend un peu avant de lire le buffer
// Lecture du Buffer pour effacer l’interruption
ViderBufferLecture1:=IC1BUF; // 1ère lecture pour effacer la 1er évenement de capture
delay_ms(1000); // On attend un peu avant la fin de la lecture
LATB.1:=0; // La capture et la lectrue est fini
end;
 
begin
if ICBNE_bit=1 then //ICBNE reste à 1 temps que le buffer n’a pas été lu
begin
LATB.4:=1;
end;
end;
 
begin
if ICBNE_bit=0 then // buffer (FIFO) vidé
begin
LATB.4:=0;
end;
end;
IFS0:=0; // La remise à zéro du drapeau permet de sortir de l’interruption
end;
 
begin
init;
while true do
begin
// On ne fait rien dans le programme principal
end;
end.

Dans cet exemple, j’ai programmé le PIC32 afin qu’il puisse réaliser une capture sur chaque 4ème front montant en paramétrant correctement le bit ICM (bit 0/1/2). Le 4ème capture sur front montant déclenchera une interruption qui celle-ci allumera la led verte.
Petite précision tout de même au niveau du déclenchement de l’interrutpion. Il faut avant tout sélectionner le nombre d’événements qui correspond au bit ICI, celui-ci est mis à l’état logique “0” pour le bit 1 ainsi que le bit 0 de qui donne :

ICI0_bit:=0; // | Déclenchement de l’interruption
ICI1_bit:=0; // | sur le 1er événement

Ces bits permettent de contrôler les événements, et il permet de “retarder” les interruptions en fonction du nombre d’événement choisi en agissant sur ces 2 bits. Dans notre cas, puisque ces 2 bits sont à l’état « 0 » il s’agit d’un événement et celui-ci va se produire au bout de la 4ème capture (ou 4ème front montant) puisque je le rappel nous avons régler le bit ICM sur 4 front montant.
 
Lorsque chaque front montant vont se produire sur la broche RD8 du PIC32, le 4ème front montant déclenchera l’interruption « IVT_INPUT_CAPTURE_1 » ainsi la led verte s’allumera et 1 seconde après nous viderons le buffer qu’une seule fois puisque il s’agit d’un seul événement. Attention !! Ne pas confondre l’événement et la capture.
 
Mais c’est quoi un événement ? Un événement correspond à un cycle, et on règle le nombre d’événement via le bit ICI. Reprenons l’exemple précédent. Puisque nous avons sélectionné une capture sur chaque 4ème front montant et que nous avons sélectionné 1 seul événement, il en résulte que tout les 4èmes fronts montant une interruption va se produire.
 
Je vais prendre un autre exemple afin que vous puissiez bien assimilé. Gardons toujours 4 front montant, mais cette fois-ci réglons les bits ICI afin d’obtenir 3 événements ! ! Cela nous donnerais ceci en termes de programmation :

ICI0_bit:=0; // | Déclenchement de l’interruption
ICI1_bit:=1; // | sur le 3ème évenement

Il en résulte qu’il faudra 12 front montant pour déclencher l’interruption
– 1er événement = 4 front montant;
– 2ème événement = 8 front montant;
– 3ème événement = 12 front montant;

4 événements et 4 fronts montants encore un exemple!


Continuons sur un autre exemple tout en gardant le même schéma électronique. Ici le programme qui va suivre est réalisé sur 4 événements et 4 fronts montants. Je vous laisse lire le programme qui va suivre. Notez que le buffer est vidé 4 fois!!

ICI0_bit:=1; // | Déclenchement de l’interruption
ICI1_bit:=1; // | sur le ‘ème événement

Ces bits permettent de contrôler les événements, et il permet de “retarder” les interruptions en fonction du nombre d’événement choisi en agissant sur ces 2 bits. Dans notre cas, puisque ces 2 bits sont à l’état « 0 » il s’agit d’un événement et celui-ci va se produire au bout de la 4ème capture (ou 4ème front montant) puisque je le rappel nous avons régler le bit ICM sur 4 front montant.
 
Lorsque chaque front montant vont se produire sur la broche RD8 du PIC32, le 4ème front montant déclenchera l’interruption « IVT_INPUT_CAPTURE_1 » ainsi la led verte s’allumera et 1 seconde après nous viderons le buffer qu’une seule fois puisque il s’agit d’un seul événement. Attention !! Ne pas confondre l’événement et la capture.
 
Mais c’est quoi un événement ? Un événement correspond à un cycle, et on règle le nombre d’événement via le bit ICI. Reprenons l’exemple précédent. Puisque nous avons sélectionné une capture sur chaque 4ème front montant et que nous avons sélectionné 1 seul événement, il en résulte que tout les 4èmes fronts montant une interruption va se produire.
 
Je vais prendre un autre exemple afin que vous puissiez bien assimilé. Gardons toujours 4 front montant, mais cette fois-ci réglons les bits ICI afin d’obtenir 3 événements ! ! Cela nous donnerais ceci en termes de programmation :

Programme disponible aussi en MikroC

program PIC32_Input_Capture;

var
ViderBufferLecture1,ViderBufferLecture2,ViderBufferLecture3,ViderBufferLecture4:word;
 
procedure init;
begin
AD1PCFG := $FFFF; // Utilisation des entrées en numériques
TRISB := $0000; // Les broches du PORTB sont configurées en sorties
LATB := $0000; // Initialise toutes les sorties du PORTB à l’état logique BAS
PORTB :=$0000; // ON fixe les sorties à l’état zéro
 
TRISD8_bit:=1; // La broche du PORTD.8 est configurée en entrée
LATD := 0; // Initialise toutes les sorties du PORTD à l’état logique BAS
 
EnableInterrupts(); // Activations des interruptions IVT
 
ON__IC1CON_bit:=1; // On active le module de Capture 1
//IC1CON := $83E3; // la même chose en HEX
//IC1CON := 00000000000000001000001111100011// et en BIN
 
SIDL_IC1CON_bit:=0; // Mode continu
FEDGE_bit:=1; // Capture sur front montant
C32_bit:=0; // mode 16 bits Timer 2 uniquement
 
ICTMR_bit:=1; // Timer 2
 
ICI0_bit:=1; // | Déclenchement de l’interruption
ICI1_bit:=1; // | sur le 4ème événements
 
ICM0_bit:=0; // |
ICM1_bit:=0; // | ICM réglé sur 4 fronts montant
ICM2_bit:=1; // |
 
IC1IE_bit:=1; // On active les interruptions sur les captures
 
IC1IP0_bit:=1; // |
IC1IP1_bit:=1; // | Capture 1 sur le niveau 7
IC1IP2_bit:=1; // |
end;
 
procedure Capture_1();
iv IVT_INPUT_CAPTURE_1; // entrée RD8 pour la capture 1
ilevel 7;
begin
 
begin
LATB.1:=1; // Une interruption survient
delay_ms(1000); // On attend un peu avant de lire le buffer
// Lecture du Buffer pour effacer l’interruption
ViderBufferLecture1:=IC1BUF; // 1ère lecture pour effacer la 1er évenement de capture
ViderBufferLecture2:=IC1BUF; // 2ème lecture pour effacer la 2ème évenements de capture
ViderBufferLecture3:=IC1BUF; // 3ème lecture pour effacer la 3ème évenements de capture
ViderBufferLecture4:=IC1BUF; // 4ème lecture pour effacer la 4ème évenement de capture
delay_ms(1000); // On attend un peu avant la fin de la lecture
LATB.1:=0; // La capture et la lectrue est fini
end;
 
begin
if ICBNE_bit=1 then //ICBNE reste à 1 temps que le buffer n’a pas été lu
begin
LATB.4:=1;
end;
end;
 
begin
if ICBNE_bit=0 then // buffer (FIFO) vidé
begin
LATB.4:=0;
end;
end;
IFS0:=0; // La remise à zéro du drapeau permet de sortir de l’interruption
end;
 
begin
init;
while true do
begin
// On ne fait rien dans le programme principal
end;
end.

Comment Allumée la led rouge?

êtes vous posé la question concernant la led rouge? et bien si vous voulez quelle s’allume reprenez le code ci-dessus et supprimer juste cette ligne:

ViderBufferLecture4:=IC1BUF; // 4ème lecture pour effacer la 4ème évenement de capture

Mais pourquoi elle s’allume maintenant Et bien comme dis précédemment sur 4 événements il faut vider 4 fois le buffer tout simplement 😉

Historiques


– 10/02/18
Programmation disponible aussi en MikroC.
– 03/02/18
Première mise à disposition.

Dernière mise à jour le 10/02/18

Présentation


Vous allez me dire que c’est la même chose que le timer1 ?? Oui mais non je vous assure que celui-ci est encore plus performant. En effet, celui-ci permet de combiner le Timer3 pour obtenir 32 bits plutôt que 16 bits, voilà cette différence alors que je tiens à le vous rappeler, le Timer1 comme le Timer2 ne fait que 16 bits …
 




 
L’exemple qui va suivre utilise le Timer2 sur 16 bits, et va permet de faire clignoter 2 leds toutes les secondes. La led verte représente le programme principal, et la led rouge le programme d’interruption.

Schéma PIC32 Interruptions Timer2


Programme PIC32 Interruptions Timer2


Programme disponible aussi en MikroC

program PIC32_Interruptions_Timer2;
 
procedure init;
begin
AD1PCFG := $FFFF; // Utilisation des entrées en numériques
TRISB := $0000; // Les broches du PORTB sont configurées en sorties
LATB := $0000; // Initialise toutes les sorties du PORTB à l’état logique BAS
PORTB :=$0000; // On fixes les sorties à l’état zéro
 
EnableInterrupts(); // Activations des interruptions IVT
 
ON__T2CON_bit:=1; // On active le timer 2
 
SIDL_T2CON_bit:=0;
 
TCKPS0_T2CON_bit:=1; // |
TCKPS1_T2CON_bit:=1; // | prescaler sur 256
TCKPS2_bit:=1; // |
 
T32_bit:=0; // Timer2 config sur 16 bits
 
TCS_bit:=0; // Horloge interne (Quartz OSC1 et OSC2) 8MHZ
 
T2IE_bit:=1; // On active les interrutpions du Timer2
T2IF_bit:=0; // Drapeau d’interrutpion baissé
 
T2IP0_bit:=1; // |
T2IP1_bit:=1; // | pritorité 7 de l’interruption du timer 2
T2IP2_bit:=1; // |
 
TMR2:=$0000; // Le réglage à zéro le Timer2 c’est mieux pour commencer…
 
end;
 
procedure Timer2();
iv IVT_TIMER_2; // Interrutpion timer3 priorité 7
ilevel 7;
begin
if T2IF_bit=1 then //T2IF représente les 256 coups d’horloge du timer2
begin
delay_ms(1000);
LATB.4:=1; // Led rouge allumée interruption en cours…
LATB.1:=0; // Led verte éteinte programme principale arrêté
delay_ms(1000);
LATB.4:=0; // Led rouge éteinte fin de l’interruption
T2IF_bit:=0; // On sort de l’interruption
end;
end;
 
begin
init;
while true do
begin
LATB.1:=1; // Led verte allumée programme principale en cours…
end;
end.

Ce programme est fonctionnel, mais vous avez remarquez que j’ai utilisé des tempos de 1 seconde pour ralentir l’interruption qui occasionne par la même occasion le ralentissement du programme principal (led verte). C’est façon de faire n’est pas très élégante mais cela vous donne un premier aperçu de l’utilisation des interruptions du Timer2.
 
Nous allons voir maintenant comment utiliser le Timer2 et le Timer3 afin de pouvoir compter sur 32 bits. L’exemple qui va suivre permet de fair clignoter les 2 leds à la secondes

Programme PIC32 Interruptions Timer2 Timer3


Programme disponible aussi en MikroC

program PIC32_Interruptions_Timer2_Timer3;
 
procedure init;
begin
AD1PCFG:=$FFFF; // Utilisation des entrées en numériques
TRISB:=$0000; // Les broches du PORTB sont configurées en sorties
LATB:=$0000; // Initialise toutes les sorties du PORTB à l’état logique BAS
PORTB:=$0000; // On fixe les sorties à l’état zéro
 
EnableInterrupts(); // Activations des interruptions IVT
 
ON__T2CON_bit:=1; // On active le Timer2
 
TCKPS0_T3CON_bit:=0; // |
TCKPS1_T3CON_bit:=0; // | Timer3 réglé prescaler à 1:1
TCKPS2_T3CON_bit:=0; // |
 
T32_bit:=1; // Mode 32 bits (Timer2 + Timer3)
 
T3IP0_bit:= 1; // |
T3IP1_bit:= 1; // | Priorité 7
T3IP2_bit:= 1; // |
 
T3IF_bit:= 0; // On met le drapeau à zéro (Pas d’interrutpion)
T3IE_bit:= 1; // On active les interrutpion du Timer3
 
TMR2:= 0; // On commence à compter à partir de zéro
TMR3:= 0; // On commence à compter à partir de zéro
PR2:= 47300;
PR3:= 1220;
 
LATB.4:=1;
LATB.1:=0;
end;
 
procedure Timer2();
iv IVT_TIMER_3; // Interrutpion timer3 priorité 7
ilevel 7;
begin
if T3IF_bit=1 then //T3IF est à 1 lorsque Timer2/3 égale PR2/PR3
begin
LATB.4:= LATB.4 xor 1; // Led rouge
LATB.1:= LATB.1 xor 1; // Led verte
T3IF_bit:=0;
end;
end;
 
begin
init;
while true do
begin
// On ne fait rien
end;
end.

Dans ce nouveau programme apparait PR2 et PR3, qui sont des bits qui permettent de fixer une valeur pour que celle-ci soit comparée par rapport à la valeur du comptage des Timer2/3. Lorsque la valeur PR2 et PR3 sera égale à la valeur du Timer2/3 nous obtiendrons une interruption.

Dans ce mode de 32 bits, en associant le Timer 2/3 celui-ci compte de 0 à 4294967295. Ce qu’il faut comprendre c’est que le Timer2 compte sur 16 bits, et le Timer 3 compte aussi sur 16 bits et la somme des 2 formes un compteur de 32 bits. Le Timer2 compte de 0 à 65535 et quand il arrivera à 65535 il incrémentera le Timer3. De nouveau le Timer recompte de 0 à 65535 et arrivé à 65535 il va de nouveau incrémenter le Timer3 soit deux incrémentations obtenu au Timer3. De nouveau on recommence le cycle le Timer2 terminer de compter et le Timer3 s’ incrémente une 3ème fois etc … etc….
 
La question est : Quelles sont les valeurs à donner à PR2 et PR3 pour que les leds clignotent toutes les secondes avec un CPU qui tourne à 80 Mhz et un prescaler de 256? Et bien facile !!! PR2= 47300 et PR3 = 1220 !!!
 
Bon ok !! Je vous vois venir ! comment fait-on pour calculer ?
Soit vous utilisez la solution la plus facile, et qui est de télécharger sur le site de Mikroe le « Timer Calculator » à cette adresse :
https://libstock.mikroe.com/projects/view/398/timer-calculator
 
Ou bien vous jouez de la calculette à savoir que vous allez tronquez les chiffres qui sont situé après la virgule afin de simplifier au maximum !

Calculatrice au secours!!!


Le Timer2 comme le Timer3 est cadencé à une vitesse de 80 Mhz soit toutes les 0,01micro-seconde. Imaginer vous que toutes les Microsecondes le Timer2 incrémenter de 1 cela va très vite, et il aura donc mis 820 microsecondes pour arriver à 65535. Dans ce cas le Timer2 une fois terminé de compter va incrémenter le Timer3, et le cycle recommence. On obtient quelque chose du genre:
 
– 1er tour de comptage pour le Timer2 = 65535 + 1 (incrément) pour le Timer3 total = 65536
– 2ème tours de comptage pour le Timer2 = 2×65535 + 2×1(incrément) pour le Timer3 total = 131072
– 3ème tour de comptage pour le Timer2 = 3×65535 + 3×1(incrément) pour le Timer3 total = 196608
– etc…

Calculs

D’une manière général on peut démontrer par cette formule que :

PR3 = x*F/(Prescaler*65536)
PR2 = (x*F)[1/Prescaler – PR3*65535]

x : le temps que l’on souhaite obtenir en seconde ;
F : la fréquence en Hz (ici 80 000 000 hz)
Prescaler : ici dans notre exemple il est de 1 : 1 pour notre programmation
 
En valeur numériques cela nous donne :

PR3 = (1*80 000 000)/[(1/1)*65536] = 1220,703125 soit 1220 par arrondi.
PR3 = 1220

PR1 = (1*80 000 000)[1/(1/1)-( 1220*65535)] = 47300
PR2 = 47300

Lorsque le PR3 aura atteint 1220 coup d’horloge via le Timer3, il faudra ensuite attendre que PR2 soit arrivé à 47300 coup d’horloge via le Timer2 ce qui entrainera dans la foulé la mise à 1 du bit T3IF et donc une 1 interruption.

Historiques


– 10/02/18
Programmation disponible aussi en MikroC.
– 03/02/18
Première mise à disposition.

1 2 3 20