roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 21:00

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 16:47 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Новичек. Изучаю контроллеры.
В наличие атмега32. С ней и экспериментирую.
Светодиодами моргать научился, сервами рулить тоже, пищать, кнопки, прерывания, таймеры.

Изучаю АЦП. И тут возникли грабли. курс 123авр читал, задачу 9 и другие тоже. В поиске сижу 2й день, безрезультатно.

Пытаюсь по мотивам сделать простую вещь:
переменный резистор на 10к. середина к PA7, края к +5в и земле.

Прога:
Код:
#include <mega32.h>

int adc_complete;
unsigned char adc_data;

main() {
PORTA=0x00;DDRA=0xFF; // Настройка порта А

// Настройка АЦП
ADMUX = 0b01000111;
ADCSRA=0b10111111;

#asm("sei")
       
while(1)
{
        adc_complete = 0;
        // Старт АЦП
        ADCSRA |= 0x40;               
        // Ждем
        while(adc_complete==0);
}

}

interrupt [ADC_INT] void adc_isr() {
        adc_data = ADCH;
        PORTA = adc_data>>4;
        adc_complete = 1;
}



Алгоритм (желаемый)
1)Настроиваем порт А и АЦП.
2)Запускаем АЦП преобразование.
3)Ждем пока оно отработает в прерывании
4)Повторяем все сначала

Внутри прерывания получаем 8-и битное значение и старшие 4 бита выводим на светодиоды, подключенные к 0-3 битам порта А.

Т.е. крутим резистором, светодиоды показывают уровень сигнала (с точностью 16 градаций)

Прога не работает. Светодиоды всегда выключены. Хотя прерывания обрабатывается. Все как бы работает, но всегда получаем 0 в результате преобразования.
Меня смущает описание битов REFS0,1 региста ADMUX. Я выбрал вариант - AVCC с внешним конденсатором на AREF.
Но к AREF у меня ничего не подключено. Может в этом ошибка? Или неправильно настроен порт А? Возможно бит 7 порта А (к которому подключен резистор) нужно настроить на вход? (я думал он сам перенастраивается в нужный режим при работе АЦП).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 17:59 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
для начала подключи и настрой AREF на 5В


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 18:16 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Он пишет что AREF у него и настроено на AVCC.

Тогда убедится что есть питание на AVCC и замерить напряжение на AREF - оно должно быть как AVCC и на AREF кондерчик всеж повесить по правилам ,01 - 1 мкФ

Проще всего проверить в PROTEUS в чем дело.

Я на взгляд не могу точно сказать правильно ли выбран канал в admux

Строчку PORTA = adc_data>>4;

замени на вывод числа и проверь горит ли эта комбинация на светодиодах.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 18:47 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Светодиоды горят, я уж все перепроверил.
EdGull писал(а):
для начала подключи и настрой AREF на 5В

Вот это место мне как раз и непонятно.
AREF у меня висит в воздухе.
AVCC соединена с +5.
Настроить AREF - это что имелось в виду?

Вообще в ДШ написано что конденсатор на AREF ставится для повышения точности (в моем случае использования 4х старших бит должно быть пофигу). И кстати куда этот конденсатор вешается? С ножки AREF на землю? Или на +5? Сколько искал, везде говорят "подключите и все". Куда его подключать... непонятно. Но у народа в примерах и без него все работает.

Канал в ADMUX выбран правильно.
Код:
//        ++ - Эти 2 бита - опорное напряжение берется с AVCC
//        ||   +++ - Эти 3 бита - номер канала на порту А. Т.е. ADC7 - старший бит А
ADMUX = 0b01000111;
//           ++ - Эти 2 бита - Прямое преобразование и нет усиления (в DIP один фиг не поддерживается)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 18:48 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
1. Кондер с AREF на землю
2. AREF на 5В
3. AVCC на 5В


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 18:59 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
А ADLAR кто ставить будет? Без него старшие 4 бита в ADCH всегда нули...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 19:33 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
HarryStar писал(а):
Сколько искал, везде говорят "подключите и все". Куда его подключать... непонятно.


А вы в даташите посмотрите. Там НАРИСОВАНО !

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 21:05 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
А вы уверены, что читаете из ацп ОБА байта результата? Если прочитать только один - работать не будет.
Ну и ногу AREF соединить не забудьте с питанием. Опорник то берется с нее, но чтобы чтото взять - надо сперва это иметь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 22:27 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
avr123.nm.ru писал(а):
А вы в даташите посмотрите. Там НАРИСОВАНО !

Неправда. Нет там схемы. Там много логических схем "как оно работает". А схемы подключения с конденсатором нету. ДШ у меня открыт постоянно, я уж половину наизусть выучил.
Radist писал(а):
А вы уверены, что читаете из ацп ОБА байта результата? Если прочитать только один - работать не будет.

Почему не будет? Там для этого есть выравнивание. И можно брать только 1 байт, с потерей точности до 8 бит. Даже мастер кода КодеВижн генерит такой пример если поставить галочку "8бит".
EdGull писал(а):
1. Кондер с AREF на землю
2. AREF на 5В

Во! Спасибо. Завтра на работе попробую первым делом. Видимо это очевидно опытным людям, но впрямую это мало где написано. Я не нашел по крайней мере.
Radist писал(а):
Ну и ногу AREF соединить не забудьте с питанием. Опорник то берется с нее, но чтобы чтото взять - надо сперва это иметь.

Я просто выбрал вариант REFS1=0 REFS0=1 - "AVCC with external -||- at AREF pin"
И соотв. думал, что опорное напряжение берется с пина AVCC, а AREF подключать к питанию необязательно.
Чем же тогда это будет отличаться от REFS1=0 REFS0=0 - "AREF, Internal Vref turned off" ? Если в обоих случаях опорное напряжение берется с ножки AREF?

Сорри, что много буков, просто хочется разобраться в неоднозначных вещах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 22:59 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
И тем не менее, хоть вы и берете только 8 бит и выравниваете по старшему байту - читать надо оба байта результата. Младший можно прочитать и тут же забыть о нем, но процедура чтения из младшего байта ОБЯЗАТЕЛЬНА (хотя в даташите пишут что и не обязательно). Порядок тоже имеет значение - сперва читаем младший байт. Насчет опорника может вы и правы, просто я привык эти биты обнулять, а снаружи пару выводов закоротить и все. Кстати, в даташите разве нет примера работы с ацп на асме и си?
На что еще нужно обратить внимание:
- номер канала, делитель тактовой частоты.
Я бы пока не лез в прерывания, сперва отладил бы преобразование. Вроде все просто: в два регистра записать, один бит проверять, один регистр прочитать. Когда найдете ошибку - будете долго смеяться, потому что ацп этот с программной точки зрения очень простой, работает всегда. Сам сишным кодом поделиться не могу (пишу на асме), поэтому в вашем коде с трудом разбираюсь. Что еще меня смущает: входы ацп вроде на порту А, и светодиоды на порту А. И напоследок вопрос на засыпку: к AVCC вы подключили +5В?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 23:10 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
HarryStar писал(а):
Нет там схемы. Там много логических схем "как оно работает". А схемы подключения с конденсатором нету. ДШ у меня открыт постоянно, я уж половину наизусть выучил.


=


Вложения:
adc.png
adc.png [ 88.72 КиБ | Просмотров: 1913 ]

_________________
Читайте !
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 23:13 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
HarryStar писал(а):
Во! Спасибо. Завтра на работе попробую первым делом. Видимо это очевидно опытным людям, но впрямую это мало где написано. Я не нашел по крайней мере.


вот же написано
0 1 AVCC with external capacitor at AREF pin

2авр123: Речь шла о конденсаторе на опорнике, в приведенном рисунке его действительно нет.

ЗЫ. Когда проблема будет решена (я в этом уверен) - напишите, пожалуйста, в чем было дело.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 23:33 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Дак он спрашивает КУДА подключть второй вывод кондера. На рисунке ведь показано куда.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 29 ноя 2010, 23:39 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
В том и дело, что никакого конденсатора, подключенного к AREF на картинке нет. И вообще AREF там никуда не подключено, как и у меня.
Radist писал(а):
читать надо оба байта результата

Ужас. Я вообще думал, что от факта чтения ничего не зависит. Попробую.
Radist писал(а):
- номер канала, делитель тактовой частоты.

Вот кстати! На что влияет частота АЦП? На время "усреднения" результата?
Я правильно понимаю, что в случае 500 кГц время преобразования 2 мкс, а в случае скажем 1000Гц время преобразования 1 мс?
Radist писал(а):
к AVCC вы подключили +5В?

Да, конечно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП
СообщениеДобавлено: 30 ноя 2010, 07:09 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Насчет деления частоты. В даташите сказано примерно так: ацп работает по своим тактам (те самые 13 тактов). Их частота должна быть 50-250 кГц. Они получаются из основной частоты делением (на 2, ....64....в даташите написано). То есть в зависимости от вашего кварца нужно делить на определенное число (сейчас у вас делитель максимальный). Для 8 МГц делить нужно на 64. При этом время преобразования составит около 100 мкс.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO