Перейти к содержанию
    

Здравствуйте! Никак не удается запустить АЦП в ADuC7061. В регистре ADCSTA постоянно установлен бит ADC0CERR. Бит завершения преобразования ADC0RDY устанавливается, значит АЦП работает. На входе около 1,3В, опроное напряжение выбрано AVDD (2,5В). В чем может быть проблема? Настройка АЦП приведена ниже.

 

 

//-------------- Установка необходимой частоты генератора ------------------

 

POWKEY1 = 0x1;

POWCON0 = 0x78; //Set core to max CPU //speed of 10.24 MHz

POWKEY2 = 0xF4;

 

 

//------------- Настройка АЦП -----------------------

 

// Configure ADC0 for continuous conversions, 1Khz, AIN0 in Single-ended mode

ADCFLT = 0x7; // Chop off, 1Khz samping rate, SF = 7. No averaging

ADCMDE = BIT0 + BIT7; // Continuous Conversion mode, Normal mode, 4Mhz clock source to ADC.

ADC0CON = // Gain = 1, Buffer on.

BIT4 + BIT5 + //(AVDD, AGND) reference

BIT6 + // AIN0 selected in Single ended mode

BIT10 + // Unipolar ADC input

BIT12 + // ------------------------------ опорное напряжение выше 1,35В

BIT15; // Primary channel ADC enable.

ADCCFG = 0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На входе около 1,3В, опроное напряжение выбрано AVDD (2,5В). В чем может быть проблема?

...

BIT4 + BIT5 + //(AVDD, AGND) reference

 

У вас опорное выбрано AVDD/2:

5:4 ADC0REF[1:0]

[11] = (AVDD, AGND) divide-by-two selected.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сконфигурировал на подачу внешней опоры(установил только BIT4) все равно выдает ошибку.

Подал на вход 1В для первого и второго случая, все равно выдает ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никуда не подключен. Он разве не относительно нуля измеряет? Этим контроллером вообще можно измерить напряжение от 0 до 2,2В?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да фиг его знает. В даташите написано:

[0001] = ADC0/ADC5 (single-ended mode).

Может, это значит, что для single-ended каналов ADC5 является землёй? Попробуйте - узнаете:)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да пробовал уже, ошибка и все. Попробовал включить дифференциальный режим, что-то зашевелилось, ошибка не выскакивает, переключил обратно и снова ошибка. Причем ошибка выскакивает сразу после конфигурации АЦП.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня скачал Keil, там вообще все по другому работает. Может с дровами к JTAG (miDAS-Link) что не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но программа-то нормально заливается? Сделайте какой-нибудь вывод результатов (типа в UART), и попробуйте без отладчика.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программа компилится и заливается нормально. В поддержку написал, может что подскажут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня наконец-то удалось запустить АЦП. Измерение в однополярном режиме осуществляется относительно ADC5, а не массы, но это еще не все. Выяснилось, что если не отключать питания mIDAS-Link при перезапуске отладки, АЦП сразу инициализируется с ошибкой преобразования и никакие манипуляции не дают эффекта. Если при перезапуске отладки переподать питание на плату и только потом подключить mIDAS-Link, то все регистры инициализируются нулями и все нормально работает. Вот такая странность.....

Теперь нужно заставить АЦП измерять напряжение до 2,2В (сейчас только 1,2В), запустить UART и добиться, чтобы в IAR срабатывали прерывания.

Кстати о прерываниях. Они описаны в программе и разрешены, в регистрах высталяются биты, что прерывание произошло, но перехода в обработку прерывания не происходит, может какой файл нужно подключить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в регистрах высталяются биты, что прерывание произошло,
А посмотрите внимательно описание - чтение этих битов (в том числе и отладчиком) не приводит к их сбросу? В некоторых ARMах прерывания не работатют если в отладчике открыто окно с регистрами контроллера прерываний.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы про окно "Register", то перехода на обработку прерывания не происходит, хоть при открытом, хоть при закрытом окне. Может где-то нужно вектора прописывать? Кусок с прерываниями взял из примера.

Вотподключенные файлы и разрешение прерываний:

 

#include <Analogdevices/ioaduc7061.h>

# include "stdio.h"

# include "string.h"

#include <intrinsics.h>

 

IRQEN = BIT10 + BIT11; // Enable ADC and UART interrupts

 

 

Вот описание обработки, но IAR сюда не переходит:

 

__irq __arm void IRQ_Handler(void)

{

unsigned long IRQSTATUS = 0;

unsigned char ucCOMIID0 = 0;

 

IRQSTATUS = IRQSTA; // Read off IRQSTA register

if ((IRQSTATUS & BIT11) == BIT11) //UART interrupt source

{

ucCOMIID0 = COMIID0;

if ((ucCOMIID0 & 0x2) == 0x2) // Transmit buffer empty

{

ucTxBufferEmpty = 1;

}

}

 

if ((IRQSTATUS & BIT10) == BIT10) //If ADC0 interrupt source

{

ulADC0Result = ADC0DAT; // Read ADC0 conversion result

bSendResultToUART = 1;

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...