- Mon Aug 23, 2010 2:45 pm
#108063
Hello all. I was just wondering if someone can help post some tips for my project. My project involves a flex sensor (potentiometer that ranges from 60k to 100k ohms). Using external circuitry to send various voltage levels (from changes in the potentiometer) to the micro. I want to perform ADC on these voltage readings (0-2V). Then based on these voltage readings I want to implement PWM to drive a servo. The servo can function between 600us to 2400us.
I want to set it up such that:
Any/all help is much appreciated.
Also, below is my setup code for ADC. Comments appreciated on this as well.
I want to set it up such that:
- 100k ohms (no flex) will drive the servo at 600us.
- 85k ohms (mid flex) will drive the servo at 1500us
- 60k ohms (max flex) will drive the servo at 2400us
Any/all help is much appreciated.
Also, below is my setup code for ADC. Comments appreciated on this as well.
Code: Select all
#include <MSP430xg46x.h>
#include "intrinsics.h"
#include "io430.h"
#include "header_file.h"
//--- MAIN ---//
int main (void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog
//--- ADC --//
ADC12CTL0 = ADC12ON | REFON | REF2_5V | SHT0_7; // ADC12ON = enables ADC12
// REFON = enables reference voltage (for testing purposes)
// REF2_5V = 2.5 reference voltage
// SHT0_7 = 2^7 = 128 cycles
ADC12CTL1 = SHS0 | SHP | ADC12DIV0 | ADC12SSEL0 | CONSEQ0 ;
// SHS0 = ADC12OSC internal timer bit
// SHP = Sample/Hold Pulse Mode
// ADC12DIV0 = No clock divisions
// ADC12SSEL0 = ADC12OSC as source
// CONSEQ0 = Single-channel single-conversion
ADC12IE = BIT0; // Enable interrupt on bit0
ADC12MEM0 = ZERO; // Clear mem
asm (" EINT"); // Enable global interrupts
}