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

 
 
> Не работает АЦП Attiny461a в реальной схеме, в Протеусе работает.
Dimon84
сообщение Nov 3 2012, 14:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 4-08-12
Из: г.Чебоксары
Пользователь №: 73 015



АЦП в реальной выдает постоянно одно и тоже значение (0xFF) при любом напряжении на выводе ADC1.
В Протеусе все работает, а в реальной схеме нет.

Конфигурация вывода ADC1:
DDRA=0x00
PORTA=0x00

Инициализация АЦП:
Код:
ADCSRA |=(0<< ADATE); // Режим одиночного преобразования АЦП
ADCSRA |=(1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // Коэфф. деления предделителя АЦП =64
// частота преобраз.=62,5 кГц.
ADMUX |=(0<<REFS1) | (1<<REFS0)|(1<<ADLAR); // Внешний ИОН (1,23 В), подкл. к выводу
//AREF
DIDR0 |=(1<<ADC1D) |(1<<ADC2D)|(1<<AREFD); // Отключаем цифровые буферы на выводах
//считывания аналоговых сигналов (для уменьш. токопотребления)


Функция считывания данных с АЦП:
Код:
// Настройка входа для измерения напряжения
ADMUX &=~((1<<MUX5) | (1<<MUX4) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0)); // Обнуляем предыдущие настройки
ADMUX |=((0<<MUX5) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0)); // подкл. вход ADC1
ADCSRA|=(1<<ADEN); //Вкл. АЦП
ADCSRA|=(1<<ADSC); //Начать преобразование
while (!(ADCSRA &(1<<ADIF))) //Дождатся окончания преобразования
{
}
_delay_ms(100);
v=ADCL;
v=ADCH;
ADCSRA &=~(1<<ADEN); //Выкл. АЦП
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Артём_
сообщение Nov 3 2012, 14:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Эти строки вызывают сомнения:
Цитата(Dimon84 @ Nov 3 2012, 16:29) *
_delay_ms(100);
v=ADCL;
v=ADCH;
ADCSRA &=~(1<<ADEN); //Выкл. АЦП


потому что
Цитата
When initiating a single ended conversion by setting the ADSC bit in ADCSRA, the conversion
starts at the following rising edge of the ADC clock cycle.
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,
as shown in Figure 15-4 below.

Попробуйте не выключать АЦП после завершения преобразования.

И ещё вот это:
Цитата(Dimon84 @ Nov 3 2012, 16:29) *
v=ADCL;
v=ADCH;
ADCSRA &=~(1<<ADEN); //Выкл. АЦП

Получается что вы читаете в одну и ту же переменную - теряется ADCL.
Go to the top of the page
 
+Quote Post
Dimon84
сообщение Nov 3 2012, 14:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 4-08-12
Из: г.Чебоксары
Пользователь №: 73 015



Цитата(_Артём_ @ Nov 3 2012, 17:44) *
Получается что вы читаете в одну и ту же переменную - теряется ADCL.


А полезные данные находятся в ADCH.

Рекомендации данные выше не помогли.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 3 2012, 15:14
Сообщение #4


Гуру
******

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



Цитата из DS:
Цитата
ADIF is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, ADIF is cleared by writing a logical one to the flag.
Go to the top of the page
 
+Quote Post
Dimon84
сообщение Nov 3 2012, 15:19
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 4-08-12
Из: г.Чебоксары
Пользователь №: 73 015



Вот я и жду пока ADIF сбросться:
while (!(ADCSRA &(1<<ADIF)))
Go to the top of the page
 
+Quote Post



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

 


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


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