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

 
 
> Переключение между каналами АЦП, ATmega32
B_Sergey_N
сообщение Sep 28 2008, 18:41
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 28-07-08
Из: г. Санкт-Петербург
Пользователь №: 39 246



Всем привет.
Как можно переключаться между каналами АЦП? К примеру, мне необходимо:
сделать преобразование, прочитать один канал (Vbg), затем опять сделать преобразование и прочитать канал ADC0.

Выкладываю код, переключения между каналами не происходит.

Код
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16000000

int i, flag, t;

void main(void)
{

DDRA |= (1 << 1)|(1 << 2)|(1 << 6)|(1 << 7);         // Инициализация светодиодов

ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Установка частоты преобразования 125KHz

ADCSRA |= (1 << ADEN);              // Вкл. АЦП

ADCSRA |= (1 << ADIE);              // Разрешение прерывания от компаратора
sei();


    for(;;)
    {
        
    flag = 1;
    ADMUX |= (1 << 1)|(1 << 2)|(1 << 3)|(1 << 4);     // Выбор входного канала АЦП - Vbg
                ADCSRA |= (1 << ADSC);        // Запуск преобразования
        

                                flag = 0;
        ADMUX |= 0;             // Выбор входного канала АЦП - ADC0
        ADCSRA |= (1 << ADSC);        // Запуск преобразования
    }

}

//********************************************************************************//

ISR(ADC_vect)
{
        
         if (flag == 1)
            {
             i = ADCL;        // Чтение младших 8 битов первыми
             i += (int)ADCH << 8;    // Чтение старших 2 битов, умножение их на 256 и сложение с мл. б.
            
            if (i < 255)
            {
            // Питание контроллера падает
            _delay_ms(200);

            PORTA |= (1 << 6);
        
            _delay_ms(200);
        
            PORTA &= ~(1 << 6);
            }
            }

    
    if (flag == 0)
    {
        
    t = ADCL;        // Чтение младших 8 битов первыми
    t += (int)ADCH << 8;    // Чтение старших 2 битов, умножение их на 256 и сложение с мл. б.
        
        if (t < 830)
        {
        _delay_ms(200);

        PORTA |= (1 << 1);
        
        _delay_ms(200);
        
        PORTA &= ~(1 << 1);
        }
            
            else
            {
                
                _delay_ms(200);

                PORTA |= (1 << 2);
        
                _delay_ms(200);
        
                PORTA &= ~(1 << 2);
            }

    }


}


Не знаю, необходим ли reti из прерывания?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
domowoj
сообщение Oct 7 2008, 14:29
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Вот на русском, почти даташиит(хотя и не без ошибок)
Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel
http://lord-n.narod.ru/walla.html

Первое преобразование на один такт больше.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Николай Иванович...
сообщение Oct 7 2008, 18:35
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 139
Регистрация: 26-09-08
Пользователь №: 40 510



Цитата(domowoj @ Oct 7 2008, 18:29) *
Первое преобразование на один такт больше.

Не на один, а на 12. Курите датушит.
A normal conversion takes 13 ADC clock cycles. The first conversion after the ADC is
switched on (ADEN in ADCSRA is set) takes 25 ADC clock cycles in order to initialize
the analog circuitry.


Цитата(singlskv @ Oct 7 2008, 22:22) *
для худшего случая, те fADC=200Кгц,

200кГц - это не худший случай, а номинальный. Худший - это Fadc=1МГц и большое выходное сопротивление источника сигнала
Go to the top of the page
 
+Quote Post
singlskv
сообщение Oct 7 2008, 18:46
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Николай Иванович Приходько @ Oct 7 2008, 22:35) *
200кГц - это не худший случай, а номинальный. Худший - это Fadc=1МГц и большое выходное сопротивление источника сигнала
для 200кГц 10бит номинально
для 1МГц 8бит,
так что примерно один фиг, доп. 12 тактов fADC хватит в любом варианте...
А большое выходное сопротивление источника сигнала...,
дык даташит его однозначно регламенирует:
The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or
less.

Так что если у Вас больше, это Ваши сложности...
Go to the top of the page
 
+Quote Post
Николай Иванович...
сообщение Oct 7 2008, 19:01
Сообщение #5


Частый гость
**

Группа: Новичок
Сообщений: 139
Регистрация: 26-09-08
Пользователь №: 40 510



Цитата(singlskv @ Oct 7 2008, 22:46) *
для 200кГц 10бит номинально
для 1МГц 8бит,
так что примерно один фиг, доп. 12 тактов fADC хватит в любом варианте...

12 тактов при Fadc=1МГц длятся по времени в 5 раз меньше чем при Fadc=200кГц.
А Вы говорите "один фиг".

А если брать в расчёт нижнюю границу "нормы" 50 кГц... 200кГц, то и в 20 раз

Сообщение отредактировал Николай Иванович Приходько - Oct 7 2008, 19:04
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- B_Sergey_N   Переключение между каналами АЦП   Sep 28 2008, 18:41
- - Николай Иванович Приходько   Не забывайте делать задержку после включения ADC б...   Sep 28 2008, 19:02
|- - singlskv   Цитата(Николай Иванович Приходько @ Sep 28 20...   Oct 4 2008, 20:38
|- - Николай Иванович Приходько   Цитата(singlskv @ Oct 5 2008, 00:38) Стра...   Oct 7 2008, 09:03
|- - VladimirYU   Цитата(Николай Иванович Приходько @ Oct 7 200...   Oct 7 2008, 12:33
|- - singlskv   Цитата(Николай Иванович Приходько @ Oct 7 200...   Oct 7 2008, 18:22
- - smac   Цитата(B_Sergey_N @ Sep 28 2008, 22:41) ....   Sep 28 2008, 21:23
- - SysRq   0) F_CPU следует определить в makefile, или до вкл...   Sep 28 2008, 22:36
- - domowoj   Я не силен в СИ, но после каждого ночала преобразо...   Sep 29 2008, 02:09
- - VladimirYU   Цитата(B_Sergey_N @ Sep 28 2008, 22:41) В...   Sep 29 2008, 09:47
- - hainiken   по ДШ вроде 125 мкС мин. паузу рекомендуют, а напр...   Oct 4 2008, 20:15
- - domowoj   УВХ начинает работать вместе с АЦП, на то оно и УВ...   Oct 5 2008, 14:22
|- - singlskv   Цитата(domowoj @ Oct 5 2008, 18:22) УВХ н...   Oct 5 2008, 15:47
- - domowoj   На конденцаторе хранения УВХ напряж.запоминается в...   Oct 5 2008, 16:21
|- - singlskv   Цитата(domowoj @ Oct 5 2008, 20:21) На ко...   Oct 5 2008, 16:43
- - B_Sergey_N   Большое спасибо всем за ответы!!! Особ...   Oct 5 2008, 17:31
- - rudy_b   Что-то я не понимаю, вы про какой проц говорите? Е...   Oct 5 2008, 18:23
|- - singlskv   Цитата(rudy_b @ Oct 5 2008, 22:23) Что-то...   Oct 5 2008, 18:34
- - domowoj   Вывод! Делай все как надо - и не будет никаких...   Oct 6 2008, 00:34
|- - singlskv   Цитата(Николай Иванович Приходько @ Oct 7 200...   Oct 7 2008, 19:10
- - domowoj   Цитата(Николай Иванович Приходько @ Oct 8 200...   Oct 8 2008, 03:18


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

 


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


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