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 ---
- 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 ---
Modérateur : mazertoc
Méthode de calcul d'un condensateur
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.
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.
pour tout ceux qui éclairerons ma lanterne.......
Je vous donne le code qui est pour l'instant un brouillon, mais opérationnel....
Quelque photo :
ici mesure d'un condensateur de 100 nano-farads
ici mesure d'un condensateur de 10 nano-farads
A+
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.
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.
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 :1
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,3 ***********************
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,7 **************
envoi
andlw B'00001111'
movwf loop5
btfsc lcd_port,7
bsf loop5,7
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
ici mesure d'un condensateur de 10 nano-farads
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 66 invités