Rotinas do firmware de aquisição apresentadas separadamente por concentrarem o frame I²C estruturado, o cálculo de Q por fator de potência, frequência e sequência de fases.
1// Cabeçalho de configuração do firmware de aquisição com análise angular.
2#include <DS1307.C>
3#include <241025x4.c>
4
5#include <math.h>
6#include <string.h>
7//#include <stdlib.h>
8
9#pragma zero_ram //- RAM is zerada antes de iniciar
10#pragma case
11
12#define __USB_PIC_PERIF__ 1
13#DEFINE USB_HID_DEVICE TRUE
14//#define USB_CONFIG_HID_TX_SIZE 7
15//#define USB_CONFIG_HID_RX_SIZE 7
16
17#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT
18#define USB_EP1_TX_SIZE 9//8//8 #define USB_EP1_TX_SIZE (USB_CONFIG_HID_TX_SIZE+1)
19#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT
20#define USB_EP1_RX_SIZE 9//8//8
21
22//#define USB_CON_SENSE_PIN PIN_C6
23
24#include <pic18_usb.h>
25#include <usb_desc_hidm.h>
26#include <usb.c>
27
28#define ResetKeyB output_high(PIN_D6)
29#define NoRKeyB output_low(PIN_D6)
30
31#define Clk74166 PIN_D7
32#define S074166 input(PIN_E3)
33#define PZero input(PIN_C2)
34#define HIKeyb PIN_C0
35
36void MedEnergia(void);
37int8 KeyPress(void);
38void EnviaMsgI2c(int8 tela, int8 campo, int8 *valor);
39void FaixaTexto(int8 x, int8 y,int8 t, int8 *texto, int1 Normal);
40float Tensao(int8 n);
41void MedVIPF(void);
42void FPot(float &FP,float &PKW,int8 i,int1 upd);
43void Q(int8 i,float FP, float PKW,int1 upd);
44void Arctang(signed int16 *S,signed int16 *Sc,signed int16 &A,signed int16 &B,signed int16 &C);
45float PW(int8 n);
46void MedPFP(int8 &x);
47int8 SeqFase(void);
48int8 Frequencia(void);
49int8 KeyNumb(int8 K);
50
51static static int1 WH=0,PotAt=0,SF=0,VV=0;//,MPrinc=0
52static char Pn[7],msg[12],Unid[4];// dot2[2]=":",;
53//static char
54//static int1 WH,PotAt,SF,VV;//,MPrinc=0
55static unsigned int8 ns=0,nPA,ord[6],StopMed;//OrdVI[6];//,OrdI[3];//OrdVI[6],
56//static unsigned int8 ns,nPA,KPI;
57static unsigned int16 Vr,FaseVA[10],FaseVB[10],FaseVC[10],FaseIA[10],FaseIB[10],FaseIC[10];//,TempoM;
58//static signed int16 VSFB[50],VSFC[50],VSFA[50];
59//static signed int16
60static signed int32 PAtiva,ENERG,REATIVA,RWs,Ws,RVAs,VAs;//1,ENERG2,ENERG3;
61
62/*
63signed int16 Seno[50]={
64125 ,249 ,368 ,482 ,588 ,685 ,771 ,844 ,905 ,951,
65982 ,998 ,998 ,982 ,951 ,905 ,844 ,771 ,685 ,588,
66482 ,368 ,249 ,125 ,0 ,-125 ,-249 ,-368 ,-482 ,-588,
67-685 ,-771 ,-844 ,-905 ,-951 ,-982 ,-998 ,-998 ,-982 ,-951,
68-905 ,-844 ,-771 ,-685 ,-588 ,-482 ,-368 ,-249 ,-125 ,0
69};
70
71signed int16 Cos[50]={
72992 ,969 ,930 ,876 ,809 ,729 ,637 ,536 ,426 ,309,
73187 ,63 ,-63 ,-187 ,-309 ,-426 ,-536 ,-637 ,-729 ,-809,
74-876 ,-930 ,-969 ,-992 ,-1000,-992 ,-969 ,-930 ,-876 ,-809,
75-729 ,-637 ,-536 ,-426 ,-309 ,-187 ,-63 ,63 ,187 ,309,
76426 ,536 ,637 ,729 ,809 ,876 ,930 ,969 ,992 ,1000
77};
78*/
79
80/*
81const signed int8 Seno[50]={
820, 13 ,25 ,37 ,48 ,59 ,68 ,77 ,84 ,90 ,95,
8398 ,100 ,100 ,98 ,95 ,90 ,84 ,77 ,68 ,59,
8448 ,37 ,25 ,13 ,0 ,-13 ,-25 ,-37 ,-48 ,-59,
85-68 ,-77 ,-84 ,-90 ,-95 ,-98 ,-100 ,-100 ,-98 ,-95,
86-90 ,-84 ,-77 ,-68 ,-59 ,-48 ,-37 ,-25 ,-13 //,0
87};
88
89const signed int16 Cos[50]={
90100, 99 ,97 ,93 ,88 ,81 ,73 ,64 ,54 ,43 ,31,
9119 ,6 ,-6 ,-19 ,-31 ,-43 ,-54 ,-64 ,-73 ,-81,
92-88 ,-93 ,-97 ,-99 ,-100,-99 ,-97 ,-93 ,-88 ,-81,
93-73 ,-64 ,-54 ,-43 ,-31 ,-19 ,-6 ,6 ,19 ,31,
9443 ,54 ,64 ,73 ,81 ,88 ,93 ,97 ,99 //,100
95};
96
97*/
98
99int8 KeyNumb(int8 K){
100
101 if(K>12)K=0;
102 else if(K>8)K-=2;
103 else if(K>4)K--;
104
105return K;
106
107}
108
109////////////////////////////////////////////////////////////////////////////////
110void GravaMemI2C(int8 *IDs){ //int8 item,float valor){
111int8 i, tempo[7];//sec;//,sec,min,hrs,day,month,yr,dow;
112int16 NItens;
113
114ds1307_init();
115
116//// Set date for -> 15 June 2005 Tuesday
117//// Set time for -> 15:20:55
118//ds1307_set_date_time(15,6,5,2,15,20,55);
119
120//ds1307_get_date(day,month,yr,dow);
121ds1307_get_time(tempo[0],tempo[1],tempo[2]);
122ds1307_get_date(tempo[3],tempo[4],tempo[5],tempo[6]);
123
124//ds1307_get_time(hrs,min,sec);
125 //ds1307_get_date(day,month,yr,dow);
126 //ds1307_get_time(hrs,min,sec);
127//00: N�mero de Registros
128
129//01: ID: 10bytes (1-10)
130
131//02: Hora: 1 byte (11)
132//03: Min: 1 byte (12)
133//04: sec: 1 byte (13) -------------------------------------
134
135//05: Dia: 1 byte (14)
136//06: Mes: 1 byte (15)
137//07: Ano: 1 byte (16)
138//08: dow: 1 byte (17) --------------------------
139
140//09: Kd: 2 bytes (18-19)
141//10: NV: 1 byte (20)
142//11: Cart: 1 byte (21)
143
144//12: Van: 6 bytes (22-27)
145//13: Vbn: 6 bytes (28-33)
146//14: Vcn: 6 bytes (34-39)
147//15: Ia: 6 bytes (40-45)
148//16: Ib: 6 bytes (46-51)
149//17: Ic: 6 bytes (52-57)
150//18: In: 6 bytes (58-63)
151//19: SF: 1 byte (64)
152//20: Freq: 1 byte (65)
153//21: Pa: 8 bytes (66-73)
154//22: Pb: 8 bytes (74-81)
155//23: Pc: 8 bytes (82-89)
156
157//24: Ener: 8 bytes (90-97)
158//25: Erro: 6 bytes (98-103)
159
160//26: Zfia: 6 bytes (104-109)
161//Total: 109 bytes
162
163NItens=readByte24AA1025(0x0000);
164NItens=1;
165
166if(NItens==255)writeByte24AA1025(0x0000, 0);
167writeByte24AA1025(0x0000,NItens++);
168
169for(i=0;i<9;i++)writeByte24AA1025((int32)NItens*107+1+i,IDs[i]);
170
171for(i=0;i<7;i++)writeByte24AA1025((int32)NItens*107+12+i,tempo[i]);
172//tempo[0]=hrs
173//tempo[1]=min
174//tempo[2]=sec
175
176//tempo[3]=day
177//tempo[4]=month
178//tempo[5]=yr
179//tempo[6]=dow (days of week)
180
181//writeByte24AA1025((int32)NItens*107+1+11,hrs); 12+0 tempo[0] hrs
182//writeByte24AA1025((int32)NItens*107+1+12,min); 12+1 tempo[1] min
183//writeByte24AA1025((int32)NItens*107+1+13,min); 12+1 tempo[2] sec
184
185//writeByte24AA1025((int32)NItens*107+1+14,day); 12+2 tempo[3] day
186//writeByte24AA1025((int32)NItens*107+1+15,month); 12+3 tempo[4] month
187//writeByte24AA1025((int32)NItens*107+1+16,yr); 12+4 tempo[5] year
188//writeByte24AA1025((int32)NItens*107+1+16,yr); 12+5 tempo[6] dow
189
190}
191////////////////////////////////////////////////////////////////////////////////
192void MedEnergia(void){
193int8 i,j,k,KP,nkd,d,nv,campo=0,campoOld=0;//,dd
194static float EnAt,VRa,IRa,VRb,IRb,VRc,IRc;//, EnAp;
195char temp[6][12];//,ID,CAart,KD,NV;
196int16 Kd;
197int in=0;
198
199
200union Memoria2
201{
202 int8 bbytes[12];
203 int16 wwords[6];
204}Leituras;
205
206
207inicio:
208
209for(i=0;i<3;i++){
210 FaseVA[i]=0;FaseVB[i]=0;FaseVC[i]=0;
211 FaseIA[i]=0;FaseIB[i]=0;FaseIC[i]=0;
212}
213
214Kd=(int16)read_eeprom(1); //end Kd atual
215nkd=(int8)Kd;
216Leituras.bbytes[1]=read_eeprom(Kd+2);
217Leituras.bbytes[0]=read_eeprom(Kd+3);
218Kd=Leituras.wwords[0];
219
220
221SeqFase();
222//for(i=0;i<6;i++)for(j=0;j<12;j++)temp[i][j]=0x20;
223
224
225strcpy(temp[0]," ");
226strcpy(temp[1],"0");
227
228sprintf(temp[2],"%lu",Kd);
229strcpy(temp[3],"1");
230
231for(i=0;i<6;i++){
232 k=strlen(temp[i]);
233 for(j=k;j<12;j++)temp[i][j]=0x20;
234}
235
236
237if(in==0){
238 temp[0][10]='a';
239 campo=0;
240}else campo=5;
241
242campoOld=campo;
243
244EnviaMsgI2c(4,0,temp[0]);//delay_ms(50);
245in=0;
246
247for(i=1;i<6;i++){
248 //delay_ms(100);
249 delay_ms(10);
250 EnviaMsgI2c(4,i,temp[i]);
251}
252
253delay_ms(50);
254
255d=0;nv=0;//dd=0;
256//campo=0;campoOld=campo;
257
258while(TRUE){
259KP=KeyPress();
260
261 if(KP!=0){
262
263 if(KP==4){
264 if(campo!=0)campo--;
265 else campo=5;
266 if (campo==4)campo=3;
267 }
268 else if(KP==8){
269 campo++;
270 if(campo>5)campo=0;
271
272 if (campo==4)campo=5;
273 }
274 else if(KP==12){
275 if(campo==2){
276 nkd++;
277 if(nkd>17)nkd=1;
278 }else if(campo==5){temp[campo][10]='0';return;}
279
280 //else if(campo==3){
281 //nv++;
282 //if(nv>100)nv=1;
283
284 //}
285 }
286 else if(KP==13){
287 if(campo==0){
288 if(d==0)d=1;
289 d--;
290 //msg[d]=0x20;
291 //EnviaMsgI2c(4,0,msg);delay_ms(50);
292
293 //////////////////////////////////////////////////////////////////////
294
295 //temp[0][d]=KeyNumb(KP)+0x30;
296 temp[0][d]=0x20;
297 temp[0][10]='a';
298 //d++;
299 //if(d>10)d=0;
300 EnviaMsgI2c(4,0,temp[0]);//delay_ms(50);
301
302 /////////////////////////////////////////////////////////////////////////
303 }
304 else if(campo==3){
305 if(nv==0)nv=1;
306 nv--;
307 temp[3][nv]=0x20;
308 temp[3][10]='a';
309 EnviaMsgI2c(4,3,temp[3]);
310 }
311 }//20h espa�o
312 else if(KP==15){
313 if(campo==5){
314 strcpy(msg," ");
315 EnviaMsgI2c(4,6,msg);//delay_ms(50);
316 break;
317 }
318 }//ENTER
319 else if(KP==16){
320 if(campo==2){
321
322 nkd--;
323 if(nkd==0)nkd=17;
324 }else if(campo==5){temp[campo][10]='0';return;}
325 //else if(campo==3){
326 //nv--;
327 //if(nv==0)nv=100;
328
329 //}
330 }
331 else{
332 //temp[campo][d]=KeyNumb(KP)+0x30;
333 //temp[campo][10]='a';
334 if(campo==0){
335 temp[campo][d]=KeyNumb(KP)+0x30;
336 temp[campo][10]='a';
337 d++;
338 if(d>10)d=0;
339 EnviaMsgI2c(4,0,temp[campo]);//delay_ms(50);
340 }
341 else if(campo==3){
342 temp[campo][nv]=KeyNumb(KP)+0x30;
343 temp[campo][10]='a';
344 nv++;
345
346 if(nv>2)nv=0;
347 EnviaMsgI2c(4,3,temp[campo]);//delay_ms(50);
348 }
349 }
350
351 if(KP==4||KP==8){
352 if(campoOld!=campo){
353 temp[campoOld][10]=0x20;
354 EnviaMsgI2c(4,campoOld,temp[campoOld]);
355 }
356 delay_ms(80);
357 temp[campo][10]='a';
358 EnviaMsgI2c(4,campo,temp[campo]);
359 delay_ms(50);
360 campoOld=campo;
361 }
362
363 if(KP==12||KP==16){
364 if(campo==1){
365 if(temp[1][0]=='0')temp[1][0]='1';
366 else temp[1][0]='0';
367 //EnviaMsgI2c(4,1,temp[campo]);//delay_ms(50);
368 }
369 else if(campo==2){
370 Leituras.bbytes[1]=read_eeprom(2*nkd+1);
371 Leituras.bbytes[0]=read_eeprom(2*nkd+2);
372 Kd=Leituras.wwords[0];
373
374 sprintf(temp[2],"%lu",Kd);
375 //j=strlen(temp[2]);
376 //for(i=j;i<12;i++)temp[campo][i]=0x20;
377 //temp[campo][10]='a';
378 //EnviaMsgI2c(4,2,temp[campo]);//delay_ms(80);
379 }else if(campo==3){
380
381 sprintf(temp[3],"%u",nv);
382 //j=strlen(temp[3]);
383 //for(i=j;i<12;i++)temp[campo][i]=0x20;
384 //temp[campo][10]='a';
385 //EnviaMsgI2c(4,3,temp[campo]);//delay_ms(80);
386 }
387 if(campo!=1){
388 j=strlen(temp[campo]);
389 for(i=j;i<12;i++)temp[campo][i]=0x20;
390 temp[campo][10]='a';
391 }
392 EnviaMsgI2c(4,campo,temp[campo]);
393
394 }
395 }
396}
397
398
399REATIVA=0;ENERG=0;RWs=0,Ws=0,VAs=0,RVAs=0;
400WH=1;
401//TempoM=0;//StopMed=0;
402
403output_high(HIKeyb);//delay_ms(100);
404
405 StopMed=0;WH=1;
406 clear_interrupt(INT_TIMER0);
407 enable_interrupts(INT_TIMER0);
408 clear_interrupt(INT_EXT2);
409 enable_interrupts(INT_EXT2);
410
411
412 set_timer0(45585); //600Hz
413 //while(ns<100); //MVOLT);//restart_wdt();//
414 //while(TRUE);
415 while(StopMed!=1);
416 StopMed=0;
417 //while(KeyPress()!=15);
418 disable_interrupts(INT_EXT2);
419 disable_interrupts(INT_TIMER0);
420output_low(HIKeyb);
421
422//FaseVA[2];FaseIA[2];
423//FaseVB[2];FaseIB[2];
424//FaseVC[2];FaseIC[2];
425
426while(RWs>1000){
427 RWs-=1000;
428 Ws++;
429}
430while(RWs<-1000){
431 RWs+=1000;
432 Ws--;
433}
434
435EnAt=(float)Ws;
436
437
438//TempoM;
439
440//EnviaMsgI2c(4,6,msg);//delay_ms(50);
441//char temp[6][12];
442
443sprintf(temp[0],"%5.2f",EnAt);
444EnviaMsgI2c(5,0,temp[0]);//delay_ms(50);//tela 5???????????????????????????????????????????????????
445
446//delay_ms(200);
447
448
449//EA=(unsigned int32) EnAt;
450
451VRa=(float)FaseVA[2];
452VRa*=0.8505;
453VRa+=1.2759;
454sprintf(temp[0],"%5.2f",VRa);
455EnviaMsgI2c(5,1,temp[0]);
456//VA=(unsigned int32) VRa;
457
458IRa=(float)FaseIA[2];
459IRa*=0.625;
460IRa+=0.625;
461sprintf(temp[0],"%5.2f",IRa);
462EnviaMsgI2c(5,2,temp[0]);
463//IA=(unsigned int32) IRa;
464
465VRb=(float)FaseVB[2];
466VRb*=0.8505;
467VRb+=1.2759;
468sprintf(temp[0],"%5.2f",VRb);
469EnviaMsgI2c(5,3,temp[0]);
470//VB=(unsigned int32) VRb;
471
472IRb=(float)FaseIB[2];
473IRb*=0.625;
474IRb+=0.625;
475sprintf(temp[0],"%5.2f",IRb);
476EnviaMsgI2c(5,4,temp[0]);
477//IB=(unsigned int32) IRb;
478
479VRc=(float)FaseVC[2];
480VRc*=0.8505;
481VRc+=1.2759;
482sprintf(temp[0],"%5.2f",VRc);
483EnviaMsgI2c(5,5,temp[0]);
484//VC=(unsigned int32) VRc;
485
486IRc=(float)FaseIC[2];
487IRc*=0.625;
488IRc+=0.625;
489sprintf(temp[0],"%5.2f",IRc);
490EnviaMsgI2c(5,6,temp[0]);
491WH=0;
492
493
494while(TRUE){
495
496KP=KeyPress();
497
498
499if(KP==12){
500 sprintf(temp[0],"%u",KP);
501 EnviaMsgI2c(5,6,temp[0]);
502 return;
503}
504else if(KP==16){
505 sprintf(temp[0],"%u",KP);
506 EnviaMsgI2c(5,6,temp[0]);
507 in=1;
508 goto inicio;
509
510}
511
512
513
514}
515
516}
517////////////////////////////////////////////////////////////////////////////////
518////////////////////////////////////////////////////////////////////////////////
519void FPot(float &FP,float &PKW,int8 i,int1 upd){
520static float FPold[3];
521
522 FP/=PKW;
523 if(FP>1.0)FP=1.0;
524 if(FP<0.0)FP=0.0;
525
526 if(abs(FP-FPold[i])>0.01 || upd){
527 sprintf(Pn,"%4.2f",FP);
528 strcpy(msg,Pn);//strcat(msg,Unid);
529 EnviaMsgI2c(3,i+9,msg);
530 FPold[i]=FP;//FP[i];
531 }
532}
533
534////////////////////////////////////////////////////////////////////////////////
535void Q(int8 i,float FP, float PKW,int1 upd){
536float Seno,temp;
537
538 Seno=sqrt(1.0-FP*FP);
539 PKW*=Seno;
540 temp=PKW;
541 if(temp>999.9){temp/=1000.0;strcpy(Unid,"KVAR");}else strcpy(Unid,"VAR");
542 sprintf(Pn,"%4.1f",temp);
543 strcpy(msg,Pn);strcat(msg,Unid);
544 EnviaMsgI2c(3,i+6,msg);
545}
546
547
548////////////////////////////////////////////////////////////////////////////////
549void Arctang(signed int16 *S,signed int16 *Sc,signed int16 *Fases){
550int8 i;
551
552for(i=0;i<6;i++)
553Fases[i]=(signed int16)(atan2((float)S[i],(float)Sc[i])*57.2958);//180/PI
554
555}
556////////////////////////////////////////////////////////////////////////////////
557float PW(int8 n){
558PAtiva=0;
559WH=0;PotAt=1;SF=0;VV=0;
560
561 nPA=n;
562 ns=0;
563
564 clear_interrupt(INT_TIMER0);
565 enable_interrupts(INT_TIMER0);
566 set_timer0(45585);
567 while(ns<100); //MVOLT);//restart_wdt();//
568 disable_interrupts(INT_TIMER0);
569
570
571 PAtiva/=208,022;//09.832;
572 PAtiva+=167.390;
573
574 PAtiva*=1.0559;//09.832;
575 PAtiva-=119.6;
576
577 PAtiva*=0.8355;
578 PAtiva-=36.888;
579 PotAt=0;
580
581 return PAtiva;
582}
583////////////////////////////////////////////////////////////////////////////////
584
585////////////////////////////////////////////////////////////////////////////////
586void MedPFP(int8 &x){
587float PKW,Pold[3],PWold[3],FP,temp;//={999999.9,999999.9,999999.9};//V, I,
588int1 upd=1;
589int8 i,j,KPI;
590
591 while(TRUE){
592
593 for(i=0;i<3;i++){
594 PKW=PW(i);
595 if(abs(PKW-PWold[i])>5 || upd){
596 temp=PKW;
597 if(temp>999.9){temp/=1000.0;strcpy(Unid,"KW");}
598 else strcpy(Unid,"W");
599
600 sprintf(Pn,"%5.1f",temp);
601 strcpy(msg,Pn);strcat(msg,Unid);;
602 EnviaMsgI2c(3,i,msg);
603 PWold[i]=PKW;//PWt[i];
604 }
605
606 KPI=KeyPress();
607 if(KPI==12 || KPI==16) goto fim;
608
609 //////////////////////////////////////////////////////////////////////////
610 FP=PKW;///P[i];
611 //////////////////////////////////////////////////////////////////////////
612
613 //V=Tensao(i);
614 //I=Tensao(i+3);
615 //P[i]=(float)V*I;
616 PKW=(float)Tensao(i)*Tensao(i+3);
617 if(abs(PKW-Pold[i])>5|| upd){
618
619 temp=PKW;
620 if(temp>999.9){temp/=1000.0;strcpy(Unid,"KVA");}
621 else strcpy(Unid,"VA");
622
623 sprintf(Pn,"%5.1f",temp);
624 //for(j=0;j<15;j++)msg[i]=0;
625 strcpy(msg,Pn);strcat(msg,Unid);
626 EnviaMsgI2c(3,i+3,msg);
627 Pold[i]=PKW;//P[i];
628 }
629
630 KPI=KeyPress();
631 if(KPI==12 || KPI==16) goto fim;
632////////////////////////////////////////////////////////////////////////////////
633////////////////////////////////////////////////////////////////////////////////
634 FPot(FP,PKW,i,upd);
635
636 KPI=KeyPress();
637 if(KPI==12 || KPI==16) goto fim;
638////////////////////////////////////////////////////////////////////////////////
639 Q(i,FP,PKW,upd);
640
641 KPI=KeyPress();
642 if(KPI==12 || KPI==16) goto fim;
643
644
645 }
646
647 fim:
648
649 for(j=0;j<100;j++){
650 KPI=KeyPress();
651 if (KPI!=0)break;
652 delay_ms(10);
653 }
654
655 if (KPI==12){x=222;return;}////////////////////////////////////////////////////////////////////////////////////////////
656 else if(KPI==16){x=0;return;}//{disable_interrupts(INT_EXT2);return;}
657
658 }
659}
660////////////////////////////////////////////////////////////////////////////////
661////////////////////////////////////////////////////////////////////////////////
662int8 SeqFase(void){
663signed int8 i,c,s,n;//,jk,j,j,
664signed int16 FVI[6],Vs[6],Vc[6],aux;//,k,ii;//,D;FVIx[6],
665
666WH=0;PotAt=0;SF=1;VV=0;
667ns=0;
668
669set_adc_channel(0);
670delay_us(20);
671for(i=0;i<10;i++){FaseVA[i]=0;FaseVB[i]=0;FaseVC[i]=0;}
672
673clear_interrupt(INT_TIMER0);
674enable_interrupts(INT_TIMER0);
675set_timer0(65533);
676while(ns<10);
677disable_interrupts(INT_TIMER0);
678SF=0;
679
680for(i=0;i<6;i++){
681 Vs[i]=0;
682 Vc[i]=0;
683};
684c=1;s=1;
685
686 for(i=0;i<10;i++){
687 if(i>=1&&i<=4)s=1;
688 else if(i>=6)s=-1;
689 else s=0;
690
691 if(i<=2||i>=8)c=1;
692 else c=-1;
693
694 Vs[0]+=FaseVA[i]*(signed int16)s;
695 Vs[1]+=FaseVB[i]*(signed int16)s;
696 Vs[2]+=FaseVC[i]*(signed int16)s;
697
698 Vs[3]+=FaseIA[i]*(signed int16)s;
699 Vs[4]+=FaseIB[i]*(signed int16)s;
700 Vs[5]+=FaseIC[i]*(signed int16)s;
701
702 Vc[0]+=FaseVA[i]*(signed int16)c;
703 Vc[1]+=FaseVB[i]*(signed int16)c;
704 Vc[2]+=FaseVC[i]*(signed int16)c;
705
706 Vc[3]+=FaseIA[i]*(signed int16)c;
707 Vc[4]+=FaseIB[i]*(signed int16)c;
708 Vc[5]+=FaseIC[i]*(signed int16)c;
709
710
711 }
712
713//for(i=3;i<6;i++){
714 //Vs[i]=0;
715 //Vc[i]=0;
716//};
717
718 //for(i=0;i<10;i++){
719 //if(i>=1&&i<=4)s=1;
720 //else if(i>=6)s=-1;
721 //else s=0;
722 //if(i<=2||i>=8)c=1;
723 //else c=-1;
724
725 //Vs[3]+=FaseIA[i]*(signed int16)s;
726 //Vs[4]+=FaseIB[i]*(signed int16)s;
727 //Vs[5]+=FaseIC[i]*(signed int16)s;
728
729 //Vc[3]+=FaseIA[i]*(signed int16)c;
730 //Vc[4]+=FaseIB[i]*(signed int16)c;
731 //Vc[5]+=FaseIC[i]*(signed int16)c;
732 // }
733
734
735Arctang(Vs,Vc,FVI);
736
737//FVI[0]=175;FVI[1]=53;FVI[2]=-66;FVI[3]=173;FVI[4]=53;FVI[5]=-63;
738
739for(i=1;i<6;i++){
740 FVI[i]-=FVI[0];
741 if(FVI[i]>0)FVI[i]-=360;
742 FVI[i]=abs(FVI[i]);
743}
744
745FVI[0]=0;
746
747//for(i=0;i<6;i++)ord[i]=i;
748
749ord[0]=0;
750ord[1]=1;
751ord[2]=2;
752
753ord[3]=4;
754ord[4]=5;
755ord[5]=6;
756
757
758do{
759 n=0;
760 for(i=0;i<5;i++){
761 if(FVI[i]>FVI[i+1]){
762 aux=FVI[i];
763 FVI[i]=FVI[i+1];
764 FVI[i+1]=aux;
765 n++;
766 aux=ord[i];
767 ord[i]=ord[i+1];
768 ord[i+1]=aux;
769 }
770 }
771}while(n>0);
772
773for(i=2;i<5;i+=2){
774 if(ord[i]>3){ //ORD[2] OU ORD[4]
775 aux=ord[i];
776 ord[i]=ord[i+1];
777 ord[i+1]=aux;
778 }
779}
780
781aux=ord[3];ord[3]=ord[1];ord[1]=ord[2];ord[2]=ord[4];ord[4]=aux;
782
783//if(FVI[1]>FVI[2])i=0;else i=1;
784if(ord[1]>ord[2])i=0;else i=1;
785
786
787//ord[0]=0;
788//ord[1]=1;
789//ord[2]=2;
790
791//ord[3]=4;
792//ord[4]=5;
793//ord[5]=6;
794
795
796//for(i=1;i<3;i++){
797 //if(ord[i]>3){
798 //aux=ord[i];ord[i]=ord[i+2];
799 // ord[i+2]=ord[i];
800 //}
801//}
802//
803//ord[3]<-ord[1]<-ord[2]<-ord[4]<-ord[3]
804
805//for(i=0;i<6;i++)FVIx[i]=FVI[i];
806
807//do{
808 //n=0;
809 //for(i=0;i<5;i++){
810 //if(FVIx[i]>FVIx[i+1]){
811 //aux=FVIx[i];
812 //FVIx[i]=FVIx[i+1];
813 //FVIx[i+1]=aux;
814 //n++;
815 //}
816 //}
817//}while(n>0);
818
819//for(i=0;i<6;i++)for(j=0;j<6;j++)if(FVIx[i]==FVI[j])ord[i]=j;
820
821//for(i=0;i<5;i+=2){
822 //if(ord[i]>ord[i+1]){
823 //aux=ord[i];
824 //ord[i]=ord[i+1];
825 //ord[i+1]=aux;
826 //}
827//}
828
829
830/*
831aux=ord[1];
832ord[1]=ord[2];
833ord[2]=ord[4];
834
835i=ord[3];
836ord[3]=aux+1;//ord[1];
837ord[4]=i+1;//ord[3];
838ord[5]++;
839if(FVI[1]>FVI[2])i=0;else i=1;
840
841ord[0]=0;
842ord[1]=1;
843ord[2]=2;
844
845ord[3]=4;
846ord[4]=5;
847ord[5]=6;
848*/
849
850return i;
851
852}
853///////////////////////////////////////////////////////////////////////////////
854int8 Frequencia(void){
855///////////////////////////////////////////
856#bit capture_1=0xf9e.2 //bite do de PIR1 (endere�o 0xf9e) testa captura
857int16 j, freq;//CCP1,
858
859j=0;
860while(PZero&&j<20000){delay_us(1);j++;}
861 while(!PZero&&j<20000){delay_us(1);j++;}//&& j<0x1000){
862 set_timer1(0);
863 capture_1=0;
864 while(!capture_1&&j<20000){delay_us(1);j++;} //&& j<0x1000){
865if (j>=20000) CCP_1=0;///Era 0(zero)
866freq=CCP_1;
867freq/=100;
868freq=15000/freq;
869
870return (int8)freq;
871}
872///////////////////////////////////////////////////////////////////////////////
873
874float Tensao(int8 n){
875//signed int32 Tensao(int8 n){
876//n=0; VAN //set_adc_channel(0);
877
878//n=1; VBN //set_adc_channel(1);
879//n=2; VCN //set_adc_channel(2);
880
881//n=3; IA //set_adc_channel(4);
882//n=4; IB //set_adc_channel(5);
883//n=5; IC //set_adc_channel(6);
884
885//n=6; IN //set_adc_channel(7);
886
887int8 i;
888//int32 vsoma;// Irms=0.0, Periodo=0.0;Vrms,
889float V1,vsoma,vmaior,vmenor;
890
891WH=0;PotAt=0;SF=0;VV=1;
892
893if (n<6)set_adc_channel(ord[n]);
894else set_adc_channel(7);
895///////////////////////////////////////////////////////////////////////////////
896
897 //V1=0;vsoma=0;vmaior=0;vmenor=1000;
898 //for (i=0;i<10;i++){ //for (k=0;k<6;k++){
899 //V1=Vrms();//faixa_t);
900 //if(V1>vmaior)vmaior=V1;
901 //if(V1<vmenor)vmenor=V1;
902 //vsoma+=V1;
903 //}
904 //vsoma-=vmaior;
905 //vsoma-=vmenor;
906 //vsoma/=8.0;
907 ////restart_wdt();
908 //return vsoma;
909
910///////////////////////////////////////////////////////////////////////////////
911delay_us(20);
912
913
914V1=0.0;vsoma=0.0;vmaior=0.0;vmenor=99999999.9;
915
916for(i=0;i<5;i++){
917 Vr=0;
918 ns=0;
919 clear_interrupt(INT_TIMER0);
920 enable_interrupts(INT_TIMER0);
921 set_timer0(65533); //set_timer0(61588);//61588- 3Khz
922 while(ns<100); //MVOLT);//restart_wdt();//
923 disable_interrupts(INT_TIMER0);
924
925 V1=(float)Vr;
926 if(V1>vmaior)vmaior=V1;
927 if(V1<vmenor)vmenor=V1;
928 vsoma+=V1;
929 //soma+=(float)Vr;
930}
931 vsoma-=vmaior;vsoma-=vmenor;
932
933 vsoma/=3000.0;
934
935 if(n<3){
936 vsoma*=9.1898;
937 vsoma*=0.9272;
938 vsoma+=0.0464;
939 }
940 else {
941 vsoma*=6.9882;
942 vsoma*=0.8794;
943 vsoma-=0.0293;
944 }
945VV=0;
946
947return vsoma;
948
949}
950
951///////////////////////////////////////////////////////////////////////////////
952///////////////////////////////////////////////////////////////////////////////
953void MedVIPF(void){
954int1 Up[3],upd=1;
955int8 i,j,f,fold=0,S,Sold=10,KPI=0;//,kp;,j
956char Vn[6];//,msg[15];
957float Vx,Iold[4],Vt[3],Vtold[3],V[3]={0,0,0};
958
959
960inicio:
961
962WH=0;PotAt=0;SF=0;VV=0;
963
964//enable_interrupts(INT_EXT2_L2H );
965//for(i=0;i<2;i++)Up[i]=0;
966for(i=0;i<3;i++)Up[i]=0;
967
968while(TRUE){
969 strcpy(Unid,"V");
970 for(i=0;i<3;i++){
971
972 Vt[i]=Tensao(i);
973 sprintf(Vn,"%5.1f",Vt[i]);
974 strcpy(msg,Vn);strcat(msg,Unid);
975
976 if(abs(Vtold[i]-Vt[i])>0.1 ||upd ){EnviaMsgI2c(2, i, msg);Up[i]=1;}
977
978 Vtold[i]=Vt[i];
979 }
980
981 KPI=KeyPress();
982 if(KPI==12 || KPI==16) goto fim;
983
984 //if(Up[0]||Up[1])V[0]=sqrt(Vt[0]*Vt[0]+Vt[0]*Vt[1]+Vt[1]*Vt[1]);}
985 //if(Up[1]||Up[2])V[1]=sqrt(Vt[1]*Vt[1]+Vt[1]*Vt[2]+Vt[2]*Vt[2]);}
986 //if(Up[0]||Up[2])V[2]=sqrt(Vt[0]*Vt[0]+Vt[0]*Vt[2]+Vt[2]*Vt[2]);}
987
988
989 if(Up[0]||Up[1]||Up[2]){
990 for(i=3;i<6;i++){
991
992 V[i-3]=1.73205*Vt[i-3];////simplifica��o da equa��o sqrt(Vt[0]*Vt[0]+Vt[0]*Vt[1]+Vt[1]*Vt[1]);}
993
994 sprintf(Vn,"%5.1f",V[i-3]);//Vt[i]);
995
996 strcpy(msg,Vn);strcat(msg,Unid);
997 delay_ms(10);
998 EnviaMsgI2c(2,i, msg);
999
1000 }
1001 }
1002 for(i=0;i<3;i++)Up[i]=0;
1003 //Up[0]=0;Up[1]=0;Up[2]=0;
1004
1005
1006 KPI=KeyPress();
1007 if(KPI==12 || KPI==16) goto fim;
1008
1009 strcpy(Unid,"A");
1010 for(i=0;i<4;i++){
1011
1012 //for(i=0;i<15;i++)msg[i]=0x00;
1013
1014 Vx=Tensao(i+3);//Vx[i]=Tensao(i+3);
1015 sprintf(Vn,"%5.1f",Vx);//sprintf(Vn,"%5.1f",Vx[i]);
1016
1017 //for(j=0;j<15;j++)msg[i]=0;
1018 strcpy(msg,Vn);strcat(msg,Unid);
1019 if(abs(Iold[i]-Vx)>0.1 ||upd )EnviaMsgI2c(2,i+6, msg);
1020 Iold[i]=Vx;
1021 }
1022
1023 KPI=KeyPress();
1024 if(KPI==12 || KPI==16) goto fim;
1025
1026 f=Frequencia();
1027 if((fold-f)!= 0||upd ){
1028 strcpy(Unid,"HZ");
1029
1030 //for(j=0;j<15;j++)msg[i]=0;
1031 sprintf(msg,"%3u",f);
1032 strcat(msg,Unid);
1033 EnviaMsgI2c(2,10,msg);
1034 delay_us(500);
1035 fold=f;
1036 }
1037
1038 S=SeqFase();
1039 if(S!=Sold||upd ){
1040 Sold=S;
1041
1042 //for(j=0;j<15;j++)msg[i]=0;
1043 if(S==1)strcpy(msg," A B C");
1044 else strcpy(msg," A C B");
1045 delay_ms(20);
1046 EnviaMsgI2c(2,11,msg);
1047 }
1048
1049upd=0;
1050
1051for(j=0;j<100;j++){
1052 KPI=KeyPress();
1053 if (KPI!=0)break;
1054 delay_ms(10);
1055}
1056 //if(KPI==12 || KPI=16) goto fim;
1057
1058fim:
1059 //KPI=KeyPress();
1060 if (KPI==12){MedPFP(j);if(j==222)return;else upd=1;}
1061 else if(KPI==16)return;//{disable_interrupts(INT_EXT2);return;}
1062 //KPI=0;
1063 //delay_ms(10);
1064
1065 }
1066}
1067////////////////////////////////////////////////////////////////////////////////
1068////////////////////////////////////////////////////////////////////////////////
1069int8 KeyPress(void){
1070//static int8 Kold=0;
1071int8 i,j,K;//,NL=5;
1072
1073
1074//output_low(HIKeyb);delay_us(100);
1075
1076K=0;
1077output_high(Clk74166);//INICIALIZAR CLOCK DO 74166
1078
1079ResetKeyB; delay_us(500);NoRKeyB;
1080//ResetKeyB; delay_us(500);NoRKeyB;
1081
1082 for(i=0;i<5;i++){
1083 output_high(Clk74166);
1084 for(j=1;j<9;j++){
1085 output_low(Clk74166);
1086 if(S074166)K=5+(4*i-j);
1087 delay_us(500);
1088 output_high(Clk74166);
1089 delay_us(500);
1090 }
1091 }
1092
1093//output_high(HIKeyb);
1094return K;
1095}
1096
1097////////////////////////////////////////////////////////////////////////////////
1098////////////////////////////////////////////////////////////////////////////////
1099
1100void EnviaMsgI2c(int8 tela, int8 campo, int8 *valor){
1101char buffer[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//,msg[20];
1102static int8 i,n,l;//,ack;data,
1103
1104n=0;
1105inicio:
1106n++;
1107
1108l=strlen(valor);//+2; 13 caracteres
1109buffer[0]=tela;
1110buffer[1]=campo;
1111
1112for(i=0;i<l;i++)
1113buffer[i+2]=valor[i];
1114
1115for(i=l;i<14;i++)
1116buffer[i+2]=0x00;
1117
1118
1119i2c_start();
1120i2c_write(0x66);
1121i2c_write(0x00);
1122for(i=0;i<=15;i++){
1123 if(i2c_write(buffer[i])){
1124 if (n>200) break;
1125 i2c_stop();goto inicio;
1126 }
1127}
1128
1129i2c_stop();
1130
1131delay_ms(10);//delay_ms(20);
1132
1133}
1134//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1135void main(){
1136BYTE const E[37]={
11370x11,0x01,0x01,//17 Kds, Kd inicial=1(0.2), N. voltas=1
11380x00,0xC8, //0.200
11390x01,0x2C, //0.300
11400x01,0x90, //0.400
11410x01,0xF4, //0.500
11420x03,0x84, //0.900
11430x03,0xE8, //1.000
11440x04,0xB0, //1.200
11450x07,0x08, //1.800
11460x07,0xD0, //2.000
11470x09,0x60, //2.400
11480x0E,0x10, //3.600
11490x13,0x88, //5.000
11500x15,0x18, //5.400
11510x1C,0x20, //7.200
11520x2A,0x30, //10.800
11530x38,0x40, //14.400
11540x54,0x60}; //21.600
1155//NKds=read_eeprom(0);
1156//KdAtual=read_eeprom(1);
1157//Nvoltas=read_eeprom(2);
1158int8 i,KP,item;
1159//char msg="abcdefghij";
1160
1161enable_interrupts(GLOBAL); //Turn on interrupts
1162setup_timer_0(T0_INTERNAL | T0_DIV_1);
1163setup_adc_ports(AN0_TO_AN7|VSS_VREF);
1164
1165setup_adc(ADC_CLOCK_DIV_64);//setup_adc(ADC_CLOCK_DIV_32);//setup_adc(ADC_CLOCK_DIV_16);
1166
1167setup_ccp1(CCP_CAPTURE_RE);
1168setup_ccp2(CCP_OFF);
1169setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);//83.33ns * 8=666.666ns por incremento em TIMER1
1170//EXT_INT_EDGE(L_TO_H);
1171ext_int_edge( 2, H_TO_L);
1172//#define L_TO_H 0x40
1173//#define H_TO_L
1174
1175disable_interrupts(INT_TIMER0); //Disable (Enable) INT_TIMER0
1176disable_interrupts(INT_TIMER1);
1177disable_interrupts(INT_TIMER2);
1178disable_interrupts(INT_TIMER3);
1179disable_interrupts(INT_EXT2);
1180
1181if(read_eeprom(0)==255)
1182for(i=0;i<37;i++)write_eeprom(i,E[i]);
1183
1184output_low(HIKeyb);
1185
1186//GravaMemI2C(msg);
1187//while(TRUE);
1188
1189EnviaMsgI2c(1,0,msg);
1190
1191SeqFase();
1192
1193//MedEnergia();
1194
1195while(TRUE){
1196
1197 delay_ms(30);
1198 KP=KeyPress();
1199
1200 if(KP!=0){
1201 delay_ms(50);
1202 if (KP==4){
1203 //KP=0;
1204 //delay_ms(50);
1205 if(item==0)item=7;
1206 item--;
1207 strcpy(msg,"Null");
1208 EnviaMsgI2c(1,item,msg);
1209 }
1210 else if(KP==8){
1211 //KP=0;
1212 //delay_ms(50);
1213 item++;if(item>6)item=0;
1214 //EnviaMsgI2c(1,KeyPress(),msg);
1215 strcpy(msg,"Null");
1216 EnviaMsgI2c(1,item,msg);
1217 }
1218 else if(KP==15){
1219 //KP=0;
1220 //delay_ms(50);
1221 if(item==0) MedEnergia();
1222 else if(item==1)MedVIPF();//{MedVIPF();strcpy(msg,"C");EnviaMsgI2c(1,1,msg);}
1223 else if(item==2);
1224 else if(item==3);
1225 else if(item==4);
1226 else if(item==5);
1227 else if(item==6);//AjusteRelogio();;
1228 strcpy(msg,"C");EnviaMsgI2c(1,item,msg);
1229
1230 }
1231 //if(KP!=15){
1232 //strcpy(msg,"Null");
1233 //EnviaMsgI2c(1,item,msg);
1234 //}
1235 KP=0;
1236 }
1237}
1238
1239}
1240//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1241
1242#int_TIMER0 HIGH
1243void TIMER0_isr(void){
1244static int8 n=0,nn=0,ft;//,x=0;
1245static signed int16 Vm1, Im1,Vm2, Im2,Vm3, Im3;//V[100],
1246
1247output_high(PIN_B6);
1248
1249if(WH||SF)set_timer0(45585);//600Hz 45570-297Hz
1250else set_timer0(61588);//61588- 3Khz
1251
1252if(WH) {
1253 //output_high(PIN_B3);
1254 //TempoM++;
1255 set_adc_channel(ord[0]); //0
1256 delay_us(5);
1257 Vm1=read_adc();//-511;
1258
1259 set_adc_channel(ord[3]); //4
1260 delay_us(5);
1261 Im1=read_adc();//-511;
1262
1263 set_adc_channel(ord[1]); //1
1264 delay_us(5);
1265 Vm2=read_adc();//-511;
1266
1267 set_adc_channel(ord[4]); //5
1268 delay_us(5);
1269 Im2=read_adc();//-511;
1270
1271 set_adc_channel(ord[2]); //2
1272 delay_us(5);
1273 Vm3=read_adc();//-511;
1274
1275 set_adc_channel(ord[5]); //6
1276 delay_us(5);
1277 Im3=read_adc()-511;/////////////////////////////////////////////////////
1278
1279 set_adc_channel(ord[2]); //2
1280 delay_us(5);
1281 Vm3+=read_adc();//-511;
1282
1283 set_adc_channel(ord[4]); //5
1284 delay_us(5);
1285 Im2+=read_adc();//-511;
1286
1287 set_adc_channel(ord[1]); //1
1288 delay_us(5);
1289 Vm2+=read_adc();//-511;
1290
1291 set_adc_channel(ord[3]); //4
1292 delay_us(5);
1293 Im1+=read_adc();//-511;
1294
1295 set_adc_channel(ord[0]); //0
1296 delay_us(5);
1297 Vm1+=read_adc();//-511;
1298
1299 Vm1/=2;Im1/=2;Vm2/=2;Im2/=2;Vm3/=2;
1300 Vm1-=511;Vm2-=511;Vm3-=511;Im1-=511;Im2-=511;
1301
1302 ENERG+=(signed int32)Vm1*Im1+Vm2*Im2+Vm3*Im3;
1303 FaseVA[1]+=(unsigned int16)abs(Vm1);
1304 FaseIA[1]+=(unsigned int16)abs(Im1);
1305
1306 FaseVB[1]+=(unsigned int16)abs(Vm2);
1307 FaseIB[1]+=(unsigned int16)abs(Im2);
1308
1309 FaseVC[1]+=(unsigned int16)abs(Vm3);
1310 FaseIC[1]+=(unsigned int16)abs(Im3);
1311
1312 n++;nn++;
1313
1314 if (n>99){ // if (n>100){
1315 //output_high(PIN_B4);
1316 Ws+=ENERG/1000; //SVIi=SVI/1000;
1317
1318 if(ENERG<0)RWs-=ENERG%1000;
1319 else RWs+=ENERG%1000;
1320 ENERG=0;//ENERG2=0;ENERG3=0;n=0;
1321
1322 n=0;
1323 //output_low(PIN_B4);
1324 }
1325
1326 if(nn>9){
1327 //output_high(PIN_B5);
1328 FaseVA[1]/=10;FaseVB[1]/=10;FaseVC[1]/=10;
1329 FaseIA[1]/=10;FaseIB[1]/=10;FaseIC[1]/=10;
1330
1331 if (FaseVA[2]==0)ft=0;else ft=1;
1332 FaseVA[2]+=FaseVA[1];
1333 FaseIA[2]+=FaseIA[1];
1334
1335 FaseVB[2]+=FaseVB[1];
1336 FaseIB[2]+=FaseIB[1];
1337
1338 FaseVC[2]+=FaseVC[1];
1339 FaseIC[2]+=FaseIC[1];
1340
1341 if(ft==1){
1342 FaseVA[2]/=2;FaseIA[2]/=2;//*FaseIA[1];
1343 FaseVB[2]/=2;FaseIB[2]/=2;//*FaseIA[1];
1344 FaseVC[2]/=2;FaseIC[2]/=2;//*FaseIA[1];
1345 }
1346 FaseVA[1]=0;FaseVB[1]=0;FaseVC[1]=0;FaseIA[1]=0;FaseIB[1]=0;FaseIC[1]=0;
1347
1348 nn=0;
1349 //output_low(PIN_B5);
1350 }
1351
1352 //output_low(PIN_B3);
1353
1354}
1355else if(PotAt){
1356
1357 set_timer0(45585); //600Hz
1358
1359 set_adc_channel(ord[nPA+3]);
1360 delay_us(5);
1361 Im1=read_adc()-511;
1362
1363 set_adc_channel(ord[nPA]);
1364 delay_us(5);
1365 Vm1=read_adc()-511;
1366
1367 set_adc_channel(ord[nPA+3]);
1368 delay_us(5);
1369 Im1+=read_adc()-511;
1370
1371 Im1/=2;
1372
1373 PAtiva+=(signed int32)Vm1*Im1;
1374 ns++;
1375}
1376else if(SF){
1377////////////////////////////////////////////////////////////////////////////////
1378 set_adc_channel(0);
1379 delay_us(5);
1380 FaseVA[ns]=read_adc();
1381
1382 set_adc_channel(4);
1383 delay_us(5);
1384 FaseIA[ns]=read_adc();
1385
1386 set_adc_channel(1);
1387 delay_us(5);
1388 FaseVB[ns]=read_adc();
1389
1390 set_adc_channel(5);
1391 delay_us(5);
1392 FaseIB[ns]=read_adc();
1393
1394 set_adc_channel(2);
1395 delay_us(5);
1396 FaseVC[ns]=read_adc();
1397
1398 set_adc_channel(6);
1399 delay_us(5);
1400 FaseIC[ns]=read_adc();//-511;
1401
1402 set_adc_channel(2);
1403 delay_us(5);
1404 FaseVC[ns]+=read_adc();
1405
1406 set_adc_channel(5);
1407 delay_us(5);
1408 FaseIB[ns]+=read_adc();
1409
1410 set_adc_channel(1);
1411 delay_us(5);
1412 FaseVB[ns]+=read_adc();
1413
1414 set_adc_channel(4);
1415 delay_us(5);
1416 FaseIA[ns]+=read_adc();
1417
1418 set_adc_channel(0);
1419 delay_us(5);
1420 FaseVA[ns]+=read_adc();
1421
1422 FaseVA[ns]/=2;FaseVB[ns]/=2;FaseVC[ns]/=2;FaseIB[ns]/=2;FaseIA[ns]/=2;
1423
1424 ns++;
1425
1426}
1427else if(VV){
1428 Vm1=read_adc();
1429 if (Vm1>511)Vm1-=511;else Vm1=511-Vm1;
1430 Vr+=(unsigned int16)Vm1;
1431 ns++;
1432}
1433
1434
1435output_low(PIN_B6);
1436}
1437
1438////////////////////////////////////////////////////////////////////////////////
1439#int_EXT2
1440void EXT2_isr(void){
1441 StopMed++;
1442}
1443
1444