Например TDA7294

Форум РадиоКот • Просмотр темы - Не могу переключать каналы ADC при измерении.
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб мар 06, 2021 14:41:06

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Вт дек 15, 2020 17:06:32 
Родился

Зарегистрирован: Чт фев 21, 2013 20:31:33
Сообщений: 11
Рейтинг сообщения: 0
Хочу построить вольтметр на две входные точки. Одну вывести на экран, вторую использовать в дальнейшем. Меняю в программе (на Си) (1<<ADPS0) и (1<<ADPS1), но каналы не переключаются.
Кусок программы:
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data=0;// Read the AD conversion result


adc_data+=ADCW;
// Place your code here
if (adc_counter % 2==0){
adc_buffer1+=adc_data,
adc_counter1++,
(1<<ADPS0);
}
else {adc_buffer2+=adc_data,adc_counter2++,
(0<<ADPS0);}
adc_counter++;
adc_buffer+=adc_data;
ADCSRA |=(1<<ADSC)

Кто подскажет, что не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Вт дек 15, 2020 23:40:38 
Мучитель микросхем

Карма: -3
Рейтинг сообщений: -62
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 424
Рейтинг сообщения: 0
Код:
#define myADCchannel1 1
#define myADCchannel2 5
#define nChannels     2
#define myADCtemper  0b1000
#define myADC1DOT1V  0b1110
#define myADCGND     0b1111

volatile uint32_t adc_buffer, adc_buffer1, adc_buffer2;
volatile uint16_t adc_counter, adc_counter1, adc_counter2;

ISR(ADC_vect)
{
  uint16_t adc_data = ADCW;
  // Place your code here
  ADMUX &= 0xf0;
  switch(adc_counter % nChannels){
  case 0: // channel1
    adc_buffer1 += adc_data;
    ++adc_counter1;
    ADMUX |= myADCchannel2; // next ch
    break;
  case 1: // channel2
  default:
    adc_buffer2 += adc_data;
    ++adc_counter2;
    ADMUX |= myADCchannel1; // next ch
    break;
  }
  adc_buffer += adc_data;
  ++adc_counter;
}


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Ср дек 16, 2020 18:20:15 
Родился

Зарегистрирован: Чт фев 21, 2013 20:31:33
Сообщений: 11
Рейтинг сообщения: 0
Карбофос,
Карбофос, спасибо за помощь, но это, наверно, на Си++.
Я пока учусь на Си. Можно ли эту запись воткнуть на CVAvr?
Воткнул в прерывание по ADCб но он, так же как и я, терминов не понимает.
Можно спросить, что такое:
#define myADCchannel1 1
#define myADCchannel2 5
#define nChannels 2
#define myADCtemper 0b1000
#define myADC1DOT1V 0b1110
#define myADCGND 0b1111
Спасибою


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Ср дек 16, 2020 18:29:50 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1833
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 15672
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Код:
adc_buffer1+=adc_data,
 adc_counter1++,
 (1<<ADPS0);

Кто подскажет, что не так?
не так, во-первых, оформлен код - надо использовать тег Code
а во-вторых, вы внимательно посмотрите на процитированный участок: вы на самом деле понимаете, что тут делается?
ответьте на следующие вопросы:
1. почему здесь есть ЗАПЯТЫЕ? какую роль они выполняют?
2. что происходит при выполнении этого кода: (1<<ADPS0)?
3. сколько раз вы читали даташит на МК, чтобы разобраться с АЦП?

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


Вернуться наверх
 
Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Ср дек 16, 2020 18:43:18 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 798
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2915
Рейтинг сообщения: 0
#define aaa bbb
говорит компилятору, что везде в программе, где встретится aaa заменить на bbb
для удобства человеков читать.

Добавлено after 10 minutes 6 seconds:
и кстати, написание чисел в двоичном коде типа 0b1000 не есть хорошо.

Добавлено after 2 minutes 52 seconds:
Цитата:
if (adc_counter % 2==0)
тоже не ахти.
if ((adc_counter % 2) == 0) - подобный стиль минимизирует ошибки, можно ведь и забыть приоритетность выполнения


Вернуться наверх
 
Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Ср дек 16, 2020 19:28:54 
Мучитель микросхем

Карма: -3
Рейтинг сообщений: -62
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 424
Рейтинг сообщения: 0
это, наверно, на Си++.
Можно спросить, что такое:

Нет, это GNU AVR toolchain. Входит как в состав Arduino IDE, можно отдельно скачать.
Кстати, в конце функции забыл добавить запуск АЦП
Код:
ADCSRA |= _BV(ADSC);

что тоже-самое, что и
Код:
ADCSRA |=(1<<ADSC);

myADCchannel1 - номер 1-го канала измерения АЦП, пусть будет 1
myADCchannel2 - номер 1-го канала измерения АЦП, пусть будет 5
nChannels - общее кол-во каналов
myADCtemper - номер канала АЦП температурного сенсора
myADC1DOT1V - номер канала АЦП опорного напряжения 1.1 вольт
myADCGND - номер канала АЦП, подключенного к 0 вольт

BlackKilkennyCat писал(а):
написание чисел в двоичном коде типа 0b1000 не есть хорошо.

Эти значения приведены в даташите. Глупо переводить их в какую-то другую систему счисления.

BlackKilkennyCat писал(а):
Цитата:
if (adc_counter % 2==0)
тоже не ахти.
if ((adc_counter % 2) == 0) - подобный стиль минимизирует ошибки, можно ведь и забыть приоритетность выполнения

Компилятор не может забыть приоритетность выполнения операций.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Ср дек 16, 2020 19:32:21 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1833
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 15672
Откуда: Новочеркасск
Рейтинг сообщения: 3
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Карбофос писал(а):
Компилятор не может забыть приоритетность
так компилятор и не ошибается, не надо за ним следить. следить надо за человеком - он ошибается. и забывает приоритеты...

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


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Ср дек 16, 2020 21:59:43 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 798
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2915
Рейтинг сообщения: 0
BlackKilkennyCat писал(а):
написание чисел в двоичном коде типа 0b1000 не есть хорошо.

Эти значения приведены в даташите. Глупо переводить их в какую-то другую систему счисления.

Глупо не знать стандартов Си; не предполагать, что не все компиляторы понимают что-то вне стандартов; верить в даташиты без ошибок.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 00:33:12 
Родился

Зарегистрирован: Чт фев 21, 2013 20:31:33
Сообщений: 11
Рейтинг сообщения: 0
AVRписал
1. почему здесь есть ЗАПЯТЫЕ? какую роль они выполняют?
2. что происходит при выполнении этого кода: (1<<ADPS0)?
3. сколько раз вы читали даташит на МК, чтобы разобраться с АЦП?

Если Вы посмотрите повнимательнее на мой код, то заметите, что он весь стоит между фигурными скобками, а запятые являются разделителямим.
Замена выражения (1<<ADPS0) на ADMUX |= (1<<ADPS0) то же не привела к успеху.
С даташитом сложнее, инглишом не владею, а переводчики такое переводят, что и не поймешь.

Добавлено after 2 minutes 16 seconds:
AVRписал
1. почему здесь есть ЗАПЯТЫЕ? какую роль они выполняют?
2. что происходит при выполнении этого кода: (1<<ADPS0)?
3. сколько раз вы читали даташит на МК, чтобы разобраться с АЦП?

Если Вы посмотрите повнимательнее на мой код, то заметите, этот участок
стоит между фигурными скобками, а запятые являются разделителямим.
Замена выражения (1<<ADPS0) на ADMUX |= (1<<ADPS0) то же не привела к успеху.
С даташитом сложнее, инглишом не владею, а переводчики такое переводят, что и не поймешь.

Добавлено after 54 seconds:
AVRписал
1. почему здесь есть ЗАПЯТЫЕ? какую роль они выполняют?
2. что происходит при выполнении этого кода: (1<<ADPS0)?
3. сколько раз вы читали даташит на МК, чтобы разобраться с АЦП?

Если Вы посмотрите повнимательнее на мой код, то заметите, этот участок
стоит между фигурными скобками, а запятые являются разделителямим.
Замена выражения (1<<ADPS0) на ADMUX |= (1<<ADPS0) то же не привела к успеху.
С даташитом сложнее, инглишом не владею, а переводчики такое переводят, что и не поймешь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 05:19:35 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 798
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2915
Рейтинг сообщения: 0
Английский надо учить. Хоть как картинки, какое слово что означает. Не сможете читать даташиты - не сможете программировать микроконтроллеры. Да и не особо-то сложно, прочитали один - считайте, что прочитали почти все. Буквального перевода по накоплении опыта будет требоваться значительно меньше.

Добавлено after 6 minutes 34 seconds:
интересно, с точки зрения русского языка, как всё-таки правильно:
"Разделителем является точка с запятой"
или
"Разделителями являются точка с запятой"?
С одной стороны, это как бы один символ. С другой стороны, их вроде как бы два...


Последний раз редактировалось BlackKilkennyCat Чт дек 17, 2020 16:15:09, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 08:17:08 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1833
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 15672
Откуда: Новочеркасск
Рейтинг сообщения: 3
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
BlackKilkennyCat писал(а):
запятые могут являться разделителями лишь операндов, то есть параметров, передаваемых в функцию
нет, это ложное утверждение. запятая - законный разделитель списка в Си, и вполне может использоваться между отдельными операторами, что наиболее часто можно видеть в операторе for:
Код:
for(i=10, j=0; i != j; i++, j--)
как видите, тут есть и запятые, и точки с запятой, и все при этом правильно написано.
Valer5 писал(а):
а запятые являются разделителямим.
именно поэтому я свой вопрос и задал: вы ЗНАЕТЕ разницу между разделителем-запятой и раделителем точка-с-запятой? или вам монопенисуально всё?
Valer5 писал(а):
Замена выражения (1<<ADPS0) на ADMUX |= (1<<ADPS0) то же не привела к успеху
методом подбора задачу, вероятно, решить и можно, но навык решать задачи такой метод не вырабатывает. вы не ответили на мой вопрос: что делает то, то было написано ранее? а теперь я добавлю еще один вопрос: что делает то, что вы попробовали сделать сейчас?
Valer5 писал(а):
С даташитом сложнее, инглишом не владею, а переводчики такое переводят, что и не поймешь
и каким же образом вы учитесь писать программы для микроконтроллера? наугад ставя то одно, то другое, что где-то когда-то увидели? или все-таки какие-то источники читаете?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 11:17:27 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 689
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 4421
Откуда: Minsk
Рейтинг сообщения: 0
Valer5 Это правильно: в одном посте (17.12 12:33 ) повторить 3 раза одно и то же. Чтоб крепче дошло' . И english учить не надо, и ДШ читать. Пусть они клепают "интуитивно понятные" микроконтроллеры, а что не понятно - на русском объясняют. Буржуи проклятые...

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 12:47:19 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 798
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2915
Рейтинг сообщения: 0
ARV писал(а):
запятая - законный разделитель списка в Си, и вполне может использоваться между отдельными операторами, что наиболее часто можно видеть в операторе for:
Код:
for(i=10, j=0; i != j; i++, j--)
как видите, тут есть и запятые, и точки с запятой, и все при этом правильно написано.

Да. Но не могу не заметить, что тут операторы являются операндами функции цикла, и скобки круглые, о чём я и говорил ;)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 13:01:05 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1833
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 15672
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
BlackKilkennyCat писал(а):
Но не могу не заметить, что тут операторы являются операндами функции цикла
цикл - это не функция, а оператор. и списки операторов можно делать в любом месте программы, в том числе и в фигурных скобках, и даже квадратных. например, можно делать так:
Код:
x = y, z;
не спрашивайте меня, для чего так делать :)

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 13:14:05 
Мучитель микросхем

Карма: -3
Рейтинг сообщений: -62
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 424
Рейтинг сообщения: 0
Замена выражения (1<<ADPS0) на ADMUX |= (1<<ADPS0) то же не привела к успеху.

А вы упорный. Подозреваю, что хотите оцифровать 0 канал, но номер канала все-равно указываете 1.
Идентификаторы ADPSx вообще относятся к делителю тактовой частоты АЦП.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 16:14:13 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 798
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2915
Рейтинг сообщения: 0
ARV, да, верно. хороший пример, хоть и нелогичный )
Но предпочту всё равно придерживаться своего варианта - так проще избежать ошибок. Например, совершенно не уверен, что разделение операторов запятой с одновременным переносом строки везде будет восприниматься нормально.
Предложенный корректный вариант x = y, z; компилятор Cosmic посчитал как x = y, проигнорировав z, если у и z константы, и сделал два присваивания по очереди, если переменные. А ведь существует множество примеров, где чтение флага выполняется без присваивания. И получается, что такое вольное обращение содержит потенциальную ошибку. Например, x = y, UIF; по логике, что операторы можно разделять запятой отработает совершенно не так, как x=y; UIF;
Но, моё предыдущее сообщение всё равно получается в теории некорректным, и чтобы не разносить неверную информацию, исправлю.
ARV, спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Чт дек 17, 2020 16:45:28 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1833
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 15672
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
BlackKilkennyCat писал(а):
И получается, что такое вольное обращение содержит потенциальную ошибку.
потенциальную ошибку содержит любой код, поведение которого программист не до конца понимает. именно об этом я топикстартеру и пытался намекнуть: ставить запятую, не понимая, как она действует - плохо.
BlackKilkennyCat писал(а):
вариант x = y, z; компилятор Cosmic посчитал как x = y, проигнорировав z, если у и z константы, и сделал два присваивания по очереди, если переменные.
с моей точки зрения, компилятор облажался, ибо по стандарту результатом всегда должно быть значение y, т.к. оператор = имеет более высокий приоритет, чем запятая.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу переключать каналы ADC при измерении.
СообщениеДобавлено: Ср дек 23, 2020 21:39:49 
Родился

Зарегистрирован: Чт фев 21, 2013 20:31:33
Сообщений: 11
Рейтинг сообщения: 0
AVR, СПАСИБО. Именно в ";" и было дело.
Заменил и всё заработало!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

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


Кто сейчас на форуме

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


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y