Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Commentez, partagez et proposez des Tutos en langage ASM !
1) Première partie : clignotement d'une LED par tempo
Temps-x
Avatar de l’utilisateur
Passioné
Passioné
Messages : 474
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » lun. 7 août 2017 22:07 lien vers la Data-Sheet : Cliquez ici

Bonjour,

- 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
- Le datasheet du PIC16F88
- Le datasheet du pickit3
___________________________________________________________________________________________________________________

Le compilateur :
- La compilation se fait avec le compilateur MPASMWIN, téléchargeable Ici

MPASM.jpg

___________________________________________________________________________________________________________________

Le programmeur :
- Le programmeur qu'on va utiliser est un clone du Pickit3

pickit3-500x500.jpg

___________________________________________________________________________________________________________________

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.

Brochage de programmation (1).jpg

___________________________________________________________________________________________________________________

Logiciel de programmation :
- La programmation se fera avec le logiciel PICkit3, téléchargeable Ici

Logiciel PicKit 3.jpg

___________________________________________________________________________________________________________________

Le Montage :
- Le montage se fera sur une breadboard, avec un kit d'alimentation qui est connectable sur celui-ci.

Breadboard + module alimentation.jpg

- 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

Prototype-2.jpg

___________________________________________________________________________________________________________________

Les prix :
- Les prix sont à titre indicatif, c'est ce que j'ai trouvé sur la plupart des vendeurs.

- 1 pièce, PIC16F88 = 1 euro
- 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
___________________________________________________________________________________________________________________

Le schéma :

Schéma de clignotement d'une led par tempo.jpg

___________________________________________________________________________________________________________________

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

PicDelay 1.8.jpg


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.
- 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é :
Clig-tmps.zip

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            
:
    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,***********************

      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



__________________________________________________________________________________________________________________

La démonstration :
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le lun. 4 déc. 2017 00:41, modifié 153 fois.
L’imagination est plus importante que le savoir.

Faire clignoter une led
Jérémy
Administrateur du site
Administrateur du site
Messages : 1764
Âge : 38
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » ven. 11 août 2017 15:57 lien vers la Data-Sheet : Cliquez ici

Maintenant tu peux modifier !! oops

désolé c'est de ma faute j'ai oublié de déplacer ton message. Je perds la tête en ce moment !!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

1) Première partie : clignotement d'une LED par tempo
Roger33
Membre
Membre
Messages : 16
Enregistré en : novembre 2017

#3 Message par Roger33 » mer. 29 nov. 2017 10:52 lien vers la Data-Sheet : Cliquez ici

re Bonjour
Avant d'aller bosser je viens de regarder cela.
Pas étonnant que Jeremy perde la tête, déjà moi je suis perdu, va falloir non pas LIRE mais FAIRE en même temps pour piger
En tout cas, c'est bien commenté. :-) mais je ne pige toujours pas comment on ecrit mov lw etc.

Moi pour faire clignoter une LED je prends un UJT, une capa, 3 résistances et c'est fini...Là pas pareil c'est BEAUCOUP plus complexe pour moi.


Dur dur mais on a rien sans rien :wink:
C'est super quand ça fonctionne!!!

1) Première partie : clignotement d'une LED par tempo
Temps-x
Avatar de l’utilisateur
Passioné
Passioné
Messages : 474
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » mer. 29 nov. 2017 20:10 lien vers la Data-Sheet : Cliquez ici

Bonjour Roger33, et tous le forum,

Déjà merci d'avoir répondu, ça permettras d'affiner les détails.

C'est normal que cela te paraisse complexe, et si tu m'avais dit autre chose, je t'aurais dit :bravo: (ça va plus vite avec le panneau) :wink:

Je me suis amusé a rentrée toutes les instructions ASM dans un éditeur, avec des couleurs différentes.
ça veux dire que si tu fais une erreur de frappe ou une erreur de mots elle n'apparaisse pas en couleur.

Voici une copie d'écran de mon éditeur préférer jens file Editor 3.95

Mon éditeur.jpg


Sur le coté droit, j'ai le logiciel de programmation pour microcontrôleur PIC, et le compilateur ASM, et divers autre chose.

écrit par roger33 :

je ne pige toujours pas comment on ecrit mov lw etc


En ASM il y a 35 instructions, ça reste très court, mais il faut savoir les appliquer et les retenir.

movlw Cette instruction charge une valeur spécifiée par le concepteur du code, dans le registre de travail W.

W et un registre de travail de 8 bits, obliger de passé par lui pour retransmettre une valeur à une variable.

Enfin, si tu veux apprendre, je peux commencer tous doucement, en prenant le temps de tous t’expliqué.
et n'avancerais que si tu arrive à comprendre.

Moi pour faire clignoter une LED je prends un UJT, une capa, 3 résistances et c'est fini..


Houlala c'est compliqué pour moi un UJT :roll:

Tu vois quand à plein de chose à échanger, y a pas que toi qui sait pas, moi aussi, et je suis plus tous jeune.

Bon je te réponds sur l'autre poste ce soir, car il me faut du repos, vers minuit, ben ouais, sorti travail je suis ko,
car j'ai vue que tu m'a laissé des questions. :wink:

A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
L’imagination est plus importante que le savoir.

1) Première partie : clignotement d'une LED par tempo
Roger33
Membre
Membre
Messages : 16
Enregistré en : novembre 2017

#5 Message par Roger33 » ven. 1 déc. 2017 23:30 lien vers la Data-Sheet : Cliquez ici

UJT= Uni Jonction Transistor...Y a pas que les FET et les bipolaires y a aussi les unijonction et aussi Unijonction dits programmables...(mais c'est de la prog analogique pas via code.)
Très prometteurs , ces composant sont très vite tombés dans l'oubli. Je m'en sers de temps en temps pour bricolage de ci de là.
Voir Google pour plus amples infos.
C'est super quand ça fonctionne!!!

1) Première partie : clignotement d'une LED par tempo
Temps-x
Avatar de l’utilisateur
Passioné
Passioné
Messages : 474
Enregistré en : juillet 2016
Localisation : Terre

#6 Message par Temps-x » sam. 2 déc. 2017 22:28 lien vers la Data-Sheet : Cliquez ici

Bonsoir Rger33, et tous le forum,

Merci pour cette info, effectivement il existe plusieurs type de transistor, en cherchant sur Google, suite à vos conseille
il y en a pas mal, ça me serviras par la suite, je vais les étudier.

Merci ! pour l'info

A+
L’imagination est plus importante que le savoir.


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité