IdMax Logiciel de programmation graphique des microcontrôleurs PIC
LogiPic

Accueil | Forum | Réalisations | Téléchargement | Coach | Aide | Livre d'or | Liens | Dons

Les réalisations

2 Channels Data Recorder
Thermomètre hygromètre Vu mètre II Mesure de la longueur d'un signal de réception issu de télécommande de modèle réduit
Fréquence mètre Grid Dip Horloge DCF
Horloge Pic Timer Calculator Affichage HH:MM:SS
Ecran LCD Eeprom I2C Servo
Vu mètre Alarme d'habitation Sécateur électrique
Interface infrarouge RobotProg A7S





2 Channels Data Recorder

2ChDataRecorder

J'ai réalisé un nouveau projet à base d'un pic 16F88 qui, je pense, intéressera plus d'un, enfin... j'espère.

Il s'agit d'une sorte d'oscilloscope à double trace mais destiné à la mesure de signaux plus lents non observables sur un oscilloscope classique. Les tensions à mesurer doivent être des tensions continues (variation entre 0 et Vcc), pas question donc de vouloir observer une sinusoïde avec des crêtes négatives, on ne verrait dans ce cas là que l'alternance positive. On peut toutefois mesurer des signaux TTL à partir de 100 mS sur la base de temps de 1 Sec. Je prévois de développer un oscilloscope prochainement mais je suis encore nulle part. Comme sur un oscilloscope, il y a une base de temps qui s'étend de 1 Sec jusqu'à 100 sec/Division. L'écran du scope possède 30 divisions ce qui permet des mesures de 30 sec jusqu'à 3000 sec. Il y a également un combinateur pour chaque circuit d'entrée. Les tensions peuvent aller de 100 mV à 2 volts/division, ce qui correspond à des mesures pouvant aller de 1 volt à 20 volts pour les 10 divisions du scope. Pour changer la position du combinateur, il suffit de cliquer sur la valeur indiquée tout autour du combinateur. Pour Time/Div par exemple, pour passer à 5 S/Div, cliquez simplement sur le chiffre 5 et le combinateur de positionnera automatiquement. C'est pareil pour les combinateur Volts/Div. Dans la partie Volt/Div, on remarquera 2 petits poussoirs gris. Ces poussoirs permettent d'afficher ou non la trace du canal concerné. Le poussoir n'agit que sur le canal sélectionné. Un réglage de la position horizontale permet de déplacer la trace, surtout utile lorsqu'on travaille en mode zoom de même que le réglage de la position verticale pour chacun des canaux d'entrée. Ce réglage de la position verticale peut être utile lorsqu'on a deux signaux presque identiques, on peut donc soit les séparer soit les superposer. On peut trouver à gauche de l'écran, 4 boutons poussoirs, "Trace", "Réticule", "Marqueur" et "Zoom". Le bouton "Trace" permet d'augmenter l'épaisseur de la trace du scope, utile surtout lorsqu'on veut imprimer le graphique. Le bouton "Réticule" permet d'avoir un réticule plus clair ou plus foncé. Le bouton "Zoom" multiplie par 10 la largeur du tracé, c'est un peu comme si on divise par 10 la valeur de la base de temps. J'ai gardé le bouton "Marquer" pour la fin. Suivant la position du poussoir, lorsqu'on clique sur l'écran du scope, on peut placer des marqueurs, soit pour mesurer le temps entre 2 points soit pour mesurer la tension entre 2 crêtes. La couleur du marqueur temps est rouge, pour les tensions la couleur est bleue. Au premier clic sur l'écran on positionne le premier marqueur, au deuxième clic on positionne le deuxième marqueur. Au troisième clic on efface les marqueurs. Les marqueurs s'efface également lorsqu'on change la position du poussoir, même si l'on a placé qu'un seul marqueur. Sous l'écran du scope il y a un bouton "CLS", comme on l'aura deviné, il sert simplement à effacer la trace su scope, mais l'écran s'efface de toute façon à chaque nouvelle acquisition. A droite de l'écran, 4 boutons. "Communication : Ouvrir et Fermer". Ces 2 boutons ouvrent ou ferment la communication entre le pic et le pc. La détection du port est automatique. Si le programme ne détecte pas l'appareil il le signale. Enfin, les 2 boutons "Acquisition : Démarrer et Arrêter" permettent de démarrer ou d'arrêter la mesure. Normalement l'acquisition s'arrêtera automatiquement en fin d'écran, le bouton "Arrêter" pouvant être utile lorsqu'on veut interrompre la mesure avant la fin du cycle, par exemple lors d'une mesure relativement longue. En haut de l'écran il y a une barre de menu avec à gauche "Fichier". Par ce menu il y a possibilité d'ouvrir un fichier, d'enregistrer un fichier, d'enregistrer l'image du scope ou de l'imprimer. Il y a aussi un aperçu avant impression. Pour l'aperçu ne pas craindre de maximiser la fenêtre, en effet la fenêtre s'ouvre en taille réduite. On trouve enfin, dans ce même menu l'option "Quitter" pour quitter et fermer l'application. Dans le programme d'installation j'ai inclus un fichier avec un signal 1,2 sec issu du timer d'un pic alimentant une led. Le signal du haut représente la mesure effectuée en sortie du port du pic, le signal du bas représente le signal prélevé sur une led branchée sur ce même port. Ce fichier est juste un exemple et se trouve dans le dossier où l'on a installer le programme.. Lorsqu'on enregistre un fichier, tous les paramètres des réglages sont sauvés également, base de temps, position des traces, Volts/div. Juste une petite remarque concernant la réalisation du circuit imprimé... la ligne de masse est très importante, surtout pour les mesures de signaux faibles, c'est pour cette raison que j'ai réalisé le circuit principal en double face avec des lignes de masse relativement importantes. Le programme du pic ne demande pas beaucoup d'explication. Le programme pc est prévu pour Windows XP, Vista et Windows 7, 32 ou 64 bits. Je n'ai pas eu l'occasion de tester avec Windows 8. J'ai du apporter une petite modification récente au programme du pc car il y avait une légère différence entre la version XP et Windows 7, la position des marqueurs était différente d'une version à l'autre. Autre détail concernant la réalisation: la communication est RS232 mais dans mon schéma j'ai opté pour un adaptateur USB/UART. J'ai trouvé 2 types d'adaptateur, soit un FTDI FT232RL soit un Prolific PL2303. Avant de pouvoir utiliser le Data Recorder il faut avoir installé les drivers correspondant au type d'adaptateur sélectionné. Je peux fournir les drivers pour ceux qui auraient des difficultés à se les procurer. On peut les trouver facilement sur internet mais il faut choisir le site officiel du fabricant, donc soit FTDI soit Prolific. Pour l'adaptateur Prolific, il n'est pas compatible jusqu'à présent avec Windows 8. A la place d'un adaptateur USB/UART il est bien sûr possible de faire la communication avec un circuit basé sur un MAX232 qui se connectera alors sur un port com normal. Je fournirai un schéma pour ce type de branchement. Il ne faudra pas dans ce cas installer de driver. Avant d'installer le programme pc il faut avoir au préalable avoir installé 2 autres programmes de Microsoft, le système fonctionnant sous Net Framework 4. J'ai inclus les programmes également, il s'agit de Microsoft Net Framework Client Profile (Fichier: doNetFx40_Client_Setup) et de Microsoft Visual Basic PowerPacks 10.0 (Fichier: VisualBasicPowerPacksSetup). Ces 2 fichiers proviennent du site officiel de Microsoft. Pour ceux qui disposent de Visual Basic Express 2010 (ou supérieur) ils ne doivent pas installer ces 2 fichiers. Pour ceux qui, lors de mises à jour de Windows, ont déjà installé Net FrameWork 4, ils ne doivent pas installer le premier fichier. Voilà, un peu long et d'apparence compliquée mais tout le monde verra qu'à l'utilisation c'est beaucoup plus simple. Je joints une copie d'écran avec quelques détails suplémentaires, un petit dessins vaut mieux que de longues explications.
Cordialement
 
Michel Leclère
2ChDataRecorder
Thermomètre - Hygromètre

Vumètre 2

J'ai réalisé un nouveau projet à base d'un pic 16F88 qui, je pense, intéressera plus d'un, enfin... j'espère.

Il s'agit d'un thermomètre-hygromètre. Le thermomètre est assez banal, construit autours d'un LM35DZ qui est plus un thermomètre d'ambiance pour appartement, sa gamme de mesure allant de 0° à 50°C. Je crois que c'est suffisant pour l'intérieur. La partie hygromètre m'a pris pas mal de temps à mettre au point et peux paraître complexe à première vue. La construction est en fait assez simple, le réglage est par contre plus délicat mais pas insurmontable. L'électronique mis en oeuvre m'a permis de simplifier grandement le programme.  Je mettrai un commentaire sur le site pour les réglages si tu juges que le projets vaut la peine d'être mis en ligne.
Comme d'habitude je te joints les schémas, le programme et quelques photos du projet terminé.
 
Cordialement
 
Michel Leclère

ThermHygr
Vu Mètre II

Vumètre 2

Je t'envois un projet qui n'est pas une nouveauté en soi mais plutôt une modification du vumètre déjà mis en ligne.
Il n'y a pas de changement au niveau de l'ampli d'entrée, la modification n'étant que du module d'affichage. J'ai voulu en effet montrer que l'on peut parfaitement gérer les afficheurs graphiques avec Logipic. J'ai choisi ici un modèle très courant, un 128x64 à backlight bleu et caractère blancs mais d'autres modèles peuvent aussi convenir, il faut juste s'assurer de la compatibilité du brochage. La taille du circuit imprimé peut paraître un peu exagérée par rapport au nombre de composants mais j'ai voulu l'adapter à la taille de l'afficheur lui même pour des raisons de facilité.
Pour le µcontrôleur, j'ai gardé un 16F870 mais on peut très bien utiliser le programme pour un 876 ou un 877. Pour d'autres pic il faudra adapter en fonction de l'initialisation du pic lui même.
Je te mets en pièce jointe quelques photos ainsi que le programme.
Amicalement
Michel
VuMetre2.rar
Mesure de la longueur d'un signal de réception
issu de télécommande de modèle réduit


Titre


Le but de ce petit programme est de mesurer la longueur d’un signal de récepteur de télécommande de modèle réduits et le traiter à la convenance pour des applications  diverses tel que des sorties en tout ou rien pour commander un relais de puissance, un moteur électrique, des éclairages ou comme pour moi des inflammateurs d’artifices.

Les signaux issus des récepteurs actuels sont en principes de même forme et de même longueur pour une même position de l’organe de comme attitré à la voie sur l’émetteur.

Dans une période de 20 ms (50 Hz)  ce signal varie de 650 à 2400 µs selon la  position de l’organe de commande de la voie de l’émetteur et de la programmation de la largeur du signal dans l’émetteur si celui-ci est doté de cette fonction, qui fera que l’appareil branché sur cette voie du récepteur variera de position pour un servo, de vitesse pour variateur ou régulateur ou d’état tout ou rien pour un train rentrant, un éclairage etc.

Voyez aussi le programme et réalisation  très intéressante de Michel LECLERC  intitulé ‘Servo’ dans la rubrique ‘Vos programmes’.

C’est cette dernière fonctionnalité qui sera traitée dans cette application. Il s’agit de mettre l’une après l’autre des 4 sorties du port GP (PIC 12F675) à 1 pendant 0.25s par l’action d’un front montant sur l’entrée GP2 configurée interruption.

Le programme démarre par la mise à zéro des différentes variables et drapeau suivit de l’initialisation du port GPIO permettant de modifier le registre de ce port non seulement en sorties  mais aussi en entrées. Hors du commun, le port GP du PIC 12F675 est par défaut constructeur configuré en entrée Analogique !

Merci à Michel LECLERC de m’avoir aider à éclaircir de cas particulier.

Puis la valeur analogique de la longueur du signal traiter en mode interruption, est comparée à une valeur pour décider des fonctions suivantes.

Le but est de modifier les sorties GP0-1-3-4 pendant 0.25s à chaque passage au-delà de la valeur de comparaison (25 pour ce cas, >50% su signal).

La mesure de la longueur du signal est réalisée dans les sous programme en interruption sur GP2 (GP2_INT). Lors du front montant la valeur ‘Mesuresignal’ est incrémentée toutes les 50µs ce qui donnera une valeur représentative de la longueur du signal et enfin une valeur de comparaison ‘Valeursignal’. Pas compliqué n’est ce pas!

Pour les développeurs voulant plus de précision dans cette mesure réduiront cette temporisation de 50µs au plus court par des NOP(s) pour aller à des valeurs > à 255 en optant pour un mot de plus de 8 bits.

J’ai réaliser une application sur ce thème voir la photo.

Le programme :

·        Commutateur 4 voies de télécommande 12F675.prj

Je répondrai à toutes questions relatives à ce sujet sur le forum.

Cordialement.

L’Arsène.

Télécommande.zip
Fréquence mètre

Frequ1Frequ2Frequ3


Bonjour,
Il s'agit d'un fréquence mètre à pic 16F870 dont la gamme de mesure va de 1HZ jusqu'à 1,1GHz avec une sensibilité d'entré de 10mV sur toute les gammes. Il y a 5 modes de fonctionnement que l'on peut sélectionner par pression sur un bouton poussoir, la sélection étant séquentielle. Un premier programme effectue l'affichage sur un écran LCD mais il y aura possibilité de connecter le fréquence mètre à un PC, la connectique est prévue sur le schéma mais le programme est encore en cours de développement, il faudra donc patienter un peu pour cette possibilité. Il est parfaitement adapté au Grid Dip.
Ci- joint les schémas, circuits imprimés et le premier programme ainsi que quelques photos. Les schémas des différents étages sont séparés pour une meilleure lisibilité.
Certains circuits imprimés sont à double face, ce qui rend sans doute le projet moins facile à réaliser pour certains mais j'ai prévu un tracé de piste suffisamment large pour le rendre plus accessible.
Amicalement
Michel
 
Frequ_LCD.zip
Grid Dip

GridDip

Bonjour,
 
Après une longue absence voici un nouveau projet... un Grid Dip, ou plutôt un Dip Mètre puisqu'il n'y a plus de "Grid" dans le montage..  un peu banal mais la particularité ici c'est que l'affichage s'effectue par pic sur un lcd 2x16 caractères.
 
Juste avant de commencer... ce montage, d'apparence simple, exige une certaine expérience en électronique et une extrême propreté lors de la réalisation des circuits imprimés, il s'agit quand même de HF. Les liaisons doivent être courtes, il ne faudrait pas qu'une piste fasse antenne et ne vienne à polluer les récepteurs radio du voisinage. Une fois le circuit imprimé de l'oscillateur terminé, il est préférable de recouvrir le côté piste avec un verni HF. Ne faire les tests qu'un fois le verni absolument sec.(Certains vernis acryliques peuvent convenir aussi mais vaut mieux faire des essais).
 
J'ai du faire beaucoup de tests, ce qui explique un peu mon absence ces derniers temps mais j'ai eu du mal à arriver à ce que j'attendais. Après avoir démarré avec un oscillateur à FET, puis à Dual Gate MOS-FET afin d'obtenir un oscillateur qui maintient son oscillation sur une très large plage de niveau, je suis enfin arrivé à ce que j'attendais. Ma dernière version fonctionne avec un oscillateur de type Colpitts construit autour d'un transistor NPN prévu pour des fréquences pouvant aller jusque 1GHz. Avec les éléments du montages, j'ai pu le tester jusqu'à 200MHz. C'est un montage classique avec quelques filtres en plus afin de réduire la distorsion.
 
Un affichage LCD 2x16 caractères s'effectue au travers d'un pic 16F88 qui fonctionne avec l'oscillateur interne à la fréquence de 8 MHz. La première ligne affiche le niveau de l'oscillateur HF ( entre 0 et 255) et la 2ème ligne est un barre graphe qui sert à déterminer le Dip. Ce barre graphe est très sensible (20mV par barre) ce qui permet de bien visualiser lorsque l'oscillateur transmet sont énergie. L'indicateur de la première ligne sert en fait à faciliter la mise à niveau du barre graphe qui devrait être compris entre 16 et 20. Il faut donc régulièrement ajuster le niveau de l'oscillateur.
 
Pour ce qui est de la fabrication des bobines, rien de très compliqué, il suffit d'être très soigneux et de ne pas vouloir faire trop de spires en une fois, surtout pour les bobines comportant beaucoup de spires.
Sur une des photos on peut voir 9 bobines réalisées, elles vont de 1,3 MHz jusqu'à 250 MHz. Pour les couleurs c'est pas difficiles, je suis allé dans une grande surface, au rayon papeterie et j'ai acheter des magicolor pour enfants. J'ai choisi un étuis avec toute une gamme de couleurs et d'un diamètre de 12mm.
Une fois le manchon récupéré et coupé à mesure (j'ai choisi 70 mm de longueur), il suffit de bobiner le nombre de spires voulu et de recouvrir la bobine terminée par de la gaine thermo rétractable transparente, une fiche CINCH étant chassée à l'intérieur d'une extrémité. Les bobines sont effectuées à l'extérieur du mandrin et les fils passent par l'intérieur afin de les souder ensuite sur la fiche CINCH.
(Petite astuce pour la gaine thermo rétractable: les manchons en plastique étant très sensibles à la chaleur, évitez de chauffer trop, ce qui déformerait le mandrin de la bobine. Une fois ma bobine terminée, j'enfile la gaine autours du mandrin et je plonge le tout dans l'eau bouillante pendant 5 à 10 min. Quand la gaine est suffisamment serrante je passe au four  à 100° pendant un bon 1/4 d'heure puis je laisse refroidir au four. Ne pas chauffer plus fort sinon vous retrouverez une pâte difforme qui ne ressemblera plus à une bobine. Le résultat final est absolument impeccable).
.
Je joints, comme d'habitude, les schémas, le programme et quelques photos, c'est toujours plus parlant de voir le résultat terminé. Je n'ai pas prévu de cadran avec les fréquences mais je compte développer prochainement un fréquencemètre, à pic of course, qui affichera directement la fréquence de l'oscillateur HF. J'ai quelques idées mais il faudra que je fasse monter ce fréquencemètre à au moins 250 MHz. Il faudra donc un peu de patience, je n'ai pas encore fait de maquette.
 
Pour la fabrication des bobines, je donne ici les valeurs pour les 9 bobines que j'ai réalisées chez moi. J'ai été surpris de voir que les valeurs mesurées étaient très proches des valeurs calculées.
 
Bobine #1 : 200 spires - fil cuivre 0,2 mm     1,37 - 2,96 MHz
           #2 : 100                         0,3            2,45 - 5,31
           #3 :  42                          0,3            4,13 - 8,94
           #4 :  20                          0,4            7,40 - 16,00
           #5 :  10,5                       0,6            13,21 - 28,58
           #6 :    5                          0,6            23,02 - 49,80
           #7 :    2,5                       0,6            39,89 - 86,31
           #8 :    1,5                       0,6            62,17 - 134,50
           #9 :    1                          1,0            119,20 - 257,89
 
 
L'aboutissement de ce projet étant aussi de lui adjoindre un fréquencemètre. Et puis, qui sait, cet appareil un peu rétro quant à l'idée, peut sans doute éveiller un petit intérêt auprès de certains.
 
à bientôt
 
Michel
 
DipMeter.prj
Photos
Display_V32_Lay.JPG
Display_V32_Sch.JPG
Osc_V32_Lay.JPG
Osc_V32_Sch.JPG
Horloge DCF
Horloge DCF

schéma

L'Arsène
Horloge_DCF.zip
Horloge

Horloge

Bonjour
 
Après l'exemple de l'utilisation du Timer1 posté récemment, j'ai pensé qu'une application plus concrète serait peut-être la bienvenue. J'ai donc très vite pensé à l'étude d'une horloge. Puis je me suis dit que ça ne serait pas trop mal d'y ajouter le jour, le mois et l'année. Le tout fonctionne avec 2 oscillateurs, donc 2 quartz distincts, et avec le Timer1 en mode asynchrone.
Voici donc le résultat final de cette étude. J'ai essayé d'y introduire quelques routines qui faisaient l'objet de discutions récentes sur le forum, comme par exemple l'affichage selon le format "00:00:00". J'ai également ajouté une routine d'inversion de bits d'une variable ainsi que l'inversion simultanée de plusieurs bits d'un port. Il y a aussi quelques données en Flash.
Le programme est relativement complexe, je ne peux que recommander, à ceux qui seraient tenté d'y apporter quelques modifications, de d'abord tester le programme tel quel.
J'ai ajouté un fichier explicatif, au format pdf, pour ce qui concerne les réglages, mais rien de vraiment très compliqué.
 
Rien de spécial à dire de plus, juste que, mais je le dis dans le fichier explicatif, la partie calendrier tient compte des jours du mois et également des années bissextiles. Il y a également la possibilité de passer à l'heure d'été ou d'hiver par simple pression sur un bouton poussoir. J'ai choisis une led bicolore Rouge/Bleu pour le clignotement des secondes. Elle clignote en rouge en mode "été" et en bleu en mode "hiver"... juste pour me faire plaisir.
Je n'ai pas encore de circuit imprimé à proposer, juste un cliché de la maquette. (Sur ce cliché j'utilise un oscillateur 20MHz mais pour ma 2è maquette je l'ai remplacé par un quartz standard de même fréquence).
 
Juste pour ceux qui ne dispose pas du fichier pic du 16F870, il est disponible dans la rubrique "téléchargement/fichiers pic/ mise à jours des fichiers pic".
 
 
à bientôt
 
Michel

 
Clk_870b.JPG
Clk_TMR1.prj
ClkCal_Sch.jpg
ClockCal.pdf
Pic Timer Calculator

PicTimerCalc

Bonjour Idmax,
 
Encore un petit programme lié à Logipic...
 
Il existe sur le site un programme PicTimerCalc que je trouve très pratique mais malheureusement assez incomplet. Je te propose en pièce jointe un nouveau programme (setup.exe) avec quelques ajoutes comme TMR0 et TMR1 ainsi que la possibilité d'avoir un plus large éventail de quartz comme par exemple un 32,768 KHz. Il existe aussi un registre TRM2 mais je l'utilise pas, le paramétrage de PR2 me paraissant suffisant. (Ceci est un avis tout à fait personnel).
Rien de particulier à dire concernant le programme, à part peut être qu'il existe 2 champs dans lesquels on peut introduire manuellement des données. Ces champs sont "Fréquence du quartz" et le champs grisé TMR1 qui se trouve dans l'onglet "Timer1"
Pour la fréquence du quartz il faut introduire des valeurs numériques uniquement, valeur en MHz. Pour 4MHz on introduit 4, c'est logique. Si l'on veut un quartz avec des décimales, comme un 4.096MHz, il est permis d'utiliser le "point" comme séparateur, on introduit donc "4.096". La valeur est fixée par défaut sur 20MHz quand on démarre le programme.
Pour le TRM1, on peut introduire manuellement toutes valeurs comprises entre 0 et 65535. Si l'on essaye d'introduire une valeur plus grande, celle ci sera ramenée automatiquement à 65535.
Il ne faut pas essayer de placer des valeurs dans les autres champs, ceux de couleur bleue. Utiliser pour cela les curseurs. ceux ci se déplacent à droite ou à gauche.
On peut également, une fois le curseur sélectionné ( on le sélectionne en cliquant dessus), faire les déplacements à l'aide du clavier, flèche gauche ou droite pour les petits pas et PageUp et PageDown pour les grands pas. Les grands pas peuvent également être effectués en cliquant devant ou derrière le curseur de la glissière. On se rendra compte que cela est très utile quand on procède au réglage du TMR1 par exemple. Le grand pas varie d'un curseur à l'autre en fonction de sa valeur maximum, il sera de 10 pour TRM0 et de 255 pour TRM1.
Dans la partie "Résultats", les fréquences s'affichent soit en Hz soit en KHz, les durée en S, mS ou µS.
On peut remarquer aussi dans la partie Timer1 qu'il y a possibilité de travailler avec un quartz dont la valeur par défaut est fixé à 32.768KHz. Ce choix n'est possible que pour le Timer1, il est inactif pour le Timer0 et le Timer2. Je te joints également un petit programme d'exemple pour utiliser un pic qui travaille avec 2 quartz et avec le Timer1. C'est très pratique pour avoir des durées de 1 secondes, comme pour les horloges entre autre.
Je mets aussi en pièce jointe 2 schémas pour le fonctionnement du programme d'exemple. Un des schémas fonctionne avec 2 quartz standards, l'autre est un peu particulier, il fonctionne avec un oscillateur à quartz de 20MHz mais au format DIL 14 pin... juste pour ceux qui voudraient tester ce type d'oscillateur (voir photo QuOs20mhz). Le signal de sortie est beaucoup plus propre et plus stable avec ce type de composant. Le 2ème quartz est un quartz miniature, type quartz de montre.
 
Petite remarque concernant le programme d'exemple:
Tout d'abord ,j'ai mis l'init du timer dans une routine à part, ceci juste pour faciliter la compréhension.
On pourra s'étonner aussi de l'instruction qui met 0 1 le bit TMR1IE du registre PIE1. Le pic 16F628A doit avoir cette instruction sinon le timer ne se met pas en route alors qu'un 16F877A se passe très bien de cette instruction. J'ai donc décidé de conserver cette instruction quel que soit le pic utilisé, ceci uniquement pour ne pas avoir des questions à se poser en passant d'un pic à l'autre.
Et enfin, pour terminer, les valeurs des TMR sont à placer DANS le cycle d'interruption, et ceci en tout début du cycle. En effet, ces valeurs sont remise à 0 quand il y a un débordement.
 
J'espère que tout ceci pourra encore intéresser quelques acharnés des pic, je suis bien sûr ouvert à toutes remarques ou suggestions ou à éclaircir certains points qui pourraient paraître obscurs.
 
Cordialement
 
Michel
Pic Timer Claculator.zip
QuOs20mhz.jpg
Slider.jpg
TMR1.prj
TMR1_Osc.jpg
TMR1_Xtal.jpg
ViewProg.jpg
Affichage HH:MM:SS

Bonjour Idmax
 
On m'a souvent posé la question de pouvoir afficher l'heure d'une horloge, ou chrono ou autre timer sous forme HH:MM:SS en conservant les 0 non significatifs, par exemple un chrono devrait afficher 00:00:00 au démarrage.
Les durées des heures, minutes et secondes s'effectuant pas affichage de variables, les 0 d'entête sont supprimés de même que le signe. J'avais développé il y a fort longtemps déjà une petite routine qui me permettait d'afficher l'heure au format complet, pensant être le seul à vénérer cette forme. La question vient d'être reposée récemment sur le forum et ça m'a rassuré de voir que d'autres développeurs adhèrent également à cette forme d'affichage.

J'ai développé un petit programme d'exemple, court et simple pour permettre aux habitués du forum de pouvoir suivre les étapes facilement sans devoir faire une analyse dans un programme trop complexe.
Le programme est simplement un compteur au format HH:MM:SS mais il ne compte que les secondes, il s'agit plus d'un exemple que d'une application complète.
 
La méthode est la suivante:
J'ai attribué une variable V_Sec pour les secondes. Comme tous le monde l'aura deviné, cette variable est incrémentée toutes les... secondes avec remise à 0 après 59.
Pour afficher cette variable il suffit de la diviser par 10 pour isoler les dizaines et je récupère les unités par la variable système V_tmp. La valeur des dizaines est stockée dans une variable V_Tens et celle des unités est stockée dans V_Units.
J'appelle ensuite une routine qui elle même fait appel à LCDchar qui est une routine système. Cette routine affiche une variable sous forme Ascii, il faut donc ajouter 48 à V_Tens et V_Units pour pouvoir obtenir un affichage correct.
 
Par exemple je veux afficher 52:
 
1/ J'isole les dizaines  ->  52/10  = 5
2/ Je place 5 dans V_Tens
3/ Le reste de la division se trouve dans V_Tmp, soit 2
4/ Je place 2 dans V_Units
5/ Appel de la routine d'affichage
Cette routine ajoute 48 aux 2 variables afin d'obtenir le code Ascii   (Le code Ascii 48 à 57 correspondent aux chiffres 0 à 9)
 
L'avantage de cette méthode est de pouvoir afficher le 0 pour toutes les valeurs inférieure à 10, donc 5 sera affiché 05. De plus cela simplifie le calcul de la position sur l'afficheur puisque c'est la position réelle.
 
L'exemple est développé avec un 16F877A à 20MHz
Pas de remarque particulière pour le montage, c'est un montage classique avec un afficheur LCD 2x20 caractères.
Data en D4...D7
E      en E1
RS    en E0
Ne pas oublier un pull up de 4K7 sur la broche 1 (MCLR)
 
Je te transmettrai prochainement un programme complet d'un timer qui possède un affichage d'après l'exemple ci-dessus. Il sera basé sur un 16F876 à 4MHz avec bien sûr le schéma détaillé ainsi que le circuit imprimé.
 
je pense que cela intéressera quelques développeurs.

LCDChar.prj
Ecran LCD

EcranLcd


Bonjour 
Il semble quand même qu'il y ai pas mal d'intérêt sur le forum pour la gestion des écrans graphiques.
Je me permets à nouveau de t'envoyer un petit projet pour ouvrir la voie  à ceux que cela intéresseraient, mon choix c'est arrêté sur un 128x64.
Comme pour la gestion Eeprom, il ne s'agit pas ici d'un projet "clé sur porte" mais plutôt d'un exemple pour pouvoir comprendre le fonctionnement des signaux à mettre en oeuvre pour pouvoir piloter un GLCD. 
L'exemple que j'ai choisi de proposer est simplement l'affichage de caractères sur les deux parties de l'écran. La première partie est affichée en caractères vidéo normale et la deuxième partie est en vidéo inverse. Cet exemple sert aussi à montrer comment créer un générateur de caractères car ce type d'écran n'en possède malheureusement pas. J'ai logé le générateur en Flash. J'ai choisi un type de caractères très simple, 5 x 8 bits, car utilisant peu de place en mémoire. On peut bien sûr modifier ce générateur pour obtenir des caractères plus jolis et plus élaborés, voire même créer un jeux de Fonts mais j'ai voulu faire au plus simple pour l'exemple.
Je veux juste quand même préciser pour les habitués du forum que ce programme ne fait rien d'autre que d'afficher des caractères, point final. Au risque de me répéter, c'est juste pour initier ceux qui voudraient se lancer dans la gestion de ce type d'écran que je propose une approche possible sous Logipic. Je penserai peut-être prochainement à un autre programme d'exemple pour afficher des images sur le même type d'écran.
Je joints un schéma ainsi qu'une petite note explicative sous format pdf, je pense que tout le monde doit posséder chez lui Adobe Acrobat Reader. J'ai essayer de faire cette note la plus courte et la plus claire possible, ceci juste pour ne pas assommer le lecteur éventuel avec des données trop techniques. Je suis bien sûr à la disposition de tous pour des renseignements complémentaires.
Concernant le schéma, j'ai placé la broche RST au +5V à travers une résistance de 4K7. On peut éventuellement connecter cette broche sur la broche MCLR du pic pour provoquer un reset au démarrage ou encore prévoir un reset par soft en la connectant sur un des ports. On peut également prévoir un bouton reset manuel, je ne l'ai pas prévu sur le schéma.
Aussi, pour l'alimentation du backlight il y a une résistance 4E7, il s'agit de 4,7 ohms. 
Ceux qui veulent utiliser un autre pic c'est possible mais il faudra alors réécrire le programme... en pensant à modifier la routine Init en fonction du pic sélectionné.
Et pour terminer, pour ceux qui trouvent l'affichage un peu rapide... on peut prévoir l'ajout d'une ligne de temporisation dans la boucle d'affichage des caractères. Ceci permettrait de pouvoir suivre la façon dont s'affichent les octets. A voir...
 
  
128x64.pdf
GLCD.jpg
PICT0006.JPG
TestTxt2.prj
Eeprom I2C


EEI2C

Le programme démarre par l'écriture de 16 emplacements mémoire (00 à 1F) avec des valeurs comprise entre 00 et 1F également. J'ai juste fait une incrémentation de l'adresse et de la donnée. J'ai testé également en modifiant les emplacements mémoires et j'accède bien chaque fois à l'endroit voulu, on peut donc lire ou écrire à n'importe quel emplacement et cela de façon tout à fait aléatoire, même si plusieurs Eeprom sont présentes dans le montage.
Ensuite commence la lecture en boucle des données écrites, c'est une boucle sans fin.
Pour le montage test, un pic 16F877A, 8 leds montées sur le port B0...B7, quartz de 20MHz et une mémoire 24C32 en montage classique, A0..A2 à la masse de même que WP. SDA et SCL de la mémoire sur SDA et SDL du pic. J'ai testé également en changeant A0...A2 vers le +Vcc (il faut alors changer une variable dans le programme).
Le flux à été fixé à 500KHz. Pour maintenir ce débit il y a aussi une variable à changer dans le programme dans le cas où l'on veut utiliser un autre quartz. Le calculs des emplacements mémoires se fait un peu comme pour la mémoire Flash, c.à.d. avec une adresse relative, la routine se chargeant de pointer vers l'adresse réelle. L'Eeprom se remet à 0 quand on provoque un reset sur la broche MCLR
 

Les variables utilisées:
 
Eep_Address          Adresse réelle d'écriture (1010 000 0)
Eep_Data               Variable de transfert de données entre le pic et la mémoire (adressage et donnée en mode série)
DatOut                   Data Pic vers Eeprom
DatIn                      Data Eeprom vers Pic
Pollcnt                   Variable de boucle pour attente fin d'écriture
Addr_High              Adresse haute de l'emplacement à atteindre
Addr_Low               Adresse basse         "             "
I2C_Clock              Sert à déterminer le débit, prévu dans le programme pour un quartz de 20MHz.
                             Il faut changer la valeur quand on change de quartz.
 
Eep_Data et Pollcnt sont des variables utilisées par le système et ne doit pas être paramétrées.
 
Il n'y a que 3 appels de routine à faire, Init_I2C, ByteRead et Byte_Write. Il faut toujours commencer le programme par Init_I2C bien sûr sinon le reste ne fonctionne pas. Il va de soi que les variables d'adresses et de données doivent être cohérentes et paramétrées correctement.

 écran graphique 240x128

Juste pour le plaisir, je mets une photos d'un vidage Eeprom sur un écran graphique 240x128 avec la nouvelle routine I2C.
L'Eeprom est une 24C32 quasi complète, je suis plus que content de cette routine, ça faisait longtemps que j'y travaillais mais le déclic est venu suite à la discussion sur le forum.
Je ne cache pas que ça a été plutôt ardu à mettre en œuvre

M.Leclère
MSSP_V2.prj
I2C_V2.rtn
I2C_Sch.jpg
Demo240x128.JPG
Servo

Servo


Bonjour
 
J'ai encore le plaisir de te soumettre un petit projet, sans prétention aucune, mais il semble de ce sujet intéresse certains développeurs. Il s'agit de la commande de servomoteurs.
J'ai réalisé 2 projets, un à base de NE555 ( en fait j'ai utilisé un TLC555) entièrement proportionnel, l' autre à base d'un pic 16F628A dont les commandes sont réalisées par boutons poussoirs. Deux poussoirs servent à la rotation droite ou gauche, 2 autres pour adapter la vitesse de rotation et un poussoir pour le retour d'urgence au neutre.
Je te joints à la présente les schémas ainsi que quelques diagrammes des signaux. Je n'ai pas encore réalisé les circuits imprimés, le projets étant encore en cours de développement plus pointu mais je tenais déjà à en faire profiter quelques amateurs de ce genre de technique. J'ai prévu 2 types d'affichage, soit à une LED 7 segments, soit à afficheur LCD alphanumérique, 1ligne/16 caractères. Le programme est commun aux 2 possibilités d'affichage, un pontage sur le Port B5, utilisé en entrée, s'occupant de faire le branchement dans le programme.
Pour la partie technique, j'utilise le timer2 et je provoque une interruption toutes les 20mS. Pendant cette interruption j'adapte la largueur des impulsions entre 650µS et 2420µS pour amener le servo dans la position voulue. Le neutre est fixé à 1520µS par le constructeur. Les poussoirs accessible à chaque retour d'interruption. La séquence est suffisamment rapide pour que l'accès aux boutons poussoirs soit quasi permanente. Le quartz utilisé est de 4MHz ce qui permet parfaitement d'adapter le timing requis pour le fonctionnement des servos. Les signaux permettent une rotation totale de 180°. Il faut savoir cependant que certains servos tournent dans un sens alors que d'autres tournent dans le sens contraire. J'ai donc prévu 2 pontages à positionner en fonction du sens désiré. Certains servos également ont une rotation légèrement inférieure à 180°, certains tiny servo par exemple.
Bien à toi, j'espère que tu pourras mettre en ligne à l'occasion
M.Leclère
Servo.zip

Vu mètre

Vu mètre

Vu Mètre

Bonjour
 
Voici un nouveau projet d'un Vumètre basé sur un pic 16F870 et un afficheur alphanumérique.
Vous  trouverez en pièces jointes les schémas, les circuits imprimés, le programme développé comme il se doit sous Logipic ainsi que quelques photos.
Pour la calibration, j'ai opté pour un affichage en dBm, weighting C. Pour cela il suffit d'injecter un signal sinus de 1KHz sur l'entrée ligne avec une amplitude de 2,18Vpp, soit 0,78Vrms. Régler les résistances ajustables à l'entrée pour afficher les 20 caractères sur l'afficheur. Ceux qui désirent un affichage en dBV il suffit d'injecter un signal de 2,83 Vpp, soit 1Vrms. Dans le montage j'ai choisi un circuit simple, le LM386. Ce choix a été dicté par le fait de pouvoir disposer d'une écoute au casque. Lors des essais, j'ai testé également le K386 qui est environ 3x moins cher et qui donne exactement les mêmes résultats.
Juste bon à savoir... j'utilise 2 entrées A/N avec justification à gauche et je laisse tomber les 2 bits de poids faible, ce qui diminue un peu la sensibilité du système mais permet malgré tout une bonne dynamique. La gamme de mesure commence vers -15 dB en début d'échelle, le 0 dB étant la fin d'échelle. J'ai prévu 2 led's qui s'allument dès qu'il y a dépassement. J'ai également prévu 2 zener, juste par sécurité, pour ceux qui appliqueraient une tension un peu excessive  à l'entrée. Egalement, le potentiomètre de volume pour la sortie casque n'a aucune influence sur l'affichage su Vumètre.
Voilà, je pense avoir été assez complet, ceux qui désirent plus de détails techniques peuvent évidement le faire via le forum.
J'espère que ce petit montage pourra plaire à certains. 
Michel Leclere
Vu_20c.prj


Ampli_Lay.JPG

Ampli_Sch.JPG


Control_Lay.JPG

Control_Sch.JPG


Vu20c_0dBm.JPG

VuM_02b.JPG

VuM_Amp08.JPG

VuM_Amp09.JPG

VuM_Control.JPG

VuM_Display.JPG

VuM_E20c.JPG

Alarme d'habitation

Alarme
Bonjour 

Je vous transmets un projet d'alarme d'habitation, complet, terminé et testé et même monté et opérationnel. 
Je vous mets en pièces jointes, le schéma électronique, le circuit imprimé ainsi que le programme en prj. Je joints également le fichier pic du 16F876 absolument nécessaire au bon fonctionnement du programme. En effet, les codes modifiables sont écrite en Eprom et sans ce fichier corrigé il ne sera pas possible d'effectuer cette tâche. Je peux éventuellement vous transmettre le layout du circuit imprimé à l'échelle 1/1. Vous trouverez aussi 3 photos du projet. 

Juste à savoir, mais c'est indiqué en entrée quand on ouvre le fichier dans logipic, c'est que le code de départ est 00000 (code sur 5 chiffres). On ne peut pas le modifier quand l'alarme est active. On peut modifier ce code quand l'alarme est inactive et le code de modification est ###0* 

Au démarrage du programme du pic, il détecte si l'Eprom est vierge (rempli de FF). Si oui, il écrit le code de première mise en service dans l'Eprom. De même, écriture en Eprom quand on modifie le code, ce qui permet en cas de coupure de courant de toujours avoir le même code. Je n'ai pas repris sur le schéma mais j'ai monté mon système avec alimentation par batterie en charge continue, cela permet à l'alarme de rester opérationnelle même si le courant venait à être interrompu. 
En cas de détection d'intrusion, une sirène, ou tout autre indicateur, peut être mis en route à l'aide d'un relais. Pour interrompre la détection d'intrusion, il suffit de réintroduire le bon code. 

Ce même montage peut éventuellement servir d'ouvre porte électronique, le relais pouvant actionner une gâche électrique, la partie alarme pouvant être inhibée en laissant le détecteur d'intrusion en position fermée. 

Voilà, j'espère que ce projet pourra intéresser quelques habitués du forum.

Michel Leclere
16F876.pic

AlarmV14.prj

Alarm_Lay.JPG

Alarm_Sch.JPG

ML16F876.jpg 

Sécateur électrique


Bonjour,
Je suis professeur en terminale SI (mais pas informaticien) et je viens de découvrir Logipic.
Bravo pour le travail : je pense m'en servir l'année prochaine avec mes élèves car il est vraiment simple et très pédagogique ( Organigramme).
Je l'associerai au logiciel Proteus (ISIS) pour la simulation.
Pour m'entrainer j'ai réalisé l'automatisation d'un sécateur électrique
(PELLENC) dont voici le cahier des charges :
- Positionnement de la lame du sécateur (sens alimentation moteur) en
fonction de la position de la gâchette (potentiomètre RV1) + : info sur LCD
- Détection de la surchauffe du pont en H (LM335): info sur LCD
- Contrôle de la charge de la batterie : info sur LCD
- Signalisation par LED clignotante que le circuit est sous-tension.

Je joint les fichiers Logipic, Proteus + une image du schéma.
Le programme est certainement très "discutable" mais il fonctionne...
S'il peut servir à quelqu'un ?
Encore merci.

François

Fichier proteus : secateur.dsn

Schéma :
secateur.jpg


projet LogiPic : secateur.prj

Interface infrarouge

Interface infrarouge pour piloter à distance un pré-ampli audio

(par Bidul)

rc5

Liens

RobotProg

Robotprog est un véhicule muni de 2 moto réducteurs capable de se déplacer dans toutes les directions. Il est piloté par un module programmable auquel on peut adjoindre différents capteurs et indicateurs afin de réagir et de communiquer avec l'extérieur.

(par Thierry)

RobotProg

Realisation_Robotprog.pdf

Config_logiciels.pdf

Typons, schéma et fichier LogiPic : Robotprog.zip

RobotBoot.zip

A7S

PROJET : A7S
"Affichage 7 segments" ou A7S est un projet d'afficheur programmable qui permet d'écrire un organigramme puis de programmer une cible (un affichage 7 segments).

(par Thierry)

A7S

Presentation_A7S.pdf

Utilisation_logipicV2.pdf

Config_logicielsV2.pdf

Realisation_A7S.pdf

Decod2A7S.pdf