В универе года 2 назад изучал азы программирования микроконтроллеров. Мигали лампочками,через пень колоду передавали данный по уарт.
А сейчас вот на руки получил MSP430 платку с G2553 на борту.
Возникла Надобность разобраться с АЦП. И тут я посыпался...
Код
#include <msp430.h>
#define dv 0.0032258
float volts=0.0;
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // останавливаем сторожевой таймер
P1DIR = 0x40; //1.6 LED
ADC10CTL1 = INCH_0 // A0 input to ADC
+ SHS_0 // use ADC10SC bit to trigger sampling
+ ADC10DIV_3 // clock divider = 4
+ ADC10SSEL_3 // clock source = SMCLK
+ CONSEQ_0; // single channel, single conversion
ADC10CTL0 = SREF_1 // reference voltages are Vss and Vcc
+ ADC10SHT_3 // 64 ADC10 clocks for sample and hold time (slowest)
+ REFON // reference generator on
+ ADC10ON; // turn on ADC10
//+ ENC; // enable (but not yet start) conversions
ADC10AE0 = BIT0; // Разрешаем вход АЦП на порту P1.0
while (1){
ADC10CTL0 |= ADC10SC + ENC; // включаем считвание с ацп
while (ADC10CTL1 & ADC10BUSY); // ждем пока все считает
volts=ADC10MEM*dv; // конвертируем результат в напряжение и сохраняем
if (volts > 0.30) // Если напряжение больше чем 0.3 В
P1OUT |= BIT6; // Загорается LED
else
P1OUT &= ~BIT6; // Если нет - то отключается LED
}
}
#define dv 0.0032258
float volts=0.0;
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // останавливаем сторожевой таймер
P1DIR = 0x40; //1.6 LED
ADC10CTL1 = INCH_0 // A0 input to ADC
+ SHS_0 // use ADC10SC bit to trigger sampling
+ ADC10DIV_3 // clock divider = 4
+ ADC10SSEL_3 // clock source = SMCLK
+ CONSEQ_0; // single channel, single conversion
ADC10CTL0 = SREF_1 // reference voltages are Vss and Vcc
+ ADC10SHT_3 // 64 ADC10 clocks for sample and hold time (slowest)
+ REFON // reference generator on
+ ADC10ON; // turn on ADC10
//+ ENC; // enable (but not yet start) conversions
ADC10AE0 = BIT0; // Разрешаем вход АЦП на порту P1.0
while (1){
ADC10CTL0 |= ADC10SC + ENC; // включаем считвание с ацп
while (ADC10CTL1 & ADC10BUSY); // ждем пока все считает
volts=ADC10MEM*dv; // конвертируем результат в напряжение и сохраняем
if (volts > 0.30) // Если напряжение больше чем 0.3 В
P1OUT |= BIT6; // Загорается LED
else
P1OUT &= ~BIT6; // Если нет - то отключается LED
}
}
Не могу понять где ошибка.
К плате ничего не подключено кроме питания,а
-диод горит
-в отладчике в регистре ADC10MEM значение все время прыгает (пример 0x02C3 или 0х02BC или 0х02D8 или 0х02FE)
Очень прошу помочь с проблемой.
Штудировал примеры,даташит и т.п. Ответа не нашел на свою проблему.
Так.Я помоему начал понимать в чем может быть косяк
Изменил опорное напряжение и картина стала куда лучше. Но я до сих пор не могу понять что написано в мануале.Что за опорное напряжение и что это вообще написано.
http://clip2net.com/s/6J8Lzz