- 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 ---
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
detailsici
Test mesure en DC pur
Test mesure en PWM sur petit moteur DC Piloté via IBT2 pont MOSFET
valeur du seuil d'ALERT :
81.92 mV correspond à 8.192 Amps soit 32768 pts
2400 pts ou 0x960 <---- valeur du seuil pour 0,6A ( je n'ai qu'un PETIT MOTEUR !)
0.600 Amps
execution programme:
Init INA226 mesure de courant via I2C, shunt de 150mV pou 15Amps
Config INA226_CONF_REG,0x43FF (was 0x4127 )
Calibration register 05h (pour shunt 0,01 ohm et 8 Amps)
Mask/Alert MASK_EN_REG register 06h <- 0x8001
Alert MASK_EN_REG register 07h <- 2400 pour 0.6 A
Mesure de courant 0 mA
Seuil d'alerte 0.600 Amperes
INA Manufactuer 0x5449
INA Identifiant 0x2260
Fin de parametrage INA226... OK
1er test avec pooling du status INTERNE INA et bit ALERT
Du fait de la liaison (ceinture) directe Hardware entre sortie INA ALERT et DIS (driver), via des portes logiques
traiter l'etat RC0 (ALERT)via interruption perd de son interet
ou alors peut servir de bretelle si la ceinture ne marche pas ..
d'où le questionnement Traitement RC0 via pooling ou Interrupt
si par interrupt ..quelle action (reaction d'evenement ) associée ?
package XC8
Merci Paul pour ces essais instructifs et les fichiers MPLAB correspondants qui m'aident beaucoup.
Sauf que j'ai besoin de récupérer l'état Alert pour sa visualisation par led via le PIC.paulfjujo a écrit :traiter l'état RC0 (ALERT)via interruption perd de son intérêt
Et puis, tu m'avais indiqué par ailleurs qu'il était judicieux de bloquer aussi les sorties PWM du PIC au basculement en Alert (bretelles...).
Raisons pour lesquelles je recoure à RC0, par interrupt (si je t'ai bien compris).
J'ai aussi cherché des avis sur d'autres forums, pour valider la conception de mon PCB projeté, mais n'ai pour l'instant pas encore de réponse (pour les fantaspiciens : voir le gerber joint à mon message précédent).
J'espère en obtenir et ainsi rapidement lancer sa fabrication sans appréhension.
Comme JLCPCB exige une commande minimale de 5 pièces, que ceux que ce projet intéresse me le fasse savoir et je leur en adresserai un avec plaisir.
A suivre...
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
1 pierre à rajouter :
RC0 relié à ALERT INA226
Declenche l'interruption RC0
un demarrage à fond PWM=100% declenche d'office l'ALERT (meme moteur à vide!)
par contre reste OK avec PWM=75% ,car en dessous de 0,6A
la reaction est quasi immediate.
19:05:33.049) Recu :PWM1=1000
(19:05:33.049) Saisie OK PWM1-RC2 1000 98.0%
(19:05:33.102) *ALERT<CR>NbB= 1657 Cpt6=10071 PWM1= 0 PWM2= 0 15.61 V 0.018 A . Seuil=0.600
...53mS ( et sans deduire le delai d'ecriture sur terminal!)
on a quand meme peut etre besoin de tester le STATUS de l'INA #1 ou INA #2
pour differencier quel Battant déclenche l'ALERT quand les mouvements des battants sont simultanés.
mais il faudra sans doute arreter les 2 mouvements en meme tremps ...(les 4 PMW)
mon proto n'a qu'un seul INA et 1 seul moteur...
Code : Tout sélectionner
void __interrupt(irq(IRQ_IOC),high_priority) IOC_ISR(void)
{
unsigned char i;
const char *p2="ALERT\r\n";
U1TXB ='*';__delay_ms(2);
if ( (IOCCF & 0x01)==1) // RC0
{
for (i=0; i<6; i++)
{
while (!U1TXIF) { };
U1TXB = *(p2+i);
}
Led_Rouge=0; // allume led
k1_PWM=0;
k2_PWM=0;
PWM1_LoadDutyValue(k1_PWM); // plus de cde PWM sur le PONT H
PWM2_LoadDutyValue(k2_PWM);
}
IOCCF = 0x00;
}
il ne faut pas utiliser la mémorisation de l'ALERT dans l'INA
extrait de l'init INA226
Code : Tout sélectionner
CPrint(" Mask/Alert MASK_EN_REG register 06h <- 0x8001\r\n");
// 0x00D1B
tmp[0]=INA226_MASK_EN_REG;
tmp[1]=0x80;
tmp[2]=0x00; // avec latch_EN=1 il faut couper l'alim INA pour RAZER le defaut
Addr=INA226_ADDR;
p1=&tmp[0];
cx=3;
I2C1_WriteNBytes(Addr, p1, cx);
Je m'en doutais : raison pour laquelle j'ai prévu un démarrage des mouvements en vitesse lente (réglable) sur les 5 premiers degrés de la rotation.paulfjujo a écrit :Source du message un démarrage à fond PWM=100% déclenche d'office l'ALERT
Comme je l'avais indiqué :paulfjujo a écrit :Source du message il ne faut pas utiliser la mémorisation de l'ALERT dans l'INA
Le paramètre LEN (latch Enable) des INA doit bien sûr être laissé à 0.Je n'utilise pas le latch propre à l'INA (paramètre LEN=0). J'ai préféré recourir à des portes logiques (CD4001) pour exploiter un Reset hard sur carte via SW3.
Je n'ai pas prévu une telle différenciation dans la mesure où j'ai opté pour LEN=0 aux INA et une gestion globale hard par CD4093.paulfjujo a écrit :Source du message différencier quel Battant déclenche l'ALERT (...) il faudra sans doute arrêter les 2 mouvements en même temps ...(les 4 PMW)
En revanche les 2 moteurs seront bien bloqués par la sortie de la porte U12C, complétée selon tes conseils par les 4 PWM à 0, via l'état bas fourni en entrée RC0 du Pic par l'une des sorties Alert des INA (Alert_inPC0).
Je suis toujours sur la bonne structuration des conditionnalités qui me donne du fil à retordre...
Merci encore.
A suivre...
Je dois me rendre à l'évidence, je patauge pas mal, mais à défaut du Grand Bain j'arrive au moins au pédiluve.
Comme je veux tout avoir sous la main, j'ai regroupé tous mes critères dans le (gros) fichier docx joint.
Pour aller dans le vif du sujet (les conditionnalités), rendez-vous en fin de page 12 et suivantes (lignes numérotées).
Je ne voudrais pas inquiéter, mais c'est dense, et probablement trop, mais ça devrait permettre de bien cerner l'ampleur du bousin... et de mes erreurs : il y a du taff!
Bon, certes, ça n'est quand même pas du niveau d'une CNC, mais pour moi, plus j'avance et moins j'en vois le bout
Merci de votre compassion et surtout de votre aide patiente...
A suivre...
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
j'ai bossé un peu sur le MCP23017 que je n'avais jusqu'alors jamais utilisé en interruption ,
voici le resumé :
en lien avec ce post
viewtopic.php?f=10&t=1506
Insertion fonctions dans une interruption XC8 18F27K42
Usage de l'interrupt MCP23017 pour la Réactivité quasi temps reel ....
MAIS on ne peut pas en profiter
VU qu'on ne peut pas mettre la lecture I2C des regsitres MCP dans une interrupt ...
Dans cet exmple (zip ci-joint)
L'interrupt MCP se contente d'armer un flag et capturer le chrono (SMT1 en µS )en cours
mais comme la lecture de l'etat port B MCP se fait dans le main en I2C
la vraie lecture du portB n'est pas forcément celle correspondant au moment de l'interrupt !
il s'ensuit une duree minimum pour BIEN lire le bon etat du port,
lié à la duree de boucle programme .
par contre le lecture du registre CAPB (capture du portb au moment de l'interrupt)
correspond bien au chrono affiché .. mais non synchronisé temps reel.
on pourrait effectuer plusieurs fois le test du flag dans la boucle principale
pour pouvoir capter l'etat MCP avec le moins de latence possible
MAIS le traitement correspondant à l'evenement devra etre AUSSI etre multiplié !
dans ce test la duree de boucle est de 640mS
incluant l'affichage LCD, les mesures INA, le traitement ALERT, 2 sorties PWM, + sortie UART
et une TEMPO de 100mS correspondant à d'autres futurs traitements de fond.
en resumé, si l'I2C est utilisé par ailleurs, l'IT MCP23017 n'est pas directement utilisable.
on pourrait donc rester en mode pooling :
probleme solvable ?
attendre que le bus I2C soit libre (non occupé par le LCD ou Les 2 INA , pour lancer une lecture MCP ?
mais le compilateur NE VEUT PAS 2 branches Interrupt avec I2C
....avec un PIC18F47K42 ... usage de I2C2
....ou usage de MCP23S17 en SPI ... pas assez de PIn sur 18F27K42
d'ou ce tout dernier test :
Remplacement du delay 500mS par une boucle de 250 x 2ms
incluant le test du flag MCP , => traitement de l'info si armé...
hors tempo 500mS; le traitement actuel prend 640-500=140mS
si on test alors le flag dans un fenetre temporelle de 500mS
on a 75% fois plus de change de le capter
La latence de traitement est reduite
le bout de code s'y rapportant
Code : Tout sélectionner
// __delay_ms(500);
i=0;
do
{
if (mcp_flag) break;
__delay_ms(2);
i++;
} while(i<250);
if (mcp_flag)
{
IOCBNbits.IOCBN1 =0;
IT_Flag=I2C1_Read1ByteRegister(MCP23017_ADDR,MCP_INTFB);
CAPB=I2C1_Read1ByteRegister(MCP23017_ADDR,MCP_INTCAPB);
MCP_B = MCP23017_ReadGPIOB();
sprintf(CRam1," %lu.%03d mS IT_Flag = 0x%02X CAPB= 0x%02X",mcp_timestamp/1000,mcp_timestamp%1000,(int) IT_Flag,(int) CAPB); // ok
Print(CRam1);
CRLF1();
CPrint(" \r\nTraitement de l'evenenment ....\r\n");
//__delay_ms(100);
mcp_flag = false;
IOCBNbits.IOCBN1 = 1
}
// pendant une ouverture de dialogue operateur on ratera des changements sucessifs sur MCP23017
if (Flag_Buffer1==1) Dialogue_Operateur();
Nb_Boucles ++;
}
while (1);
j'ai 2 BP sur les entrée B1 et b3 du MCP (tirées au +Vcc via 2.7k)
un zero declenche l'interrupt INTB MCP qui va sur RB1 du PIC ( IOCB1)
Le traitement interrupt IOC traite aussi RC0 (Alert INA)
le resultat sur terminal
* show time delta activé sur YAT terminal
Code : Tout sélectionner
((0.268) PWM1=1000
(0.331) Recu :PWM1=1000
(0.027) Saisie OK PWM1-RC2 1000 98.0%
(0.066) N= 267 PWM1= 1000 PWM2= 0 4.99 V 0.001 A . Seuil=0.600
(0.639) N= 268 PWM1= 1000 PWM2= 0 4.99 V 0.001 A . Seuil=0.600
(0.640) N= 269 PWM1= 1000 PWM2= 0 4.99 V 0.001 A . Seuil=0.600
(0.640) N= 270 PWM1= 1000 PWM2= 0 4.99 V 0.001 A . Seuil=0.600
(0.640) N= 271 PWM1= 1000 PWM2= 0 4.99 V 0.001 A . Seuil=0.600
(0.640) N= 272 PWM1= 1000 PWM2= 0 4.99 V 0.001 A . Seuil=0.600
(0.465) MA=1
(0.134) Recu :MA=1
(0.021) ITB2 Enabled
(0.021) N= 273 PWM1= 1000 PWM2= 0 4.99 V 0.001 A . Seuil=0.600
(0.639) N= 274 PWM1= 1000 PWM2= 0 4.86 V 0.052 A . Seuil=0.600
(0.641) N= 275 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.639) N= 276 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.640) N= 277 PWM1= 1000 PWM2= 0 4.86 V 0.053 A . Seuil=0.600
(0.641) N= 278 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.643) N= 279 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.637) N= 280 PWM1= 1000 PWM2= 0 4.86 V 0.053 A . Seuil=0.600
(0.302) 6383.696 mS IT_Flag = 0x00 CAPB= 0x02
(0.265) 6516.802 mS IT_Flag = 0x00 CAPB= 0x02
(0.109) N= 281 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.640) N= 282 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.640) N= 283 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.651) N= 284 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.106) 7531.851 mS IT_Flag = 0x00 CAPB= 0x02
(0.070) 7630.139 mS IT_Flag = 0x00 CAPB= 0x02
(0.207) 7734.704 mS IT_Flag = 0x00 CAPB= 0x02
(0.151) 7810.948 mS IT_Flag = 0x00 CAPB= 0x02
(0.167) N= 285 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.155) 7949.175 mS IT_Flag = 0x00 CAPB= 0x02
(0.123) 8034.878 mS IT_Flag = 0x00 CAPB= 0x02
(0.229) 8150.009 mS IT_Flag = 0x00 CAPB= 0x02
(0.156) 8228.469 mS IT_Flag = 0x00 CAPB= 0x02
(0.057) N= 286 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.125) 8320.774 mS IT_Flag = 0x00 CAPB= 0x02
(0.139) 8390.724 mS IT_Flag = 0x00 CAPB= 0x02
(0.189) 8485.573 mS IT_Flag = 0x00 CAPB= 0x02
(0.159) 8566.183 mS IT_Flag = 0x00 CAPB= 0x02
(0.092) N= 287 PWM1= 1000 PWM2= 0 4.86 V 0.053 A . Seuil=0.600
(0.116) 8659.101 mS IT_Flag = 0x00 CAPB= 0x02
(0.112) 8726.966 mS IT_Flag = 0x00 CAPB= 0x02
(0.450) N= 288 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.639) N= 289 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.652) N= 290 PWM1= 1000 PWM2= 0 4.86 V 0.053 A . Seuil=0.600
(0.129) 9597.045 mS IT_Flag = 0x00 CAPB= 0x08
(0.042) 9679.500 mS IT_Flag = 0x00 CAPB= 0x08
(0.504) N= 291 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.135) 9928.806 mS IT_Flag = 0x00 CAPB= 0x08
(0.022) 10020.126 mS IT_Flag = 0x00 CAPB= 0x08
(0.508) N= 292 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.166) 10358.767 mS IT_Flag = 0x00 CAPB= 0x08
(0.176) 10448.138 mS IT_Flag = 0x00 CAPB= 0x08
(0.335) N= 293 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.387) 10810.209 mS IT_Flag = 0x00 CAPB= 0x02
(0.281) N= 294 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.152) 11027.922 mS IT_Flag = 0x00 CAPB= 0x08
(0.499) N= 295 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.652) N= 296 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.124) 11601.398 mS IT_Flag = 0x00 CAPB= 0x02
(0.108) 11722.040 mS IT_Flag = 0x00 CAPB= 0x08
(0.230) 11837.119 mS IT_Flag = 0x00 CAPB= 0x08
(0.224) N= 297 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.639) N= 298 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.147) 12304.482 mS IT_Flag = 0x00 CAPB= 0x08
(0.036) 12362.990 mS IT_Flag = 0x00 CAPB= 0x02
(0.059) 12393.136 mS IT_Flag = 0x00 CAPB= 0x08
(0.186) 12486.611 mS IT_Flag = 0x00 CAPB= 0x02
(0.288) N= 299 PWM1= 1000 PWM2= 0 4.86 V 0.053 A . Seuil=0.600
(0.641) N= 300 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.471) 13188.436 mS IT_Flag = 0x00 CAPB= 0x02
(0.188) N= 301 PWM1= 1000 PWM2= 0 4.86 V 0.054 A . Seuil=0.600
(0.146) 13293.499 mS IT_Flag = 0x00 CAPB= 0x08
(0.125) 13420.233 mS IT_Flag = 0x00 CAPB= 0x08
(0.404) N= 302 PWM1= 1000 PWM2= 0 4.86 V 0.053 A . Seuil=0.600
(0.641) N= 303 PWM1= 1000 PWM2= 0 4.86 V 0.053 A . Seuil=0.600
on peut voir que le delai de latence est souvent infeieur à 140mS ....
D'abord merci!
Oh le doux euphémismej'ai bossé un peu
Mais bon, là, même en pédiluve, sûr, il va me falloir une bouée...
on peut voir que le délai de latence est souvent inférieur à 140mS ....
Oui, mais je suppose qu'avec tout le reste, ce délai s'envole, et puis tu indiques :
Que ce passe-t-il pour les 25% restants ?si on teste alors le flag dans un fenêtre temporelle de 500mS, on a 75% fois plus de chance de le capter
Quelques remarques interrogatives dans le doc joint.
A+
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Babar64 a écrit :on peut voir que le délai de latence est souvent inférieur à 140mS ....
Oui, mais je suppose qu'avec tout le reste, ce délai s'envole,
640ms est la duree actuelle totale de cette boucle dans ce programme de test
les 140mS representent la durée de boucle SANS la boucle delai de 500mS (250x2mS)
on aura donc un temps de latence suite à une interruption MCP23017
de 0 à 140mS maxi, si l'IT survient AVANT la boucle delai
alors que , une fois dans la boucle delai (250x2ms)
le temps de latence est de 0 à 2mS seulement.
bien sur on ne rajoutera pas cette boucle delai 500ms dnas le programme final
c'était juste pour bien expliquer , que la reactivité immediate de l'interruption
necessite un espace temporel pour y faire le traitement voulu.
et qu'on ne puisse pas traiter celle ci directement, parceque l'I2C n'est pas ré-entrante.
Au final, c'est la duree de la boucle principale qui fera la latence maximale
Nota:
Vu que la detection ALERTE se fait doublement :
* par hardware
* et par Interruption PIC + traitement immediat=> RAZ PWM moteurs
cette Latence n'aura pas d'incidence sur l'evenement le plus critique de l'application
mes reponses dans ton doc
Mesures de durée execution code :
Code : Tout sélectionner
Start_Chrono();
Volts =(float) mvU * 1.25 / 1000;
Amps =(float) mvA * 2.5 /10000.0; // (5120/2048=2.5)
Stop_Chrono(1); //
N= 19 PWM1= 500 PWM2= 0 SMT1 Nb Tics ....230 µS
----------------------------
exemple de gain , en utilisant un precalcul de coeff.
Code : Tout sélectionner
Start_Chrono();
Volts =(float) mvU * 0.00125 ;
Amps =(float) mvA * 0.00025 ; // (5120/2048=2.5)
Stop_Chrono(1);
N= 16 PWM1= 0 PWM2= 0 SMT1 Nb Tics ... 80µS
-----------------------------------------
Acquisition de 1 seul module INA
Code : Tout sélectionner
Start_Chrono();
Init_INA226_Done=1;
Mesures_INA226();
Stop_Chrono(1);
N= 61 PWM1= 0 PWM2= 0 SMT1 Nb Tics 2540 µS
-------------------------------------
affichage sur Terminal et sur 1 ligne LCD : " 5.37 V 0.001 A "
des 2 mesures calculées en unités physiques d'un module INA
Code : Tout sélectionner
Start_Chrono();
Init_INA226_Done=1;
Mesures_INA226();
Volts =(float) mvU * 0.00125 ;
Amps =(float) mvA * 0.00025 ;
sprintf(CRam1," %2.2f V %2.3f A .",Volts,Amps);
Print(CRam1);
LCD_Write_Text_At(3,1,CRam1);
Stop_Chrono(1);
N= 59 PWM1= 0 PWM2= 0 5.37 V 0.001 A . SMT1 Nb Tics 43222 ....en 43.2mS
et sans l'envoi sur terminal ....en 41.7 mS
l'envoi sur terminal compte pour 1,5mS
------------------------------------------
envoi des données mises en forme sur 1 ligne LCD en 22.56mS
Code : Tout sélectionner
Start_Chrono();
sprintf(CRam1," PWM2= % 4d",k2_PWM);
Print(CRam1);
LCD_Write_Text_At(2,1,CRam1);
Stop_Chrono(1);
N= 459 PWM1= 0 PWM2= 0 SMT1 Nb Tics 22566
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
paulfjujo a écrit :bonjour à tous,Babar64 a écrit :on peut voir que le délai de latence est souvent inférieur à 140mS ....
Oui, mais je suppose qu'avec tout le reste, ce délai s'envole,
640ms est la duree actuelle totale de cette boucle dans ce programme de test
les 140mS representent la durée de boucle SANS la boucle delai de 500mS (250x2mS)
on aura donc un temps de latence suite à une interruption MCP23017
de 0 à 140mS maxi, si l'IT survient AVANT la boucle delai
alors que , une fois dans la boucle delai (250x2ms)
le temps de latence est de 0 à 2mS seulement.
bien sur on ne rajoutera pas cette boucle delai 500ms dnas le programme final
c'était juste pour bien expliquer , que la reactivité immediate de l'interruption
necessite un espace temporel pour y faire le traitement voulu.
c'est quand meme dommage d'avoir un circuit pouvant generer une interruption sur changement d'etat
et qu'on ne puisse pas traiter celle ci directement, parceque l'I2C n'est pas ré-entrante.
Au final, c'est la duree de la boucle principale qui fera la latence maximale
Nota:
Vu que la detection ALERTE se fait doublement :
* par hardware
* et par Interruption PIC + traitement immediat=> RAZ PWM moteurs
cette Latence n'aura pas d'incidence sur l'evenement le plus critique de l'application
mes reponses dans ton doc
Si je comprends bien-0511.docx
Mesures de durée execution code :Code : Tout sélectionner
Start_Chrono();
Volts =(float) mvU * 1.25 / 1000;
Amps =(float) mvA * 2.5 /10000.0; // (5120/2048=2.5)
Stop_Chrono(1); //
N= 19 PWM1= 500 PWM2= 0 SMT1 Nb Tics ....230 µS
----------------------------
exemple de gain , en utilisant un precalcul de coeff.Code : Tout sélectionner
Start_Chrono();
Volts =(float) mvU * 0.00125 ;
Amps =(float) mvA * 0.00025 ; // (5120/2048=2.5)
Stop_Chrono(1);
N= 16 PWM1= 0 PWM2= 0 SMT1 Nb Tics ... 80µS
-----------------------------------------
Acquisition de 1 seul module INACode : Tout sélectionner
Start_Chrono();
Init_INA226_Done=1;
Mesures_INA226();
Stop_Chrono(1);
N= 61 PWM1= 0 PWM2= 0 SMT1 Nb Tics 2540 µS
-------------------------------------
affichage sur Terminal et sur 1 ligne LCD : " 5.37 V 0.001 A "
des 2 mesures calculées en unités physiques d'un module INACode : Tout sélectionner
Start_Chrono();
Init_INA226_Done=1;
Mesures_INA226();
Volts =(float) mvU * 0.00125 ;
Amps =(float) mvA * 0.00025 ;
sprintf(CRam1," %2.2f V %2.3f A .",Volts,Amps);
Print(CRam1);
LCD_Write_Text_At(3,1,CRam1);
Stop_Chrono(1);
N= 59 PWM1= 0 PWM2= 0 5.37 V 0.001 A . SMT1 Nb Tics 43222 ....en 43.2mS
et sans l'envoi sur terminal ....en 41.7 mS
l'envoi sur terminal compte pour 1,5mS
------------------------------------------
envoi des données mises en forme sur 1 ligne LCD en 22.56mSCode : Tout sélectionner
Start_Chrono();
sprintf(CRam1," PWM2= % 4d",k2_PWM);
Print(CRam1);
LCD_Write_Text_At(2,1,CRam1);
Stop_Chrono(1);
N= 459 PWM1= 0 PWM2= 0 SMT1 Nb Tics 22566
********************************************************************************************
recherche optimisation coté LCDmodif :
dans LCD_4bits_I2C_2024-01.c
delay 10µs carrément supprimé ,
le dialogue via I2C à 100Khz ralentissant déja suffisament la vitesse d'échange entre PIC et LCD
contrairement à une commande directe PIC -> LCD ..avec delais obligatoiresla main boucle passe de 628ms à 580mS
test durée traitement acquisition + affichage sur 1 ligne LCD des mesures d'un module INA
(et sur Terminal )
Code : Tout sélectionner
Start_Chrono();
Init_INA226_Done=1;
Mesures_INA226();
Volts =(float) mvU * 0.00125 ;
Amps =(float) mvA * 0.00025 ;
sprintf(CRam1," %2.2f V %2.3f A .",Volts,Amps);
Print(CRam1);
LCD_Write_Text_At(3,1,CRam1);
Stop_Chrono(1);N= 30 PWM1= 0 PWM2= 0 12.25 V 0.001 A . SMT1 Nb Tics 29862
et l'affichage LCD reste OK
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
suite Tests MCP23017
sur port de sortie MA , acces individuel au bit dans le registre OLATA , activation ou pas du clignotement
Test via l'usage du terminal YAT ...
MA=1
Recu :MA=1
ITB2 Marche
N=12021 PWM1= 250 PWM2= 0 14.41 V 0.022 A . Seuil=0.600 MA=0x00 MB=0xFF
N=12022 PWM1= 250 PWM2= 0 14.41 V 0.022 A . Seuil=0.600 MA=0x00 MB=0xFF
PWM1=0500
MA=0x00 MB=0xFF
Recu :PWM1=0500
Saisie OK PWM1-RC2 500 49.0%
N=12025 PWM1= 500 PWM2= 0 14.41 V 0.022 A . Seuil=0.600 MA=0x00 MB=0xFF
N=12026 PWM1= 500 PWM2= 0 14.32 V 0.041 A . Seuil=0.600 MA=0x00 MB=0xFF
FL=1
MA=0x00 MB=0xFF
Recu :FL=1
Flash Out=1
N=12032 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash MA=0x01 MB=0xFF
N=12033 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash MA=0x01 MB=0xFF
SI=1
Recu :SI=1
Sirene=1
N=12037 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash Sir MA=0x03 MB=0xFF
N=12038 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash Sir MA=0x03 MB=0xFF
BU=1
Recu :BU=1
Buzzer=1
N=12046 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash Sir Buz MA=0x07 MB=0xFF
N=12047 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash Sir Buz MA=0x07 MB=0xFF
CL=1
Recu :CL=1
Clignote= 1
N=12051 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash* Sir Buz MA=0x07 MB=0xFF
N=12052 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash* Sir Buz MA=0x06 MB=0xFF
N=12053 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash* Sir Buz MA=0x06 MB=0xFF
N=12054 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600
CL=2
Recu :CL=2
Clignote= 3
N=12055 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash* Sir* Buz MA=0x07 MB=0xFF
N=12056 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash* Sir* Buz MA=0x04 MB=0xFF
N=12057 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash* Sir* Buz MA=0x04 MB=0xFF
N=12058 PWM1= 500 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash* Sir* Buz MA=0x07 MB=0xFF
PWM1=0250
Recu :PWM1=0250
Saisie OK PWM1-RC2 250 24.5%
N=12059 PWM1= 250 PWM2= 0 14.30 V 0.041 A . Seuil=0.600 Flash* Sir* Buz MA=0x07 MB=0xFF
N=12060 PWM1= 250 PWM2= 0 14.40 V 0.021 A . Seuil=0.600 Flash* Sir* Buz MA=0x04 MB=0xFF
N=12061 PWM1= 250 PWM2= 0 14.39 V 0.022 A . Seuil=0.600 Flash* Sir* Buz MA=0x04 MB=0xFF
N=12062 PWM1= 250 PWM2= 0 14.39 V 0.022 A . Seuil=0.600 Flash* Sir* Buz MA=0x07 MB=0xFF
N=12063 PWM1= 250 PWM2= 0 14.39 V 0.022 A . Seuil=0.600 Flash* Sir* Buz MA=0x07 MB=0xFF
N=12064 PWM1= 250 PWM2= 0 14.39 V 0.022 A . Seuil=0.600 Flash* Sir* Buz MA=0x04 MB=0xFF
N=12065 PWM1= 250 PWM2= 0 14.39 V 0.022 A . Seuil=0.600 Flash* Sir* Buz MA=0x07 MB=0xFF
......... freinage rotor ....
N=12155 PWM1= 250 PWM2= 0 14.05 V 0.113 A . Seuil=0.600 Flash* Sir* Buz MA=0x07 MB=0xFF
PWM1=1000
Recu :PWM1=1000
Saisie OK PWM1-RC2 1000 98.0%
ALERT
N=12156 PWM1= 0 PWM2= 0 14.02 V 0.122 A . Seuil=0.600 Flash* Sir* Buz MA=0x04 MB=0xFF
N=12157 PWM1= 0 PWM2= 0 13.64 V 0.158 A . Seuil=0.600 Flash* Sir* Buz MA=0x04 MB=0xFF
N=12158 PWM1= 0 PWM2= 0 14.49 V 0.003 A . Seuil=0.600 Flash* Sir* Buz MA=0x07 MB=0xFF
Les phases de tests prealables sont essentielles pour arriver à un resultat probant.Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités

