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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Méthode de calcul d'un condensateur
Temps-x
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 952
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » lun. 17 sept. 2018 03:20

Bonjour tout le forum,

Je fais actuellement un capacimètre, avec un Pic16F883, voici son datasheet

J'ai pris la méthode temps de charge d'un condensateur, qui me donne un temps en micro-seconde

Mais la conversion analogique me prend à elle seule trop de temps, ce qui fausse le résultat. :cry:

:idea: Auriez vous une autre solution à me proposer que cette méthode.

Je signale que je compte mesurer des grandes valeurs de 1 Farads à 3000 Farads, donc la méthode capacitance et résonance
est a exclure.

Merci ! pour tout ceux qui éclairerons ma lanterne.......


Je vous donne le code qui est pour l'instant un brouillon, mais opérationnel....

Code : Tout sélectionner

;**********************************************************************************************

    Errorlevel-302                                                  ; Supprime le message "Ensure that bank bits are correct" 

    list        p
=16F883                                            ; processeur utilisé 

    
#include    <p16F883.inc>                                         ; Définitions des constantes

 __CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT 
 __CONFIG _CONFIG2
, _WRT_OFF & _BOR21V                                                                                                   


;*************************************** assignations ****************************************** 

#DEFINE     lcd_port  PORTA               ; RA0  ==>  D4        
                                          ; RA1  ==>  D5
                                          
; RA2  ==>  D6
                                          
; RA3  ==>  D7  

#DEFINE        lcd_rs      PORTA,4             ; RA4  ==>  RS  
#DEFINE        lcd_e      PORTA,5             ; RA5  ==>  E


;******************************** déclaration des variables ************************************  

 CBLOCK H
'40'                             ; zone de la sdram en bank 1 : H'20' à H'7F' soit 96 octets              
      bank0          
:1                    
 
      loop1          
:1
      loop2          
:1
      loop3          
:1
      loop4          
:1
      loop5          
:1                    

      chiffre        
:4                     

      phrase         
:1
      lettre         
:1
      lecture        
:1

      choix          
:1  
      tension        
:1

      tmps           
:1  
      temps          
:1
 
      calibrage      
:1
      calibrage_old  
:1  

      dix_millième   
:1
      millième       
:1
      centaine       
:1
      dizaine        
:1
      unité          
:1

      res8           
:1
      res16          
:1
 ENDC

;-----------------------------------------------------------------------------------------------
 
 CBLOCK H
'A0' 
      bank1         
:1                    ; zone de la sdram en bank 1 : H'A0' à H'EF' soit 80 octets  
 ENDC
        
;-----------------------------------------------------------------------------------------------

 CBLOCK H'120'                          
      bank2         
:1                    ; zone de la sdram en bank 2 : H'120' à H'16F' soit 80 octets  
 ENDC

;-----------------------------------------------------------------------------------------------

 CBLOCK H'70'                             ; zone commune en bank 0, bank 1, bank 2, bank 3 : H'70' à H'7F' soit 16 octets     
      adresse       
:1
      donner        
:1
      w_temp        
:1    
      status_temp   
:
 ENDC        

;***************************** adresse de depart après reset ***********************************

    ORG H'00'
      goto debut      

;******************************** lieu des interruptions ***************************************

    ORG  H'04'           
      retfie      

;********************************** en commence ici ******************************************** 

debut                                                       

;**********************************************************************************************       

      BANKSEL ANSEL                       
; on passe en bank 3

;************************ configuration du registre ANSEL en bank 3 ************************* 

                                           
; en mode numérique :
      clrf ANSEL                           ; en mode E/S       : 2(RA0), 3(RA1), 4(RA2), 5(RA3), 7(RA5)                                       

;************************ configuration du registre ANSELH en bank 3 ************************* 

       movlw B
'00010100'                   ; en mode numérique : 21(RB0), 22(RB1)
       movwf ANSELH                        ; en mode E/S       : 23(RB2), 24(RB3), 25(RB4), 26(RB5)  

;**********************************************************************************************  

      BANKSEL OSCCON                       
; passe en bank 1

;************************ configuration du registre OSCCON en bank 1 ***************************

                                          ; 01111000 oscillateur 8 Mhz
                                          
; 01101000 oscillateur 4 Mhz             
                                          
; 01011000 oscillateur 2 Mhz
                                          
; 01001000 oscillateur 1 Mhz
                                          
; 00111000 oscillateur 500 Khz
                                          
; 00101000 oscillateur 250 Khz
                                          
; 00011000 oscillateur 125 Khz
                                          
; 00001000 oscillateur 31 Khz
      movlw B
'01111100'                   ;
      movwf OSCCON                        ; choix sur 8 Mhz    

;************************ configuration du registre OPTION_REG en bank 1 *********************** 
  
      movlw B
'10000000'                   ; 
      movwf OPTION_REG                    
; résistances hors service                      ;  

;************ configuration des registres TRISA & TRISB & TRISC & TRISE en bank 1 *************                                                   

      movlw B
'00000000'                   ; configuration des pattes dans TRISA 
      movwf TRISA                         
; 2(RA0), 3(RA1), 4(RA2), 5(RA3), 6(RA4), 7(RA5), 10(RA6), 9(RA7)

      movlw B'11111111'                   ; configuration des pates dans TRISB
      movwf TRISB                         
; 21(RB0), 22(RB1), 23(RB2), 24(RB3), 25(RB4), 26(RB5), 27(RB6), 28(RB7)
                                                                                                        
      movlw B
'00000000'                   ; configuration des pattes dans TRISC 
      movwf TRISC                         
; 11(RC0), 12(RC1), 13(RC2), 14(RC3), 16(RC5), 15(RC4), 17(RC6), 18(RC7)
                                   
      movlw B
'00001000'                   ; configuration de la patte dans TRISE 
      movwf TRISE                         
; 1,(RE3) MCLR en entrée seulement, ne peut être configuré en sortie.

                                          ; alimmentation sous 5 volts patte 8 ou 19 mettre au moins 
                                          
; patte 20 mettre au plus           

;************************ configuration du registre ADCON1 en bank 1 **************************

      clrf  ADCON1                        ; la conversion sera justifié à gauche   
                                          
; la tension de référence du CAN est l'alimentation du microcontrôleur

;**********************************************************************************************

      BANKSEL ADCON0                       ; passe en bank 0

;************************ configuration du registre ADCON0 en bank 0 **************************

      movlw B'
11000000'                   ; b7 = ADCS1 choisir la fréquence de fonctionnement du 
      movwf ADCON0                        ; b6 = ADCS0 convertisseur en fonction de la fréquence d'
horloge du PIC  
                                          
; b5 = CHS3 sélection du canal 
                                          
; b4 = CHS2 sélection du canal 
                                          
; b3 = CHS1 sélection du canal 
                                          
; b2 = CHS0 sélection du canal 
                                          
; b1 = GO/DONE indique la fin de la conversion analogique, et permet de lancer la conversion
                                          
; b0 = ADON mise en service du convertiseur 0 = arrêt : 1 = marche 

;************************ configuration du registre T1CON en bank 0 ***************************

      clrf T1CON                          ;

;*********************
 configuration du registre INTCON en bank 0,1,2,***********************

      clrf INTCON                         ; b7 = GIE arrêt de toutes les interruptions 

;***********************************************************************************************       

      clrf PORTA
      clrf PORTB
      clrf PORTC
 
;*********************** "initialisation du mode 4 bits pour LCD 1602" *************************                                

      call _1s      
;----------------------------------------------------------------------------
      movlw B'00000010'                   
      call envoi                          
; mode 4 bits 
      call e_pulse
;----------------------------------------------------------------------------
      movlw B'00000010' 
      call envoi                          
; mode 4 bits
      call e_pulse
;----------------------------------------------------------------------------
      movlw B'00001000'
      call envoi                          ; mode 4 bits
      call e_pulse
;----------------------------------------------------------------------------      
      call _40µs
;----------------------------------------------------------------------------
 ; "mode 1 ou 2 lignes du lcd"
      movlw B'00000010'
      call envoi                          ; utilisation de 2 ligne du LCD  
      call e_pulse

      movlw B
'00001100'
      call envoi 
      call e_pulse
;---------------------------------------------------------------------------- 
      call _1640µs
;----------------------------------------------------------------------------
;
 "choix de voir le curseur"
      movlw B'00000000' 
      call envoi                          
; autorise l'affichage, et cache le curseur      
      call e_pulse

      movlw B'
00001100'
      call envoi 
      call e_pulse
;---------------------------------------------------------------------------- 
      call _40µs
;----------------------------------------------------------------------------
; "curseur de gauche à droite"
      movlw B'
00000000'
      call envoi                          ; déplacement du curseur après l'
apparition 
      call e_pulse                        
; d'un caractère de gauche à droite  
                        
      movlw B'
00000110'
      call envoi
      call e_pulse
;---------------------------------------------------------------------------- 
      call _40µs
;----------------------------------------------------------------------------    
; "adresse d'
écriture dans GGRAM pour création de caractére"
      movlw b'00000100'                 
      call envoi                          ; adresse d'écriture dans CGRAM à l'adresse 0x00 
      call e_pulse                       
                      
      movlw B'00000000'
      call envoi
      call e_pulse
;---------------------------------------------------------------------------- 
      call _40µs
;----------------------------------------------------------------------------     
; "
création du caractère "é", "à", "µ", "°" dans la GGRAM"

      movlw D'32'                          ; longueur de la donnée
      movwf phrase 

      clrf lecture                         ; emplacement du départ de la donnée
                                            
      call affiche                         ; enregistrement des caractéres dans GGRAM

      call efface_lcd                      ; efface l'écran LCD

;***********************************************************************************************

      clrf adresse

      call lecture_eeprom

      movfw donner

      movwf calibrage
     
;******************************** "
calibrage du capacimètre" ***********************************
bt1      
      btfsc PORTE,3
      goto bt2 
      btfss PORTE,3
      goto $-D'1'

      call efface_lcd
      call _100ms

      call canal_AN10                     ; sélectionner le canal RB1/AN10

reglage      
      call ligne1_lcd

      movlw D'10'                         ; longueur de la donnée qui est "
Calibrage:"
      movwf phrase                        

      movlw D'130'                        ; emplacement du départ de la donnée 
      movwf lecture       

      call affiche          

      movfw calibrage                     ;  
      movwf res8                          ;
       
      clrf res16

      call traduire

verifier
      btfsc PORTE,3
      goto $+D'10'
      btfss PORTE,3
      goto $-D'1'

      clrf adresse

      movfw calibrage
      movwf donner
      
      call ecriture_eeprom

      call efface_lcd
      call _100ms

      goto bt2 

      call _100ms

      call scan

      movwf calibrage                     ;  
      movwf res8                          ;
       
      clrf res16

      movfw calibrage
      xorwf calibrage_old,W
      btfsc STATUS,Z
      goto verifier

      movfw calibrage 
      movwf calibrage_old

      goto reglage
               



;***********************************************************************************************
bt2   
      btfsc PORTB,7   
      goto bt1
      btfss PORTB,7   
      goto $-D'1'
   
      call efface_lcd
      call _100ms

      call ligne1_lcd
                                                                                   
      movlw D'16'                         ; longueur de la donnée qui est "
Analyse en cours"
      movwf phrase                        ;

      movlw D'90'                         ; emplacement du départ de la donnée
      movwf lecture       

      call affiche                        ; fonction d'écriture sur LCD

      call canal_AN12                     ; sélectionner le canal RB0/AN12

      clrf TMR1L

      clrf TMR1H     
            
      bsf PORTC,3                         ; charge du condensateur

      bsf T1CON,TMR1ON                    ; mise en fonction du timer1              
halte
      btfss PORTB,6
      goto fin

      call scan      
      movwf tension                       
                                          
      sublw D'250' 
      btfsc STATUS,C           
      goto halte                         ; bouclé tant que la tension n'est pas plus grande que la tension demandé

fin
      bcf T1CON,TMR1ON                    ; arrêter le timer1              

      movfw TMR1H                         
      movwf res16

      movfw TMR1L

      subwf calibrage,W   
      movwf res8

      bcf PORTC,3                         ; court-jus sur le condensateur

      call ligne1_lcd

      movlw D'16'                         ; longueur de la donnée qui est "
Analyse terminée"
      movwf phrase                        

      movlw D'106'                        ; emplacement du départ de la donnée 
      movwf lecture       

      call affiche                        ; fonction d'écriture sur LCD
       
      call ligne2_lcd

      movlw D'8'                          ; longueur de la donnée qui est "
Temps : "
      movwf phrase                        

      movlw D'122'                        ; emplacement du départ de la donnée 
      movwf lecture                                             
               
      call traduire                       ; traduit le nombre enregistrer dans "
res16", & "res8"

      goto bt1  

;*********************************************************************************************** 
traduire

      call convertir

      movfw dix_millième
      xorlw D'48'
      btfsc STATUS,Z
      goto $+D'4'

      movfw dix_millième
      movwf lettre      
      call ecrit_lcd 
      
      movfw millième
      xorlw D'48'
      btfsc STATUS,Z
      goto $+D'4'

      movfw millième
      movwf lettre
      call ecrit_lcd 

      movfw centaine
      xorlw D'48'
      btfsc STATUS,Z
      goto $+D'4'

      movfw centaine
      movwf lettre
      call ecrit_lcd 

      movfw dizaine
      xorlw D'48'
      btfsc STATUS,Z
      goto $+D'4'

      movfw dizaine
      movwf lettre
      call ecrit_lcd 

      movf unité,W
      movwf lettre
      call ecrit_lcd 
 
      movlw ' '
      movwf lettre
      call ecrit_lcd  

      movlw D'2'                          ; va chercher le "
µ" créer dans la GGRAM
      movwf lettre
      call ecrit_lcd  

      movlw 's'
      movwf lettre
      call ecrit_lcd  

      movlw ' '
      movwf lettre
      call ecrit_lcd  

      return

;************************************ "
choix de la valeur" ************************************* 
choix_cap
      call ligne1_lcd                     ; positionner sur la première ligne du LCD

      movlw D'6'                          ; longueur de la donnée qui est "
Game: "
      movwf phrase                        ;

      movlw D'32'                         ; emplacement du départ de la donnée
      movwf lecture                       ; 

      call affiche                        ; fonction d'écriture sur LCD

;-----------------------------------------------------------------------------------------------

      movlw D'10'                         ; longueur de la donnée 
      movwf phrase                        ;  

      movfw choix  
      xorlw D'6'
      btfsc STATUS,Z 
      clrf choix

farad      
      movfw choix  
      xorlw D'0'
      btfss STATUS,Z 
      goto millifarad

      movlw D'38'                         ; emplacement du départ de la donnée "
Farad     "
      movwf lecture                       ; 

millifarad
      movfw choix  
      xorlw D'1'
      btfss STATUS,Z 
      goto microfarad

      movlw D'48'                         ; emplacement du départ de la donnée "
MilliFarad"
      movwf lecture                       ; 
      
microfarad
      movfw choix  
      xorlw D'2'
      btfss STATUS,Z 
      goto nanofarad

      movlw D'59'                         ; emplacement du départ de la donnée "
MicroFarad"
      movwf lecture                       ; 

nanofarad
      movfw choix  
      xorlw D'3'
      btfss STATUS,Z 
      goto picofarad

      movlw D'70'                         ; emplacement du départ de la donnée "
NanoFarad "
      movwf lecture                       ; 

picofarad
      movfw choix  
      xorlw D'4'
      btfss STATUS,Z 
      goto affiche_choix        

      movlw D'80'                         ; emplacement du départ de la donnée "
PicoFarad "  
      movwf lecture                       ; 

affiche_choix        

      call affiche                        ; fonction d'écriture sur LCD      

      return

;*********************************************************************************************** 
canal_AN10

      bsf ADCON0,5                        ; b5 = CHS3 sélection du canal RB1/AN10 
      bcf ADCON0,4                        ; b4 = CHS2 sélection du canal RB1/AN10  
      bsf ADCON0,3                        ; b3 = CHS1 sélection du canal RB1/AN10
      bcf ADCON0,2                        ; b2 = CHS0 sélection du canal RB1/AN10

      return                                       

;*********************************************************************************************** 
canal_AN12

      bsf ADCON0,5                        ; b5 = CHS3 sélection du canal RB0/AN12 
      bsf ADCON0,4                        ; b4 = CHS2 sélection du canal RB0/AN12  
      bcf ADCON0,3                        ; b3 = CHS1 sélection du canal RB0/AN12
      bcf ADCON0,2                        ; b2 = CHS0 sélection du canal RB0/AN12

      return                                       
                                    
;*********************************************************************************************** 
scan
      bsf ADCON0,ADON                     ; on lance l’acquisition (charge du condensateur)

      nop
      nop                                 ; pause, temps de charge du condensateur
      nop 
      nop

      bsf ADCON0,GO                       ; lancer la conversion A/D

      btfsc ADCON0,GO                     ; si le bit GO est à 1 on va à la ligne 1        
      goto $-D'1'                         ; convertion n'est pas terminer     
      bcf ADCON0,ADON                     ; fin de conversion, éteindre convertisseur

      movfw ADRESH                        ; transférer le résultat dans W
    
      return

;*********************************************************************************************** 
convertir

; "
16 bits"

      clrf unité
      clrf dizaine
      clrf centaine
      clrf millième
      clrf dix_millième

      btfss res16,7
      goto $+D'11'            

      movlw D'3'                          ; 32768  
      addwf dix_millième,F
      movlw D'2'                          ;  2768  
      addwf millième,F
      movlw D'7'                          ;   768
      addwf centaine,F                 
      movlw D'6'                          ;    68
      addwf dizaine,F                 
      movlw D'8'                          ;     8
      addwf unité,F                 


      btfss res16,6
      goto $+D'11'            

      movlw D'1'                          ; 16384  
      addwf dix_millième,F
      movlw D'6'                          ;  6384  
      addwf millième,F
      movlw D'3'                          ;   384
      addwf centaine,F                 
      movlw D'8'                          ;    84
      addwf dizaine,F                 
      movlw D'4'                          ;     4
      addwf unité,F                 


      btfss res16,5
      goto $+D'9'            

      movlw D'8'                          ; 8192  
      addwf millième,F
      movlw D'1'                          ;  192
      addwf centaine,F                 
      movlw D'9'                          ;   92
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 


      btfss res16,4
      goto $+D'9'            

      movlw D'4'                          ; 4096  
      addwf millième,F
      movlw D'0'                          ;  096
      addwf centaine,F                 
      movlw D'9'                          ;   96
      addwf dizaine,F                 
      movlw D'6'                          ;    6
      addwf unité,F                 


      btfss res16,3
      goto $+D'9'            

      movlw D'2'                          ; 2048  
      addwf millième,F
      movlw D'0'                          ;  048
      addwf centaine,F                 
      movlw D'4'                          ;   48
      addwf dizaine,F                 
      movlw D'8'                          ;    8
      addwf unité,F                 


      btfss res16,2
      goto $+D'9'            

      movlw D'1'                          ; 1024  
      addwf millième,F
      movlw D'0'                          ;  024
      addwf centaine,F                 
      movlw D'2'                          ;   24
      addwf dizaine,F                 
      movlw D'4'                          ;    4
      addwf unité,F                 


      btfss res16,1
      goto $+D'7'            

      movlw D'5'                          ;  512
      addwf centaine,F                 
      movlw D'1'                          ;   12
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 


      btfss res16,0
      goto $+D'7'            

      movlw D'2'                          ;  256
      addwf centaine,F                 
      movlw D'5'                          ;   56
      addwf dizaine,F                 
      movlw D'6'                          ;    6
      addwf unité,F                 

;********************************************************************************************** 

; "
8 bits"

      btfss res8,7
      goto $+D'7'            

      movlw D'1'                          ;  128
      addwf centaine,F                 
      movlw D'2'                          ;   28
      addwf dizaine,F                 
      movlw D'8'                          ;    8
      addwf unité,F                 


      btfss res8,6
      goto $+D'5'            

      movlw D'6'                          ;   64
      addwf dizaine,F                 
      movlw D'4'                          ;    4
      addwf unité,F                 


      btfss res8,5
      goto $+D'5'            

      movlw D'3'                          ;   32
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 


      btfss res8,4
      goto $+D'5'            

      movlw D'1'                          ;   16
      addwf dizaine,F                    
      movlw D'6'                          ;    6
      addwf unité,F                 

      movlw B'00001111'                   ; 8, 4, 2, 1
      andwf res8,W    
    
      addwf unité,F     

;********************************************************************************************** 
total_unite
      movfw unité
      movwf tmps    
      movfw dizaine
    
      call decompose  

      movwf dizaine
      movfw tmps
      movwf unité

total_dizaine
      movfw dizaine
      movwf tmps    
      movfw centaine
    
      call decompose  

      movwf centaine
      movfw tmps
      movwf dizaine

total_centaine
      movfw centaine
      movwf tmps    
      movfw millième
    
      call decompose  

      movwf millième
      movfw tmps
      movwf centaine

total_millieme
      movfw millième
      movwf tmps    
      movfw dix_millième
    
      call decompose  

      movwf dix_millième
      movfw tmps
      movwf millième 

      movlw D'48'  

      addwf unité,F
      addwf dizaine,F
      addwf centaine,F
      addwf millième,F
      addwf dix_millième,F   

      return

;********************* séparer les nombres des chiffres, et additionnes ************************ 
decompose      

      movwf temps

      movfw tmps
      sublw D'10'                         ; retir 10 de W
      btfsc STATUS,Z                      ; si le bit Z est à 1 on va à la ligne 1                                       
      goto $+D'4'                         ; si Z = 1 , résultat égal
      btfss STATUS,C                      ; si le bit C est à 0 on va à la ligne 1
      goto $+D'2'
      goto $+D'5'                         
      movlw D'10' 
      subwf tmps,F   
      incf temps,F  
      goto $-D'10'

      movfw temps

      return    

;****************************** affiche le texte sélectionner ********************************* 
affiche    
      movlw    D'4'                          ; page 4, tableaux de 256 octets.
      movwf    PCLATH                        ;  
                                          ;
      movfw lecture                       ; "
lecture" est l'emplacement de la lettre                        
                                           
      incf lecture,F                      ; déplacement de la lecture 

      call selection                      ; on va chercher la lettre 
   
      movwf lettre                        ; "
lettre" contient la donnée
      call ecrit_lcd                      ; écriture du caractère sur lcd  
                                        
      decfsz phrase,F                     ; "
phrase" est la longueur du texte
      goto $-D'6'                         ; 

      return

;************** "
efface l'écran, et raméne le curseur à la premier ligne du lcd" ************** 
efface_lcd
      movlw B'
00000000'
      call envoi                          ; efface l'
écran, et raméne le curseur au début  
      call e_pulse

      movlw B
'00000001'                   
      call envoi
      call e_pulse

      call _1640µs

      return

;********************** "H'80'se placer en début de la ligne 1 du lcd" ************************ 
ligne1_lcd
      movlw B
'00001000'
      call envoi                          ; ligne 1 du lcd 
      call e_pulse

      movlw B
'00000000'
      call envoi                                        
      call e_pulse                        

      call _40µs

      return

;********************** "H'C0'se placer en début de la ligne 2 du lcd" ************************ 
ligne2_lcd
      movlw B
'00001100'
      call envoi                          ; ligne 2 du lcd
      call e_pulse

      movlw B
'00000000'
      call envoi                     
      call e_pulse                        

      call _40µs                                     

      return

;************************ "écrit ou créer, un caractére sur le lcd" *************************** 
ecrit_lcd
      swapf lettre
,W
      call envoi

      bsf lcd_rs
      call e_pulse 
      bcf lcd_rs
    
      movf lettre
,W
      call envoi

      bsf lcd_rs
      call e_pulse 
      bcf lcd_rs

      call _40µs      

      return

;************** pour écrire dans les bits 0,1,2,3, sans toucher aux bits 4,5,6,**************  
envoi
      andlw B
'00001111'
      movwf loop5

      btfsc lcd_port
,7          
      bsf loop5
,

      btfsc lcd_port
,6
      bsf loop5
,6

      btfsc lcd_port
,5
      bsf loop5
,5

      btfsc lcd_port
,4
      bsf loop5
,4

      movf loop5
,W
      movwf lcd_port

      return
      
;************************** "envoie une fin d'émision sur le lcd" ***************************** 
e_pulse
      nop
      nop
      bsf lcd_e
      nop 
      nop
      bcf lcd_e

      return

;****************************** "pour écrit dans l'eeprom" ************************************* 
ecriture_eeprom

      BANKSEL EEADR                       
; on passe en bank 2                     

      movfw adresse                       
; adresse d'écriture dans l'eeprom               
      movwf EEADR                         
;

      movfw donner                        ; donner à écrire
      movwf EEDAT                         
; 

      BANKSEL EECON1                      
; on passe en bank 3

      clrf EECON1                         
; remise a zero des eventuelles erreurs

      bcf EECON1
,EEPGD                    ; préparation à l'autorisation
      bsf EECON1,WREN                     ; autoriser accès en écriture

      bcf INTCON,GIE                      ; on coupe les interruptions 

      btfsc INTCON,GIE                    ; contrôl si les interruptions sont bien coupés
      goto $-D'
2'                         ; remonte à la ligne 2 jusqu'a coupures des interruptions 

      movlw 0x55                          
; séquence spécifique (c'est comme ça, il faut le savoir)
      movwf EECON2                        ; séquence spécifique
      movlw 0xAA                          ; séquence spécifique
      movwf EECON2                        ; séquence spécifique
      bsf EECON1,WR                       ; lance une opération d'
écriture

      btfsc    EECON1
,WR                      ; on attend que l'operation d'ecriture soit finie (de l'ordre de la ms
      goto    $-D'
1'                        ; remonte à la ligne 2 jusqu'a fin d'écriture

      bcf EECON1,WREN                     ; interdiction de l'
écriture      

      BANKSEL PORTA                       
; on passe en bank 0

      return
      
;******************************** "pour lire dans l'eeprom" ************************************ 
lecture_eeprom

      BANKSEL EEADR                       
; on passe en bank 2

      movfw adresse                         
      movwf EEADR                         
; W contient l'adresse de la lecture 
      
      BANKSEL EECON1                      ; on passe en bank 3

      bcf EECON1,EEPGD                    ; préparation à la lecture
      bsf EECON1,RD                       ; lecture de l'
EEPROM

      BANKSEL EEDAT                       
; on passe en bank 2

      movf EEDAT
,W                        ; la valeur lue dans l'éeprom est placée dans W  
      movwf donner                        ; récupération du résultat

      BANKSEL PORTA                       ; on passe en bank 0   

      return

;************************* "pause de 1 seconde pour horloge de 8 Mhz" ************************** 
_1s
      movlw D'
93'
      movwf loop1

      movlw D'
38'
      movwf loop2

      movlw D'
11'
      movwf loop3

      decfsz loop1,F
      goto $-D'
1'
      decfsz loop2,F
      goto $-D'
3'
      decfsz loop3,F
      goto $-D'
5'

      return

;********************* "pause de 100 millisecondes pour horloge de 8 Mhz" ********************** 
_100ms
      movlw D'
186'
      movwf loop1

      movlw D'
4'
      movwf loop2

      movlw D'
2'
      movwf loop3

      decfsz loop1,F
      goto $-D'
1'
      decfsz loop2,F
      goto $-D'
3'
      decfsz loop3,F
      goto $-D'
5'

      return

;********************* "pause de 1640 microseconde pour horloge de 8 Mhz" ********************** 
_1640µs   
      movlw D'
65'
      movwf loop1

      movlw D'
5'
      movwf loop2

      decfsz loop1,F
      goto $-D'
1'
      decfsz loop2,F
      goto $-D'
3'

      return       

;********************** "pause de 40 microseconde pour horloge de 8 Mhz" *********************** 
_40µs        
      movlw D'
26'
      movwf loop1

      decfsz loop1,F
      goto $-D'
1'

      return               

;*********************************************************************************************** 
    ORG H'
400'       

selection
      addwf  PCL,1  

;--------------------------- on commence à 0 pour la lecture ---------------------------------

; "création du caractère "é" dans la GGRAM"
      dt B'
00001100',B'00000000',B'00001110',B'00010001',B'00011111',B'00010000',B'00001110',B'00000000'        ; 0    

; "création du caractère "à" dans la GGRAM"
      dt B'
00000110',B'00000000',B'00001110',B'00000001',B'00001111',B'00010001',B'00001111',B'00000000'       

; "création du caractère "µ" dans la GGRAM"
      dt B'
00000000',B'00010001',B'00010001',B'00010001',B'00010011',B'00011101',B'00010000',B'00010000'      

; "création du caractère "°" dans la GGRAM"
      dt B'
00001000',B'00010100',B'00001000',B'00000000',B'00000000',B'00000000',B'00000000',B'00000000'        

;--------------------------- on commence à 32 pour la lecture ----------------------------------

      dt "Game: Farad     MilliFarad MicroFarad NanoFarad PicoFarad "                                                                                               ; 32

;--------------------------- on commence à 90 pour la lecture ----------------------------------

      dt "Analyse en cours"

;--------------------------- on commence à 106 pour la lecture ---------------------------------

      dt "Analyse termin",0,"e"

;--------------------------- on commence à 122 pour la lecture ---------------------------------

      dt "Temps : Calibrage:"

      
   

    ORG    H'
2100'                                       
      DE 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

    End           


Quelque photo :

ici mesure d'un condensateur de 100 nano-farads

025602.jpg


ici mesure d'un condensateur de 10 nano-farads

025651.jpg



==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

Retourner vers « Langage ASM »

Qui est en ligne

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