- je tiens à vous dire que cette base sera la même pour tous les autres tutoriels avenir que je ferais, donc je reviendrais pas sur un sujet
- déjà évoqué dans les autres tutoriels.
Très cordialement
__________________________________________________________________________________________________________________
La configuration :
- PIC 16F88
- Led de couleur de votre choix
- Résistance de 470 ohms
___________________________________________________________________________________________________________________
Les datasheet
- La datasheet du PIC16F88
- La datasheet du pickit3
___________________________________________________________________________________________________________________
Le compilateur :
- La compilation se fait avec le compilateur Mpasm 5.20 pour ceux qui font de l'assembleur téléchargeable Ici, pour les autres langage voir avec le forum.
- Le compilateur est un programme qui sert à transformer ce que vous avez écrit, en un langage compréhensible pour votre microcontrôleur
- Pic, une fois fait on dit qu'il a été compilé
___________________________________________________________________________________________________________________
Le programmeur :
- Le programmeur qu'on va utiliser est un Pickit3
- Le programmeur Pickit3 retransmettra au microcontrôleur Pic, les données envoyé par le logiciel PICkit3 Standalone ou le logiciel PICkitminus Standalone
- A savoir certain Pic récent demande une mise à jour du FireWire du programmateur. mais avec PICkitminus Standalone pas de soucis car il est toujours
- mis à jour en 01-01-2024
___________________________________________________________________________________________________________________
Les logiciels de programmation :
- La programmation se fera avec le logiciel PICkit3 Standalone, téléchargeable ICI ou avec PICkitminus Standalone qui date du 02-12-2023 téléchargement ICI
- Le logiciel de programmation sert à envoyer le programme compilé au Pickit3 qui le retransmettra au microcontrôleur Pic.
___________________________________________________________________________________________________________________
Câblage pour la programmation :
- Pour programmer notre PIC16F88, il faudra le câbler comme décrit sur le schéma, mais attention,
- car vous avez 2 possibilités, soit vous alimenté votre Pic lors de la programmation, dans ce cas, il faudra débrancher la
- broche 2 VDD (power) de votre Pickit3.
- Soit, vous activez logiciellement l'alimentation de votre Pickit3 , lors de la programmation, pour ce cas là, le Pic ne doit
- pas être alimenter.
- Pour la programmation d'autre Pic il faut regarder la datasheet ou tous est inscrit, ou demander au forum de Fantas-Pic.
__________________________________________________________________________________________________________________
Le Montage :
- Le montage se fera sur une breadboard, avec un kit d'alimentation qui est connectable sur celui-ci.
- La mise en fonction du kit d'alimentation se fait avec un bouton, quand celui-ci est en fonction un témoin lumineux s'allume.
- Attention quand vous mettez le kit d'alimentation sur votre breadboard, regarder la polarité, il y a un coté à respecter,
- Le moins doit être branché sur le trait bleu de votre breadboard, et le plus doit être branché sur le trait rouge de votre breadboard.
- Le kit d'alimentation peut être alimenté par la prise USB de votre ordinateur, ou par connecteurs DC Jack, sous une tension mini de
- 6 volts, à un maxi de 12 volts.
- Sur la platine on trouve des cavaliers de chaque coté de la platine, pour réglage des tensions, 5 volts, et, 3,3 volts.
- Chaque coté peuvent être régler indépendamment, si les tensions sont différentes.
- Je vous recommande de ne pas alimenter ce kit d'alimentation avec votre ordinateur, car si vous faites une fausse
- manœuvre, vous risquez de mettre en panne votre ordinateur.
___________________________________________________________________________________________________________________
La facilité :
- Pour vous faciliter le montage, je vous conseille une série de fils pour breadboard
___________________________________________________________________________________________________________________
Les prix
- Les prix sont à titre indicatif est le port et compris dedans, pour cette année 2017, mais vont surement évoluer vers le haut avec les années.
- 1 pièce, PIC16F88 = 2.50 euros
- 50 pièces, LED de couleur de votre choix = 1 euro
- 100 pièces, résistances 470 ohms = 1 euro
- 1 pièce, breadboard 400 = 1 euro
- 1 pièce, kit alimentation = 1 euro
- 40 pièces chacun, 4 types de fils pour breadboard = 4 euros
- 1 pièce, clone pickit3 = 10 euros
- Pickit3 = 11 euros en 2017 maintenant il coûte 25 euros en 2024
___________________________________________________________________________________________________________________
Le schéma :
___________________________________________________________________________________________________________________
L'explication :
- Sur le schéma je n'ai pas mis de quartz, car ce pic possède une horloge interne, (ce qui n'est pas le cas pour tous les Pics)
- Quand vous n'avez pas besoin de précision, vous pouvez utiliser l'horloge interne du Pic, sa vous permets de récupérer deux pattes.
- L’horloge interne de notre Pic a 8 valeurs, d'après la datasheet, ce qui nous donne :
- 01110000 horloge 8 MHz
- 01100000 horloge 4 MHz
- 01010000 horloge 2 MHz
- 01000000 horloge 1 MHz
- 00110000 horloge 500 kHz
- 00100000 horloge 250 kHz
- 00010000 horloge 125 kHz
- 00000000 horloge 31.25 kHz
- Dans notre exemple, nous prendrons une horloge interne de 4 Mhz, pour mettre en fonction l'horloge interne de notre pic
- il faudra copier la valeur 01100000 dans le registre OSCCON
Ce qui donne :
Code : Tout sélectionner
movlw B'01100000' ; choix sur 4 Mhz
movwf OSCCON ;
L’horloge fournie au Pic est prédivisée par 4 au niveau de celle-ci, c’est cette base de temps qui donne la durée d’un cycle.
- Si on utilise par exemple une horloge de 4MHz, on obtient donc 1000000 cycles/seconde, or, comme le Pic exécute pratiquement
- 1 instruction par cycle, hormis les sauts, cela vous donne une puissance de l’ordre de 1MIPS (1 Million d’Instructions par seconde)
- ce qui fait 1 microseconde par instruction, (voir dans votre datasheet si c'est bien le cas pour votre Pic.)
__________________________________________________________________________________________________________________
Formule :
Nombre de cycle par seconde = Fréquence de votre quartz, ou, horloge interne (Hertz) / 4
__________________________________________________________________________________________________________________
- Pour avoir 1 seconde dans notre cas, il faut 1 Million d’Instructions, c'est exactement ce qu'on va faire avec des instructions
- qui ne font rien, juste perdre du temps, pour réaliser une temporisation d'une seconde, je me suis servie de PIC_Delay, utilitaire
- que vous pouvez télécharger Ici
- Une traduction Française à été effectué avec un collègue, pour l'utilitaire PIC_Delay, toutes suggestions pour l'améliorer sont les
- bienvenues.
Voici l'utilitaire en question, pour mettre en français PIC_Delay faite comme sur la photo.
Ce qui donne :
Code : Tout sélectionner
movlw D'173'
movwf loop1
movlw D'19'
movwf loop2
movlw D'6'
movwf loop3
decfsz loop1,F
goto $-D'1'
decfsz loop2,F
goto $-D'3'
decfsz loop3,F
goto $-D'5'
__________________________________________________________________________________________________________________
Le code :
- Le code peut être écrit avec un simple éditeur de texte, mais vous pouvez vous servir de l'éditeur de MPLAB de Microchip,
- ou vous pourrez suivre l'évolution du programme comme décrit ICI
- Je n'ai pas voulu compliqué le code, pour ne pas dérouter les débutants, car on peut faire plus court.
- Ci-joint, fichier code + fichier compilé :
Code : Tout sélectionner
;**********************************************************************************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
radix dec ; on travaille en décimal par défaut
LIST P=PIC16F88 ; Définition de processeur
#include <p16F88.inc> ; fichier include
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;*************************************** Assignations *****************************************
#DEFINE led PORTA,2 ; led corresponds à RA2
;******************* Adresse des variables fixe, mais délimité en bank 0 *********************
loop1 EQU H'30'
loop2 EQU H'31'
loop3 EQU H'32'
;**** zone commune en bank 0, bank 1, bank 2, bank 3, début H'70' à H'7F' soit 16 octets *****
CBLOCK 0x70
status_temps :1
w_temps :1
pclath_temps :1
fsr_temps :1
ENDC
;***************************** adresse de depart après reset **********************************
ORG H'00'
goto debut
;**********************************************************************************************
debut
;**********************************************************************************************
BANKSEL OSCCON ; directive pour passer en bank 1
;************************** configuration du registre OSCCON en bank 1 ************************
; 01110000 oscillateur 8 MHz
; 01100000 oscillateur 4 MHz
; 01010000 oscillateur 2 MHz
; 01000000 oscillateur 1 MHz
; 00110000 oscillateur 500 kHz
; 00100000 oscillateur 250 kHz
; 00010000 oscillateur 125 kHz
; 00000000 oscillateur 31.25 kHz
movlw B'01100000' ; choix sur 4 Mhz
movwf OSCCON ;
;************************** configuration du registre ANSEL en bank 1 *************************
movlw B'00000000' ; toutes les pattes en modes analogiques
movwf ANSEL ; mode E/S 17(RA0),18(RA1),1(RA2),2(RA3),3(RA4),12(RB6),13(RB7)
;************************ configuration du registre OPTION_REG en bank 1 **********************
movlw B'10000000' ;
movwf OPTION_REG ; résistances hors service
;************************* configuration du registre CMCON en bank 1 **************************
movlw B'00000111' ;
movwf CMCON ; éteindres les comparateurs
;******************* configuration des registres TRISA & TRISB en bank 1 **********************
movlw B'00100000' ;
movwf TRISA ; toutes les pattes en sorties, exception MCLR(RA5) en entrée
; 17(RA0),18(RA1),1(RA2),2(RA3),3(RA4),4(RA5),15(RA6),16(RA7)
movlw B'00000000' ;
movwf TRISB ; toutes les pattes en sorties
; 6(RB0),7(RB1),8(RB2),9(RB3),10(RB4),11(RB5),12(RB6),13(RB7)
;**********************************************************************************************
BANKSEL PORTA ; directive pour passer en bank 0
;**********************************************************************************************
clrf PORTA ; PORTA à 0
clrf PORTB ; PORTB à 0
;********************* configuration du registre INTCON en bank 0,1,2,3 ***********************
clrf INTCON ; interruption hors service
;********************************** programme principal ***************************************
start
bsf led ; allumage de la LED
call _1s ; attends 1 seconde
bcf led ; extinction de la LED
call _1s ; attends 1 seconde
goto start ; boucler
;***************************** "pause de 1 seconde approximatif" ******************************
_1s
movlw D'173'
movwf loop1
movlw D'19'
movwf loop2
movlw D'6'
movwf loop3
decfsz loop1,F
goto $-D'1'
decfsz loop2,F
goto $-D'3'
decfsz loop3,F
goto $-D'5'
return
;************************************* fin de programme ***************************************
END ; directive fin de programme
__________________________________________________________________________________________________________________