It has been a while since I played with the MSP430G2 evaluation board. Recently one of my friends wanted me to build a temperature stabilizer for one of his projects. The requirement was to stabilize a water container at 50 Centigrades. I decided to use the MSP430 as it has the basic components needed for it. In this post I will be talking about the code I used in the MSP430.
I used MSP430G2553 micro controller to do all the processing,
I used LM35 temperature sensor to measure the temperature.
The application was straight forward. I had to connect the LM35 IC through the ADC of the MSP430 and process the signal.
Schematic:
Following is the connection diagram.

Logic:
Following is a state diagram of the problem.

LM35:
According to the datasheet of the LM35 it works within 4V and 30V supply voltages. Since the MSP430 works at 3.3V I used a 9V battery to power up the LM35 IC. But the ground should be shared with the launchpad for this to work properly. It gives 10mV/C as the output in a linear scale.
Code:
The coding was done using the TIs code composer studio.
#include <MSP430.h>
/*
* main.c
*/
unsigned int value = 0;
unsigned int upperT = 180;
unsigned int lowerT = 160;
//The function to configure the ADC
void configureAdc(){
ADC10CTL0 = SREF_1 + ADC10SHT_0 + ADC10ON + ADC10IE + REFON;
ADC10CTL1 = INCH_5 + ADC10DIV_3;
ADC10AE0 |= BIT5;
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR;
__interrupt void ADC10_ISR (void)
{
__bic_SR_register_on_exit(CPUOFF); // Return to active mode
}
int main(void) {
short flag = 1; //relay on
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
BCSCTL1 = CALBC1_1MHZ; //Clock calibration
DCOCTL = CALDCO_1MHZ;
BCSCTL2 &= ~(DIVS_3);
P1DIR |= BIT0 + BIT6; //GPIO selection
P1SEL |= BIT5;
P1OUT &= ~(BIT0 + BIT6); //LEDx off
configureAdc();
__enable_interrupt();
P1OUT |= BIT6; //LED1 ON
while(1){
__delay_cycles(2000000); //delay 2sec
ADC10CTL0 |= ENC + ADC10SC; //Enable conversion
__bis_SR_register(CPUOFF + GIE); //Low power mode with enabled interrupts
value = ADC10MEM; //ADC conversion
if(flag == 1){ //When relay is on
if (value>=upperT){ //Wait until T = 53C
P1OUT &= ~(BIT0 + BIT6);
P1OUT |= BIT0;
flag = 0; //relay off //Turn off the relay
}
}
else if(flag==0){ //When relay is off
if (value<=lowerT){ //Wait until T = 47C
P1OUT &= ~(BIT0 + BIT6);
P1OUT |= BIT6;
flag = 1; //relay on //Turn on the relay
}
}
}
return 0;
}
Like this:
Like Loading...