//Relay switching speed test
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
sbit relay at RA0_bit;
sbit ipfrelay at RA2_bit; //input from relay (to indicate relay has started)
sbit input at RA3_bit; //trigger for relay
char millisecs;
char msg1[] ="SW Time=";
char msg2[] ="ms";
void main()
{
CMCON=0x07;
TRISA=0b00001100;
TRISB=0b00000000;
OPTION_REG=0b10110000;
LCD_Init();
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,msg1);
Lcd_Out(1,11,msg2);
millisecs=0;
relay=0;
while(1)
{
if(input==1)
{
relay=1;
}
if(relay==1)
{
delay_ms(1);
millisecs++; // incrementing millisecs per 1 ms to calculate switching time in millisecs.
}
if(ipfrelay==1&&relay==1)relay=0;
Lcd_Out(1,9,millisecs);
}
}