Mais mon calcul n'est pas bon ? Ben si je peux mettre Fosc / 8 ( ou même Fosc / 4 ), c'est pas mieux ? ( car x11 c'est pour les RC, bon faut aussi dire que je comprends pas pourquoi mettre RC quand on peut choisir un autre ( bon ) paramètre )
Merci
Pour être honnète, je ne me pose pas la question.
J'avais lu Bigonoff, mais je ne m'en souviens plus.
Avec RC, je n'ai jamais eu de pb.
Fais des essais, tu nous diras ce que ça donne.
ben pour etre honnête avec toi mon cher Gérard, j'aimerais pas trop que ça foute la m**** si tu vois ce que je veux dire car, pour moi, c'est comme si tu prenais RC dans config alors que tu as un XT par exemple ...
Pas exactement quand même.
C'est une question de temps de conversion.
Perso, je ne suis pas à quelques ms près.
Les cases grisées (je crois) dans la datasheet sont hors spec car trop rapide, le temps de conversion n'est pas respecté.
Je pense que c'est cela (mais pas sur).
Comme dit, je ne suis pas pressé et donc RC me va.
oui mais s'il y a une ligne RC, c'est que c'est spécifique au quartz RC, non ? D'où mes réticences ... oui moi non plus je ne suis pas à 1 seconde près ( tant que ça se fait indépendamment de mon programme ) mais si je peux mettre Fosc / 8, autant que je le mette, comme ça je me casse pas la tête.Pas exactement quand même.
C'est une question de temps de conversion.
Perso, je ne suis pas à quelques ms près.
Les cases grisées (je crois) dans la datasheet sont hors spec car trop rapide, le temps de conversion n'est pas respecté.
Je pense que c'est cela (mais pas sur).
Comme dit, je ne suis pas pressé et donc RC me va.
Fais des essais, tu nous diras ce que ça donne.
je n'ai pas le matériel
Mais on verra bien, soit je mets Fosc/8, soit RC ...
par contre, j'aimerais juste revenir sur ce que tu as dit concernant le quartz : tu disais que la vitesse d'exécution était moins rapide avec un 32,768 KHz qu'avec un 2.0480 MHz, pourquoi ?
Il est écris dans les docs la durée d'exécution des instructions.
Pour les PIC 16F, elle est de 1 cycle (sauf les sauts).
Le cycle correspont à 4 coups d'horloge --> si l'horloge est lente, le cycle dure plus longtemps.
tu veux dire les datasheets ? ( j'ai pas vu ! )
Sinon, pour les pic 12F, tu sais ?
Donc, il vaudrait mieux prendre un 3.2768 MHz par exemple qu'un 2.0480 MHz, c'est ça ? ( mais là j'aurais beaucoup d'interruptions, ça ralentirait mon programme ! )
Donc le 2.0480 MHz est bon ? rapport vitesse/irq ?
Fais un petit calcul, tu auras la réponse.
quel calcul ?
C'est pas commun aux pic ? Si on prend un quartz à fréquence élevée, on aura un nombre d'IRQ à la seconde élevée aussi, ce qui ralentirait le programme, et donc la vitesse élevée d'exécution qui découle d'un quartz a fréquence élevée est vite rattrapée ... non ?
Si tu as un nb d'irq plus élevé que ce que tu veux, tu incrémentes une variable en début d'irq.
Quand cette variable arrive au nb prévu, tu la mets à 0 et tu fais ton traitement d'irq.
Je ne pense pas que le programme soit beaucoup ralentit par cette façon de faire.
mais oui mais tu l'as dit toi même : + il y a d'IRQ, + le programme est ralenti car il s'interrompt + ...
donc même si j'ai une fréquence + élevée, le fait d'avoir trop d'interruptions ralentirait mon programme au point ( ou presque ^^ ) que le gain d'un quartz à fréquence élevée soit perdu ... non ?
Je ne dirais pas dire ça.
Encore une précision concernant les irq : le code doit être assez court pour ne pas ralentir trop le prog principal.
Je ne dirais pas dire ça.
Ben dans le programme que j'ai donné plus haut, c'est pas bon ?Encore une précision concernant les irq : le code doit être assez court pour ne pas ralentir trop le prog principal.
Sinon, tu t'y connais plus que moi .... dois je prendre un quartz de fréquence + élevée ou je reste sur le 2.0480 MHz ?
Merci
Code:#pragma chip PIC12F675 // déclaration du pic #pragma library 1 #pragma config |= 0x31E1 #define sortie GPIO int irq; char sec; #include "int16CXX.h" // fichier interruptions //------------------interruption----------------------- #pragma origin 4 interrupt timer1( void) { int_save_registers // W, STATUS (and PCLATH if required) //char sv_FSR = FSR; // save FSR if required // handle the interrupt (insert application code here) if (TMR1IF) {++irq;if (irq==8) {++sec;irq=0;}TMR1H=6;TMR1L=0;TMR1IF=0;} //FSR = sv_FSR; // restore FSR if saved int_restore_registers // W, STATUS (and PCLATH if required) /* IMPORTANT : GIE should normally NOT be set or cleared in the interrupt routine. GIE is AUTOMATICALLY cleared on interrupt entry by the CPU and set to 1 on exit (by RETFIE). Setting GIE to 1 inside the interrupt service routine will cause nested interrupts if an interrupt is pending. Too deep nesting may crash the program ! */ } void main(void) { TRISIO = 0b00111100; sortie = 0b00000010; T1CON = 0b00000001; CMCON = 0b00000111; //comparateur désactivé TMR1H=6; TMR1L=0; TMR1IF=0; INTCON = 0b11000000; PIE1 = 0b00000001; for (;;) { } }
Si c'est bon.
Je viens de jeter un rapide coup d'oeil chez Selectronic, ils n'ont pas de Qz de 2,048MHz mais de 3,2768MHz.
le 2.0480 MHz je l'ai pris de gotronic.
Donc ça va pour un 2.0480 MHz, ou me conseilles tu d'en prendre à fréquence + élevée, quitte à avoir + d'IRQ par secondes ...
Merci
Le problème avec le 2,048MHz, c'est que pour avoir un nb entier d'irq / s, tu devras recharger TMR1H avec 1111 0000b.
Du coup, pour déborder, tu ne compteras que 4096 impulsions.
Gotronic vend le 2,048 à 2,90€ et le 3,2768 à 1€.
Salut diallos, Ca ne sert à rien de faire du hors sujet sur plusieurs posts, il vaudait mieux que tu en crées un nouveau en rapport avec ton application !
De toute façon, ça ne changera pas grand chose, ce n'est pas une applic avec un timing très serré.
avec celui ci j'aurais 8 IRQ/s si je le recharge avec tmr1h=6;
donc je garde le 2.0480 MHz ( puisque tu n'as pas l'air d'être contre )
sinon, pour le CAN, donc je dois utiliser ADRESH et ADRESL pour récupérer le résultat .... par contre comment dois je faire ?
Donc a un moment, il va mesurer la tension sur GP2 ( Vdd est la référence ) et donc va sortir une valeur "points" qui sera stockée dans les 2 variables ADRESH et ADRESL .... comment faire pour récupérer la valeur "points" par ces 2 variables ? ( je croyais qu'on pouvait la récupérer à l'aide d'une seule variable, c'est plus dur que ça en avait l'air )
Merci
Il faut définir une variable sur 2 octets.