Добрый день. Хочу поставить индикатор на регулятор мощности, для этого я хочу дополнить регулятор 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В.
|