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

 
 
> Работа с АЦП на МК ADuC814
bragol
сообщение Nov 15 2011, 08:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 15-08-11
Пользователь №: 66 729



Пишу пробный вариант программы для работы с АЦП
(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);
    }

}


В чем может быть моя ошибка?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bragol
сообщение Nov 16 2011, 07:06
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 15-08-11
Пользователь №: 66 729



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

И еще вряд ли это от МК, проверил на 2-ух разных результат один и тот же, но и на программу грешить не могу, потому что за основу брал исходники производителей
Go to the top of the page
 
+Quote Post



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

 


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


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