реклама на сайте
подробности

 
 
> Вопросы по ADuC7061
gmp
сообщение Nov 13 2010, 04:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 10-10-07
Из: Челябинск
Пользователь №: 31 206



Здравствуйте! Никак не удается запустить АЦП в 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;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gmp
сообщение Nov 19 2010, 04:12
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 10-10-07
Из: Челябинск
Пользователь №: 31 206



Привожу текст программы, которую сейчас ковыряю. Данная программа взята из примеров, но почему-то без дополнительных костылей не работает. Как уже говорил ранее, UART отсылает первые 2 байта из массива szTemp[] и умолкает, хотя прерывания генерируются.

CODE

// Bit Definitions
#define BIT0 0x01
#define BIT1 0x02
#define BIT2 0x04
#define BIT3 0x08
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80
#define BIT8 0x100
#define BIT9 0x200
#define BIT10 0x400
#define BIT11 0x800
#define BIT12 0x1000
#define BIT13 0x2000
#define BIT14 0x4000
#define BIT15 0x8000


#include <Analogdevices/ioaduc7061.h>
# include "stdio.h"
# include "string.h"
#include <intrinsics.h>
#include <arm_interrupt.h>

volatile unsigned char bSendResultToUART = 0; // Flag used to indicate ADC0 resutl ready to send to UART
unsigned char szTemp[16] = ""; // Used to store ADC0 result before printing to UART
unsigned char ucTxBufferEmpty = 0; // Used to indicate that the UART Tx buffer is empty
volatile unsigned long ulADC0Result = 0; // Variable that ADC0DAT is read into in ADC0 IRQ
float V;

int main(void)
{
unsigned char i = 0;
unsigned char nLen = 0;


POWKEY1 = 0x1;
POWCON0 = 0x78; // Set core to max CPU speed of 10.24Mhz
POWKEY2 = 0xF4;

// Initialize the UART for 9600-8-N
GP1CON = BIT0 + BIT4; // Select UART functionality for P1.0/P1.1
COMCON0 = BIT7; // Enable access to COMDIV registers
COMDIV0 = 0x21; // Set baud rate to 9600.
COMDIV1 = 0x00;
//COMDIV2 = 0x21 + BIT11; // Enable fractional divider for more accurate baud rate setting
COMCON0 = BIT0 + BIT1 + BIT2;
COMIEN0 = BIT0 + BIT1; // Enable UART interrupts when Rx full and Tx buffer empty.


// Configure ADC0 for continuous conversions, 1Khz, AIN0 in Single-ended mode
ADCMSKI = BIT0; // Enable ADC0 result ready interrupt source
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 =
BIT4 +
BIT6 + BIT7 + BIT8 + // AIN0 selected in Single ended mode

BIT10 + // Unipolar ADC output
BIT15; // Gain = 1, Buffer on. Also, Int reference,

ADCCFG = 0;
IRQEN = BIT10 + BIT11; // Enable ADC and UART interrupts
__enable_interrupt();

bSendResultToUART = 0;
while (1)
{

if (bSendResultToUART == 1) // Is there an ADC0 result ready for UART transmission?
{
sprintf ( (char*)szTemp, "%lu\r",ulADC0Result ); // Send the ADC0 Result to the UART
nLen = strlen((char*)szTemp);
for ( i = 0 ; i < nLen ; i++ ) // loop to send ADC0 result
{
COMTX = szTemp[i];
ucTxBufferEmpty = 0;
while (ucTxBufferEmpty == 0)


}

}
}

}
#pragma vector = 0x18
__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;

}

}

Оказалось, причина умолкания UARTа в том, что регистр COMRX нигде не считывался, соответственно, флаг прерывания по приему не сбрасывался и программа крутилась в прерывании по UART. Вот, что добавил:

if ((ucCOMIID0 & 0x4) == 0x4) // Receive buffer empty
{
V=COMRX;
}

Теперь вопрос. Как организовать прием и обработку 9-ого бита данных?

Сообщение отредактировал IgorKossak - Nov 19 2010, 07:33
Причина редактирования: Пользуйтесь тэгами
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 19 2010, 10:19
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (gmp @ Nov 19 2010, 06:12) *
Привожу текст программы, которую сейчас ковыряю.
1) ucTxBufferEmpty должен быть volatile.
2)
CODE
    COMTX = szTemp[i];
    ucTxBufferEmpty = 0;
   while (ucTxBufferEmpty == 0);
попробуйте переделать в
CODE
    ucTxBufferEmpty = 0;
    COMTX = szTemp[i];
    while (ucTxBufferEmpty == 0);

или
CODE
    while (ucTxBufferBusy == 1);
    ucTxBufferBusy = 1;
    COMTX = szTemp[i];

QUOTE (gmp @ Nov 19 2010, 06:12) *
Данная программа взята из примеров
Такими примерами лучше не пользоваться.
QUOTE (gmp @ Nov 19 2010, 06:12) *
Теперь вопрос. Как организовать прием и обработку 9-ого бита данных?
Понятия не имею. Может кто-то другой подскажет, или придется вам перечитывать даташит и думать, думать, думать...


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- gmp   Вопросы по ADuC7061   Nov 13 2010, 04:36
- - AHTOXA   Цитата(gmp @ Nov 13 2010, 09:36) На входе...   Nov 13 2010, 07:45
- - gmp   Сконфигурировал на подачу внешней опоры(установил ...   Nov 13 2010, 08:49
|- - AHTOXA   Хм. А куда у вас подключен ADC5?   Nov 13 2010, 15:34
- - gmp   Никуда не подключен. Он разве не относительно нуля...   Nov 14 2010, 04:47
|- - AHTOXA   Да фиг его знает. В даташите написано: Цитата[0001...   Nov 14 2010, 07:12
- - gmp   Да пробовал уже, ошибка и все. Попробовал включить...   Nov 14 2010, 16:28
|- - AHTOXA   А с внутренней опорой - работает?   Nov 14 2010, 22:25
- - gmp   В однополярном режиме от внутренней опоры тоже не ...   Nov 15 2010, 02:58
- - gmp   Сегодня скачал Keil, там вообще все по другому раб...   Nov 15 2010, 11:58
|- - AHTOXA   Но программа-то нормально заливается? Сделайте как...   Nov 15 2010, 15:56
- - gmp   Программа компилится и заливается нормально. В под...   Nov 16 2010, 03:02
- - gmp   Сегодня наконец-то удалось запустить АЦП. Измерени...   Nov 17 2010, 05:06
|- - Сергей Борщ   QUOTE (gmp @ Nov 17 2010, 07:06) в регист...   Nov 17 2010, 07:46
- - gmp   Если вы про окно "Register", то перехода...   Nov 17 2010, 09:40
|- - Сергей Борщ   QUOTE (gmp @ Nov 17 2010, 11:40) Может гд...   Nov 17 2010, 11:12
- - gmp   Добавил #pragma vector = 0x18, если на этот адрес ...   Nov 18 2010, 03:15
|- - Сергей Борщ   QUOTE (gmp @ Nov 18 2010, 05:15) Бит I в ...   Nov 18 2010, 11:31
- - gmp   Да, спасибо, я уже проделал данные манипуляции (до...   Nov 18 2010, 13:28
|- - Сергей Борщ   QUOTE (gmp @ Nov 18 2010, 15:28) Кстати, ...   Nov 18 2010, 13:42
|- - gmp   Цитата(Сергей Борщ @ Nov 18 2010, 18:42) ...   Nov 18 2010, 15:58
- - gmp   Я пример этот взял, чтобы можно было на что-то опи...   Nov 19 2010, 11:21
- - gmp   Привожу кусок кода с обработкой 9-ого бита, может ...   Nov 24 2010, 04:56


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016