Search

Friday, July 17, 2015

GSM Message Sending Using PIC Microcontroller

//********************************************************************************
//Author : Palak Patel(M.Tech)
//Contact No:9173211683
//Title:GSM Message Sending Using PIC 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 PBADEN = OFF
#pragma config MCLRE = ON
#pragma config STVREN = OFF
#pragma config LVP = OFF
#pragma config XINST = OFF   

#define LCD PORTB

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

void Delay_ms(unsigned int);

void cmd(unsigned char);
void dat(unsigned char);
//void transmitt(unsigned char p[]);
void send_to_modem1(unsigned char p[]);
void send_sms();
void send_msg();

char AT[]="AT";   // To initialize mode

char mode_text[]="AT+CMGF=1";   // to set text mode
//char char_mode[]="AT+CSCS=\"GSM\"";   // to set character mode
char param[]="AT+CSMP=17,167,0,0";   // set the parameter of character
char mobile_no[]="AT+CMGS=\"+919173211683\"";   //use to set receinpent number and mesg
char terminator=0x1A;     // chartacter form of control + z terminator character
char mesg[]="Emergancy";   // mesg we want to send

void main()

{
       ADCON1=0x0F;
        TRISD=0x00;
       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
       TRISB=0x00;

        cmd(0x01);

         cmd(0x80);
         cmd(0x0C);
         cmd(0x06);
         cmd(0x38);
           
        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=125;   
       RCONbits.IPEN   = 0;                 // disable interrupt priority
        INTCONbits.GIE  = 1;                 // enable interrupts
        INTCONbits.PEIE = 1;                // enable peripheral interrupts.
        PIE1bits.RCIE   = 1;                    // enable USART receive interrupt
      send_msg();
while(1);

}

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 int p)

{
unsigned int i,j;
for(i=0;i<p;i++)
{
for(j=0;j<300;j++);
}
}

void send_to_modem1(unsigned char p[])

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

void send_sms()

{
send_to_modem1(mesg);
Delay_ms(100);
       while(PIR1bits.TXIF==0);// TMRT Empty
        TXREG=0x1A;       //Transmit buffer
Delay_ms(1000);
}
  
void send_msg()
{
send_to_modem1(AT);
Delay_ms(2000);
//send_to_modem1(noecho);
//Delay_ms(2000);
send_to_modem1(mode_text);
Delay_ms(2000);
send_to_modem1(mobile_no);
Delay_ms(2000);
send_sms();
}



Simulation:



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: