Добрый день. Хочу поставить индикатор на регулятор мощности, для этого я хочу дополнить регулятор MSP430F2013 на аналоговые входы которого я буду подавать уменьшенный сигнал и измеряя напряжение с помощью АЦП выводить его значение в процентах. Для этого сделал для отлатки устройство с регулируемым напряжением до 0.59 вольт . Как я понял для написания пограммы надо сделать таблицу соответствия напряжения его цифрвому коду в АЦП .
Вот моя программа для этой цели где результат преобразования напряжения хранится в ChA0results:
#include <msp430x20x3.h>
/* Arrays to store SD16 conversion results */
/* NOTE: arrays need to be global to */
/* prevent removal by compiler */
static unsigned int ChA0results = 0x00;
static unsigned int ch_counter=0;
void main(void)
{
volatile unsigned int i; // Use volatile to prevent removal
// by compiler optimization
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
BCSCTL2 |= DIVS_3; // SMCLK/8
SD16CTL = SD16REFON + SD16SSEL_1; // 1.2V ref, SMCLK
SD16INCTL0 = SD16INCH0; // Set channel A0+/-
SD16CCTL0 |= SD16SNGL + SD16UNI + SD16IE;
// Single conv, 256OSR, unipolar,
// enable interrupt
SD16INCTL0 |= SD16INTDLY_0; // Interrupt on 4th sample
SD16AE = SD16AE0; // P1.0 A0+, A0- = VSS
for (i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup
while(1)
{
SD16CCTL0 |= SD16SC; // Set bit to start conversion
_BIS_SR(LPM0_bits + GIE); // Enter LPM0
}
}
#pragma vector = SD16_VECTOR
__interrupt void SD16ISR(void)
{
switch (SD16IV)
{ case 2: // SD16MEM Overflow
break;
case 4: // SD16MEM0 IFG
switch(ch_counter)
{
case 0:
ChA0results = SD16MEM0; // Save CH0 results (clears IFG)
SD16AE &= ~SD16AE0; // Disable external input A0+, A0
SD16INCTL0 &= ~SD16INCH_0; // Disable channel A0+/-
ch_counter++;
SD16AE = SD16AE0; // Reset external input to A0+/-
SD16INCTL0 = SD16INCH_0; // Reset channel observed
break;
}
_BIC_SR_IRQ(LPM0_bits); // Exit LPM0
}
}
Но у меня проблема с недопонимание работы этого АЦП. Я подаю напряжение на канал A0 и вижу результат на SD16MEM0 он его благополучно заносит в ChA0results. Но эти значени при каждом перезапуске программы разные. Подскажите пожалуйста как решить эту проблему и составить таблицу:для
0.59В-"результат преобразования" , 0.531В- , 0.472В- , 0.413В- , 0.354В- , 0.295В- , 0.236В- , 0.177В- , 0.118В- , 0.059В.