Bonjour à tous,
Il se trouve que j'avais commandé la même plaquette que celle que Bertrand nous a présenté dans la vidéo 349 mais je n'avais jusque là pas eu le temps d'essayer (comme un certain nombre d'autres plaquettes d'ailleurs...). J'ai d'abord testé avec des tensions continues de -5V à +5V et en retournant VH et VL puis en injectant un signal alternatif. Le fonctionnement est nominal, le bruit mesuré est de l'ordre de 10 mV cc à 1 MHz.
J'en conclue que la plaquette de Bertrand était défectueuse et ne représente pas le fonctionnement de ce composant.
PB
Bonjour papyblue, et tout le forum,
Pour ceux qui sont intéressés voici une liste des potentiomètres et rhéostats numériques de chez Microchip https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwjg3JzJwbDoAhU_DmMBHcJmCr0QFjAAegQIBBAB&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F20002017D.pdf&usg=AOvVaw3_WiXv2YGAxB2TM3LT9H99 (https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwjg3JzJwbDoAhU_DmMBHcJmCr0QFjAAegQIBBAB&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F20002017D.pdf&usg=AOvVaw3_WiXv2YGAxB2TM3LT9H99)
J'ai pu testé des MCP41XX d'une valeur de 10 kΩ, commandé en mode SPI, avec Pic18F26K22 en nombre de pas de 256 positions
Vous avez le choix lors de l'achat de 4 valeur résistif, pour les modéles de chez Microchip
- 5kΩ
- 10 kΩ
- 50 kΩ
- 100 kΩ
Ses potentiomètres numériques et rhéostats ont un nombre de pas, ainsi qu'une tolérance, défini dans la datasheet
Ils peuvent être du type volatile, et non volatile, les versions non-volatile ont une EEPROM
Ils intègrent la technologie WiperLock qui fournit une méthode de verrouillage de la configuration du curseur.
Pour la déverrouiller, une commande haute tension est nécessaire (>8,5 V), ce qui protège la configuration pendant le fonctionnement normal.
Voici la datasheet du MCP41XX : https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwig-5iHxLDoAhVRA2MBHbOwBI4QFjAAegQIBhAB&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F22059a.pdf&usg=AOvVaw04i4cAfkGREqC6mfYFVhuT (https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwig-5iHxLDoAhVRA2MBHbOwBI4QFjAAegQIBhAB&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2F22059a.pdf&usg=AOvVaw04i4cAfkGREqC6mfYFVhuT)
Pour que vous puissiez tester sans achat je vous donne le schéma avec son fichier de simulation sous Proteus 8.9
Vous pouvez télécharger le logiciel Proteus en version d’évaluation (malheureusement) https://proteus.fr.malavida.com/#gref
Je vous joint aussi le fichier qui est à mettre dans le Pic, sous simulation ou sans simulation
De plus voici le code écrit en langage assembleur (ASM)
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
radix dec ; par defaut en mode décimal
list p=18f26K22 ; processeur utilisé
#include <p18f26K22.inc> ; Définitions des constantes
;***********************************************************************************************
; CONFIG11H
CONFIG FOSC = INTIO67
CONFIG FCMEN = OFF
CONFIG IESO = OFF
; CONFIG2L
CONFIG PWRTEN = OFF
CONFIG BOREN = OFF
CONFIG BORV = 190
; CONFIG2H
CONFIG WDTEN = OFF
CONFIG WDTPS = 1
; CONFIG3H
CONFIG CCP2MX = PORTC1
CONFIG PBADEN = OFF
CONFIG CCP3MX = PORTC6
CONFIG HFOFST = OFF
CONFIG T3CMX = PORTC0
CONFIG P2BMX = PORTC0
CONFIG MCLRE = INTMCLR
; CONFIG4L
CONFIG STVREN = OFF
CONFIG LVP = OFF
CONFIG XINST = OFF
CONFIG DEBUG = OFF
; CONFIG5L
CONFIG CP0 = OFF
CONFIG CP1 = OFF
CONFIG CP2 = OFF
CONFIG CP3 = OFF
; CONFIG5H
CONFIG CPB = OFF
CONFIG CPD = OFF
; CONFIG6L
CONFIG EBTR0 = OFF
; CONFIG6H
CONFIG EBTR1 = OFF
; CONFIG7L
CONFIG EBTR2 = OFF
; CONFIG7H
CONFIG EBTR3 = OFF
;*************************************** assignations *****************************************
#DEFINE cs LATC,7 ; RC7 ==> activer ou désactiver la transmission
#DEFINE led3 LATA,3 ; RA3 led rouge, témoin de la limite maximal atteint par le potentiomètre
#DEFINE led2 LATA,0 ; RA0 led bleu, témoin de la limite minimal atteint par le potentiomètre
#DEFINE led1 LATA,7 ; RA7 led verte, témoin de mise en fonction de l'appareil
;********************************* "déclaration des variables" *********************************
CBLOCK H'20' ; bank0
loop1 :1
loop2 :1
loop3 :1
loop4 :1
loop5 :1
buzzer :1
curseur :2
temps :1
tmps :1
adresse_low :1
adresse_hi :1
donner :1
ENDC
;************************* "Macro pour se positionner dans un tableau" *************************
tableau MACRO adresse
movlw UPPER(adresse) ;
movwf TBLPTRU ;
movlw HIGH(adresse) ;
movwf TBLPTRH ;
movlw LOW(adresse) ;
movwf TBLPTRL
ENDM
;************************** Macro pour écrit dans l'eeprom ************************************
ecriture_eeprom MACRO valeur1,valeur2,valeur3
movlw valeur1
movwf adresse_hi
movlw valeur2
movwf adresse_low
movf valeur3,W
movwf donner
call eeprom_ecriture
ENDM
;*************************** Macro pour lire dans l'eeprom ************************************
lecture_eeprom MACRO valeur1,valeur2
movlw valeur1
movwf adresse_hi
movlw valeur2
movwf adresse_low
call eeprom_lecture
ENDM
;******************************* "adresse de depart après reset" *******************************
ORG H'0'
bra debut
ORG H'8'
retfie
ORG H'18'
retfie
debut
;***************** "configuration de la bank sélectionné du microcontrôleur" *******************
movlw B'00000000'
movwf BSR
;******************** "configuration de l'oscillateur du microcontrôleur" **********************
movlw B'01110100' ; oscillateur à 16 Mhz, fréquence stable si PLL (16 * 4)= 64 Mhz
; movlw B'01100100' ; oscillateur à 8 Mhz, fréquence stable si PLL (8 * 4) = 32 Mhz
; movlw B'01010010' ; oscillateur à 4 Mhz, fréquence stable
; movlw B'01000010' ; oscillateur à 2 Mhz, fréquence stable
; movlw B'00110010' ; oscillateur à 1 Mhz, fréquence stable
movwf OSCCON
;**************************** configuration du registre OSCTUNE ********************************
movlw B'00000000' ; bit 6 à 1 : PLL * 4
movwf OSCTUNE ; bit 6 à 0 : PLL désactivé
;*************************** configuration du registre ANSELA **********************************
movlw B'00000000' ; en mode numérique :
movwf ANSELA ; en mode E/S : 2(RA0), 3(RA1), 4(RA2), 5(RA3), 7(RA5)
;**************************** configuration du registre ANSELB *********************************
movlw B'00000000' ; en mode numérique :
movwf ANSELB ; en mode E/S : 21(RB0), 22(RB1) 23(RB2), 24(RB3), 25(RB4), 26(RB5)
;**************************** configuration du registre ANSELC *********************************
movlw B'00000000' ; en mode numérique :
movwf ANSELC ; en mode E/S : 13(RC2), 14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)
;*************************** configuration du registre ADCON0 **********************************
movlw B'00000000' ; b0 = ADON mise en service le convertiseur 0 = arrêt : 1 = marche
movwf ADCON0 ; b1 = GO/DONE indique la fin de la conversion analogique, et permet de lancer la conversion
; b2 à b6 = réglage de la sélection du canal
;*************************** configuration du registre ADCON1 **********************************
movlw B'00000000' ; b2 à b3 = 00 : sélection de la tension de reférence, Vref+ = Vss
movwf ADCON1 ; b0 à b1 = 00 : sélection de la tension de reférence, Vref- = Vdd
;*************************** configuration du registre ADCON2 **********************************
movlw B'00110110' ; b0 à b2 = FOSC/64
movwf ADCON2 ; b3 à b5 = 16 TAG
;
; b7 = détermine si le résultat de la conversion
; sera justifié à droite = 1 ou à gauche = 0
;************************* configuration du registre CM1CON0 & CM2CON0 *************************
movlw B'00000000' ; comparateur 1 off
movwf CM1CON0
movlw B'00000000' ; comparateur 2 off
movwf CM2CON0
;*********************** "configuration du pwm du microncontrôleur" ****************************
movlw D'255' ; réglage du "débordement" de TMR2
movwf PR2 ; PR2 D'255' donc fréquence à 1950 Hz avec prédiviseur à 4
movlw B'00000101' ; "prédiviseur à 4" bit zéro à 1, bit un à 0
movwf T2CON ; "timer on", bit deux à 1 (mise en route du timer2. 0 : arrêt. 1 : marche)
; "postdiviseur à 1" bit trois à 0, bit quatre à 0, bit cinq à 0, bit six à 0
; dans registre de contrôle
movlw B'00001100' ; "1100" 4 bits mode pwm
movwf CCP1CON ; "00" 2 bits pour variation du rapport cyclique(RC2)
movwf CCP2CON ; "00" 2 bits pour variation du rapport cyclique(RC1)
;***************** configuration des registres TRISA & TRISB & TRISC & TRISE *******************
movlw B'00000000' ; RA0(2), RA1(3), RA2(4), RA3(5), RA4(6), RA5(7), RA6(10), RA7(9)
movwf TRISA ;
movlw B'11111111' ; RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)
movwf TRISB ;
movlw B'01010000' ; RC0(11), RC1(12), RC2(13), RC3(14), RC4(15), RC5(16), RC6(17), RC7(18)
movwf TRISC ;
movlw B'00001000' ; RE3(1)
movwf TRISE ;
; VSS(8), VSS(19), VDD(20)
;**************************** configuration du registre SSP1CON1 *******************************
movlw B'01000000' ; B7 = 0 : lecture des données au milieu
movwf SSP1STAT ; B'01000000'
movlw B'00100001' ; B0 ...B3 = spi en mode Maître, clock = FOSC/16, B5 = polarité négative
movwf SSP1CON1 ; 16 /16(quartz) = 1Mbps B'00100001'
;**************************** configuration du registre INTCON2 ********************************
movlw B'00000000' ; B7 = 0 résistances en service
movwf INTCON2 ;
;**************************** configuration du registre WPUB ***********************************
movlw B'11111111' ; tirage de résistance sur : RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)
movwf WPUB ; pas de tirage de résistance sur :
;**************************** configuration du registre INTCON *********************************
movlw B'00000000' ;
movwf INTCON ; interruption hors service
;************************************ départ du programme **************************************
clrf CCPR1L ; sortie du pwm(RC2)
clrf CCPR2L ; sortie du pwm(RC1)
clrf PORTA
clrf PORTB
clrf PORTC
clrf LATA
clrf LATB
clrf LATC
;***********************************************************************************************
bsf cs ; désactivé l'émision du port spi
;**************************** " témoin visuel de mise en fonction" *****************************
movlw D'2' ; pour 2 clignotements
movwf loop5
clignote
bsf led1
rcall _1s
bcf led1
rcall _1s
decfsz loop5,F
bra clignote
;***********************************************************************************************
clrf curseur+0
clrf curseur+1
;***********************************************************************************************
rcall traiter
;***********************************************************************************************
bsf led2 ; témoin de mise à zéro
;***********************************************************************************************
gestion
btfss PORTB,7
rcall augmenter
btfss PORTB,0
rcall diminuer
bra gestion
;***********************************************************************************************
augmenter
btfsc led3
return
bcf led2
movlw D'255'
xorwf curseur+0,W
btfsc STATUS,Z
bra plus_end
incf curseur+0,F
bra traiter
plus_end
bsf led3
clrf curseur+0 ;
bsf curseur+1,0 ; 256
bra traiter
;***********************************************************************************************
diminuer
btfsc led2
return
bcf led3
btfss curseur+1,0
bra moins
clrf curseur+1
movlw D'255'
movwf curseur+0
bra traiter
moins
movlw D'1'
xorwf curseur+0,W
btfsc STATUS,Z
bra moins_end
decf curseur+0,F
bra traiter
moins_end
bsf led2
decf curseur+0,F
bra traiter
;***********************************************************************************************
traiter
rcall _100ms ;
bcf cs ; activé l'émision du port spi
movf curseur+1,W ; poids haut
rcall spi
movf curseur+0,W ; poids bas
rcall spi
bsf cs ; désactivé l'émision du port spi
return
;***********************************************************************************************
spi
movwf SSP1BUF
attends
btfss SSP1STAT,BF ;
bra attends
movf SSP1BUF,W ;
return
;************************* "pause de 1 seconde pour horloge de 16 Mhz" *************************
_1s
movlw D'190'
movwf loop1
movlw D'75'
movwf loop2
movlw D'21'
movwf loop3
decfsz loop1,F
bra $-D'2'
decfsz loop2,F
bra $-D'6'
decfsz loop3,F
bra $-D'10'
return
;********************* "pause de 100 millisecondes pour horloge de 16 Mhz" *********************
_100ms
movlw D'119'
movwf loop1
movlw D'8'
movwf loop2
movlw D'3'
movwf loop3
decfsz loop1
bra $-D'2'
decfsz loop2
bra $-D'6'
decfsz loop3
bra $-D'10'
return
;********************** "pause de 10 millisecondes pour horloge de 16 Mhz" *********************
_10ms
movlw D'241'
movwf loop1
movlw D'52'
movwf loop2
decfsz loop1
bra $-D'2'
decfsz loop2
bra $-D'6'
return
;****************************** "pour écrit dans l'eeprom" *************************************
eeprom_ecriture
movf adresse_hi,W ; adresse du poid fort
movwf EEADRH ;
movf adresse_low,W ; adresse du poid faible
movwf EEADR ;
movf donner,W ;
movwf EEDATA ; écriture de la donnée
bcf EECON1,EEPGD ; préparation à l'autorisation
bcf EECON1,CFGS ; access eeprom
bsf EECON1,WREN ; Enable writes
bcf INTCON,GIE ; couper les interruptions
btfsc INTCON,GIE ; contrôl si les interruptions sont bien coupés
bra $-D'2' ; remonte à la ligne 2 jusqu'a coupures des interruptions
movlw H'55' ; séquence spécifique (c'est comme ça, il faut le savoir)
movwf EECON2 ; séquence spécifique
movlw H'AA' ; 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
bra $-D'2' ; remonte à la ligne 2 jusqu'a fin d'écriture
bcf EECON1, WREN ; interdiction de l'écriture
return
;******************************** "pour lire dans l'eeprom" ************************************
eeprom_lecture
movf adresse_hi,W ; adresse du poid fort
movwf EEADRH ;
movf adresse_low,W ; adresse du poid faible
movwf EEADR ;
bcf EECON1,EEPGD ; préparation à la lecture
bcf EECON1,CFGS ; access EEPROM
bsf EECON1,RD ; lecture de l'EEPROM
movf EEDATA,W ; la valeur lue dans l'éeprom est placée dans W
movwf donner
return
;***********************************************************************************************
End
Fichier joint :