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

Работа с АЦП на МК ADuC814

Пишу пробный вариант программы для работы с АЦП

(1) Настройка последовательно порта для вывода результатов преобразования

(2) Настройка регистров АЦП

(3) Произвести преобразование

(4) Вывести результат на UART

 

На реальной микросхеме почему-то не работает пробовал и стандартные методы, за основу которых взяты примеры с сайтов производителей и через прерывания пробую, тоже не выдает данные на гипер терминал

 

Вот через прерывание:

#include <ADUC814.H>
#include <stdio.h>

sbit BLINK = P3^3;

void pause (int i)
{
    while ( i > 0 )
        --i;
}

void ADC_int () interrupt 6
{
        printf("\n%02BX%02BX\n", ADCDATAH, ADCDATAL);
        return;
        /*
        while (ADCCON3 & 0x80);
        BLINK = ~BLINK;
        if(ADCDATAL != 0 || ADCDATAH != 0)
            printf("We Have Some DATA!");
        pause(10000);*/
}


void main (void)
{
    int CHAN = 0;
//    unsigned char chan_2_convert;

/*-----------------------------------------------
Configure the serial port to run at 9600 Baud.
-----------------------------------------------*/
    PCON = 0x80;
    PLLCON = 0x30;
    SCON = 0x50;
    TMOD |= 0x20;
    TH1 = 0xF7;
    TR1 = 1;
    TI = 1; 
/*-----------------------------------------------
Configure the A/D to sequentially convert each
input channel.
-----------------------------------------------*/
    ADCCON1 = 0x80;
    ADCCON2 = CHAN;
    EA = 1;
    EADC = 1;

    while (1)
    {    
        SCONV = 1;
        BLINK = ~BLINK;
        pause(10000);        
    }

}

 

Вот другим способом, тут пытался подать напряжение Vref, программно:

#include <ADUC814.H>
#include <stdio.h>


void pause (int i)
{
    while ( i > 0 )
        --i;
}

void main (void)
{
    unsigned char chan_2_convert;

/*-----------------------------------------------
Configure the serial port to run at 9600 Baud.
-----------------------------------------------*/
    PCON = 0x80;
    PLLCON = 0x30;
    SCON = 0x50;
    TMOD |= 0x20;
    TH1 = 0xF7;
    TR1 = 1;
    TI = 1; 
/*-----------------------------------------------
Configure the A/D to sequentially convert each
input channel.
-----------------------------------------------*/
ADCCON1 = 0x80;
ADCCON2 = 0x1C;


    while (1)
    {

        unsigned int conv_val;

/*-----------------------------------------------
Start a conversion and wait for it to complete.
-----------------------------------------------*/
        chan_2_convert = 0;// (chan_2_convert + 1) % 6;
//  ADCCON2 = (ADCCON2 & 0xF0) | chan_2_convert;
        SCONV = 1;
        while (ADCCON3 & 0x80);
        pause(10000);
/*-----------------------------------------------
Read A/D data and print it out.
---------------------------------------------*/
        conv_val = ADCDATAL | ((ADCDATAH & 0x0F) << 8);
        printf ("ADC Channel %bu = 0x%4.4X\r\n", chan_2_convert, conv_val);
    }

}

 

В чем может быть моя ошибка?

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


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

...не выдает данные на гипер терминал... В чем может быть моя ошибка?

Так, какая у Вас проблема? Ничего не выдаётся на терминал? Или выдаются неверные результаты измерения АЦП?

 

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


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

Так, какая у Вас проблема? Ничего не выдаётся на терминал? Или выдаются неверные результаты измерения АЦП?

На терминал ничего не выводится, в симуляторе либо одни нули, чего судя по всему быть не может, либо 0х0FFF если программно подключаю Vref 2,5V. Такой результат и в первом и во втором варианте, по сути АЦП вообще ничего не делает, иначе на терминал выводилось бы 0х0FFF при подключенном опорном напряжении или нечто стремящееся к нулю, второй день уже бьюсь пробовал и в режиме разового преобразования и в режиме постоянного.

 

Может быть что на МК АЦП не работает??? Я понимаю, что скорее всего где-то я ошибся и этот вариант можно рассматривать самым последним, но все равно мне просто интересно может ли на МК выйти из строя какой-то один блок, а не весь целиком.

 

 

И еще такой немаловажный момент, я ради интереса скачал программу с сайта производителя на мой адук814 с разовым преобразованием и при ее запуске диод вместо того, чтоб мигать просто постоянно горит, да и вольтметром проверяли, он показывает постоянное напряжение, а должен скакать, получается, что у них тоже неправильная программа??? Что на мой взгляд маловероятно

Изменено пользователем bragol

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


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

выше я немного ошибся на терминал все-таки выводятся нули, а 0х0FFF только в кейловском симуляторе.

 

И еще вряд ли это от МК, проверил на 2-ух разных результат один и тот же, но и на программу грешить не могу, потому что за основу брал исходники производителей

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


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

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

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

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

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

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

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

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

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

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