Aucune idée. Ca doit être dans les datasheet.
C'est quel calcul ?
On a déjà dit et écrit tellement de truc ...
Tu parles de Rb (résistance de base) ?
Quelle est la charge ?
Quel est le transistor ?
pour la résistance interne, non c'est pas écrit dans le datasheet, enfin j'ai pas vu, mais laisses tomber, on aura pas besoin de ça, surtout qu'il n'y a qu'une seule entrée ( à part celles pour le quartz et Vdd )
sinon, voilà30mA c'est l'intensité ( max ? ) du voyantLe transistor BC 548B
Gain=200
Ib=ic/ β=30/200=0.15mA sortie a l’état haut est à 5V donc Vr=5-0.7=4.3V
R=V/ib=4.3/0.00015=28666.6 Ω soit 27K Ω
ah en fait, je parlais d'un calcul que mon ami a fait, c'est extrait du fichier doc...
Pour être sûr de saturer le transistor, tu prends un Ib double de ce que tu as calculé.
Prendre 15K pour Rb.
ohlala, faut vraiment que je revoie l'SI et les transistors !
Mais pourquoi prendre le double de ib qu'on a trouvé ? Enfin si t'es sûr ... donc à la place de 27k je prends 15k ?
Le calcul est une chose.
Imagine que tu tombes sur un transistor un peu faible avec un béta de 150 au lieu de 200, que ta charge demande 40mA au lieu de 30 ...
Tu seras dans les choux.
En prenant Ib = 2xIb calculé, tu es tranquille et le PIC saura fournir ce courant supplémentaire. (entre 0,15mA et 0,30mA, pas de quoi fouetter un chat)
Bonne nuit.
mais le 30, c'est le courant du voyant, pas le courant de charge, ou c'est la même chose ?!
bon, donc je prends une résistance de 15K
Bonne nuit ( à demain peut etre )
Le voyant est la charge du transistor ou ce que le transistor alimente.
As-tu compris le principe ?
Tu fais un calcul théorique et tu fais x 2.
J'oubliais :
BONNE FÊTE
oui je pense comprendre, comme il se peut que le transistor puisse avoir un gain inférieur à 200, on laisse de la marge, on prend le seuil "critique" c'est ca ? Mais le gain ne pourrait il pas être aussi supérieur à 200 ? Et la c'est le drame
Mais BONNE FÊTE à toi aussi mon cher GérardBONNE FÊTE
Non ce n'est pas le drame.
C'est le récepteur dans le circuit collecteur qui limitera le courant collecteur.
On sera tout simplement au-dessus de Ib mini.
C'est pas ta fête aujourd'hui ?
Pour en revenir a cette impédance d'entrée de 10K, c'est la somme des 2 résistances du pont diviseur qui ne doit pas dépassée 10K ou autre chose ?
Pour l'impédance de sortie ( tu m'as dit qu'il fallait en ternir compte ), je ne risque rien donc avec une résistance de 15K, et une autre ( pour le moteur ) de 3.3K, c'est bon ? ( j'ouvrirais un sujet pour le schéma électronique au pire des cas )
La doc n'est pas très bavarde sur ce point.
J'aurais tendance à dire la somme des 2.
Ce que voulais dire :
la charge de la sortie (l'impédance) doit être telle que le courant max ne soit pas atteint.
Il y a aussi une restriction sur le courant total des sorties.
juste une chose : comme on a 8 IRQ/s avec le quartz de 2.0480 MHz, ça veut dire qu'on a un débordement, et donc une interruption toutes les 125ms c'est ça ?
Bonjour à vous deux,
Bon je connais un peu CC5X mais pas du tout les 12F !!
Un coup d'oeil rapide à ton dernier code, je vois :
TRISIO = 0b00111100;
//OPTION = 0b10101000;
sortie = 0b00000010;
T1CON = 0b00000001;
CMCON = 0b00000111;
TMR1H=6;
TMR1L=0;
INTCON = 0b11000000;
PIE1 = 0b00000001;
ADCON0 = 0b00001011;
ANSEL = 0b00001011;
ADRESH = tmp.high8;
ADRESL = tmp.low8;
for (; {
if (tmp==531) {...}
Ceci ne te surprends pas un peu :
ADRESH = tmp.high8;
ADRESL = tmp.low8;
Moi, si.
Bonne soirée, mictour.
c'est faux ? C'est ce que tu m'as écrit o_O
nan j'ai compris l'erreur ^^' : c'est l'inverse
Code:tmp.high8 = ADRESH; tmp.low8 = ADRESL;
Heureusement que mictour suit !
Pour les irq, fais les calculs, tu sais faire maintenant.
bonsoir Gérard,
Heureusement que mictour suit !
... mais de loin et avec beaucoup moins d'assiduité que toi !
Bonne soirée à vous deux, mictour.
tu n'as pas l'air d'accord xD rassures moi, c'est bon !?
A part ça, je poste le code modifié : "changelog" : j'ai sorti le if (irq==8) ... de l'interruption pour mettre à la place ADCON0.1=1; car je me suis rendu compte que si l'utilisateur veut brancher le pied au secteur, la tension va augmenter et donc ça ne sera pas pris en compte car le convertisseur ne se sera pas mis en marche après ... donc j'ai pensé que le mettre dans l'interruption était une bonne idée ?! enfin sauf si vous y voyez un inconvénient bien sûr, toute critique est bonne à prendre ..
Code:#pragma chip PIC12F675 // déclaration du pic #pragma library 1 //#pragma config |= 0x31E1 // faut que je modifies le config du fichier header je crois #define sortie GPIO #define led GPIO2 #define moteur GPIO1 char irq; char sec; uns16 CAN; #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;ADCON0.1=1;TMR1H=6;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; OPTION = 0b10101000; sortie = 0b00000010; T1CON = 0b00000001; CMCON = 0b00000111; INTCON = 0b11000000; PIE1 = 0b00000001; ADCON0 = 0b00001001; ANSEL = 0b00001011; TMR1H=6; TMR1L=0; CAN.high8 = ADRESH; CAN.low8 = ADRESL; for (;;) { if (irq==8) {++sec;irq=0;} if (CAN<531) {led=!led;} if ((sec==1200).(CAN>531)) {moteur=1;if(sec==1201) {moteur=0;sec=0;}} } }
On verra demain.
edit ( pour le code ) : OPTION n'est pas encore configuré, car je sais pas s'il faut que je le configure ( comme on utilise pas le timer0 ), et s'il faut le configurer, je sais pas comment ... bon on verra demain ..
... en espérant que tu dois dac pour mon raisonnement Gérard xD ( 1 IRQ toutes les 125 ms ... )
@++
Bonjour à vous deux,
Une petite question pour commencer :
ou donc as-tu déniché cette routine d'interruption ?
Je n'y vois pas TIMER1IF = 0; Selon moi (Lol) à peine sorti, on y revient !
Dans la partie initialisation GIE = 1; et TIMER1IE =1; sont absent ...
C'est voulu ?
ADCON0.1=1 ... Si je comprend bien, tu veux déclancher la lecture du CAN à chaque passage dans l'interruption ?
Heeeu, le registre OPTION ne sert pas qu'a configurer le TIMER0. A voir.
De mémoire ... #pragma library 1 n'est actif que dans la version complète (payante !).
A bientôt ? mictour.
Dans le fichier int16CXX.h de cc5xou donc as-tu déniché cette routine d'interruption ?
Mais elle y est !!Je n'y vois pas TIMER1IF = 0; Selon moi (Lol) à peine sorti, on y revient !
GIE n'est pas à configurer comme il est écrit et pour l'autre, c'est un registre qui le configure ... ( c'est l'interruption du timer1 non ? )Dans la partie initialisation GIE = 1; et TIMER1IE =1; sont absent ...
C'est voulu ?
Bah, le voilà le problème : la conversion ne se fait que manuellement, en mettant ce bit à 1. Or, si l'utilisateur branche sur le secteur le pied de parasol, la tension augmentera ... ( je parle du cas où CAN<531 ) et donc le nombre de points qui équivaudrait à la nouvelle tension sera aussi supérieur à 531... et je n'aurais pas fait de conversion après ... voilà pourquoi j'ai pensé à mettre la conversion à chaque interruption, c'est a dire toutes les 125ms ... mais si tu as une autre idée ..ADCON0.1=1 ... Si je comprend bien, tu veux déclancher la lecture du CAN à chaque passage dans l'interruption ?
donc je le configure pas ?Heeeu, le registre OPTION ne sert pas qu'a configurer le TIMER0. A voir.
Bizarre, quand je compile le programme, il devrait me le dire nan ? Bon, je le commente sinon ...De mémoire ... #pragma library 1 n'est actif que dans la version complète (payante !).
++