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
voltmètre PIC18F4550
-
pseudomehdi
Membre- Messages : 9
- Enregistré en : octobre 2015
bonjour, j'ai écrit un programme qui devrait calculer la valeur efficace d'une tension périodique sur la voie 0 et la valeur d'une autre tension continue sur la voie 1 ensuite afficher ces valeurs sur un écran LCD, mais rien ne fonctionne.
est-ce que quelqu'un aurait-il une idée pourquoi ? le programme se trouve dans la pièce jointe.
merci d'avance.
est-ce que quelqu'un aurait-il une idée pourquoi ? le programme se trouve dans la pièce jointe.
merci d'avance.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
voltmètre PIC18F4550
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
type de MCU ?
type de compilateur C18 ou X8 ?
FOSC ?
x*=0.004887585532746823069403714565;
il faut savoir quand meme arrondir, ne pas oublier que ce n'est qu'un ADC 10 bits
avec x*=0.0048876, je doute que tu voies une difference.
Attention
reserver 14 ou 17 car ( à verifier) pour la transformation floatToStr
4 c'est nettement insuffisant
teste deja ton affichage avant de verifier les calculs, sinon tu vas
tourner en rond.
proposition :
On a deja discuté de la transformation( float to String) flottant en chaine de caractere,sur ce site ..
fais des recherches et tu trouvera une solution pour bien formatter le resultat de conversion
et donc de bien maitiser l'affichage correct sur le LCD
Je ne connaissais pas cette formule .
la tension mesurée, c'est une tension de forme sinusoidale ?
type de MCU ?
type de compilateur C18 ou X8 ?
FOSC ?
x*=0.004887585532746823069403714565;
il faut savoir quand meme arrondir, ne pas oublier que ce n'est qu'un ADC 10 bits
avec x*=0.0048876, je doute que tu voies une difference.
Attention
Code : Tout sélectionner
char V1[4], V2[4];
reserver 14 ou 17 car ( à verifier) pour la transformation floatToStr
4 c'est nettement insuffisant
teste deja ton affichage avant de verifier les calculs, sinon tu vas
tourner en rond.
proposition :
Code : Tout sélectionner
char V1[17];
char V2[17];
.......
floattostr(T,V1);
floattostr(K,V2);
Lcd_Out(1,1,"V1=");
V1[13]=0; // tronque au 13em car , sinon on debordera de la ligne (si c'est un LCD 16 car par ligne)
// ce n'est pas la solution miracle ..mais (voir commentaire)
Lcd_Out(1,4,V1); // affiche la valeur derriere le texte V1=
Lcd_Out(2,1,"V2=");
V2[13]=0;
Lcd_Out(2,4,V2); // affiche la valeur derrieer le texte V2=
On a deja discuté de la transformation( float to String) flottant en chaine de caractere,sur ce site ..
fais des recherches et tu trouvera une solution pour bien formatter le resultat de conversion
et donc de bien maitiser l'affichage correct sur le LCD
Veff= sommes des échantillons au carré par le nombre d'échantillons
Je ne connaissais pas cette formule .
la tension mesurée, c'est une tension de forme sinusoidale ?
voltmètre PIC18F4550
Bonsoir
si je comprends bien tu fais 671 fois cette boucle ?
Donc tu fais des mesures tout le long de ta sinusoïdale . c'est cela ? voir plus ? fréquence de cette sinusoïdale ?
A+
si je comprends bien tu fais 671 fois cette boucle ?
Code : Tout sélectionner
for (i=0 ; i=670 ; i++)
{
x = ADC_Read(0);
x*=0.004887585532746823069403714565;
y=x*x;
v=v+y;
}
Donc tu fais des mesures tout le long de ta sinusoïdale . c'est cela ? voir plus ? fréquence de cette sinusoïdale ?
A+
voltmètre PIC18F4550
-
pseudomehdi
Membre- Messages : 9
- Enregistré en : octobre 2015
mon oscillateur c'est du 20Mhz,la tension que je veut mesurer c'est une tension redressée dont les ondulation peuvent dépasser le pas de quantification de l'ADC donc pour la mesurer je dois l'échantillonner, j'utilise MicroC pour compiler et ISIS proteus pour simuler.
oui Maï, j'ai fait des calculs et le 18F4550 peut faire cette boucle 671 fois en 10 ms qui représente la période des ondulations.
et voici la formule ci-jointe paul, j'ai juste oublié le SQRT
oui Maï, j'ai fait des calculs et le 18F4550 peut faire cette boucle 671 fois en 10 ms qui représente la période des ondulations.
et voici la formule ci-jointe paul, j'ai juste oublié le SQRT
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
voltmètre PIC18F4550
Si tu as une fréquence de 50Hz, car tu nous dis toujours pas la fréquence de ta tension a mesure , mais bon a oui 10ms...
donc 10ms/671-> 15µS c'est le temps que dois mettre ton programme pour faire:
la conversion
la multiplication avec ton pas quantitatif
le carre de cette valeur
et l'addition
puis recommencer .....
A 20MHZ, cela nous donnes 0.2µS par cycle machine soit 15/0,2->75 cycles machines pour réaliser le programme ci dessus
TU as seulement évalué combien de temps qu' il te faut, pour faire seulement la multiplication avec ton flottant ??
Peso j'ai un doute sur tes calculs mais c'est peut_être les miens qui sont faux
je te rappel que Ueff= Umax/ sqrt(2) il suffit de trouver Umax
A+
donc 10ms/671-> 15µS c'est le temps que dois mettre ton programme pour faire:
la conversion
la multiplication avec ton pas quantitatif
le carre de cette valeur
et l'addition
puis recommencer .....
A 20MHZ, cela nous donnes 0.2µS par cycle machine soit 15/0,2->75 cycles machines pour réaliser le programme ci dessus
TU as seulement évalué combien de temps qu' il te faut, pour faire seulement la multiplication avec ton flottant ??
Peso j'ai un doute sur tes calculs mais c'est peut_être les miens qui sont faux
je te rappel que Ueff= Umax/ sqrt(2) il suffit de trouver Umax
A+
voltmètre PIC18F4550
-
pseudomehdi
Membre- Messages : 9
- Enregistré en : octobre 2015
d'après la datasheet du 18F4550 la conversion de 10 bits dure 12 TAD a laquel on ajoute le temps d'acquisition qui est 4 TAD ensuite tu ajoute 2 TAD entre chaque conversion ce qui nous donne 18 TAD avec TAD = 0.8us donc on aura 14,4 us pour une seul conversion et pour les 3 instructions qui suivent il prendra 0.15us donc en tout on a 14.55us maintenant il ne nous reste plus qu'a diviser les 10ms par 14.55us ce qui nous donne 687.
Ueff= Umax/ sqrt(2) dans le cas d'un signale sinusoidale mais le mien il est de la forme suivante, c'est un signale redressé et lissé.
Ueff= Umax/ sqrt(2) dans le cas d'un signale sinusoidale mais le mien il est de la forme suivante, c'est un signale redressé et lissé.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
voltmètre PIC18F4550
oui tres bien c'est le temps de la conversion (14µS) et le reste de ton programme multiplication pas, carrée et addition tu les fais quand? tu ne le fais pas , il y a pas un petit problème la ?.
Tient autreS chose qui ne tracasse un peu,
tu lances ton échantillonnage quand ? signal a zéro Trois quart ,max?
la tension a l'entrée du CAN c'est quoi ? comment tu extraits onde résiduelle?
Tient autreS chose qui ne tracasse un peu,
tu lances ton échantillonnage quand ? signal a zéro Trois quart ,max?
la tension a l'entrée du CAN c'est quoi ? comment tu extraits onde résiduelle?
voltmètre PIC18F4550
-
pseudomehdi
Membre- Messages : 9
- Enregistré en : octobre 2015
voltmètre PIC18F4550
pseudomehdi a écrit :oui j'ai calculé la multiplication pas, carrée et addition et ça dure 0.15us c'est écrit plus haut rejette un oeil sur le calcul.
l'image représente juste un exemple il n'y a pas d'onde résiduel
C'est une plaisanterie un cycle machine a 20MHz c'est du 0.2µS,bon ecoute revois la chose, le simple fait de dire I=3; en C met 3 dans la variable I il faut 0.4µs
bonne soirée
PS: allez encore, tu es sur de le lancer quand tu veux ton échantillonnage? Moi je dirais pas si sur, et même que tes 10ms c'est pas bon, regarde bien ton graphe
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 31 invités