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 ---
Forum général sur le langage C !

Modérateur : Jérémy

voltmètre PIC18F4550
pseudomehdi
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#1 Message par pseudomehdi » lun. 28 déc. 2015 16:35

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.
txt.txt
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

voltmètre PIC18F4550
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » lun. 28 déc. 2015 18:38

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!! 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 ?
Aide toi, le ciel ou FantasPic t'aidera

voltmètre PIC18F4550
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#3 Message par Guest » lun. 28 déc. 2015 19:05

Bonsoir

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
Membre
Messages : 9
Enregistré en : octobre 2015

#4 Message par pseudomehdi » lun. 28 déc. 2015 19:45

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
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

voltmètre PIC18F4550
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#5 Message par Guest » lun. 28 déc. 2015 20:16

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+

voltmètre PIC18F4550
pseudomehdi
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#6 Message par pseudomehdi » lun. 28 déc. 2015 21:01

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é.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

voltmètre PIC18F4550
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#7 Message par Guest » lun. 28 déc. 2015 21:15

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?

voltmètre PIC18F4550
pseudomehdi
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#8 Message par pseudomehdi » lun. 28 déc. 2015 21:39

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 je l'ai telechargé sur google juste pour donner une idée sur la forme de l'onde, il n'y a pas d'onde résiduel

voltmètre PIC18F4550
pseudomehdi
Membre
Membre
Messages : 9
Enregistré en : octobre 2015

#9 Message par pseudomehdi » lun. 28 déc. 2015 21:49

l'échantillonnage je le lance a n'importe quel moment , du moment qu'il dure une période

voltmètre PIC18F4550
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#10 Message par Guest » lun. 28 déc. 2015 21:51

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


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 31 invités