Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 05.10.2016
Сообщений: 51
1

АЦП ATmega328 и функции генерируемые CodeVisionAVR

09.05.2017, 15:41. Показов 2699. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
CV для работы с АЦП генерирует функцию:unsigned int read_adc(unsigned char adc_input) . Функция понятно обьявляется до main. Потом ,если я правильно понимаю, ее надо вставит в main и заменить (unsigned char adc_input) на номер канала с которого надо считывать напряжение. Но что бы я в скобочки не писал (ADC5; или (1<<3 | 1<<1)) компилятор меня тупо посылает ....читать букварь. Код примерно такой (инициализацию портов, прескалера и т.д. выкинул для краткости)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <mega328p.h>
#include <delay.h>
// Declare your global variables here
// Voltage Reference: REFS1-0 AVCC pin опорное AVCC питания, ADLAR результат по левому краю
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
// а вот тут как я понимаю вместо adc_input надо выставить биты MUX 3-0 для выбора входа ADC5-0????
// но это тут надо делать или в main ??????
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion запускаем преобразование
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete ждем по завершении установки флага в ADIF
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF); // сбрасываем флаг и возвращаем результат
return ADCW;
}
void main(void)
{
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
// ADC4: On, ADC5: Off отключаем цифровой буфер на ADC5- c него считываем
DIDR0=(1<<ADC5D) | (0<<ADC4D) | (0<<ADC3D) | (0<<ADC2D) | (0<<ADC1D) | (0<<ADC0D);
ADMUX=ADC_VREF_TYPE;
// прерывания ADIЕ запрещены
ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
//режим непрерывного преобразования
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
while (1)
      {
          unsigned int read_adc(unsigned char adc_input) ;
   PORTB =ADCW;
      }
}
в общем Who is (unsigned char adc_input) на что его заменить если мне надо считывать с ADC5
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2017, 15:41
Ответы с готовыми решениями:

Мултиплексор АЦП Atmega328
Всем доброго времени суток. Такое недопонимание у меня возникло: сколько разрядов имеет...

Atmega328, проблемы с АЦП
Здравствуйте, народ. Какие могут быть идеи по следующим симптомам: - всегда 1023 - сам МК...

Симуляция работы АЦП в AtmelStudio 7 на ATmega328
Можно как то организовать симуляцию работы АЦП в 7-ке, чтобы какие то результаты преобразования в...

Функции класса, генерируемые по-умолчанию
по дефолту мы получаем default constructor copy constructor copy assignment operator move...

3
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
09.05.2017, 17:52 2
Это, как вы верно поняли, номер канала АЦП. Чтобы преобразовать сигнал, поданный на ADC5, нужно сделать так:
C
1
MojaPeremennaja= read_adc(5);
Добавлено через 1 минуту
Да, и не забудьте, что функция возвращает int, а не char.
1
1 / 1 / 0
Регистрация: 05.10.2016
Сообщений: 51
10.05.2017, 08:23  [ТС] 3
Еще вопросик по то ли регистру то ли переменной ADCW в #define-сах посмотрел, вроде адрес 0х77 но такой адрес у ADCL младшего регистра хранения результата (у ADCH адрес 0х78). Как такое может быть?
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
10.05.2017, 10:03 4
W адресует слово, а не байт. Слово перекрывает адреса 77 и 78 (доверюсь вашему сообщению о числах, лень проверять).
1
10.05.2017, 10:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2017, 10:03
Помогаю со студенческими работами здесь

CodeVisionAVR функции TWI
Здравствуйте! Есть у кого нибудь, или, если знаете, где взять подскажите ссылку на описание функций...

Как связать таймер с АЦП и АЦП с DMA?
Вообщем стоит такая задача: через определенные интервалы времени периодически запускать...

Расширение АЦП микроконтроллера и подключение к АЦП датчиков
Здравствуйте. У меня встала задача сделать устройство для элеватора, для контроля температуры в 864...

Пути, генерируемые qmake
qmake прокладывает пути до Qt либ относительно исходников. Например, пусть проект лежит в...

Генерируемые конструкторы и метапрограмирование?
Гененрируемые для разных параметров конструкторы(например для разного количества параметров) в той...

Не открываются генерируемые изображения
Здравствуйте, у меня возникла проблема, у меня не открываются изображения, которые генерируются -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru