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

 
 
 
Reply to this topicStart new topic
> ADC Noise Reduction
white.wind
сообщение Jun 9 2006, 10:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 2-05-06
Из: Санкт-Петербург
Пользователь №: 16 707



Не получается съэмулировать (для начала) такой режим на VMLAB.

Из всех найденных описаний (рабочих примеров не встретил) я понял, что после установки режима проц должен остановится потом отработать прерывание ADC и продолжить выполнение основного кода. Делал так:

Код
...
ISR (ADC_vect)
{
    // Тут ничего
}
...

void main(void)
{
    init_uart();
    init_adc();

    sei();
    
    while(1)
    {

        ADCSRA |= (1<<ADSC);    // Запуск преобразования

        MCUCR |= (1<<7);        // Разрешение засыпания
        MCUCR |= (1<<SM0);    // Включение в ADC Noise Reduction

        uart_putchar(ADCH);        // ADCH, поскольку 8-ми разрядный режим.

    }
}


Пробовал разные вариации, первой была сначала разрешить засыпание, потом инициировать преобразование, потом включить режим ADC Noise Reduction. Все равно не получается.

Общая картина такова, не взирая на желание усыпить проц, он продолжает выполнять команды. Изредка цикл прерывается выполненным преобразованием.

Может быть инициировать преобразование после переключения в ADC NR режим? Но по идее, к этому времени он уже должен спать.

Подскажите как побороть этот режим help.gif

PS. Заметил странность VMLAB бит SE регистра MCUCR считает 6-тым, в то время как по ДШ он 7-ой (последний). Я пробовал и так и так. Камень - Atmega32.
Go to the top of the page
 
+Quote Post
otrog
сообщение Jun 9 2006, 10:58
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Насколько я себе это представляю, перед "uart_putchar(ADCH);" надо дать команду SLEEP(усыпить контроллер). А значение АЦП читать в прерывании.
Могу и ошибиться.

Сообщение отредактировал otrog - Jun 9 2006, 10:59


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Jun 9 2006, 11:07
Сообщение #3


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

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



вставка на ассемблере sleep необходима. В этом месте программа остановится до возникновения прерывания АЦП, дальше выполнение программы со следующей команды после sleep


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
white.wind
сообщение Jun 9 2006, 11:13
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 2-05-06
Из: Санкт-Петербург
Пользователь №: 16 707



Большое спасибо, про SLEEP я не подумал.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 9 2006, 14:26
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



строчку

MCUCR |= (1 << SE)|(1 << SM0)

Вынесите из цикла и разместите до sei();
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:24
Рейтинг@Mail.ru


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