Search

Friday, July 17, 2015

Current Measurement Using PIC 18 Microcontroller

//********************************************************************************
//Author : Palak Patel(M.Tech)
//Contact No:9173211683
//Title:Current Measurement Using PIC 18 Microcontroller
//Platform: pic18f4520
//Software:MPLAB


//********************************************************************************


Program:


#include<p18f4520.h>
#pragma config OSC = HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOREN = OFF
#pragma config WDT = OFF
#pragma config MCLRE = OFF
#pragma config PBADEN = OFF
#pragma config STVREN = OFF
#pragma config LVP = OFF
void delay();
void send_Value(unsigned char p[5]);
void space();

void main()
{
unsigned char temp[] = "TEMP";
unsigned char tdata[4]="  . ",i=0;
unsigned int x=0,y,c=0x100,z,x1,DisplayVolt,e;
        unsigned char k;
unsigned long int x2;
float p,tmpr,f,a,b,d;
TRISA=0x03;
TRISC=0x00;

SPBRG=125;
TXSTAbits.CSRC=1;  //Master Mode
TXSTAbits.TX9=0;     //8 Bit
TXSTAbits.TXEN=1;    //Transmit enabled
RCSTAbits.SPEN=1;
TXSTAbits.SYNC=0;    //Asynchronous Mode
TXSTAbits.SENDB=0;   //Sync Break transmission completed
TXSTAbits.BRGH=1;    //High Speed

while(1)
{
ADCON1=0x0E;
ADCON0=0x00;
ADCON2=0x9C;
ADCON0bits.ADON = 1;
ADCON0bits.GO=1;
while(ADCON0bits.GO==1);

              x=ADRESH;
              y=ADRESL;
z=(x*c)+y;
f=(z*(float)0.2456);
x1=(int)f;
DisplayVolt = x1 * 8;
a=DisplayVolt;
    tdata[0] = DisplayVolt/1000 + 48;
    tdata[1] = (DisplayVolt/100)%10 + 48;
    tdata[3] = (DisplayVolt/10)%10 + 48;
while(PIR1bits.TXIF==0);// TMRT Empty
             TXREG='V';       //Transmit buffer
            while(PIR1bits.TXIF==0);// TMRT Empty
               TXREG='1';       //Transmit buffer
             space();
             send_Value(tdata);
             space();

             ADCON1=0x0D;
            ADCON0=0x04;
               ADCON2=0x9C;
             ADCON0bits.ADON = 1;
               ADCON0bits.GO=1;
               while(ADCON0bits.GO==1);

                   x=ADRESH;
                   y=ADRESL;
                   z=(x*c)+y;
                   f=(z*(float)0.2456);
                   x1=(int)f;
  
                  DisplayVolt = x1 * 8;
                b=DisplayVolt;
                  tdata[0] = DisplayVolt/1000 + 48;
                  tdata[1] = (DisplayVolt/100)%10 + 48;
                tdata[3] = (DisplayVolt/10)%10 + 48;
              while(PIR1bits.TXIF==0);// TMRT Empty
                TXREG='V';       //Transmit buffer
               while(PIR1bits.TXIF==0);// TMRT Empty
                 TXREG='2';       //Transmit buffer
              space();
               send_Value(tdata);
                space();

   d=((a-b)/(float)0.5);
   e=(int)d;
   tdata[0] = e/1000 + 48;
      tdata[1] = (e/100)%10 + 48;
   tdata[3] = (e/10)%10 + 48;

    while(PIR1bits.TXIF==0);// TMRT Empty
     TXREG='C ';       //Transmit buffer
      space();
     send_Value(tdata);
    space();
    while(PIR1bits.TXIF==0);// TMRT Empty
      TXREG=0x0D;       //Transmit buffer
}
}
void delay()
{
unsigned int j;
for(j=0;j<10000;j++);
}

void space()
{
        while(PIR1bits.TXIF==0);// TMRT Empty
        TXREG=' ';       //Transmit buffer
       while(PIR1bits.TXIF==0);// TMRT Empty
        TXREG=' ';       //Transmit buffer
}

void send_Value(unsigned char p[5])
{
unsigned char i=0;
while(p[i]!='\0')
{
              while(PIR1bits.TXIF==0);// TMRT Empty
               TXREG=p[i];       //Transmit buffer;
                i++;
              delay();
}
}


Simulation:






Sunday, July 5, 2015

Humidity Sensor interfacing with PIC18f

//********************************************************************************
//Author : Palak Patel(M.Tech)
//Contact No:9173211683
//Title:Humidity sensor(HSM 20G) interfacing with pic 18f
//Platform: pic18f4520
//Software:MPLAB


//********************************************************************************


#include<p18f4520.h>
#pragma config OSC = HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOREN = OFF
#pragma config WDT = OFF
#pragma config MCLRE = ON   
#pragma config PBADEN = OFF
#pragma config STVREN = OFF
#pragma config LVP = OFF

unsigned int Humidity = 0;
long adc_rd = 0;

void Get_Humidity();
unsigned int x,y,z,x1;
unsigned int c=0x100;
unsigned char k;
float p,tmpr,f;
char hum[] = "RH:  %";

#define LCD PORTB
#define RS PORTDbits.RD5
#define RW PORTDbits.RD6
#define EN PORTDbits.RD7

void cmd(unsigned char);
void dat(unsigned char);
void Delay_ms(unsigned char );

void main()
{
unsigned char i;
TRISA=0x03;                        //all input
TRISD=0x00;
TRISB=0x00;
ADCON1 = 0x0A;                //Analog an0
ADCON2=0x9C;

          // LCD Initialization...
          cmd(0x01);                           //Clear Lcd
           cmd(0x0c);
           cmd(0x80);   
          cmd(0x06); 
          cmd(0x38);

          i=0;
          cmd(0x80);
          while(hum[i]!='\0')
          {
dat(hum[i]);
i++;
Delay_ms(10);
           }
           while(1)
           {
                  Get_Humidity();
           }
 }

void cmd(unsigned char k)
{
        LCD=k;
        RS=0;
        RW=0;
        EN=1;
        Delay_ms(20);
        EN=0;
}

void dat(unsigned char k)
{
        LCD=k;
        RS=1;
        RW=0;
        EN=1;
        Delay_ms(20);
        EN=0;
}

void Delay_ms(unsigned char p)
{
unsigned int i,j;
for(i=0;i<p;i++)
{
for(j=0;j<200;j++);
}
}

void Get_Humidity()
 {
        int ii;
        float voltage = 00.00;
        ADCON0=0x0c; // Select Channel 3
        ADCON0bits.ADON = 1;
        ADCON0bits.GO=1;
        while(ADCON0bits.GO==1);         
        adc_rd = 0;                                      //Clear Previous Data
        for(ii=0;ii<20;ii++)
       {
ADCON0bits.ADON = 1;
ADCON0bits.GO=1;
while(ADCON0bits.GO==1);  // Select Channel 2
x=ADRESH;
y=ADRESL;
z=(x*c)+y;
f=(z*(float)4.8875);
x1=(int)f;
adc_rd += x1;                           //Take sample and add
       }
       adc_rd /= 20;                                  // Get the average data
       voltage = adc_rd*0.004883;         // 5/1023
       Humidity = (int)((3.71 * voltage * voltage * voltage) - (20.65 * voltage * voltage) + (64.81 * voltage) - 27.44);
       hum[3] = Humidity/10 + 48;
       hum[4] = Humidity%10 +48;
       cmd(0x83);
       dat(hum[3]);
       dat(hum[4]);
 }



Simulation Result:





Temperature sensor interfacing with PIC 18

//********************************************************************************
//Author : Palak Patel(M.Tech)
//Contact No:9173211683
//Title:Temperature sensor interfacing with pic 18f
//Platform: pic18f4520
//Software:MPLAB


//********************************************************************************


#include<p18f4520.h>
#pragma config OSC = HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOREN = OFF
#pragma config  WDT = OFF
#pragma config PBADEN = OFF
#pragma config LPT1OSC = OFF
#pragma config MCLRE = ON
#pragma config STVREN = OFF
#pragma config LVP = OFF
#pragma config XINST = OFF

#define ldata PORTD

#define rs PORTCbits.RC0
#define rw PORTCbits.RC1
#define en PORTCbits.RC2

void temp_dis(void);

void MSDelay(unsigned int);
void lcdcmd(unsigned char);
void lcddata(unsigned char);

unsigned char x;

unsigned char type[5] = "TEMP";
unsigned char temp[4];

void main()

{
unsigned int x=0;
unsigned int y;
unsigned int c=0x100;
unsigned int z,x1;
       unsigned char k;
float p,tmpr,f;
ADCON1=0x0E;
TRISA=0x01;
TRISD=0;
TRISC=0;
en=0;

lcdcmd(0x38); //2-lines and 5x7 matrix 8 bit initialization
MSDelay(50);
lcdcmd(0x0E); //Display on, Cursor blinking
lcdcmd(0x01); //Clear screen
lcdcmd(0x84); //Position first line 5th character
for(k=0;k<=3;k++)
{
lcddata(type[k]);
}
lcdcmd(0xC1); //Position second line 2nd character

/********************************/

ADCON0=0x00;
ADCON2=0x9C;
ADCON0bits.ADON = 1;
while(1)
{
                 ADCON0bits.GO=1;
while(ADCON0bits.GO==1);

                 x=ADRESH;
                 y=ADRESL;
z=(x*c)+y;
f=(z*(float)4.8875);
                x1=(int)f;
temp[3] = (x1/1000)%10 + 48;
temp[2] = (x1/100)%10 + 48;
temp[1] = (x1/10)%10 + 48;
temp[0] = x1%10 + 48;
temp_dis();
MSDelay(20);
}

}

void temp_dis(void)

{
lcdcmd(0xC3);
lcddata(temp[3]);
lcddata(temp[2]);
lcddata(temp[1]);
lcddata('.');
lcddata(temp[0]);
lcddata(0x233);
lcddata('C');
}

void lcdcmd(unsigned char value)

{
ldata=value;
rs=0;
rw=0;
en=1;
MSDelay(20);
en=0;
}

void lcddata(unsigned char value)

{
ldata=value;
rs=1;
rw=0;
en=1;
MSDelay(20);
en=0;
}

void MSDelay(unsigned int itime)

{
unsigned int i,j;
for(i=0;i<=itime;i++)
for(j=0;j<=135;j++);
}

Simulation Result:

Thursday, February 19, 2015

4 Bit LCD interfacing with 8051

//********************************************************************************
//Author : Palak Patel(M.Tech)
//Contact No:9173211683
//Title:lcd 4bit interafcing with 8051
//Platform: 8051
//Software:Kiel


//********************************************************************************

Program:

#include<reg51.h>
#define lcd P1
void cmd(unsigned char);
void dat(unsigned char);
void Delay_ms(unsigned char);
void main()
{
unsigned char i;
unsigned char tr[]="PALAK";
cmd(0x01);                          //Clear Lcd
    cmd(0x02);                          //4 Bit Specification
    cmd(0x28);                          //4 Bit specification
    cmd(0x0c);
    cmd(0x80);                          //Cursor starting point
    cmd(0X06);
TMOD=0x20; //8 Bit Auto Reload Mode; Timer 1;
TH1=0xfd; //9600 Boud Rate;
SCON=0x50; //Serial Mode 1; REN=1;
TR1=1; //Timer Run;
while(1)
{
for(j=0;j<5;j++)
{
SBUF=tr[j];
while(TI==0);
TI=0;
}
while(1);
}

    i=0;
    while(tr[i]!='\0')
    {
             dat(tr[i]);
             i++;
     }
}

void cmd(unsigned char k)
{
        lcd &=0x0F;
        lcd |=(k & (0xF0));
        lcd |=(2<<0);
        Delay_ms(2);
        lcd=lcd & 0xFC;
        Delay_ms(20);

        lcd &=0x0F;
        lcd |=((k<<4) & (0xF0));
        lcd |=(2<<0);
        Delay_ms(20);
        lcd=lcd & 0xFC;
        Delay_ms(20);
}
void dat(unsigned char k)
{
        lcd &=0x0F;
        lcd |=(k & 0xF0);
        lcd |=(3<<0);
        Delay_ms(20);
        lcd=lcd & 0xFD;
        Delay_ms(20);

        lcd &=0x0F;
        lcd |=((k<<4) & (0xF0));
        lcd |=(3<<0);
        Delay_ms(20);
        lcd=lcd & 0xFD;
        Delay_ms(20);
}

void Delay_ms(unsigned char p)
{
unsigned int i,j;
for(i=0;i<p;i++)
{
for(j=0;j<20;j++);
}
}

Simulation Result:




Tuesday, January 6, 2015

UNIVERSAL ASYNCHRONOUS RECEIVER AND TRNASMITTER IN PIC 18

Program:

//Author : Palak Patel
//Contact No:9173211683
//Title:USART Transmission and Receiver For PIC18F4520
//Platform: PIC18f4520
//Software:MPLAB

#include<p18f4520.h>
#pragma config OSC = HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOREN = OFF
#pragma config WDT = OFF
#pragma config MCLRE = ON
#pragma config PBADEN = OFF
#pragma config STVREN = OFF
#pragma config LVP = OFF

#define LCD PORTD
#define RS PORTCbits.RC0
#define RW PORTCbits.RC1
#define EN PORTCbits.RC2

// start ISR code
#pragma code isr = 0x08          // store the below code at address 0x08
#pragma interrupt isr                // let the compiler know that the                                                                                        function isr() is an interrupt handler

void delay();
void cmd(unsigned char);
void dat(unsigned char);
void Delay_ms(unsigned char);

void isr(void)
{
   unsigned char lcddata;
   if(PIR1bits.RCIF == 1)       // if the USART receive interrupt                                                        flag has been set
   {
       if(PIR1bits.TXIF == 1)  // check if the TXREG is empty
       {
            lcddata=RCREG;
dat(lcddata);
          }
   }    
}

void main()
{
           unsigned char palak[]="Palak Patel";
           unsigned int i=0;

TRISCbits.TRISC0=0;
TRISCbits.TRISC1=0;
TRISCbits.TRISC2=0;
          TRISCbits.TRISC6 = 0;       // make the TX pin a digital output
    TRISCbits.TRISC7 = 1;      // make the RX pin a digital input
TRISD=0x00;

cmd(0x01);                         //Clear Lcd
          cmd(0x02);                         //4 Bit Specification
          cmd(0x38);                         //4 Bit specification
          cmd(0x0c);
          cmd(0x80);                         //Cursor starting point
cmd(0x06);
           
          TXSTAbits.CSRC=1;        //Master Mode
          TXSTAbits.TX9=0;           //8 Bit
          TXSTAbits.TXEN=1;        //Transmit enabled
          TXSTAbits.SYNC=0;        //Asynchronous Mode
          TXSTAbits.SENDB=0;     //Sync Break transmission       completed
          TXSTAbits.BRGH=1;        //High Speed
      RCSTA=0x90;
SPBRG=100;   

RCONbits.IPEN   = 0;        // disable interrupt priority
    INTCONbits.GIE  = 1;       // enable interrupts
    INTCONbits.PEIE = 1;      // enable peripheral interrupts.
    PIE1bits.RCIE   = 1;          // enable USART receive interrupt
           while(palak[i]!='\0')
          {
                    while(PIR1bits.TXIF==0);// TMRT Empty
                    TXREG=palak[i];       //Transmit buffer
                    i++;
           }
while(1);
}

void delay()
{
                unsigned int j;
                for(j=0;j<100;j++);
}

void cmd(unsigned char k)
{
        LCD=k;
        RS=0;
        RW=0;
        EN=1;
        Delay_ms(20);
        EN=0;
}

void dat(unsigned char k)
{
        LCD=k;
        RS=1;
        RW=0;
        EN=1;
        Delay_ms(20);
        EN=0;
}

void Delay_ms(unsigned char p)
{
unsigned char i,j;
for(i=0;i<p;i++)
{
for(j=0;j<20;j++);
}
}



Simulation: