Написал вначале программу АЦП Однократный одноканальный всё работает прекрасно. Теперь решил Циклический одноканальный и задействовать пересылку DTC. Что у меня в коде не так или что я неправильно понял ??? Но в число ADC_int ничего не пишется (((
#include <msp430g2553.h>
void Init_IO (void); //Настройка портов, и частоты
void SetupTIMER0_A0 (void); //Настройка таймера прерывания
void ADC_init_1(void); //Настройка АЦП одноканальный режим
volatile unsigned int ADC_int=0; //ADC_int =0 .. 65535 (2 байта)
//volatile - те переменные, которые могут изменяться асинхронно
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
Init_IO (); //Настройка портов
SetupTIMER0_A0 (); //Настройка таймера А0
ADC_init_1(); //Настройка АЦП одноканальный режим
__enable_interrupt(); //Разрешаем прерывания глобально
for (;;)
{
}
}
void Init_IO (void) //Настройка портов вход - "0", выход - "1"
{
P1DIR = 0b00000000; // настраиваем вывод P1.х на вход
P2OUT =0b000000; // Ставим сигнал на выходе 0 у порта P2
P2DIR =0b111000; // настраиваем вывод P2.0..P2.2 на вход / P2.3..P2.5 на выход (подключены светодиоды)
}
void SetupTIMER0_A0 (void)
{
TACCR0 = 6000; // регистр TACCRx содержит число, которое срав нивается с содержимым регистра счётчика TAR.
TACCTL0 = CCIE;
TACTL = TASSEL_2 + // TASSEL_2 - источник тактов SMCLK (SubMainCLocK), по умолчанию настроенных на работу от DCO
ID_3 + // ID_3 - делитель частоты 8
MC_1 + // Прямой счёт: таймер считает от 0000h до TACCR0.
TACLR; //обнуляем счетчик
}
void ADC_init_1(void) //Настройка АЦП циклический одноканальный режим
{
ADC10CTL0 = SREF_0 + // Используем Vcc/Vss(аналоговая земля) для верхнего_нижнего ИОН /
ADC10SHT_0 + //4 x ADC10CLK (выборка за 4 тактов)
MSC + //первому нарастающему фронту сигнала SHI, а остальные выборки/преобразования запускаются автоматически
ADC10ON; //Модуль ADC10 включён
ADC10CTL1 = INCH_0 + //Выбор входного канала А0
SHS_0 + //Источник сигнала для пуска бит ADC10SC
ADC10DIV_0 + // делитель ADC10CLK на 1.
ADC10SSEL_0 + //Источник тактов АЦП ACLK
CONSEQ_2; //Циклический одноканальный
ADC10AE0 = BIT0; //Аналоговый вход включён
ADC10DTC0 = ADC10CT; //Данные пересылаются непрерывно.
ADC10DTC1 = 1; //Количество пересылок.
ADC10SA = (unsigned int)&ADC_int; //Начальный адрес блока. Эти биты определяют начальный адрес для контроллера DTC
ADC10CTL0 |= ENC + ADC10SC; //Разрешаем работу АЦП
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer1_A0 (void)
{
P2OUT ^= BIT5; //Желтый светодиод
if (ADC_int < 100) //Красный светодиод
P2OUT |= BIT4;
else
P2OUT &= ~BIT4;
if (ADC_int != 0) //Зеленый светодиод
P2OUT |= BIT3;
else
P2OUT &= ~BIT3;
}
-
- Во-первых, volatile unsigned int ADC_int=0;, а во-вторых, не вижу, чтобы кто-то вообще писал в ADC_int - MBedder(25.11.2015 11:46)
- Вот тут указываю чтобы АЦП писал туда. SaNeKnet(171 знак., 25.11.2015 11:47 - 11:56)
- Может, написать ADC10SA = &ADC_int ? - на всякий случай(25.11.2015 16:44, )
- СПАСИБО ОГРОМНОЕ !!! SaNeKnet(151 знак., 25.11.2015 17:12)
- Может, написать ADC10SA = &ADC_int ? - на всякий случай(25.11.2015 16:44, )
- Вот тут указываю чтобы АЦП писал туда. SaNeKnet(171 знак., 25.11.2015 11:47 - 11:56)
- Во-первых, volatile unsigned int ADC_int=0;, а во-вторых, не вижу, чтобы кто-то вообще писал в ADC_int - MBedder(25.11.2015 11:46)