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
Pic18F27K42 interruption impossible sur Timer1
Bonjour tout le monde,
Voilà je n'arrive pas à provoquer une interruption sur le débordement du Timer1 avec le Pic18F27K42, les bit que j'ai configuré sont
PIR4,TMR1IF = 0 effacer flag interupttion
PIE4,TMR1IE = 1 autorisation d’interruption sur le débordement du timer1
INTCON0,GIE = 1 mise en fonction des interruption
T1CON,TMR1ON = 1 mise en route du timer1
Au départ du programme j'allume une LED, une fois les interruptions enclenchés, et après un certain temps, celle-ci devrait s'éteindre, et ce n''est pas le cas, à mon avis j'ai du oublié un registre à configurer mais le-quelle ?
Avez-vous une idée ?
Voici le code qui est tout simple
A+
Voilà je n'arrive pas à provoquer une interruption sur le débordement du Timer1 avec le Pic18F27K42, les bit que j'ai configuré sont
PIR4,TMR1IF = 0 effacer flag interupttion
PIE4,TMR1IE = 1 autorisation d’interruption sur le débordement du timer1
INTCON0,GIE = 1 mise en fonction des interruption
T1CON,TMR1ON = 1 mise en route du timer1
Au départ du programme j'allume une LED, une fois les interruptions enclenchés, et après un certain temps, celle-ci devrait s'éteindre, et ce n''est pas le cas, à mon avis j'ai du oublié un registre à configurer mais le-quelle ?
Avez-vous une idée ?
Voici le code qui est tout simple
Code : Tout sélectionner
Errorlevel-302 ; supprime le message "Ensure that bank bits are correct"
Errorlevel-311 ; suprime le message "l'opérande de l'opérateur HIGH était plus grand que H'FFFF' "
radix dec ; par defaut en mode décimal
list p=18F27K42 ; processeur utilisé
#include <p18F27K42.inc> ; Définitions des constantes
;***********************************************************************************************
; CONFIG1L
CONFIG FEXTOSC = OFF ; Sélection de l'oscillateur externe (oscillateur non activé)
CONFIG RSTOSC = HFINTOSC_64MHZ ; Réinitialiser la sélection de l'oscillateur (HFINTOSC avec HFFRQ = 64 MHz et CDIV = 1: 1)
; CONFIG1H
CONFIG CLKOUTEN = OFF ; Bit d'activation de la sortie d'horloge (la fonction CLKOUT est désactivée)
CONFIG PR1WAY = OFF ; PRLOCKED One-Way Set Enable bit (le bit PRLOCK peut être défini et effacé à plusieurs reprises)
CONFIG CSWEN = ON ; Bit d'activation du commutateur d'horloge (l'écriture sur NOSC et NDIV est autorisée)
CONFIG FCMEN = OFF ; Bit d'activation du moniteur d'horloge de sécurité (Fail-Safe Clock Monitor désactivé)
; CONFIG2L
CONFIG MCLRE = EXTMCLR ; Bit d'activation MCLR (si LVP = 0, la broche MCLR est MCLR; si LVP = 1, la fonction de broche RE3 est MCLR)
CONFIG PWRTS = PWRT_64 ; Bits de sélection du minuteur de mise sous tension (PWRT réglé à 64 ms)
CONFIG MVECEN = ON ; Bit d'activation multi-vecteur (multi-vecteur activé, table vectorielle utilisée pour les interruptions)
CONFIG IVT1WAY = OFF ; Bit IVTLOCK Bit d'activation unidirectionnel (le bit IVTLOCK peut être effacé et réglé à plusieurs reprises)
CONFIG LPBOREN = OFF ; Bit d'activation BOR basse consommation (ULPBOR désactivé)
CONFIG BOREN = OFF ; Brown-out Reset Enable bits (Brown-out Reset désactivé)
; CONFIG2H
CONFIG BORV = VBOR_245 ; Bits de sélection de tension de réinitialisation de Brown-out (tension de réinitialisation de Brown-out (VBOR) réglé sur 2,45 V)
CONFIG ZCD = OFF ; Bit de désactivation ZCD (ZCD désactivé. ZCD peut être activé en définissant le bit ZCDSEN de ZCDCON)
CONFIG PPS1WAY = OFF ; Bit PPSLOCK Bit d'activation de réglage unidirectionnel (le bit PPSLOCK peut être défini et effacé à plusieurs reprises (sous réserve de la séquence de déverrouillage))
CONFIG STVREN = OFF ; Bit d'activation de la réinitialisation de la pile pleine / sous-débit (pile pleine / sous-débit ne provoquera pas de réinitialisation)
CONFIG DEBUG = OFF ; Bit d'activation du débogueur (débogueur d'arrière-plan désactivé)
CONFIG XINST = OFF ; Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)
; CONFIG3L
CONFIG WDTCPS = WDTCPS_11 ; Bits de sélection de période WDT (rapport de division 1: 65536)
CONFIG WDTE = OFF ; Mode de fonctionnement WDT (WDT désactivé; SWDTEN est ignoré)
; CONFIG3H
CONFIG WDTCWS = WDTCWS_7 ; Bits de sélection de fenêtre WDT (fenêtre toujours ouverte (100%); contrôle logiciel; accès par clé non requis)
CONFIG WDTCCS = SC ; Sélecteur d'horloge d'entrée WDT (Software Control)
; CONFIG4L
CONFIG BBSIZE = BBSIZE_512 ; Bits de sélection de la taille du bloc de démarrage (la taille du bloc de démarrage est de 512 mots)
CONFIG BBEN = OFF ; Bit d'activation du bloc de démarrage (bloc de démarrage désactivé)
CONFIG SAFEN = OFF ; Bit d'activation Flash de la zone de stockage (SAF désactivé)
CONFIG WRTAPP = OFF ; Bit de protection en écriture du bloc d'application (bloc d'application non protégé en écriture)
; CONFIG4H
CONFIG WRTB = OFF ; Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
CONFIG WRTC = OFF ; Bit de protection en écriture du bloc de démarrage (bloc de démarrage (000000-0007FFh) non protégé en écriture)
CONFIG WRTD = OFF ; Bit de protection en écriture de l'EEPROM de données (l'EEPROM de données n'est pas protégée en écriture)
CONFIG WRTSAF = OFF ; Bit de protection en écriture SAF (SAF non protégé en écriture)
CONFIG LVP = OFF ; Bit d'activation de la programmation basse tension (HV sur MCLR / VPP doit être utilisé pour la programmation)
; CONFIG5L
CONFIG CP = OFF ; Bit de protection du code PFM et des données EEPROM (protection du code PFM et EEPROM des données désactivée)
; CONFIG5H
;*************************************** assignations *****************************************
#DEFINE led1 LATB,5 ; RB5 ==> led rouge, témoin de mise en fonction de l'appareil
;********************************* "déclaration des variables" *********************************
CBLOCK H'00' ; bank0
loop1 :1
loop2 :1
loop3 :1
loop4 :1
loop5 :1
res8 :1
res16 :1
ENDC
;********************************** "déclaration des macros" ***********************************
;* *
;************************* "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
;******************************* "adresse de depart après reset" *******************************
ORG H'0'
bra debut
ORG H'8' ;
bra declencher ;
ORG H'18' ;
bra declencher ;
;***********************************************************************************************
declencher
bcf led1 ; éteindre la led
bcf T1CON,TMR1ON ; arrêt du timer1
clrf PIR4 ; effacer flag interupttion du timer1 causé par le débordement
retfie
debut
;**********************************************************************************************
BANKSEL OSCCON1 ; bank 57
movlw 0x60 ;
movwf OSCCON1
;**********************************************************************************************
BANKSEL ANSELA ; bank 58
;*************************** 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), 6(RA4), 7(RA5), 9(RA7), 10(RA6)
;**************************** 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), 27(RB6), 28(RB7)
;**************************** configuration du registre ANSELC *********************************
movlw B'00000000' ; en mode numérique :
movwf ANSELC ; en mode E/S : 11(RC0), 12(RC1), 13(RC2), 14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)
;**************************** configuration du registre WPUA ***********************************
movlw B'00000000' ; tirage de résistance sur :
movwf WPUA ; pas de tirage de résistance sur : 2(RA0), 3(RA1), 4(RA2), 5(RA3), 6(RA4), 7(RA5), 10(RA6), 9(RA7)
;**************************** configuration du registre WPUB ***********************************
movlw B'00000000' ; tirage de résistance sur
movwf WPUB ; pas de tirage de résistance sur : 21(RB0), 22(RB1), 23(RB2), 24(RB3), 25(RB4), 26(RB5), 27(RB6), 28(RB7)
;**************************** configuration du registre WPUC ***********************************
movlw B'00000000' ; tirage de résistance sur :
movwf WPUC ; pas de tirage de résistance sur : 11(RC0), 12(RC1), 13(RC2), 14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)
;**********************************************************************************************
BANKSEL CM1CON0 ; bank 62
;************************* configuration du registre CM1CON0 & CM2CON0 *************************
movlw B'00000000' ; comparateur 1 off
movwf CM1CON0
movlw B'00000000' ; comparateur 2 off
movwf CM2CON0
;***************** configuration des registres TRISA & TRISB & TRISC & TRISE *******************
BANKSEL TRISA ; bank 63
;**********************************************************************************************
movlw B'00000000' ; 2(RA0), 3(RA1), 4(RA2), 5(RA3), 6(RA4), 7(RA5), 10(RA6), 9(RA7)
movwf TRISA ;
movlw B'00000000' ; 21(RB0), 22(RB1), 23(RB2), 24(RB3), 25(RB4), 26(RB5), 27(RB6), 28(RB7)
movwf TRISB ;
movlw B'00000000' ; 11(RC0), 12(RC1), 13(RC2), 14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)
movwf TRISC ;
; 1(RE3)
; 8,19(VSS), 20(VDD)
;*************************** configuration du registre INTCON0 *********************************
bcf INTCON0,GIE ; disable high priority interrupts, idem GIEH
;************************************ départ du programme **************************************
clrf PORTA ; PORTA, PORTB, PORTC ,LATA,LATB,LATC bank 63
clrf PORTB
clrf PORTC
clrf LATA
clrf LATB
clrf LATC
;************************************ départ du programme **************************************
;**************************** "témoin visuel de mise en fonction" ******************************
bsf led1 ; allumage de la led1
;***********************************************************************************************
BANKSEL PIE4 ; bank 57
clrf PIE4 ;
bcf PIE4,TMR1IE ; b0 = 1 autorisation d’interruption sur le débordement du timer1
clrf PIR4 ; bank 57
; effacer flag interupttion du timer1 causé par le débordement ,
;***********************************************************************************************
BANKSEL INTCON0 ; bank 63
clrf TMR1H ; bank 63
clrf TMR1L ; bank 63
clrf T1CON ; bank 63
bsf T1CON,TMR1ON ; T1CON bank 63
; mise en fonction du timer1
bsf INTCON0,GIE ; INTCON0 bank 63
; mise en service des interruptions
;***********************************************************************************************
terminer
nop
bra terminer
End
A+
Pic18F27K42 interruption impossible sur Timer1
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
probleme de BANK ?
PIR4 est un registre, pas un bit !
priorité bit pour tmr1 ?
en C
probleme de BANK ?
PIR4 est un registre, pas un bit !
priorité bit pour tmr1 ?
Code : Tout sélectionner
declencher
bcf led1 ; éteindre la led <-- probleme de BANK ?
bcf T1CON,TMR1ON ; arrêt du timer1
; clrf PIR4 ; effacer flag interupttion du timer1 causé par le débordement
bcf TMR1IF ; <----- flag interrupt Timer1
retfie
en C
Code : Tout sélectionner
.. partie interrupt
if (( TMR1IE_bit) && (TMR1IF_bit))
{
// U1TXB='.'; <----------------------------------- verifie si on entre dans l'interrupt
Cpt1--;
if (Cpt1 <1) // x25ms at 64MHz
{
TMR1ON_bit=0;
TMR1IE_bit=0; // stop comptage timer1
Flag_Timer1=1;
}
else
{
TMR1H = 0x3C;
TMR1L = 0xB0;
}
TMR1IF_bit = 0;
}
void Init_Timer1(void)
{
// FOSC=64MHz
//Timer1
//Prescaler 1:8; TMR1 Preload = 15536; Actual Interrupt Time : 100 ms
T1CKPS1_bit=1;
T1CKPS0_bit=1;
T1CON.B0=1;
T1RD16_bit=1;
T1CON = 0x31;
T1GCON=0; //GE disabled
T1CLK=1; // FOSC/4 => 16MHz ! ==> 100mS
TMR1H = 0x3C;
TMR1L = 0xB0;
TMR1IF_bit = 0;
TMR1IP_bit=1; // high level interrupt
Cpt1=4;
Flag_Timer1=0;
TMR1ON_bit=0;
TMR1IE_bit =0;
}
void Arme_Timer1(signed int Max_Timer1)
{
// 100mS * Max_Timer1 (at 64Mhz/4 =16Mhz)
T1CON = 0x31;
TMR1H = 0x3C;
TMR1L = 0xB0;
if (Max_Timer1>0) Cpt1= Max_Timer1 ; else Cpt1=30; // 3sec par defaut
Flag_Timer1=0;
TMR1IF_bit = 0;
TMR1IE_bit= 1;
TMR1ON_bit=1; // Timer0 ON
}
Pic18F27K42 interruption impossible sur Timer1
Bonjour paulfjujo, et tout le forum,
pour ta réponse
Non pas cette fois-ci, j'ai bien regardé sur la datasheet
Oui je le sais, qui ta fait pensée que je l'avais pris comme un bit
Comme est fait le programme, ça n'a pas d'importance, regarde par toi même
On lisant la datasheet, il précise les registre qui font appel au TImer1(page 115)
1) INTCON0, INTCON1 Control Registers
2) PIRx – Peripheral Interrupt Status Registers
3) PIEx – Peripheral Interrupt Enable Registers
4) IPRx – Peripheral Interrupt Priority Registers
5) IVTBASE[20:0] Address Registers
6) IVTLOCK Register declencher
De plus il y a une aberration, pour être plus claire voici ce que je trouve en page 314
Puis en page 337
Il y a quoi de se perdre, avec ce TXCON ou T1CON, c'est du n'importe quoi de la par de Microchip
As tu une compilation pour l'exemple que tu donnes, avec fichier ASM généré automatiquement.
J'ai refait un essai rien à faire , ça ne veut pas......
A+
pour ta réponse
paulfjujo a écrit :Source du message probleme de BANK ?
Non pas cette fois-ci, j'ai bien regardé sur la datasheet
paulfjujo a écrit :Source du message PIR4 est un registre, pas un bit !
Oui je le sais, qui ta fait pensée que je l'avais pris comme un bit
paulfjujo a écrit :Source du message priorité bit pour tmr1 ?
Comme est fait le programme, ça n'a pas d'importance, regarde par toi même
Code : Tout sélectionner
;******************************* "adresse de depart après reset" *******************************
ORG H'0'
bra debut
ORG H'8' ;
bra declencher ;
ORG H'18' ;
bra declencher ;
;***********************************************************************************************
declencher
BANKSEL PIR4 ; bank 57
clrf PIR4 ; bank 57
; effacer flag interupttion du timer1 causé par le débordement
BANKSEL LATA ; bank 63
bcf led1 ; éteindre la led
bcf T1CON,TMR1ON ; bank 63
; arrêt du timer1
retfie FAST
On lisant la datasheet, il précise les registre qui font appel au TImer1(page 115)
1) INTCON0, INTCON1 Control Registers
2) PIRx – Peripheral Interrupt Status Registers
3) PIEx – Peripheral Interrupt Enable Registers
4) IPRx – Peripheral Interrupt Priority Registers
5) IVTBASE[20:0] Address Registers
6) IVTLOCK Register declencher
De plus il y a une aberration, pour être plus claire voici ce que je trouve en page 314
Puis en page 337
Il y a quoi de se perdre, avec ce TXCON ou T1CON, c'est du n'importe quoi de la par de Microchip
As tu une compilation pour l'exemple que tu donnes, avec fichier ASM généré automatiquement.
J'ai refait un essai rien à faire , ça ne veut pas......
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Pic18F27K42 interruption impossible sur Timer1
Bonjour Temps-x et Paul,
d'après ce que je comprends
il y a une doc TxCON pour les timers 1,3,4 (marquée par erreur TXCON ?), et une autre doc TxCON pour les timers 2,4,6
Tu n'as pas initialisé T1CLK, et par défaut, il est à 0, donc source horloge extérieure.
Dans ton premier programme, tu resettes PIR4 sans sélectionner sa bank, alors que tu sortais de l'init avec la bank 63 (BANKSEL INTCON0).
Ce BANKSEL INTCON0 n'était pas nécessaire car il est en bank 63 et toujours accessible directement.
la sélection des banks, c'est vraiment une plaie, trop de registres et pas assez de ram access. Il y a 2 méthodes, soit on utilise BANKSEL à tout va, soit on épluche la doc pour savoir dans quel bank se trouve tel ou tel registre. Comme j'aime pas les instructions en trop, je préfère la 2ème solution, plutôt pénible.
d'après ce que je comprends
il y a une doc TxCON pour les timers 1,3,4 (marquée par erreur TXCON ?), et une autre doc TxCON pour les timers 2,4,6
Tu n'as pas initialisé T1CLK, et par défaut, il est à 0, donc source horloge extérieure.
Dans ton premier programme, tu resettes PIR4 sans sélectionner sa bank, alors que tu sortais de l'init avec la bank 63 (BANKSEL INTCON0).
Ce BANKSEL INTCON0 n'était pas nécessaire car il est en bank 63 et toujours accessible directement.
la sélection des banks, c'est vraiment une plaie, trop de registres et pas assez de ram access. Il y a 2 méthodes, soit on utilise BANKSEL à tout va, soit on épluche la doc pour savoir dans quel bank se trouve tel ou tel registre. Comme j'aime pas les instructions en trop, je préfère la 2ème solution, plutôt pénible.
Pic18F27K42 interruption impossible sur Timer1
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Temps-x a écrit : PIR4 est un registre, pas un bit !
Oui je le sais, qui ta fait pensée que je l'avais pris comme un bit
[/quote]
Oui, un registre,
ma remarque justement parce que tu n'isoles pas le bit correspondant à TMR1
Temps-x a écrit :As tu une compilation pour l'exemple que tu donnes, avec fichier ASM généré automatiquement.
ci joint source *.C et *.lst
dans l'init timer1 en C
Code : Tout sélectionner
T1CLK=1; // FOSC/4 => 16MHz ! ==> 100mS
as-tu essayé le timer1 en mode pooling seulement ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par paulfjujo le ven. 18 juin 2021 16:10, modifié 1 fois.
Pic18F27K42 interruption impossible sur Timer1
Pic18F27K42 interruption impossible sur Timer1
Bonsoir paulfjujo, satinas, et tout le forum,
Ça fonctionne, mais on aurais pu chercher longtemps, ça viens de 2 choses, la configuration des bits dans CONFIG2L
Ça c'est pas bon
Ça c'est bon
De plus il fallait comme le dit satinas activer T1CLK
Ce pic est vraiment compliqué, ça par dans tout les sens..... c'est pas un cadeau...
à vous deux, ainsi qu'au forum....
A+
Ça fonctionne, mais on aurais pu chercher longtemps, ça viens de 2 choses, la configuration des bits dans CONFIG2L
Ça c'est pas bon
Code : Tout sélectionner
; CONFIG2L
CONFIG MVECEN = ON ; activation multi-vecteur (multi-vecteur activé, table vectorielle utilisée pour les interruptions)
Ça c'est bon
Code : Tout sélectionner
; CONFIG2L
CONFIG MVECEN = OFF ; Le contrôleur d'interruption n'utilise pas de table vectorielle pour hiérarchiser les interruptions
De plus il fallait comme le dit satinas activer T1CLK
Code : Tout sélectionner
movlw B'00000001' ; bank 63
movwf T1CLK
Ce pic est vraiment compliqué, ça par dans tout les sens..... c'est pas un cadeau...
à vous deux, ainsi qu'au forum....
A+
Modifié en dernier par Temps-x le ven. 18 juin 2021 16:19, modifié 3 fois.
Pic18F27K42 interruption impossible sur Timer1
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
par contre l'usage des interruptions vectorisées
apres l'avoir testé, J' ACHETE !
c'est plus confortable et pas plus compliqué ..
testé avec MPLABX ....
void __interrupt(irq(U1RX),base(8)) UART1_rx_vect_isr(void);
void __interrupt(irq(TMR6),base(8),low_priority) TMR6_ISR(void);
void __interrupt(irq(TMR2),base(8),low_priority) TMR2_ISR(void);
void __interrupt(irq(INT0),base(8),low_priority) INT0_ISR(void);
void __interrupt(irq(AD),base(8),low_priority) ADCC_ISR(void);
void __interrupt(irq(default),base(8),low_priority) Default_ISR(void);
apres l'avoir testé, J' ACHETE !
c'est plus confortable et pas plus compliqué ..
testé avec MPLABX ....
void __interrupt(irq(U1RX),base(8)) UART1_rx_vect_isr(void);
void __interrupt(irq(TMR6),base(8),low_priority) TMR6_ISR(void);
void __interrupt(irq(TMR2),base(8),low_priority) TMR2_ISR(void);
void __interrupt(irq(INT0),base(8),low_priority) INT0_ISR(void);
void __interrupt(irq(AD),base(8),low_priority) ADCC_ISR(void);
void __interrupt(irq(default),base(8),low_priority) Default_ISR(void);
Modifié en dernier par paulfjujo le ven. 18 juin 2021 16:20, modifié 1 fois.
Pic18F27K42 interruption impossible sur Timer1
Re
C'est une option en plus, mais on va pas tout configurer, c'est vrai que c'est mieux, mais je préfère mon passé.
A+
paulfjujo a écrit :Source du message par contre l'usage des interruptions vectorisées
apres l'avoir testé, J' ACHETE !
c'est plus confortable et pas plus compliqué ..
C'est une option en plus, mais on va pas tout configurer, c'est vrai que c'est mieux, mais je préfère mon passé.
A+
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 48 invités