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 : Jérémy
Configuration ADC avec un Vref 2.48 V
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Comme j'ai pas microC, c'est pas grave tu as fait l'essai c'est bien.
C'est dommage !
Je ne connais pas l'ASM , mais j'ai l'impression que tu met la valeur ADRESL dans le registre de travail "W" puis le met dans la variable tension :
Ensuite tu récupére l'ADRESH et pareil dans "W" puis apres je suis pas ce à quoi sert ce . mais il manque la multiplication de 256 non ?
Configuration ADC avec un Vref 2.48 V
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour jeremy
ADRESH est deja le poids fort de la valeur ADC, donc pas besoin de multiplier par 256.
J'ai testé ton bout de code sur le clicker2 ( car deja en court d'utilisation sur un autre programme..)
et il donne entiere satisfaction
testé ave cun potar de 2,2K entre +3,3V et 0V
mais avec usage ADC NORMAL ( +Vref =VCC et -VRef=0V)
j'ai un 16F1847 sur une breadboard , je vais essayer aussi avec
alimentation battery Li On 3,2 V et usage Vref ..
à suivre..
ADRESH est deja le poids fort de la valeur ADC, donc pas besoin de multiplier par 256.
J'ai testé ton bout de code sur le clicker2 ( car deja en court d'utilisation sur un autre programme..)
et il donne entiere satisfaction
testé ave cun potar de 2,2K entre +3,3V et 0V
mais avec usage ADC NORMAL ( +Vref =VCC et -VRef=0V)
Code : Tout sélectionner
int Tension=0; // variable globale !
while(1)
{
Tension=0; //ADC_Read(0);
ADCON0.B1 = 1; // On démarre la conversion
while (ADCON0.B1); // J'attends que le bit soit effacer à la fin de la conversion
_asm {
MOVF ADRESL,W
MOVWF _Tension
MOVF ADRESH,W
MOVWF _Tension+1
}
WordToStr(Tension,CRam1);
UART1_Write_CText("Analog CH1= ");
UART1_Write_Text(CRam1);
UART1_Write(TAB);
if (Tension >= 1010){
UART1_Write_Text("Rouge");
//Rouge=1;
}
else if (Tension >= 990){
UART1_Write_Text("Orange");
// Orange = 1;
}
else if (Tension >= 970){
UART1_Write_Text("Jaune");
// Jaune = 1;
}
else if (Tension < 970){
UART1_Write_Text("Vert");
// Vert = 1;
}
else
UART1_Write_Text("....");
Delay_ms(1000);
CRLF1();
// Rouge = Orange = Jaune = Vert = 0;
Delay_ms(100);
}
Code : Tout sélectionner
Cliker2 18F87J50 : Test module Finger Print sur MikroBus #1
Directory
Projet : 18F87J50_GSM2_GPS_7N_UART2_UART1_LCD_I2C_MCP23017_WOE_2016.mcppi
Source MikroC : 18F87J50_GSM2_GPS_7N_UART2_UART1_LCD_I2C_WOE_w_h_170108_.c
Q=8MHZ x PLL => 48MHz Alim 3,3V
Analog CH1= 684 Vert
Analog CH1= 682 Vert
Analog CH1= 831 Vert
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1022 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 960 Vert
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 984 Jaune
Analog CH1= 984 Jaune
Analog CH1= 964 Vert
Analog CH1= 964 Vert
Analog CH1= 949 Vert
Analog CH1= 929 Vert
Analog CH1= 909 Vert
Analog CH1= 879 Vert
Analog CH1= 800 Vert
Analog CH1= 671 Vert
Analog CH1= 570 Vert
Analog CH1= 377 Vert
Analog CH1= 44 Vert
Analog CH1= 1 Vert
Analog CH1= 166 Vert
Analog CH1= 391 Vert
Analog CH1= 481 Vert
Analog CH1= 558 Vert
Analog CH1= 587 Vert
Analog CH1= 611 Vert
Analog CH1= 630 Vert
Analog CH1= 651 Vert
Analog CH1= 672 Vert
Analog CH1= 686 Vert
Analog CH1= 705 Vert
Analog CH1= 726 Vert
Analog CH1= 748 Vert
Analog CH1= 771 Vert
Analog CH1= 794 Vert
Analog CH1= 815 Vert
Analog CH1= 860 Vert
Analog CH1= 884 Vert
Analog CH1= 910 Vert
Analog CH1= 935 Vert
Analog CH1= 964 Vert
Analog CH1= 990 Orange
Analog CH1= 989 Jaune
Analog CH1= 995 Orange
Analog CH1= 1004 Orange
Analog CH1= 1015 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1020 Rouge
Analog CH1= 1009 Orange
Analog CH1= 995 Orange
Analog CH1= 985 Jaune
Analog CH1= 975 Jaune
Analog CH1= 975 Jaune
Analog CH1= 985 Jaune
Analog CH1= 1005 Orange
Analog CH1= 1009 Orange
Analog CH1= 994 Orange
Analog CH1= 970 Jaune
Analog CH1= 959 Vert
Analog CH1= 935 Vert
Analog CH1= 721 Vert
Analog CH1= 42 Vert
Analog CH1= 1 Vert
Analog CH1= 2 Vert
Analog CH1= 2 Vert
Analog CH1= 2 Vert
j'ai un 16F1847 sur une breadboard , je vais essayer aussi avec
alimentation battery Li On 3,2 V et usage Vref ..
à suivre..
Configuration ADC avec un Vref 2.48 V
Bonjour Paul merci pour ton test
jeremy lorsque tu fais en C
Tension=ADRESL;
la valeur 8 bits de ADRESL va se placer dans la partie basse de la variable Tension c'est a dire le poids faible comment faire pour placer la partie haute c'est a dire ADRESH soit tu déclares ta variable Tension en tableau char et la tu fais bien
Tension[0]=ADRESL;partie basse
Tension[1]=ADRESH;partie haute
soit tu fais ta manip rotation addition
soit EN ASM
MOVF ADRESL,W; charge la valeur contenue dans ADRESL dans le REGISTRE W
MOVWF _Tension; le contenu du registre W est transféré dans la partie basse de la variable Tension
MOVF ADRESH,W; charge la valeur contenue dans le registre ADRESH dans le registre W
MOVWF _Tension+1;le contenu du registre W est transféré dans la partie haute de la variable Tension. position basse + UNE position donc la partie haute
A+
ps je vois que tu suis en ASM
jeremy lorsque tu fais en C
Tension=ADRESL;
la valeur 8 bits de ADRESL va se placer dans la partie basse de la variable Tension c'est a dire le poids faible comment faire pour placer la partie haute c'est a dire ADRESH soit tu déclares ta variable Tension en tableau char et la tu fais bien
Tension[0]=ADRESL;partie basse
Tension[1]=ADRESH;partie haute
soit tu fais ta manip rotation addition
soit EN ASM
MOVF ADRESL,W; charge la valeur contenue dans ADRESL dans le REGISTRE W
MOVWF _Tension; le contenu du registre W est transféré dans la partie basse de la variable Tension
MOVF ADRESH,W; charge la valeur contenue dans le registre ADRESH dans le registre W
MOVWF _Tension+1;le contenu du registre W est transféré dans la partie haute de la variable Tension. position basse + UNE position donc la partie haute
A+
ps je vois que tu suis en ASM
Configuration ADC avec un Vref 2.48 V
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Oui j'ai lu bigonoff ....... en travers et pas jusqu'au bout, je comprenais rien , mais je désespère pas un jour de le finir ! avec l'experience peut etre que je prendrais plus de plaisir à le faire !
car pour moi la programmation doit rester un plaisir ! Je m'arrache bien assez de cheveu comme ca !
car pour moi la programmation doit rester un plaisir ! Je m'arrache bien assez de cheveu comme ca !
Configuration ADC avec un Vref 2.48 V
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
testé sur 16F1847 .. OK
j'ai 1015 pts à 2.030V
PIC alimenté avec ma batterie Li-IOn 3,7V (mesurée 3,97V)
ADC_Get_Sample() est OK pour lire la valeur de l'ADC
mais garder l'init directe avec registres ADC ( sans activer ADC_Init() de la librairie)
Activer aussi la Vref Buffer.
Test fait avec un potar 2,2K entre VCC et 0V
j'ai 1015 pts à 2.030V
PIC alimenté avec ma batterie Li-IOn 3,7V (mesurée 3,97V)
ADC_Get_Sample() est OK pour lire la valeur de l'ADC
mais garder l'init directe avec registres ADC ( sans activer ADC_Init() de la librairie)
Activer aussi la Vref Buffer.
Test fait avec un potar 2,2K entre VCC et 0V
Code : Tout sélectionner
//-- commandes terminal VT220
#define CLS 12 // effacement de page sur Terminal VBRAY
#define CR 13
#define VT 10
#define LF 10
#define TAB 9
#define BELL 7
//ac:Pinout_16F1847
char TEXTE[80];
char * txt;
char CRam1[64];
unsigned int i,j,k,l,m;
#define MAXLEN1 80
unsigned char buffer1[MAXLEN1];
unsigned int Index1=0;
unsigned int UART1_DataReady=0;
unsigned int i1=0;
unsigned char c1;
unsigned int Tension ;
int Envoi_tension = 0;
void strConstRamCpy(char *dest, const char *source);
void UART1_Write_CText(const char *txt1);
void CRLF1(void);
void RAZ_UART1()
{
for (i=0;i<MAXLEN1;i++) buffer1[i]=0;
Index1=0;
i1=0;
c1=RCREG;
c1=0;
UART1_DataReady=0;
PIE2.RCIE=1 ;
RCSTA.CREN=1;
}
void UART1_Write_CText(const char *txt1)
{
while (*txt1)
UART_Write(*(txt1++));
}
// --- Copie le texte depuis ROM vers RAM
void strConstRamCpy(char *dest, const char *source)
{
while(*source) *(dest++) = *(source++) ;
*dest = 0 ; // terminateur
}
void CRLF1()
{
UART1_Write(CR);
UART1_Write(LF);
}
void Lecture_T2()
{
Tension=ADC_Get_Sample(1);
WordToStr(Tension,CRam1);
UART1_Write_CText("Analog CH1= ");
UART1_Write_Text(CRam1);
UART1_Write(TAB);
if (Tension >= 1010){
UART_Write_Text("Rouge");
//Rouge=1;
}
else if (Tension >= 990){
UART1_Write_Text("Orange");
// Orange = 1;
}
else if (Tension >= 970){
UART1_Write_Text("Jaune");
// Jaune = 1;
}
else if (Tension < 970){
UART1_Write_Text("Vert");
// Vert = 1;
}
else
UART1_Write_Text("....");
Delay_ms(1000);
CRLF1();
// Rouge = Orange = Jaune = Vert = 0;
Delay_ms(100);
}
void main()
{
OSCCON = 0b01110110 ; // Pll disable; Freq=8Mhz; OSC:intern
TRISB = 0b00000010; // RB1 en entrée
TRISA = 0b00000011; // RA1 en entrée le reste en sortie
ANSELA = 0b00000001; // RA0 en Analogique
ANSELB = 0; // PORTB en Digital
//------------------------------------------------------------------------------
// Réglages du Timer 1 pour 100 ms
TMR1IE_bit = 0; // désactiver au départ
T1CON = 0x21;
TMR1IF_bit = 0;
TMR1H = 0x3C;
TMR1L = 0xB0;
//------------------------------------------------------------------------------
// Réglages du Timer 0 pour 1 ms
TMR0IE_bit = 0; // désactiver au départ
OPTION_REG = 0x82; // Presacler 1:8
TMR0 = 6; // Offset
TMR0IF_bit = 0;
//------------------------------------------------------------------------------
// INTCON = Réglages des interruptions
RCIE_bit = 1; // INT sur Rx UART activé
PEIE_bit = 1; // INT péripheriques Activé
GIE_bit = 1; // INT Global activé
//------------------------------------------------------------------------------
UART1_Init(19200); // Initialisation de l'UART
Delay_ms(100);
//------------------------------------------------------------------------------
UART1_Write(CLS);
Delay_ms(500);
UART1_Write_CText("\r\nInit ADC voie RA1 Ch1 \r\n");
C1ON_bit = 0; // Désactive les comparateurs
C2ON_bit = 0;
CPSCON0=0;
// Configuration de l'ADCON0
ADCON0 = 0b00000100; // 00001 = AN1 est selectionné, ADC NOT enable
// Configuration de l'ADCON1
ADCON1 = 0b11110011; // Right jsutified, 110 Fosc/64, ref du moins=GND, REF+ par FVR reglé sur 2.048V
ADCON1=0;
ADCON1.ADFM=1; // Right justied
// bit 6-4 ADCS<2:0>: A/D Conversion Clock Select bits
ADCON1.ADCS2=1; //110 = FOSC/64
ADCON1.ADCS1=1;
ADCON1.ADCS0=0;
ADNREF_bit=0;
ADPREF1_bit=1; // +VFR 2.048V buffer selectionné
ADPREF0_bit=1;
// Configuration de Vref
//REGISTER 14-1: FVRCON: FIXED VOLTAGE REFERENCE CONTROL REGISTER
FVREN_bit = 1; // Activation du Vref
// FVRRDY_bit = 1; // Pret a etre utilisé Read Only !
TSEN_bit = 0;
TSRNG_bit = 0;
CDAFVR0_bit = 0;
CDAFVR1_bit = 0;
ADFVR1_bit = 1; // Mise du Vref à 2.048V
ADFVR0_bit = 0; // ADFVR = 0b10
Tension=0;
Envoi_tension = 1;
ADCON0.ADON=1; // validation ADC
Delay_ms(100);
while(1)
{
Lecture_T2();
Delay_ms(1000);
}
}
Code : Tout sélectionner
Analog CH1= 1003 Orange
Analog CH1= 1002 Orange
Analog CH1= 998 Orange
Analog CH1= 948 Vert
Analog CH1= 949 Vert
Analog CH1= 948 Vert
Analog CH1= 949 Vert
Analog CH1= 1006 Orange
Analog CH1= 997 Orange
Analog CH1= 994 Orange
Analog CH1= 988 Jaune
Analog CH1= 981 Jaune
Analog CH1= 986 Jaune
Analog CH1= 967 Vert
Analog CH1= 970 Jaune
Analog CH1= 1023 Rouge
Analog CH1= 885 Vert
Analog CH1= 893 Vert
Analog CH1= 1023 Rouge
Analog CH1= 972 Jaune
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1023 Rouge
Analog CH1= 1016 Rouge
Analog CH1= 1017 Rouge
Analog CH1= 1018 Rouge
Analog CH1= 1020 Rouge
Analog CH1= 1019 Rouge
Analog CH1= 1020 Rouge
Analog CH1= 936 Vert
Configuration ADC avec un Vref 2.48 V
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
cette fois OK en ASM,
le probleme était que les registres ADC sont en bank1 ..et la variable tension definie en bank 0.
le probleme était que les registres ADC sont en bank1 ..et la variable tension definie en bank 0.
Code : Tout sélectionner
void Lecture_T2()
{
_asm {
CLRF 0x20 // Tension=0;
CLRF 0x21
BSF ADCON0,1
MOVLW 44
MOVWF _Tempo22
Tp0:
DECFSZ _Tempo22, 1
GOTO Tp0
NOP
Tb1:
BTFSS ADCON0,1
GOTO Tb2
GOTO Tb1
Tb2:
MOVLB 1
MOVF ADRESH,W ; // en bank1
MOVLB 0
MOVWF _Tension+1
MOVLB 1
MOVF ADRESL,W
MOVLB 0
MOVWF _Tension
}
WordToStr(Tension,CRam1);
UART1_Write_CText("Lecture Analog CH1 (en ASM)= ");
UART1_Write_Text(CRam1);
UART1_Write(TAB);
if (Tension >= 1010){
UART_Write_Text("Rouge");
//Rouge=1;
}
else if (Tension >= 990){
UART1_Write_Text("Orange");
// Orange = 1;
}
else if (Tension >= 970){
UART1_Write_Text("Jaune");
// Jaune = 1;
}
else if (Tension < 970){
UART1_Write_Text("Vert");
// Vert = 1;
}
else
UART1_Write_Text("....");
Delay_ms(1000);
CRLF1();
// Rouge = Orange = Jaune = Vert = 0;
Delay_ms(100);
}
Code : Tout sélectionner
Init ADC voie RA1 Ch1
Lecture Analog CH1 avec ADC_Get_Sample = 750 Vert
Lecture Analog CH1 (en ASM)= 750 Vert
Lecture Analog CH1 avec ADC_Get_Sample = 582 Vert
Lecture Analog CH1 (en ASM)= 582 Vert
Lecture Analog CH1 avec ADC_Get_Sample = 848 Vert
Lecture Analog CH1 (en ASM)= 848 Vert
Lecture Analog CH1 avec ADC_Get_Sample = 846 Vert
Lecture Analog CH1 (en ASM)= 846 Vert
Lecture Analog CH1 avec ADC_Get_Sample = 1023 Rouge
Lecture Analog CH1 (en ASM)= 1023 Rouge
Lecture Analog CH1 avec ADC_Get_Sample = 1023 Rouge
Lecture Analog CH1 (en ASM)= 1023 Rouge
Lecture Analog CH1 avec ADC_Get_Sample = 1023 Rouge
Lecture Analog CH1 (en ASM)= 1023 Rouge
Lecture Analog CH1 avec ADC_Get_Sample = 1023 Rouge
Lecture Analog CH1 (en ASM)= 1023 Rouge
Lecture Analog CH1 avec ADC_Get_Sample = 997 Orange
Lecture Analog CH1 (en ASM)= 997 Orange
Lecture Analog CH1 avec ADC_Get_Sample = 984 Jaune
Lecture Analog CH1 (en ASM)= 984 Jaune
Lecture Analog CH1 avec ADC_Get_Sample = 989 Jaune
Lecture Analog CH1 (en ASM)= 989 Jaune
Lecture Analog CH1 avec ADC_Get_Sample = 933 Vert
Lecture Analog CH1 (en ASM)= 933 Vert
Lecture Analog CH1 avec ADC_Get_Sample = 900 Vert
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 44 invités