Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с АЦП C8051F120(121)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Moks
help.gif Возникла такая проблема: АЦП высылает мне не то, что я хотел бы получить. Где-то косяк, скорее всего, наэлементарный. Но вот никак не разберусь где именно...

Код:

**************


static unsigned int tt;
static unsigned char al,ah;

void PORT_Init (void);
void Timer3_Init (int counts);
void Timer3_ISR (void);
void UART0_Init(void);
void Timer1_Init(void);
void ADC0_Init(void);
//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
void main (void) {

// disable watchdog timer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFIG_PAGE; // Switch to configuration page
PORT_Init ();

SFRPAGE = TMR3_PAGE; // Switch to Timer 3 page
Timer3_Init (SYSCLK / 12 / 10); // Init Timer3 to generate interrupts
// at a 10 Hz rate.
SFRPAGE = UART0_PAGE; // страница УАРТ
UART0_Init(); // инициализация УАРТ


SFRPAGE = TIMER01_PAGE;
Timer1_Init();

SFRPAGE = ADC0_PAGE;
ADC0_Init();

EA = 1; // enable global interrupts

SFRPAGE = LEGACY_PAGE; // Page to sit in for now

while (1) { // spin forever

}
}


void ADC0_Init()
{
ADC0CN = 0x80; // разрешить АЦП0, старт по "1" в BUSY
REF0CN |= 0x01; // внутренний источник опорного напряжения
EIE2 |= 0x02; // разрешение прерываний АЦП0
EIP2 |= 0x02; // высший приоритет у прерывания по завершению преобразования
}


void Timer1_ISR (void) interrupt 3
{
TF1 = 0; tt++; // clear TF1
if (tt == 5000) AD0BUSY = 1; // запускаем преобразование
if (tt==40000) { SBUF0 = ADC0L; tt=0; }
}

void ADC0_ISR (void) interrupt 15
{
AD0INT=0;
al = ADC0L; ah = ADC0H;
}



Может, выкачивать значения АЦП нужно в другом месте,а?
AndreyS
День добрый

А ноженьки у проца объеденены?? Ну я имею ввиду Verf и Vref0 (12 и 16). wink.gif


Удачи.
Moks
Спасибо, ты мне на вовово точка силабс точка ру подсказал. В пятницу попробую ваши подсказки. Эти выводы объеденинены на отладочной плате перемычкой, я проверял, замеряя напряжение. Всё равно огромное спасибо! laugh.gif
Moks
Всё, я разобрался. Подсказки были неверные, но всё равно огромное всем спасибо!
Moks
Немного не в кассу, но :

Я вот организовываю массив по принципу
static int code Massiv [1024];
и при присваивании какой-либо ячейки какой-то величине мне компилятор выдаёт ошибку "unmodifiable lvalue". Я как понимаю, этот массив организуется, но он не является изменяемым, так как прописывается в области кода и становится постоянным? А почему? Ведь высвободилась область, предназначенная только для ячеек массива?
Может ли это быть следствием кряка Кейля?

А когда я организовываю массив по принципу
static int Massiv [1024];
естественно, у меня не хватает области данных.

Как мне быть? Неужели единственный выход записывать, хранить, считывать данные массива на/в внешней памяти?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.