gmp 0 13 ноября, 2010 Опубликовано 13 ноября, 2010 · Жалоба Здравствуйте! Никак не удается запустить АЦП в 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 13 ноября, 2010 Опубликовано 13 ноября, 2010 · Жалоба На входе около 1,3В, опроное напряжение выбрано AVDD (2,5В). В чем может быть проблема? ... BIT4 + BIT5 + //(AVDD, AGND) reference У вас опорное выбрано AVDD/2: 5:4 ADC0REF[1:0] [11] = (AVDD, AGND) divide-by-two selected. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gmp 0 13 ноября, 2010 Опубликовано 13 ноября, 2010 · Жалоба Сконфигурировал на подачу внешней опоры(установил только BIT4) все равно выдает ошибку. Подал на вход 1В для первого и второго случая, все равно выдает ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 13 ноября, 2010 Опубликовано 13 ноября, 2010 · Жалоба Хм. А куда у вас подключен ADC5? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gmp 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба Никуда не подключен. Он разве не относительно нуля измеряет? Этим контроллером вообще можно измерить напряжение от 0 до 2,2В? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба Да фиг его знает. В даташите написано: [0001] = ADC0/ADC5 (single-ended mode). Может, это значит, что для single-ended каналов ADC5 является землёй? Попробуйте - узнаете:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gmp 0 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба Да пробовал уже, ошибка и все. Попробовал включить дифференциальный режим, что-то зашевелилось, ошибка не выскакивает, переключил обратно и снова ошибка. Причем ошибка выскакивает сразу после конфигурации АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 14 ноября, 2010 Опубликовано 14 ноября, 2010 · Жалоба А с внутренней опорой - работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gmp 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба В однополярном режиме от внутренней опоры тоже не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gmp 0 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба Сегодня скачал Keil, там вообще все по другому работает. Может с дровами к JTAG (miDAS-Link) что не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 15 ноября, 2010 Опубликовано 15 ноября, 2010 · Жалоба Но программа-то нормально заливается? Сделайте какой-нибудь вывод результатов (типа в UART), и попробуйте без отладчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gmp 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Программа компилится и заливается нормально. В поддержку написал, может что подскажут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gmp 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба Сегодня наконец-то удалось запустить АЦП. Измерение в однополярном режиме осуществляется относительно ADC5, а не массы, но это еще не все. Выяснилось, что если не отключать питания mIDAS-Link при перезапуске отладки, АЦП сразу инициализируется с ошибкой преобразования и никакие манипуляции не дают эффекта. Если при перезапуске отладки переподать питание на плату и только потом подключить mIDAS-Link, то все регистры инициализируются нулями и все нормально работает. Вот такая странность..... Теперь нужно заставить АЦП измерять напряжение до 2,2В (сейчас только 1,2В), запустить UART и добиться, чтобы в IAR срабатывали прерывания. Кстати о прерываниях. Они описаны в программе и разрешены, в регистрах высталяются биты, что прерывание произошло, но перехода в обработку прерывания не происходит, может какой файл нужно подключить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба в регистрах высталяются биты, что прерывание произошло,А посмотрите внимательно описание - чтение этих битов (в том числе и отладчиком) не приводит к их сбросу? В некоторых ARMах прерывания не работатют если в отладчике открыто окно с регистрами контроллера прерываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gmp 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба Если вы про окно "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; } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться