АЦП в MSP430

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Unrealee
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вс дек 02, 2012 21:11:30

АЦП в MSP430

Сообщение Unrealee »

Никак не могу запустить АЦП.
Схема, прошивка во вложении.
Нужно получать напряжение с ножек Р1,2 и Р.3.
АЦП берёт напряжение раз, а потом брать не хочет :(
Вложения
lcd32.c
(2.84 КБ) 285 скачиваний
lcd32.h
(1.63 КБ) 530 скачиваний
main.c
(1.27 КБ) 546 скачиваний
Снимок.PNG
(17.84 КБ) 652 скачивания
Реклама
Unrealee
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вс дек 02, 2012 21:11:30

Re: АЦП в MSP430

Сообщение Unrealee »

Разобрался сам. Единственно, что не могу понять, почему на 2-ом канале постоянно присутствует логическая единица?
Спойлер#include "msp430g2553.h"
#include "lcd32.h"
void TimerA_init(void);
void ACD_init(void);
volatile unsigned int i;
int vbat, volts;
volatile int vrx;
int W[3], A[7];





void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer



InitializeLcm();

ClearLcmScreen();
LcmSetCursorPosition(0,0);
int k=1;
if (k==0){
PrintStr("Rx VFO");
}
else
{
PrintStr("Tx VFO");
}



ACD_init();
// TimerA_init();
for (;;){


ADC10CTL0 &= ~ENC;//отключили преобразование (бит должен быть "0" чтобы не возникало проблем с конфигом АЦП,в данном случае смена канала)
ADC10CTL1 = INCH_3;//канал А0
ADC10CTL0 |= ENC + ADC10SC;// аля "конфиг принять" и Start Convertion
while ((ADC10CTL1 & ADC10BUSY) == 0x01); // ждем, когда преобразование закончится

volts = (ADC10MEM*0.33);


ADC10CTL0 &= ~ENC;//отключили преобразование (бит должен быть "0" чтобы не возникало проблем с конфигом АЦП,в данном случае смена канала)

ADC10CTL1 = INCH_2;//канал А0
ADC10CTL0 |= ENC + ADC10SC;// аля "конфиг принять" и Start Convertion
while ((ADC10CTL1 & ADC10BUSY) == 0x01); // ждем, когда преобразование закончится
vbat = ADC10MEM;
ADC10CTL0 &= ~ENC;


W[0] = (int) volts/1000;
W[1] = (int)((volts-W[0]*1000))/100;
W[2] = (int)((volts-W[0]*1000-W[1]*100))/10;
W[3] = (int)(volts-W[0]*1000-W[1]*100-W[2]*10);



LcmSetCursorPosition(1,0);
SendByte((0x30+W[0]), TRUE);
LcmSetCursorPosition(1,1);
SendByte((0x30+W[1]), TRUE);
LcmSetCursorPosition(1,2);
PrintStr(".");
LcmSetCursorPosition(1,3);
SendByte((0x30+W[2]), TRUE);
LcmSetCursorPosition(1,4);
SendByte((0x30+W[3]), TRUE);


PrintStr("U");
LcmSetCursorPosition(1,7);
PrintStr("S");
if (vbat>0 && vbat <100) SendByte((0xFF), TRUE);

LcmSetCursorPosition(1,8);
if (vbat>=100) SendByte((0xFF), TRUE);

LcmSetCursorPosition(1,9);
if (vbat>=200) SendByte((0xFF), TRUE);

LcmSetCursorPosition(1,10);
if (vbat>=300) SendByte((0xFF), TRUE);

LcmSetCursorPosition(1,11);
if (vbat>=400) SendByte((0xFF), TRUE);

LcmSetCursorPosition(1,12);
if (vbat>=500) SendByte((0xFF), TRUE);

LcmSetCursorPosition(1,13);
if (vbat>=600) SendByte((0xFF), TRUE);

LcmSetCursorPosition(1,14);
if (vbat>=700) SendByte((0xFF), TRUE);

LcmSetCursorPosition(1,15);
if (vbat>=800) SendByte((0xFF), TRUE);


__delay_cycles(1000000);
LcmSetCursorPosition(1,8);
PrintStr(" ");
}

// __low_power_mode_0();
}

void ACD_init(void){
ADC10CTL0 = SREF_0 + ADC10SHT_1 + ADC10ON;
//ADC10CTL1 = SHS_0 + ADC10SSEL_0 + ADC10DIV_0 + CONSEQ_0;
ADC10AE0 = BIT2+BIT3; // Разрешаем вход АЦП на порту P1.1

// ADC10CTL0 |= ENC;



}


/*
}
void TimerA_init(void)
{
TACCR0 = 6000; // ADC trigger period ~22 мсек
TACCTL0 = OUTMOD_4; // toggle OUT0 to trigger ADC
TACTL = TASSEL_2 + ID_3 + MC_1 + TACLR; // SMCLK/8, up mode, start
}
//#pragma vector = ADC10_VECTOR
//__interrupt void ADC10_ISR (void)



*/
Реклама
Unrealee
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вс дек 02, 2012 21:11:30

Re: АЦП в MSP430

Сообщение Unrealee »

Чувствую, будет у меня монолог.
Разобрался со вторым каналом ADC, на него UART приходил. Перемычки снял, все заработало. Осталось реализовать частотомер и переключение измерений по биту на порте.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: АЦП в MSP430

Сообщение Ser60 »

Видите, как все хорошо получается - стоит самому пару часов подумать и все будет ясно. Кроме того, кто мог предположить, что Вы на Launchpad-е собираете. Если так, то по нему здесь есть специальная тема
http://radiokot.ru/forum/viewtopic.php?f=62&t=42019
По MSP430 имеется замечательная книга - очень советую.
http://www.amazon.com/MSP430-Microcontr ... 0750682760
Видел также ее в сети для скачивания. В ней, в частности, освещены все нужные Вам для проекта вопросы: работа с таймерами, работа с кнопками, подавление их дребезга, измерение частоты и периода, и пр.
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Разные вопросы по МК»