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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Флаг ADIF регистра ADCSRA-в АЦП ATmega8-непонятно
serj32
сообщение Sep 27 2013, 14:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 25-01-13
Из: Брянск
Пользователь №: 75 345



Здравствуйте.Вот если перевести АЦП в непрерывный режим флаг ADIF установится сразу после окончания преобразования,но непонятно когда он сбросится , а ведь на очереди очередное преобразование.
Этот флаг необходимо програмно сбрасывать ,чтобы увидеть очередное преобразование.В даташите не увидел ответа.Благодарю всех ответившим.
Go to the top of the page
 
+Quote Post
ARV
сообщение Sep 27 2013, 14:56
Сообщение #2


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

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



он сбросится аппаратно в момент перехода на обработчик прерывания


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
serj32
сообщение Sep 27 2013, 15:23
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 25-01-13
Из: Брянск
Пользователь №: 75 345



Цитата(ARV @ Sep 27 2013, 18:56) *
он сбросится аппаратно в момент перехода на обработчик прерывания

Спасибо понятно.А можно ли считывать результат АЦП в любое время (Режим непрерывного преобразования) при считывании результата АЦП
ну вначале младший ADCL затем ADCH, при считывании младшего старший будет заблокирован пока и он не будет прочитан.И мне не надо ожидать окончания преобразования просто устройство примитивное-индикатор на 8 светодиодов.Для обучения.Спасибо.
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Sep 27 2013, 15:38
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



В том экземпляре даташита, что есть у меня, в описании флага ADIF сказано:
Alternatively, ADIF is cleared by writing a logical one to the flag.
А в непрерывном режиме без использования прерываний можете спокойно читать из регистра ADC в любое время sm.gif
Go to the top of the page
 
+Quote Post
ARV
сообщение Sep 27 2013, 18:57
Сообщение #5


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

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



для обучения лучше делать правильно, а не "как-нибудь". считывать ADC до завершения преобразования все равно что определять время по компасу - оно то, конечно, можно, но бессмысленно...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
serj32
сообщение Sep 27 2013, 20:33
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 25-01-13
Из: Брянск
Пользователь №: 75 345



Цитата(ARV @ Sep 27 2013, 22:57) *
для обучения лучше делать правильно, а не "как-нибудь". считывать ADC до завершения преобразования все равно что определять время по компасу - оно то, конечно, можно, но бессмысленно...


А если так.Дождаться когда завершится преобразование-Флаг ADIF установится,далее програмно сбросим ADIF и "поработаем" со светодиодами потом снова на метку-("Дождаться когда завершится преобразование-Флаг ADIF установится")
Или по прерыванию от АЦП и уже обработчик прерывания будет зажигать светодиоды.
Go to the top of the page
 
+Quote Post
V_G
сообщение Sep 27 2013, 23:31
Сообщение #7


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Идея топикстартера корректно реализуема в atxmega, причем даже в многоканальном варианте. АЦП работает сам по себе в непрерывном режиме (и даже последовательно опрашивая каналы), а пользователь в произвольные моменты времени считывает специальные буферные регистры требуемого канала, в которых хранится последний результат преобразования по каналу.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 28 2013, 06:55
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (serj32 @ Sep 27 2013, 22:33) *
А если так.Дождаться когда завершится преобразование-Флаг ADIF установится,далее програмно сбросим ADIF и "поработаем" со светодиодами
Именно так и нужно делать (если без прерываний). Или так: Проверили флаг ADIF, если он еще не установлен - пошли, недолго поделали что-нибудь полезное. Потом снова вернулись на проверку флага.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Sep 28 2013, 07:51
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Цитата(ARV @ Sep 27 2013, 22:57) *
для обучения лучше делать правильно, а не "как-нибудь". считывать ADC до завершения преобразования все равно что определять время по компасу - оно то, конечно, можно, но бессмысленно...

Для задачи топикстартера - вовсе не бессмысленно - читаем непрерывно, непрерывно индицируем, и нам пофигу, что мы 10 (100 или 1000) раз отобразили значение предыдущего измерения sm.gif
Go to the top of the page
 
+Quote Post
ARV
сообщение Sep 28 2013, 13:30
Сообщение #10


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

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



Цитата(RabidRabbit @ Sep 28 2013, 11:51) *
Для задачи топикстартера - вовсе не бессмысленно - читаем непрерывно, непрерывно индицируем, и нам пофигу, что мы 10 (100 или 1000) раз отобразили значение предыдущего измерения sm.gif

вы уверены, что считывая регистр ADC до завершения очередного преобразования мы получим результат предыдущего завершенного преобразования?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 28 2013, 21:03
Сообщение #11


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(V_G @ Sep 28 2013, 03:31) *
АЦП работает сам по себе в непрерывном режиме (и даже последовательно опрашивая каналы), а пользователь в произвольные моменты времени считывает специальные буферные регистры требуемого канала, в которых хранится последний результат преобразования по каналу.


Подскажите, пожалуйста, как называются эти "специальные буферные регистры"?
Кандидатов на эту роль вижу два:
ADCA.CH1.RES
ADCA.CH1RES
Который из?
Go to the top of the page
 
+Quote Post
V_G
сообщение Sep 28 2013, 22:52
Сообщение #12


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Названия регистров различаются в Си и ассемблере (я из тех извращенцев, что предпочитают ассемблер). Тем не менее, указанные Вами регистры имеют разные адреса, и в этом заключается фишка (содержимое регистров одинаковое).
Конкретно, в ассемблерном варианте, адреса регистров, принадлежащих одному каналу:
ADCA_CH0_CTRL,
ADCA_CH0_MUXCTRL,
ADCA_CH0_INTCTRL,
ADCA_CH0_INTFLAGS,
ADCA_CH0_RES,
идут подряд друг за другом, позволяя организовать обращение к общему блоку регистров канала (например, через DMA).

С другой стороны, адреса регистров
ADCA_CH0RES,
ADCA_CH1RES,
ADCA_CH2RES,
ADCA_CH3RES
также идут последовательно, что позволяет организовать блоковое обращение к регистрам результата всех каналов.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 28 2013, 23:09
Сообщение #13


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(V_G @ Sep 29 2013, 02:52) *
Названия регистров различаются в Си и ассемблере (я из тех извращенцев, что предпочитают ассемблер). Тем не менее, указанные Вами регистры имеют разные адреса, и в этом заключается фишка (содержимое регистров одинаковое).
Конкретно, в ассемблерном варианте, адреса регистров, принадлежащих одному каналу:
...
ADCA_CH0_RES,
идут подряд друг за другом, позволяя организовать обращение к общему блоку регистров канала (например, через DMA).

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


Я не об этом спрашивала. Меня интересует, откуда брать готовые данные. Из ADCA_CH0_RES или из ADCA_CH0RES? Тем более, если, по вашим словам, это имена не синонимы, а "имеют разные адреса".
Go to the top of the page
 
+Quote Post
V_G
сообщение Sep 29 2013, 00:48
Сообщение #14


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Ну так я написал же, что содержимое регистров одинаковое. Откуда хотите, оттуда берите.
Этот вопрос я задавал еще в конце 2008 в техподдержку Атмела. Вот их ответ:

The two registers in ATxmega64A3def.inc (ADCA_CH0RES/ADCA_CH0_RES) are actually holding the same result from the ADC. The reason for having this is to enable easier C-code implementation.
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Sep 29 2013, 11:50
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Цитата(ARV @ Sep 28 2013, 17:30) *
вы уверены, что считывая регистр ADC до завершения очередного преобразования мы получим результат предыдущего завершенного преобразования?

В случае с одним каналом - да, абсолютно уверен. А что, в регистрах ADC есть битовый флаг "данные в регистре ADC протухли и содержат случайный набор битов"?
Go to the top of the page
 
+Quote Post

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

 


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


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