Pic 16F et Picaxe


objectif :
Aprés avoir réalisé des programmes à base de PIC16F ou 12F  j'ai découvert les PICAXE nettement plus facile à mettre en oeuvre pour un débutant en programmation j'ai donc souhaité  construire cette page
j'ai programmé avec programming edition  v5 ependant une nouvelle version du logiciel de programmation de PE6 beta est disponible ici
cette nouvelle version apportent de nouvelles fonctions et améliore les performances (plus de memoire sur certains picaxe ... )
la version PE5 ne sera bientôt plus mise ajour (aprés 2015)
le passage en français se fait en suivant le chemin fichier option langue
une traduction du tuto  TUTO  (merci Laurent )
Ce tuto est issus du document
PE6 Beta Testing Briefing – Sep 2013

Principde de programmation:
J'ai  reactualisé   ce document de programmation qui explique la programmation d'un pic16f88 et la compare avec un picaxe. Les principes de programmation structurée décrits  restent les mêmes pout tout autre µP.
Fichier excel d'aide à la configuration d'un pic 16F84 ,16F628 ,12F629 ou 675 fichier de configuration pic

Préambule :
les picaxe et les pic etant issus du même fabricant il y a donc des similitudes qui m'ont fait choisir  des composants interchangeables en respectant certaines  règles.
On pourra ainsi sur un circuit respectant certaines règles remplacer un pic par un picaxe ou inversement

j'utilise en particulier des 08m2 (picaxe) ou des 12F683 (8 broches )
des 20m2 (picaxe ) ou  16F690 (20 broches )
( éventuellement j'utilise d'autres pic ayant les mêmes brochages avec un peu moins de potentiel  mais dans un premier temps restons avec les pic cités ci dessus .)

Ces composants ont  des points communs et de differences dans la connectique .

Interessons nous au 20m2 et au 16f690 que nous allons rendre interchangeable

Les 2 pattes du haut (1 et 20 ) sont reservées à l'alimentation en 5V .
Un condensateur de 100nF est necessaire aux bornes des ces pattes
les pattes 2 et 19 ne seront pas utilisés pour  la programmation
une résistance de 10K reliera la patte 2 à la masse (patte 20)
la patte 4 sera toujours une entrée

En respectant ces règles on pourra réaliser des programmes avec pic ou des picaxe sur la même platine d'essai

je ne detaillerai pas ici la prise en main des picaxe un site l'a déja trés bien fait
http://electromag1.wifeo.com/

Exemples de programmation
les programmes proposés vont permettre de commander un petit circuit de train miniature
à partir de bouton poussoir ou d'interrupteur ceux ci  commanderont les aiguillages , les canton ..
tout cela via un emeteur infrarouge
cela limitera fortement la longueur des fils et permettra d'automatiser trés simplement le circuit
on pourra facilement demander un itinéraire réaliser un automatisme ...
Ne vous sauvez pas c'est beaucoup plus facile que vous ne le pensez!

Etape 1
Nous allons concevoit un programe qui attend un signal infarouge et

allume une LED (su 2 ) en fontion du code reçu.
A terme cela permettra d'afficher l'itinéraire du train
dans un premier temps c'est une télécommande Sony de télévision qui nous servira d'émetteur

Allons y pour le récepteur !!
Nous avons besoin des composants suivant
un  picaxe 20m2
un TSOP connecté au picaxe (ou au pic ) (TSOP 4840, ou 4838 ou equivalent
des resistances de 100 ohms , 10 (2fois) 10K 
1 condensant de 100nF
1 condensateur de 4,7µF
Une platine à trou ou veroboard ou CI ... et quelques fis

attention le brochage de TSOP  varient  suivant le  tsop utilisé

les TSOP 21XX sont cablés comme les tsop 17XX
tsop

voici les programmes !

recepteur infrarouge

#picaxe 20M2
dirsb=%11111111
dirsc=%001111111
symbol sortiea = pinb.0
symbol code = b4
debut:
code=0
irin [100,debut],c.7,code
if code=1 then   
sortiea=0
endif                    
if code=2  then      
sortiea=1
endif
goto debut
end
pour plus d'explication du programme
et des info sur le  schémas , cablage ...

ce lien vous dirige sur  un  pdf  explicatif détaillé
faites donc le programme pour gérer  14 sorties
apés avoit fait l'effort de chercher bien sur !!
vérifier la solution sur ce lien

 affichage du code IR sur un ecran LCD
Le montagec ci dessous permet d'afficher le code infrarouge
sur un afficheur LCD
le code de ce programme est une adaptation de ce code
il suffit de le copier  et de réaliser le montage .
l'expliation du code n'est pas encore détaillé)
ce rogramme est util pour vérifier quel  code est envoyé
documentation complète (circuit  et code )


voici maintenant uncirduit et un  programme qui envoie un code infrarouge
(il remplace la "zapette" )
émetteur code IR
la fonction principale du programme
irout 0, 1,x        'emission en b.0 du code x
tout est détaillé ICI
on sait maintenant :
emettre un code infrarouge , le receptionner pour allumer une led
commande de servo:(pour déplacer un aiguillage par exemple)
on va maintenant modifier le programme reception infrouge
pour commander un servo moteur à droite ou à gauche .
ls positions seront ajustées par 2 potntiometres
pour cela il faut donc:
savoir lire la valeur d'un potentiometre
générer des impulsions
(la valeur de  0 à 5V sera donc convertie en temps (entre 1 et 2ms environ)
en effet la position d'un bras de servo dépend de la longueur d'une impusion
emise toute les 20ms .
pour utiliser la tension présente sur le potentiometre on utilise la fonction
readac
un exemple:
readadc b.1,pot1
 la tension présente en b.1 est convertie en un nombre entre 0 et 255
les impulsions seront générées par la fonction 
pulsout
un exemple:
pulsout b.6,150
une impulsion de 1,50  ms sera envoyée sur b.6

pour mettre cette sortie à 0 pendant 20ms  on écrira
b.7=0
pause 20

on bouclera cette fonction une dizaine de fois
pour laisser au servo le temps de se positionner
voici un exemple de  programme
readadc b.2,pot1 'on lit la valeur sur le potentiometre en b.2
pot1=pot2/3
pot1=100+pot1  'on convertit le 0 5V en une valeur entre 0 et 200 environ
for cpt=1 to 10    'on envoie 10 impulsions
   pulsout b.6,pot1  'apre chaque impulsion b.6 est à 0
        '
on attend 20ms avant une nouvelle impulsion
        ' il n'est pas necessaire d'ecrire b.6=0 car 'impulsion se tremine par mise a 0
   pause 17 ' 17 donne en realité 20ms (car il faut ajouter le temps d'executions des instructions)
next cpt
vous avez maintenant les éléments pour faire le programme !
chercher un peu avant de lire la proposition ci dessous
voici les éléments(schémas et programme) pour commander 5 servo
 mais rien ne vous interdira  de passer à 12 (50% du picaxe n'est pas utilisé )
commande de 5 servo
Amélioration:
En ajoutant un potentiometr en B.0 il est possible avec ce proramme(servo reglable) d'ajuster la vitesse du servo
on peut donc maintenant gérer le deplacement à gauche et à droite et la vitesse
Un potentiometre gère le deplacement à droite un autre le deplacement à gauche et le troisieme gère la vitesse de déplacement
je vous laisse le soin d'analyser ce progamme .
Bon amusement !

voici un programme qui gère 5 servo et 5 relais associés (un buffer est necessaire pour commander les relais
un uln 2803 fera l'affaire )
l'amplitude des bras des servo est reglable par 2 potentiometres
ainsi que sa vitesse de déplacement  (le réglage est commun à tous les servo )ci joint le fichier .txt
à recopier dans PEou PE
 programme gestion IR ( 5 aiguillages servo et 5  relais  ) 


le lien ci dessous donne les infos pour programmer un pic 08M2 qui commandera un servomoteur
document pdf commander son appareil photo par infrarouge
video
lien sur youtube