Bueno, este es un programa que además de ser la CPU del circuito además realiza funciones de esclavo. Ordenes que se envian desde un PC. Dale un ojo y me cuentas si tienes dudas al respecto:
#include <18F452.h>
#device adc=16
#use delay(clock=20000000)
#fuses NOWDT,WDT128,HS, NOPROTECT, NOOSCSEN, NOBROWNOUT, BORV42, PUT, STVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=pc)
#use rs232(baud=38400,parity=N,xmit=PIN_C0,rcv=PIN_C1,bits=8,stream=video)
#rom int 0xf00000={1}
#ZERO_RAM
#priority RDA,TIMER0,TIMER1,EXT
#include <stdlib.h>
//#define IRQ_A PIN_B0
//#define IRQ_B PIN_B1
#define READY PIN_C2
#define D_I PIN_D0
#define D_O PIN_D1
#define SCL PIN_D2
#define RESET_CPU_VIDEO PIN_D3
#define CS_A PIN_D4
#define CS_B PIN_D5
#byte INTCON2 =0xFF1
int i;
int N=1;
int Timer0_Counter=0;
int Timer1_Counter=0;
int32 Dato;
int Direccion_Video;
float Auxiliar_Video;
int32 Dato_Input=0;
int32 Dato_Out=0;
int Pulsos=0;
int Direccion=0;
int Clock_Cycles=0;
const int Command_Byte_Read =0b00000000;
const int Command_Byte_Write =0b10000000;
// int GAIN =0b00000000; //AJUSTE DE GANANCIA (8 BITS)
// float const REGIMEN_CORRIENTE = 1.2057378682554489243663017203786e-5;
// float const REGIMEN_VOLTAJE = 6.934862159662735235343242154911e-5;
// long const AIRMS_OFFSET =0xCB;//-53d
// long const AVRMS_OFFSET =0x2A;//-42d
// int const AVRMS_GAIN =0x9C;//-47d
// short RP=false;
// short UPS=false;
float Software_Version=1.0;
float RP_Potencia_Activa_FA=1.1;
float RP_Potencia_Activa_FB=1.2;
float RP_Potencia_Activa_FC=1.3;
float RP_Potencia_Reactiva_FA=1.4;
float RP_Potencia_Reactiva_FB=1.5;
float RP_Potencia_Reactiva_FC=1.6;
float RP_Potencia_Aparente_FA=1.7;
float RP_Potencia_Aparente_FB=1.8;
float RP_Potencia_Aparente_FC=1.9;
float RP_Factor_Potencia_FA=2.0;
float RP_Factor_Potencia_FB=2.1;
float RP_Factor_Potencia_FC=2.2;
short RP_FASE_A=false;
short RP_FASE_B=false;
short RP_FASE_C=false;
float RP_Voltaje_FA=150;
float RP_Voltaje_FB=2.4;
float RP_Voltaje_FC=2.5;
float RP_Corriente_FA=2.6;
float RP_Corriente_FB=2.7;
float RP_Corriente_FC=2.8;
float RP_Frecuencia_FA=2.9;
float RP_Frecuencia_FB=3.0;
float RP_Frecuencia_FC=3.1;
int Temperatura=4;
short PE_FASE_A=false;
short PE_FASE_B=false;
short PE_FASE_C=false;
float PE_Voltaje_Bateria=4.1;
short TA_RED=false;
short TA_PLANTA=false;
float UPS_Voltaje_FA=4.2;
float UPS_Voltaje_FB=4.3;
float UPS_Corriente_FA=4.4;
float UPS_Corriente_FB=4.5;
float UPS_Frecuencia_FA=4.6;
float UPS_Frecuencia_FB=4.7;
float UPS_Voltaje_Banco_Baterias=4.8;
float UPS_Voltaje_Neutro_Tierra=4.9;
/*******************************************************/
void write_ADE7753()
{
Dato_Out=Command_Byte_Write;
Dato_Out|=Direccion;
Pulsos=0x08;
envia_ADE7753();
Dato_Out=Dato;
Pulsos=Clock_Cycles;
// envia_ADE7753();
output_high(CS_A);
output_high(CS_B);
}
/*******************************************************/
void read_ADE7753()
{
Dato_Out=Command_Byte_Read;
Dato_Out=Dato_Out|Direccion;
Pulsos=0x08;
envia_ADE7753();
Pulsos=Clock_Cycles;
// recibe_ADE7753();
output_high(CS_A);
output_high(CS_B);
}
/*******************************************************/
void Tx_Data_Video()
{
if(input(READY))
{
fprintf(video, "%U", Direccion_Video);
delay_ms(2);
fprintf(video, "%C", 0x0D);
delay_ms(3);
fprintf(video, "%f", Auxiliar_Video);
delay_ms(2);
fprintf(video, "%C", 0x0D);
delay_ms(4);
}
Direccion_Video++;
}
/*******************************************************/
#int_TIMER0
void TIMER0_isr()
{
if(Timer0_Counter==(read_eeprom (0)))
{
fprintf(pc, "I");
fprintf(pc, "%C", 0x0D);
fprintf(pc, "0");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",Software_Version);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "1");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Activa_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "2");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Activa_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "3");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Activa_FC);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "4");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Reactiva_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "5");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Reactiva_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "6");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Reactiva_FC);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "7");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Aparente_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "8");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Aparente_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "9");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Potencia_Aparente_FC);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "10");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Factor_Potencia_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "11");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Factor_Potencia_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "12");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Factor_Potencia_FC);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "13");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",RP_FASE_A);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "14");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",RP_FASE_B);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "15");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",RP_FASE_C);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "16");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Voltaje_FA);
fprintf(pc, "%C", 0x0D);
RP_Voltaje_FA+=1;
fprintf(pc, "17");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Voltaje_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "18");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Voltaje_FC);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "19");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Corriente_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "20");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Corriente_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "21");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Corriente_FC);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "22");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Frecuencia_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "23");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Frecuencia_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "24");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",RP_Frecuencia_FC);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "25");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",Temperatura);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "26");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",PE_FASE_A);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "27");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",PE_FASE_B);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "28");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",PE_FASE_C);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "29");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",PE_Voltaje_Bateria);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "30");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",TA_RED);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "31");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%U",TA_PLANTA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "32");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",UPS_Voltaje_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "33");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",UPS_Voltaje_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "34");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",UPS_Corriente_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "35");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",UPS_Corriente_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "36");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",UPS_Frecuencia_FA);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "37");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",UPS_Frecuencia_FB);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "38");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",UPS_Voltaje_Banco_Baterias);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "39");
fprintf(pc, "%C", 0x20);
fprintf(pc, "%3.1f",UPS_Voltaje_Neutro_Tierra);
fprintf(pc, "%C", 0x0D);
fprintf(pc, "F");
fprintf(pc, "%C", 0x0D);
Timer0_Counter=0;
}
else
{
Timer0_Counter++;
}
}
#int_TIMER1
void TIMER1_isr()
{
if(Timer1_Counter==19)
{
Direccion_Video=0;
Auxiliar_Video=Software_Version;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Activa_FA;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Activa_FB;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Activa_FC;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Reactiva_FA;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Reactiva_FB;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Reactiva_FC;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Aparente_FA;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Aparente_FB;
Tx_Data_video();
Auxiliar_Video=RP_Potencia_Aparente_FC;
Tx_Data_video();
Auxiliar_Video=RP_Factor_Potencia_FA;
Tx_Data_video();
Auxiliar_Video=RP_Factor_Potencia_FB;
Tx_Data_video();
Auxiliar_Video=RP_Factor_Potencia_FC;
Tx_Data_video();
Auxiliar_Video=RP_FASE_A;
Tx_Data_video();
Auxiliar_Video=RP_FASE_B;
Tx_Data_video();
Auxiliar_Video=RP_FASE_C;
Tx_Data_video();
Auxiliar_Video=RP_Voltaje_FA;
Tx_Data_video();
Auxiliar_Video=RP_Voltaje_FB;
Tx_Data_video();
Auxiliar_Video=RP_Voltaje_FC;
Tx_Data_video();
Auxiliar_Video=RP_Corriente_FA;
Tx_Data_video();
Auxiliar_Video=RP_Corriente_FB;
Tx_Data_video();
Auxiliar_Video=RP_Corriente_FC;
Tx_Data_video();
Auxiliar_Video=RP_Frecuencia_FA;
Tx_Data_video();
Auxiliar_Video=RP_Frecuencia_FB;
Tx_Data_video();
Auxiliar_Video=RP_Frecuencia_FC;
Tx_Data_video();
Auxiliar_Video=Temperatura;
Tx_Data_video();
Auxiliar_Video=PE_FASE_A;
Tx_Data_video();
Auxiliar_Video=PE_FASE_B;
Tx_Data_video();
Auxiliar_Video=PE_FASE_C;
Tx_Data_video();
Auxiliar_Video=PE_Voltaje_Bateria;
Tx_Data_video();
Auxiliar_Video=TA_RED;
Tx_Data_video();
Auxiliar_Video=TA_PLANTA;
Tx_Data_video();
Auxiliar_Video=UPS_Voltaje_FA;
Tx_Data_video();
Auxiliar_Video=UPS_Voltaje_FB;
Tx_Data_video();
Auxiliar_Video=UPS_Corriente_FA;
Tx_Data_video();
Auxiliar_Video=UPS_Corriente_FB;
Tx_Data_video();
Auxiliar_Video=UPS_Frecuencia_FA;
Tx_Data_video();
Auxiliar_Video=UPS_Frecuencia_FB;
Tx_Data_video();
Auxiliar_Video=UPS_Voltaje_Banco_Baterias;
Tx_Data_video();
Auxiliar_Video=UPS_Voltaje_Neutro_Tierra;
Tx_Data_video();
Timer1_Counter=0;
}
else
{
Timer1_Counter++;
}
set_timer1(0);
}
#int_RDA
void RDA_isr()
{
long timeout=0;
char Aux_Rx_Data[1];
while(!kbhit()&&(++timeout<50000))
delay_us(10);
if ( kbhit () )
{
Aux_Rx_Data[0]=fgetc(pc);
if(Aux_Rx_Data[0]=="9")
{
fprintf(pc, "R");
delay_ms(100);
reset_cpu();
}
else
{
Dato=atoi(Aux_Rx_Data);
if(Dato <= 5)
{
switch (Dato)
{
case 0: WRITE_EEPROM( 0x00 , 4);//15 Seg
break;
case 1: WRITE_EEPROM( 0x00 , 9);//30 Seg
break;
case 2: WRITE_EEPROM( 0x00 , 18);//1 Min
break;
case 3: WRITE_EEPROM( 0x00 , 35);//2 Min
break;
case 4: WRITE_EEPROM( 0x00 , 88);//5 Min
break;
case 5: WRITE_EEPROM( 0x00 , 176);//10 Min
break;
}
fprintf(pc, "T");
Timer0_Counter=0;
}
}
}
}
/***********************************************************************************/
#int_EXT
void EXT_isr()
{
if(N<=20)
{
Direccion=0x0D;
Clock_Cycles=0x18;
read_ADE7753();
fprintf(pc, "V. FA=%Lu",Dato_Input);
fprintf(pc, "%C", 0x0D);
Direccion=0x0A;
Clock_Cycles=0x18;
read_ADE7753();
fprintf(pc, "I. FA=%Lu", Dato_Input );
fprintf(pc, "%C", 0x0D);
Direccion=0x1A;
Clock_Cycles=0x18;
read_ADE7753();
delay_ms(2000);
N++;
}
}
/***********************************************************************************/
void main()
{
SET_TRIS_A(0x3F);/* 11 1111
RA0=Voltaje Bateria (Planta)
RA1=Voltaje Banco Baterias (UPS)
RA2=Vref -
RA3=Vref +
RA4=
RA5= */
SET_TRIS_B(0xFF);/* 1111 1111
RB0=IRQ ADE_A
RB1=IRQ ADE_B
RB2=
RB3=
RB4=
RB5=
RB6=PROGRAMACION (CLOCK)
RB7=PROGRAMACION (DATA) */
SET_TRIS_C(0xBE);/* 1011 1110
RC0=TX (VIDEO)
RC1=RX (VIDEO)
RC2=RX_READY (DESDE VIDEO)
RC3=MID FASE A (PLANTA)
RC4=MID FASE B (PLANTA)
RC5=MID FASE C (PLANTA)
RC6=TX (PC)
RC7=RX (PC) */
SET_TRIS_D(0xC1);/* 1100 0001
RD0=SDI (ADE)
RD1=SDO (ADE)
RD2=SCL (ADE)
RD3=RESET_CPU_VIDEO
RD4=CS_A
RD5=CS_B
RD6=
RD7= */
SET_TRIS_E(0x07);/* 111
RE0=MID FASE A (RED PUBLICA)
RE1=MID FASE B (RED PUBLICA)
RE2=MID FASE C (RED PUBLICA)
*/
output_low(SCL);
output_high(CS_A);
output_high(CS_B);
output_low(RESET_CPU_VIDEO);
setup_adc_ports(AN0_AN1_VREF_VREF);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
output_high(RESET_CPU_VIDEO);
delay_ms(2000);
while ( input(READY));
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_RDA);
bit_clear(INTCON2,6);//Seleccion de Interrupción por flanco de bajada.
disable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
set_timer0(0);
set_timer1(0);
#asm;
gfp:
nop;
nop;
goto gfp;
#endasm
}
******************************************************************
Este es otro ejemplo del mismo proyecto y está encargado de visualizar los parametros en pantalla (LCD 4x20) de forma local. Es decir actua como tarjeta de video.
#include<18F452.h>
#fuses NOWDT,WDT128,HS, NOPROTECT, NOOSCSEN, BROWNOUT, BORV42, PUT, STVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#use delay(clock=20000000)
#use rs232(baud=38400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#zero_ram
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
#include "lcd420_M.c"
#include <Diseno.c>
#include <stdlib.h>
#define UP PIN_C0
#define DOWN PIN_C1
#define TESTIGO PIN_C3
#define READY PIN_C5
/*******************************************************/
short Ver=false;
short FASE_A=false;
short FASE_B=false;
short FASE_C=false;
short CONTACTOR_A=false;
short CONTACTOR_B=false;
int MENU_MAX=39;
int SELECCION=0;
long int PUNTERO;
float DATO;
float Software_Version;
float RP_Potencia_Activa_FA;
float RP_Potencia_Activa_FB;
float RP_Potencia_Activa_FC;
float RP_Potencia_Reactiva_FA;
float RP_Potencia_Reactiva_FB;
float RP_Potencia_Reactiva_FC;
float RP_Potencia_Aparente_FA;
float RP_Potencia_Aparente_FB;
float RP_Potencia_Aparente_FC;
float RP_Factor_Potencia_FA;
float RP_Factor_Potencia_FB;
float RP_Factor_Potencia_FC;
short RP_FASE_A=false;
short RP_FASE_B=false;
short RP_FASE_C=false;
float RP_Voltaje_FA;
float RP_Voltaje_FB;
float RP_Voltaje_FC;
float RP_Corriente_FA;
float RP_Corriente_FB;
float RP_Corriente_FC;
long RP_Frecuencia_FA;
long RP_Frecuencia_FB;
long RP_Frecuencia_FC;
long Temperatura;
short PE_FASE_A=false;
short PE_FASE_B=false;
short PE_FASE_C=false;
float PE_Voltaje_Bateria;
short TA_RED=false;
short TA_PLANTA=false;
float UPS_Voltaje_FA;
float UPS_Voltaje_FB;
float UPS_Corriente_FA;
float UPS_Corriente_FB;
float UPS_Frecuencia_FA;
float UPS_Frecuencia_FB;
float UPS_Voltaje_Banco_Baterias;
float UPS_Voltaje_Neutro_Tierra;
/*******************************************************/
void lcd_barrido()
{
int i;
lcd_putc("f");
for(i=1;i<=20;i++)
{
lcd_gotoxy(i,1);
lcd_putc(0xFF);
lcd_gotoxy(i,2);
lcd_putc(0xFF);
lcd_gotoxy(i,3);
lcd_putc(0xFF);
lcd_gotoxy(i,4);
lcd_putc(0xFF);
delay_ms(50);
}
for(i=1;i<=20;i++)
{
lcd_gotoxy(i,1);
lcd_putc(0xFE);
lcd_gotoxy(i,2);
lcd_putc(0xFE);
lcd_gotoxy(i,3);
lcd_putc(0xFE);
lcd_gotoxy(i,4);
lcd_putc(0xFE);
delay_ms(50);
}
}
void antirebote()
{
delay_ms(20);
while ( input(DOWN)|| input(UP));
delay_ms(20);
}
void CLEAR_LCD_AND_HOME()
{
lcd_putc("f");
lcd_gotoxy(5,1);
lcd_putc( "Red Publica");
lcd_gotoxy(1,3);
}
void CLEAR_LCD_AND_HOME2()
{
lcd_putc("f");
lcd_gotoxy(3,1);
lcd_putc( "Planta Electrica");
lcd_gotoxy(1,3);
}
void CLEAR_LCD_AND_HOME3()
{
lcd_putc("f");
lcd_gotoxy(1,1);
lcd_putc( "Transferencia Autom.");
lcd_gotoxy(1,3);
}
void CLEAR_LCD_AND_HOME4()
{
lcd_putc("f");
lcd_gotoxy(8,1);
lcd_putc( "U.P.S.");
lcd_gotoxy(1,3);
}
void PANTALLA()
{
switch (SELECCION)
{
case 0: lcd_putc("f");
lcd_putc( "*Energy Measurement*");
lcd_gotoxy(1,3);
lcd_putc( " Software Ver.: ");
printf(lcd_putc, "%03.1f", Software_Version);
lcd_gotoxy(1,4);
lcd_putc( "********************");
break;
case 1: CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Activa FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Potencia_Activa_FA);
lcd_putc(" W");
break;
case 2: CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Activa FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Potencia_Activa_FB);
lcd_putc(" W");
break;
case 3:CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Activa FC:");
lcd_gotoxy(1,4);
printf(lcd_putc, "%03.1f", RP_Potencia_Activa_FC);
lcd_putc(" W");
break;
case 4:CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Reacti. FA:");
lcd_gotoxy(1,4);
printf(lcd_putc, "%03.1f", RP_Potencia_Reactiva_FA);
lcd_putc(" VAR");
break;
case 5:CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Reacti. FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Potencia_Reactiva_FB);
lcd_putc(" VAR");
break;
case 6:CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Reacti. FC:");
lcd_gotoxy(1,4);
printf(lcd_putc, "%03.1f", RP_Potencia_Reactiva_FC);
lcd_putc(" VAR");
break;
case 7:CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Aparen. FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Potencia_Aparente_FA);
lcd_putc(" VA");
break;
case 8:CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Aparen. FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Potencia_Aparente_FB);
lcd_putc(" VA");
break;
case 9:CLEAR_LCD_AND_HOME();
lcd_putc("Potencia Aparen. FC:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Potencia_Aparente_FC);
lcd_putc(" VA");
break;
case 10:CLEAR_LCD_AND_HOME();
lcd_putc("Factor de Poten. FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Factor_Potencia_FA);
break;
case 11:CLEAR_LCD_AND_HOME();
lcd_putc("Factor de Poten. FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Factor_Potencia_FB);
break;
case 12:CLEAR_LCD_AND_HOME();
lcd_putc("Factor de Poten. FC:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Factor_Potencia_FC);
break;
case 13:CLEAR_LCD_AND_HOME();
FASE_A=RP_FASE_A;
if( FASE_A==TRUE)
{
lcd_putc("Fase A: On");
}
else
{
lcd_putc("Fase A: Off");
}
break;
case 14:CLEAR_LCD_AND_HOME();
FASE_B=RP_FASE_B;
if( FASE_B==TRUE)
{
lcd_putc("Fase B: On");
}
else
{
lcd_putc("Fase B: Off");
}
break;
case 15:CLEAR_LCD_AND_HOME();
FASE_C=RP_FASE_C;
if( FASE_C==TRUE)
{
lcd_putc("Fase C: On");
}
else
{
lcd_putc("Fase C: Off");
}
break;
case 16:CLEAR_LCD_AND_HOME();
lcd_putc("Voltaje (RMS) FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Voltaje_FA);
lcd_putc(" V");
break;
case 17:CLEAR_LCD_AND_HOME();
lcd_putc("Voltaje (RMS) FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Voltaje_FB);
lcd_putc(" V");
break;
case 18:CLEAR_LCD_AND_HOME();
lcd_putc("Voltaje (RMS) FC:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", RP_Voltaje_FC);
lcd_putc(" V");
break;
case 19:CLEAR_LCD_AND_HOME();
lcd_putc("Corriente (RMS) FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%02.1f", RP_Corriente_FA);
lcd_putc(" A");
break;
case 20:CLEAR_LCD_AND_HOME();
lcd_putc("Corriente (RMS) FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%02.1f", RP_Corriente_FB);
lcd_putc(" A");
break;
case 21:CLEAR_LCD_AND_HOME();
lcd_putc("Corriente (RMS) FC:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%02.1f", RP_Corriente_FC);
lcd_putc(" A");
break;
case 22:CLEAR_LCD_AND_HOME();
lcd_putc("Frecuencia FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%lu", RP_Frecuencia_FA);
lcd_putc(" Hz");
break;
case 23:CLEAR_LCD_AND_HOME();
lcd_putc("Frecuencia FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%lu", RP_Frecuencia_FB);
lcd_putc(" Hz");
break;
case 24:CLEAR_LCD_AND_HOME();
lcd_putc("Frecuencia FC:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%lu", RP_Frecuencia_FC);
lcd_putc(" Hz");
break;
case 25:lcd_putc("f");
lcd_gotoxy(1,1);
lcd_putc( "Circuito Electronico");
lcd_gotoxy(1,3);
lcd_putc("Temp de Dispositivo:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%lu", Temperatura);
lcd_putc(0xDF);
lcd_putc("C");
break;
case 26:CLEAR_LCD_AND_HOME2();
FASE_A=PE_FASE_A;
if( FASE_A==TRUE)
{
lcd_putc("Fase A: On");
}
else
{
lcd_putc("Fase A: Off");
}
break;
case 27:CLEAR_LCD_AND_HOME2();
FASE_B=PE_FASE_B;
if( FASE_B==TRUE)
{
lcd_putc("Fase B: On");
}
else
{
lcd_putc("Fase B: Off");
}
break;
case 28:CLEAR_LCD_AND_HOME2();
FASE_C=PE_FASE_C;
if( FASE_C==TRUE)
{
lcd_putc("Fase C: On");
}
else
{
lcd_putc("Fase C: Off");
}
break;
case 29:CLEAR_LCD_AND_HOME2();
lcd_putc("Voltaje Bateria:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", PE_Voltaje_Bateria);
lcd_putc(" V");
break;
case 30:CLEAR_LCD_AND_HOME3();
CONTACTOR_A=TA_RED=false;
if( CONTACTOR_A==TRUE)
{
lcd_putc("Contactor de Red: On");
}
else
{
lcd_putc("Contactor de Red:Off");
}
break;
case 31:CLEAR_LCD_AND_HOME3();
CONTACTOR_B=TA_PLANTA;
if( CONTACTOR_B==TRUE)
{
lcd_putc("Contactor Planta: On");
}
else
{
lcd_putc("Contactor Planta:Off");
}
break;
case 32:CLEAR_LCD_AND_HOME4();
lcd_putc("Voltaje (RMS) FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", UPS_Voltaje_FA);
lcd_putc(" V");
break;
case 33:CLEAR_LCD_AND_HOME4();
lcd_putc("Voltaje (RMS) FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", UPS_Voltaje_FB);
lcd_putc(" V");
break;
case 34:CLEAR_LCD_AND_HOME4();
lcd_putc("Corriente (RMS) FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", UPS_Corriente_FA);
lcd_putc(" A");
break;
case 35:CLEAR_LCD_AND_HOME4();
lcd_putc("Corriente (RMS) FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", UPS_Corriente_FB);
lcd_putc(" A");
break;
case 36:CLEAR_LCD_AND_HOME4();
lcd_putc("Frecuencia FA:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", UPS_Frecuencia_FA);
lcd_putc(" Hz");
break;
case 37:CLEAR_LCD_AND_HOME4();
lcd_putc("Frecuencia FB:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", UPS_Frecuencia_FB);
lcd_putc(" Hz");
break;
case 38:CLEAR_LCD_AND_HOME4();
lcd_putc("Voltaje Banco Bat:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", UPS_Voltaje_Banco_Baterias);
lcd_putc(" V");
break;
case 39:CLEAR_LCD_AND_HOME4();
lcd_putc("Volt. Neutro-Tierra:");
lcd_gotoxy(1,4);
printf(lcd_putc,"%03.1f", UPS_Voltaje_Neutro_Tierra);
lcd_putc(" V");
break;
default:CLEAR_LCD_AND_HOME4();
lcd_putc("f");
lcd_gotoxy(1,2);
lcd_putc("*Error de Seleccion*");
SELECCION=0;
break;
}
}
void GUARDAR()
{
switch (PUNTERO)
{
case 0:Software_Version=DATO;
break;
case 1:RP_Potencia_Activa_FA=DATO;
break;
case 2:RP_Potencia_Activa_FB=DATO;
break;
case 3:RP_Potencia_Activa_FC=DATO;
break;
case 4:RP_Potencia_Reactiva_FA=DATO;
break;
case 5:RP_Potencia_Reactiva_FB=DATO;
break;
case 6:RP_Potencia_Reactiva_FC=DATO;
break;
case 7:RP_Potencia_Aparente_FA=DATO;
break;
case 8:RP_Potencia_Aparente_FB=DATO;
break;
case 9:RP_Potencia_Aparente_FC=DATO;
break;
case 10:RP_Factor_Potencia_FA=DATO;
break;
case 11:RP_Factor_Potencia_FB=DATO;
break;
case 12:RP_Factor_Potencia_FC=DATO;
break;
case 13:RP_FASE_A=DATO;
break;
case 14:RP_FASE_B=DATO;
break;
case 15:RP_FASE_C=DATO;
break;
case 16:RP_Voltaje_FA=DATO;
break;
case 17:RP_Voltaje_FB=DATO;
break;
case 18:RP_Voltaje_FC=DATO;
break;
case 19:RP_Corriente_FA=DATO;
break;
case 20:RP_Corriente_FB=DATO;
break;
case 21:RP_Corriente_FC=DATO;
break;
case 22:RP_Frecuencia_FA=DATO;
break;
case 23:RP_Frecuencia_FB=DATO;
break;
case 24:RP_Frecuencia_FC=DATO;
break;
case 25:Temperatura=DATO;
break;
case 26:PE_FASE_A=DATO;
break;
case 27:PE_FASE_B=DATO;
break;
case 28:PE_FASE_C=DATO;
break;
case 29:PE_Voltaje_Bateria=DATO;
break;
case 30:TA_RED=DATO;
break;
case 31:TA_PLANTA=DATO;
break;
case 32:UPS_Voltaje_FA=DATO;
break;
case 33:UPS_Voltaje_FB=DATO;
break;
case 34:UPS_Corriente_FA=DATO;
break;
case 35:UPS_Corriente_FB=DATO;
break;
case 36:UPS_Frecuencia_FA=DATO;
break;
case 37:UPS_Frecuencia_FB=DATO;
break;
case 38:UPS_Voltaje_Banco_Baterias=DATO;
break;
case 39:UPS_Voltaje_Neutro_Tierra=DATO;
PANTALLA();
break;
default:break;
}
}
#int_RDA
void RDA_isr()
{
char DIRECCION[3];
char AUX[6];
gets(DIRECCION);
output_high(TESTIGO);
gets(AUX);
output_low(TESTIGO);
PUNTERO = atoi(DIRECCION);
DATO = atof(AUX);
DATO=DATO+0.01;
IF(PUNTERO <= MENU_MAX)
{
output_low(READY);
GUARDAR();
}
output_high(READY);
Ver=True;
}
void main()
{
SET_TRIS_A(0x3F);/* 11 1111
RA0=
RA1=
RA2=
RA3=
RA4=
RA5= */
SET_TRIS_B(0xFF);/* 1111 1111
RB0=
RB1=
RB2=
RB3=
RB4=
RB5=
RB6=
RB7= */
SET_TRIS_C(0x97);/* 1001 0111
RC0=SW_UP
RC1=SW_DOWN
RC2=
RC3=TESTIGO
RC4=
RC5=READY
RC6=TX
RC7=RX */
SET_TRIS_D(0x00);/* 0000 0000
RD0=LCD_E
RD1=LCD_RS
RD2=LCD_RW
RD3=
RD4=LCD_D4
RD5=LCD_D5
RD6=LCD_D6
RD7=LCD_D7 */
SET_TRIS_E(0x07);/* 111
RE0=
RE1=
RE2= */
output_low(TESTIGO);
output_low(READY);
lcd_init();
lcd_barrido();
lcd_putc("f");
delay_ms(500);
if( input(DOWN) && input(UP))
{
Diseno();
while ( input(DOWN) && input(UP));
lcd_putc("f");
}
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
output_high(READY);
lcd_putc("Espere...");
while ( Ver == FALSE );
PANTALLA();
while(1)
{
if( input(UP))
{
output_low(READY);
antirebote();
if(SELECCION < MENU_MAX)
{
SELECCION++;
}
else
{
SELECCION=0;
}
PANTALLA();
output_high(READY);
}
if( input(DOWN))
{
output_low(READY);
antirebote();
if(SELECCION==0)
{
SELECCION=MENU_MAX;
}
else
{
SELECCION--;
}
PANTALLA();
output_high(READY);
}
}
}
Espero te sirvan