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
Potentiomètre numérique et Rhéostat
Bonjour tout le forum,
J'ai reçu dernièrement des potentiomètres et rhéostats numériques de chez Microchip, je vais vous montrer comment les mettre en fonction.
Pour ceux qui sont intéressés voici une liste des potentiomètres et rhéostats numériques de chez Microchip ICI
J'ai utilisé pour les testes un microcontrôleur Pic18F26K22, voici son datasheet
Pour le teste j'ai pris un MCP41XX d'une valeur de 10 kΩ, commandé en mode SPI, en nombre de pas de 256 positions, voici le datasheet
Dans la série des potentiomètres numériques et rhéostats, on peut soit prendre une version SPI ou I2C
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.
Schéma
Le code
Le code ASM a été écrit avec jens file Editor 3.95
Fichier à mettre dans le Pic : Mcp4151(Hex).zip
Fichier code : Mcp4151(Code).zip
J'ai reçu dernièrement des potentiomètres et rhéostats numériques de chez Microchip, je vais vous montrer comment les mettre en fonction.
Pour ceux qui sont intéressés voici une liste des potentiomètres et rhéostats numériques de chez Microchip ICI
J'ai utilisé pour les testes un microcontrôleur Pic18F26K22, voici son datasheet
Pour le teste j'ai pris un MCP41XX d'une valeur de 10 kΩ, commandé en mode SPI, en nombre de pas de 256 positions, voici le datasheet
Dans la série des potentiomètres numériques et rhéostats, on peut soit prendre une version SPI ou I2C
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.
Schéma
Le code
Le code ASM a été écrit avec jens file Editor 3.95
Code : Tout sélectionner
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 à mettre dans le Pic : Mcp4151(Hex).zip
Fichier code : Mcp4151(Code).zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le dim. 14 juin 2020 13:01, modifié 20 fois.
Potentiomètre numérique et Rhéostat
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonjour,
Je ne connais pas ces composants, concrètement çà sert dans quelles applications ? çà s'utilise comment ? il faut quand même avoir quelque chose à toucher avec les doigts pour agir dessus ?
Comme je n'ai pas Proteus je ne peux pas tester ton schéma, c'est en agissant sur deux boutons poussoirs ?
Je ne connais pas ces composants, concrètement çà sert dans quelles applications ? çà s'utilise comment ? il faut quand même avoir quelque chose à toucher avec les doigts pour agir dessus ?
Comme je n'ai pas Proteus je ne peux pas tester ton schéma, c'est en agissant sur deux boutons poussoirs ?
Potentiomètre numérique et Rhéostat
Bonsoir F6FCO, et tout le forum,
Dans n'importe quelle application, selon ton imagination.....,
Exemple : si tu désir avoir une tension fixe sur la sortie d'un amplificateur, suffit de faire varier le potentiomètre à l'aide d'un microcontrôleur.
Avantage tu n'as pas besoin d'y touché, c'est le programme que tu auras écrit qui va s'en charger en envoyant une donnée numérique sur celui-ci
Dans la série des potentiomètres numériques et rhéostats, on peut soit prendre une version par SPI ou I2C, au choix ...
Il faut bien sur écrire un petit programme, de préférence en ASM pour le mettre en fonction.
j'en reparle ce Week-end, en début de post, pour l'instant j'attends la poste qui doit me les livrés surement fin de semaine.
Ce qui me permettra de vous faire une petit vidéo sur le composant.
Pas obligé, tu peux le faire par télécommande... reconnaissance vocal,.... ou automatique...., mais aussi en manuelle, mais toujours suivit d'un microcontrôleur pour envoyer l'information du positionnement
Il existe aussi des amplificateurs numériques, surement pour un prochain post....paulfjujo en a déjà utilisé voir ICI pour les intéressé
A+
F6FCO a écrit :Source du message concrètement çà sert dans quelles applications ?
Dans n'importe quelle application, selon ton imagination.....,
Exemple : si tu désir avoir une tension fixe sur la sortie d'un amplificateur, suffit de faire varier le potentiomètre à l'aide d'un microcontrôleur.
Avantage tu n'as pas besoin d'y touché, c'est le programme que tu auras écrit qui va s'en charger en envoyant une donnée numérique sur celui-ci
F6FCO a écrit :Source du message çà s'utilise comment ?
Dans la série des potentiomètres numériques et rhéostats, on peut soit prendre une version par SPI ou I2C, au choix ...
Il faut bien sur écrire un petit programme, de préférence en ASM pour le mettre en fonction.
j'en reparle ce Week-end, en début de post, pour l'instant j'attends la poste qui doit me les livrés surement fin de semaine.
Ce qui me permettra de vous faire une petit vidéo sur le composant.
F6FCO a écrit :Source du message il faut quand même avoir quelque chose à toucher avec les doigts pour agir dessus ?
Pas obligé, tu peux le faire par télécommande... reconnaissance vocal,.... ou automatique...., mais aussi en manuelle, mais toujours suivit d'un microcontrôleur pour envoyer l'information du positionnement
Il existe aussi des amplificateurs numériques, surement pour un prochain post....paulfjujo en a déjà utilisé voir ICI pour les intéressé
A+
Potentiomètre numérique et Rhéostat
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonjour tout le monde,
Ah d'accord je comprends mieux maintenant, au début je ne voyais l’intérêt par rapport à un potentiomètre normal si ce n'est la difficulté accrue pour la mise en oeuvre.
Il neige de nouveau sur le forum, faudra vérifier la toiture.
Temps-x a écrit :
Pas obligé, tu peux le faire par télécommande... reconnaissance vocal,.... ou automatique...., mais aussi en manuelle, mais toujours suivit d'un microcontrôleur pour envoyer l'information du positionnement
Ah d'accord je comprends mieux maintenant, au début je ne voyais l’intérêt par rapport à un potentiomètre normal si ce n'est la difficulté accrue pour la mise en oeuvre.
Il neige de nouveau sur le forum, faudra vérifier la toiture.
Potentiomètre numérique et Rhéostat
Bonjour F6FCO, et tout le forum,
Si tu veux l'essayer tu peux la télécharger ICI en version limité
A+
F6FCO a écrit :Source du message Comme je n'ai pas Proteus je ne peux pas tester ton schéma
Si tu veux l'essayer tu peux la télécharger ICI en version limité
A+
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 41 invités