Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ATmega16 и его АЦП по полочкам. Прошу разъяснить нюансы... 
V
    Опции темы
tima705
Дата 29.10.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2007

Репутация: нет
Всего: нет



Здравствуйте, уважаемые. Прошу Вас "разжевать" мне работу с АЦП на меге16. Очень хочется, а инет не дал нужной инфы.. Буду очень признателен.


Код: 
Код

#include <mega16.h>

unsigned int PARAM = 0; // Я так понимаю АЦП возвращает значение от 0 до 1023, поэтому тип переменной такой.

interrupt [ADC_INT] adc_isr()
{
PARAM = 
// Здесь не знаю, как получить занчения с регистров АЦП
};




void main(void)
{

// Вот это ОЧЕНЬ прошу разжевать..

ADCSRA=0x8E; // Это зависит от кварца, деления частоты для АЦП, и собсна включения АЦП (на сколько я понял, перерыв инет)
// А вот как мне выставить опеределенные занчения кварца, делителя - не могу найти. должна же быть какая-то таблица..
// или типа каждая группа бит отвечает за то-то.. И лучше для понимания в двоичном.. Можно ж?

ADMUX=0; // вход АЦП ADC0 (ножка PA0) и внешнее опорное напряжение с ножки AREF  
// тоже самое.. А как мне выставить, например, PA2 (38 ножка меги16)?


#asm("sei") // разрешения прерывания локального.. тоже не понимаю как работает.

// запускаем первое АЦП 
ADCSRA|=0x40;


while (1) {

// Здесь будет что-то типа Writeln(PARAM); ))


};}


/*
И еще такой вопрос. Обязательно ли обращаться к АЦП в прерывании?  Нельзя ли это делать в главной функции, когда это необходимо. 

Типо 
void main(void)
{
PARAM = АЦПМК
if (PARAM > 0) {..}
}
*/


Думаю, вопросы понятны... Спасибо заранее!


Это сообщение отредактировал(а) tima705 - 29.10.2011, 13:17
PM MAIL   Вверх
Mazzi
Дата 31.10.2011, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



На сайте производителя есть файлы-аппноуты для каждого микроконтроллера с примерами работы для всех внутренних устройств. Почитайте, узнаете много нового для себя.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
tima705
Дата 31.10.2011, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2007

Репутация: нет
Всего: нет



Цитата(Mazzi @ 31.10.2011,  14:39)
На сайте производителя есть файлы-аппноуты для каждого микроконтроллера с примерами работы для всех внутренних устройств. Почитайте, узнаете много нового для себя.

Обычно такие ответы и поступают. 
Mazzi, я в первую очередь покопался на atmel.com... Я очень плохо понимаю юсовский, вытекающе и даташиты с переводов на 20% курю.. Что ессно не достаточно. С программированием АВР на си сталкивался единожды.. СИ же с исходников вообще туго)) (Ближе паскаль-делфи..) Вот и прошу именно "разжевать".. "на пальцах", что называется.. Я бы не стал создавать ветку, если бы смог разобраться сам. Вопросы вполне конкретные, прошу Вас уделить мне немного времени на разъяснение сих) Спасибо.
PM MAIL   Вверх
UniBomb
Дата 1.11.2011, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



Цитата(tima705 @  31.10.2011,  21:37 Найти цитируемый пост)
С программированием АВР на си сталкивался единожды.. СИ же с исходников вообще туго)) (Ближе паскаль-делфи..)

Не надо лукавить smile Вопросы из первого сообщения не имеют никакого отношения к языку и связаны исключительно с непониманием работы мк. 

Цитата(tima705 @  29.10.2011,  12:44 Найти цитируемый пост)
// Я так понимаю АЦП возвращает значение от 0 до 1023, поэтому тип переменной такой.

 smile 

Цитата(tima705 @  29.10.2011,  12:44 Найти цитируемый пост)
// Здесь не знаю, как получить занчения с регистров АЦП

Результат преобразования хранится в двух регистрах - ADCH и ADCL. Но разные реализации стандартной библиотеки могут немного упрощать работу. Так например в avr-libc, идущей в комплекте к avr-gcc результат сохраняется в переменную ADCW.

Цитата(tima705 @  29.10.2011,  12:44 Найти цитируемый пост)
// Это зависит от кварца

Это не зависит от кварца. 

Цитата(tima705 @  29.10.2011,  12:44 Найти цитируемый пост)
// А вот как мне выставить опеределенные занчения кварца

Никак. Кварц определённой частоты впаивается и не изменяется. Тут более уместен другой вопрос - а как выбрать необходимый режим тактирования? С помощью fuse-битов CKSEL3...CKSEL0

Цитата(tima705 @  29.10.2011,  12:44 Найти цитируемый пост)
А как мне выставить, например, PA2 (38 ножка меги16)?

Управление мультиплексором (т.е. выбор "ножки" считывания) осуществляется битами MUX3...MUX0. Для выбора ADC2 в эти быти надо записать значение 0010(2)

Цитата(tima705 @  29.10.2011,  12:44 Найти цитируемый пост)
// разрешения прерывания локального

Разрешение общего прерывания. Без установки бита I регистра SREG (что и делает эта команда) ни одно прерывание не сработает.

Цитата(tima705 @  29.10.2011,  12:44 Найти цитируемый пост)
Обязательно ли обращаться к АЦП в прерывании? Нельзя ли это делать в главной функции, когда это необходимо. 

Можно обращаться в любой момент времени и в любой части программы. Но ведь прерывания не просто так придумали. О наступлении момента "когда это необходимо" можно узнать либо по прерыванию, либо при постоянном опросе регистров состояния модуля. В зависимости от задачи постоянный опрос может быть не приемлем, потому что за это время можно сделать кучу другой полезной работы.


И на будущее - не задавай вопросы в таком виде, т.к. это как видишь приводит к оверквоттингу. И совсем на будущее - купи себе эту книгу. В ней содержится вся необходимая информация, т.к. она представляет из себя обобщённый перевод оригинальных даташитов.



--------------------
PM MAIL ICQ Skype   Вверх
tima705
Дата 2.11.2011, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.6.2007

Репутация: нет
Всего: нет



Все-таки придется самому)) За книгу спасибо! Уже читаю. ОЧЕНЬ полезная книга.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0681 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.