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 ---
Lecture sur un HX711 avec PIC
Bonjour,
J'ai un probleme de programmation avec la jauge HX711 et le PIC18F45K22.
J'utilise le meme setup que sur ce lien :
https://www.bitstoc.com/wp-content/uplo ... ide-v1.pdf
J'ai essayer avec un module arduino Uno tel qu'indiqué et ca fonctionne tres bien.
J'utilise le même HX711+jauge mais avec un PIC. mais la valeur varie énormément.
je post mon code ci-dessous. Deplus,je prends un échantillon central de 15 sur 25 et je fait la moyenne de ses 15 valeurs.
Mes valeurs ne sont jamais stable.
Une personne a deja programmé un HX711 ? avec PIC ?
J'ai un probleme de programmation avec la jauge HX711 et le PIC18F45K22.
J'utilise le meme setup que sur ce lien :
https://www.bitstoc.com/wp-content/uplo ... ide-v1.pdf
J'ai essayer avec un module arduino Uno tel qu'indiqué et ca fonctionne tres bien.
J'utilise le même HX711+jauge mais avec un PIC. mais la valeur varie énormément.
je post mon code ci-dessous. Deplus,je prends un échantillon central de 15 sur 25 et je fait la moyenne de ses 15 valeurs.
Mes valeurs ne sont jamais stable.
Une personne a deja programmé un HX711 ? avec PIC ?
Code : Tout sélectionner
sbit ADSK at RD2_bit; // set PIN clock to RD2
sbit ADDO at RD3_bit; // set PIN data to RD3
sbit ADSK_Direction at TRISD.B2;
sbit ADDO_Direction at TRISD.B3;
char *txt = "000.0000";
int i, j;
long int data_average;
unsigned long count;
long int array[25] ;
long int temp;
unsigned long Poids;
unsigned long decimals;
void bubble_sort() {
for(i = 0; i<25; i++) {
for( j = i+1; j<25; j++)
{
temp =0;
if(array[j] < array[i]) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
} // end bubble sort
float HX711_Get_Weight() {
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
ADCON1 |= 0x0F;
ADCON1 = 0b00000110; // all ADC ports digital*/
// SLRCON = 0; // Configure all PORTS at the standard Slew Rate
////////////////////
VREFCON1=0; // vref off
VREFCON2=0; // vref off
PORTD = 0b00000000;
// INTCON = 0b00000000; // disable all interrupts ...INT0IE: RB0/INT External Interrupt Enable bit
ANSELD = 0b11000000; // Configure all PORTS at the standard Slew Rate
LCD_Init();
LCD_Cmd(_LCD_CURSOR_OFF);
LCD_Cmd(_LCD_CLEAR);
data_average = 0;
for(j = 0; j < 25; j++) {
TRISD = 0b10110010; //0 = Output,
ADDO = 1;
ADSK = 0;
TRISD = 0b10111010; //0 = Output, 1 = Input RD3
while(ADDO ) ;
//wait until ADDO is zero
count = 0;
Poids = 0x800000;
for(i = 0; i < 25; i++)
{
Delay_us(10);
ADSK = 1;
Delay_us(10);
ADSK = 0;
if(ADDO==1) count = count + Poids ;
// if(ADDO==0) count = count ; // dont really need this line
Poids = Poids >> 1;
} // end for loop
array[j] = count;
Delay_ms(20);
if (count > 0xFFFFFF)
{
LCD_Cmd(_LCD_CURSOR_OFF);
LCD_Cmd(_LCD_CLEAR);
LongWordToStr(count, txt);
Lcd_Out(1, 1, "Out of range");
Lcd_Out(2,1,txt);
Delay_ms(800);
}
bubble_sort();
temp =0;
for(j = 10; j < 15; j++)
{
temp = temp + array[j];
}
temp = temp /5 ; // divide to get average
temp = temp - 86840; // TAR the value
temp = temp / 7 ; // divide by 7.7 for the next two lines*/
temp = temp * 100;
temp = temp / 778 ; // divide by 778
return temp ;
} // end main
Lecture sur un HX711 avec PIC
Bonsoir lerameur, et tout le forum,
Bon le langage C, c'est pas mon truc, car je suis plutôt ASM, mais d'après la datasheet du HX711
Le HX711 et un convertisseur Adc de 24-Bit, il faut juste communiquer avec lui, c'est tout.
Voir la datasheet du HX711 ICI, Il y a un exemple en ASM et en C
Description
Les broches PD_SCK et DOUT sont utilisées pour la récupération de données, la sélection d'entrée, la sélection de gain et les commandes de mise hors tension.
Lorsque les données de sortie ne sont pas prêtes à être récupérées, la broche de sortie numérique DOUT est élevée.
L'entrée d'horloge série PD_SCK doit être basse.
Lorsque DOUT passe au niveau bas, cela indique que les données sont prêtes à être récupérées.
En appliquant 25 à 27 impulsions d'horloge positives à la broche PD_SCK, les données sont décalées de la broche de sortie DOUT.
Chaque impulsion PD_SCK sort d'un bit, en commençant par le bit MSB en premier, jusqu'à ce que les 24 bits soient tous décalés.
La 25e impulsion à l'entrée PD_SCK ramènera la broche DOUT au niveau haut.
La sélection d'entrée et de gain est contrôlée par le nombre d'impulsions d'entrée PD_SCK .
Les impulsions d'horloge PD_SCK ne doivent pas être inférieures à 25 ou supérieures à 27 dans une période de conversion, pour éviter de provoquer une erreur de communication série.
T'as un ampli à configurer, qui peut varier en gain de 128, 64, 32, j'ai jamais utilisé ce module.
A+
Bon le langage C, c'est pas mon truc, car je suis plutôt ASM, mais d'après la datasheet du HX711
Le HX711 et un convertisseur Adc de 24-Bit, il faut juste communiquer avec lui, c'est tout.
Voir la datasheet du HX711 ICI, Il y a un exemple en ASM et en C
Description
Les broches PD_SCK et DOUT sont utilisées pour la récupération de données, la sélection d'entrée, la sélection de gain et les commandes de mise hors tension.
Lorsque les données de sortie ne sont pas prêtes à être récupérées, la broche de sortie numérique DOUT est élevée.
L'entrée d'horloge série PD_SCK doit être basse.
Lorsque DOUT passe au niveau bas, cela indique que les données sont prêtes à être récupérées.
En appliquant 25 à 27 impulsions d'horloge positives à la broche PD_SCK, les données sont décalées de la broche de sortie DOUT.
Chaque impulsion PD_SCK sort d'un bit, en commençant par le bit MSB en premier, jusqu'à ce que les 24 bits soient tous décalés.
La 25e impulsion à l'entrée PD_SCK ramènera la broche DOUT au niveau haut.
La sélection d'entrée et de gain est contrôlée par le nombre d'impulsions d'entrée PD_SCK .
Les impulsions d'horloge PD_SCK ne doivent pas être inférieures à 25 ou supérieures à 27 dans une période de conversion, pour éviter de provoquer une erreur de communication série.
T'as un ampli à configurer, qui peut varier en gain de 128, 64, 32, j'ai jamais utilisé ce module.
A+
Modifié en dernier par Temps-x le dim. 23 janv. 2022 02:54, modifié 1 fois.
Lecture sur un HX711 avec PIC
Lecture sur un HX711 avec PIC
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
il y a déja des incoherences ici
ta fonction HX711_Get_Weight() doit retourner un float
hors temp est un long int !
de plus on ne refait pas l'init des differents registres ADC systematiquement dans une fonction qui les utilise ,
mais soit dans une subroutine/fonction globalisant toutes les init hardware, registre ...,
soit en début du main
apres on y touche plus ...en géneral, une fois suffit .
pourquoi un // End Main sur la terminaison de ta fonction HX711_Get_Weight() ?
un main(), qu'on voudrais aussi bien voir d'ailleurs
il faudrait d'abord déverminer ton programme
sans la fonction HX711_Get_Weight()
simuler les valeurs brutes mesures de sortie HX711 dans une table , la tare ... etc ...
pour vérifier le fonctionnement,deroulement de ton main ()
et seulement apres t'attarder sur la lecture de l'ampli jauge HX711
si c'est bon , tester l'ampli :
avec une Simulation reelle de la jauge ..
injecter des valeurs en mV connues et stable. sur l'entree HX711
ou faire un pont de wheastone equilibré de 4 R de 500 Ohms
+ 1 R variable de 50K+talon de 1K pour faire un desequilibre sur un branche
le tout alimenté en 3,3V ou via generateur de courant constant 2mA
usage de l'entree differentielle du HX
0mV si equilibré sans Pot de 50K en servie
quelques mv avec Pot
on a pas tous sous la main un module ampli HX711 avec une jauge ( peson)
pour pouvoir t'aider
DIVISER pour Mieux REGNER !
Post ton projet complet :
projet mcppi + Source + config ...
il y a déja des incoherences ici
Code : Tout sélectionner
long int temp;
float HX711_Get_Weight()
{
.......
return temp ;
} // end main
ta fonction HX711_Get_Weight() doit retourner un float
hors temp est un long int !
de plus on ne refait pas l'init des differents registres ADC systematiquement dans une fonction qui les utilise ,
mais soit dans une subroutine/fonction globalisant toutes les init hardware, registre ...,
soit en début du main
apres on y touche plus ...en géneral, une fois suffit .
pourquoi un // End Main sur la terminaison de ta fonction HX711_Get_Weight() ?
un main(), qu'on voudrais aussi bien voir d'ailleurs
il faudrait d'abord déverminer ton programme
sans la fonction HX711_Get_Weight()
simuler les valeurs brutes mesures de sortie HX711 dans une table , la tare ... etc ...
pour vérifier le fonctionnement,deroulement de ton main ()
et seulement apres t'attarder sur la lecture de l'ampli jauge HX711
si c'est bon , tester l'ampli :
avec une Simulation reelle de la jauge ..
injecter des valeurs en mV connues et stable. sur l'entree HX711
ou faire un pont de wheastone equilibré de 4 R de 500 Ohms
+ 1 R variable de 50K+talon de 1K pour faire un desequilibre sur un branche
le tout alimenté en 3,3V ou via generateur de courant constant 2mA
usage de l'entree differentielle du HX
0mV si equilibré sans Pot de 50K en servie
quelques mv avec Pot
on a pas tous sous la main un module ampli HX711 avec une jauge ( peson)
pour pouvoir t'aider
DIVISER pour Mieux REGNER !
Post ton projet complet :
projet mcppi + Source + config ...
Lecture sur un HX711 avec PIC
Salut Paul,
Voir en pièce jointe mon projet en MCPPI.
En photo une photo de mon setup.
J<ai couper les 4 fils de la jauge le plus court possible. J’ai eu une petite amélioration. (https://www.mouser.ca/ProductDetail/Ada ... Bbmg%3D%3D)
J'obtiens toujours des valeurs qui fluctué un peu trop. Pour un poids de 20 Gram, j'obtiens entre 19 et 23 gram !
Ken
Voir en pièce jointe mon projet en MCPPI.
En photo une photo de mon setup.
J<ai couper les 4 fils de la jauge le plus court possible. J’ai eu une petite amélioration. (https://www.mouser.ca/ProductDetail/Ada ... Bbmg%3D%3D)
J'obtiens toujours des valeurs qui fluctué un peu trop. Pour un poids de 20 Gram, j'obtiens entre 19 et 23 gram !
Ken
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Lecture sur un HX711 avec PIC
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour
rappel : modifie ta fonction
float HX711_Get_Weight() ; par signed long HX711_Get_Weight() ;
"ça tombe en marche" parcequ'un float a la meme taille qu'un long !
voir les warnings à la compilation ?
avec
tu as trop d'erreur d'arrondi ! avec des division impaires ...
Attention à la possibilité de débordement du cumul de 25 long (32 bits signé)
soit 2 147 483 648 / 25 = 85 899 345
mais si la conversion du HX711 est sur 24 bits signé
le maxi possible devient +-2^23 ... soit +8 388 607 à -8 388 608
Fait un cumul sur 16 ou 32 valeurs => pour avoir ensuite une division entiere pour la moyenne !
utilise un espace de 4 ou 8 mesures !
la Tare represente deja pres de la moitié de gamme de mesure ?
tu as peut etre trop de charge avec ton plateau en bois !
il vient d'où ce 37 ?
voir Multiplication/division par une constante
.... je n'ai pas testé personnellement
Temps_X pourrait apprécier !
rappel : modifie ta fonction
float HX711_Get_Weight() ; par signed long HX711_Get_Weight() ;
"ça tombe en marche" parcequ'un float a la meme taille qu'un long !
voir les warnings à la compilation ?
avec
Code : Tout sélectionner
temp = temp /5 ; // divide to get average
temp = temp - 8 347 750; // TAR the value
temp = temp / 37; // divide by 7.7 for the next two lines*/
tu as trop d'erreur d'arrondi ! avec des division impaires ...
Attention à la possibilité de débordement du cumul de 25 long (32 bits signé)
soit 2 147 483 648 / 25 = 85 899 345
mais si la conversion du HX711 est sur 24 bits signé
le maxi possible devient +-2^23 ... soit +8 388 607 à -8 388 608
Fait un cumul sur 16 ou 32 valeurs => pour avoir ensuite une division entiere pour la moyenne !
utilise un espace de 4 ou 8 mesures !
Code : Tout sélectionner
ex avec 8
temp = temp <<3; // divide to get average
temp = temp - 8 347 750; // TAR the value ..... ?
temp = temp / 37; // divide by 7.7 for the next two lines*/
la Tare represente deja pres de la moitié de gamme de mesure ?
tu as peut etre trop de charge avec ton plateau en bois !
il vient d'où ce 37 ?
voir Multiplication/division par une constante
.... je n'ai pas testé personnellement
Temps_X pourrait apprécier !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Lecture sur un HX711 avec PIC
Salut,
ConcernNT mes divisions,:
8 347 750 : ce chiffre provient quand la ptaform n,a pas de poids dessus, doonc mon zéro.
Ensuite j'ai mis un poids, j,ai soustrait ce chiffre. et je divise par le poids connu. Ceci me donne le diviseur , 37.
Bonne nouvelle:
Ca fonctionne, j'ai trouvé le probleme. Les jauges qui proviennet de adafruit ou ce genre de jauge à 5$ ne sont pas tres bon.
j'ai défait une balance électronique que j'avais et je l'ai branché sur mon circuit et voila ca fonction et aucun drift, j'obtien une mesure stable pendant des heures. !!
De ce fait, je me suis commandé des jauges haute précision.
Ken
ConcernNT mes divisions,:
8 347 750 : ce chiffre provient quand la ptaform n,a pas de poids dessus, doonc mon zéro.
Ensuite j'ai mis un poids, j,ai soustrait ce chiffre. et je divise par le poids connu. Ceci me donne le diviseur , 37.
Bonne nouvelle:
Ca fonctionne, j'ai trouvé le probleme. Les jauges qui proviennet de adafruit ou ce genre de jauge à 5$ ne sont pas tres bon.
j'ai défait une balance électronique que j'avais et je l'ai branché sur mon circuit et voila ca fonction et aucun drift, j'obtien une mesure stable pendant des heures. !!
De ce fait, je me suis commandé des jauges haute précision.
Ken
Lecture sur un HX711 avec PIC
Bonsoir lerameur, paulfjujo, et tout le forum,
Ah que ouais ....
Bonne fête pour la Saint Paul
A+
paulfjujo a écrit :Source du message Temps_X pourrait apprécier !
Ah que ouais ....
Bonne fête pour la Saint Paul
A+
Lecture sur un HX711 avec PIC
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir à tous,
rajoute à la liste du lien
Paul de SMG
Temps-x a écrit :Bonne fête pour la Saint Paul
rajoute à la liste du lien
Paul de SMG
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 92 invités