|
|
Les réalisations
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 |
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

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 |
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

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


L'Arsène
|
Horloge_DCF.zip |
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 |
|
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
|
|
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 |
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 |
|
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
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.
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 |
|
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
|
|
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 |
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 |
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 pour piloter à distance un pré-ampli audio
(par Bidul)
|
Liens |
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)
|
Realisation_Robotprog.pdf
Config_logiciels.pdf
Typons, schéma et fichier LogiPic : Robotprog.zip
RobotBoot.zip |
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)
|
Presentation_A7S.pdf
Utilisation_logipicV2.pdf
Config_logicielsV2.pdf
Realisation_A7S.pdf
Decod2A7S.pdf |
|