Easyelectronics.ru

Электроника для всех
Текущее время: 30 июн 2022, 12:23

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: STM8S вопрос по АЦП
СообщениеДобавлено: 11 янв 2022, 14:10 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 2585
Откуда: Волноваха
RM0016, стр. 432.
Цитата:
Single scan mode
This mode is used to convert a sequence of analog channels from AIN0 to AINn where ‘n’ is
the channel number defined by the CH[3:0] bits in the ADC_CSR register. During the scan
conversion sequence the CH[3:0] bits are updated by hardware and contain the channel
number currently being converted.

AN2658 - "Using the analog to digital converter of the STM8S microcontroller", стр. 11
Цитата:
2.8.4 Scan mode
Scan mode allows AD conversion to be performed on consecutive channels. When one AD
conversion is performed on the n-th channel, then channel n+1 is selected as input channel
and the next AD conversion is performed on this channel.
The sequence of channels to be converted starts from channel 1 (always 1) to a selectable
channel N. Channel N is set by programming the input channel selection bits.
If continuous mode is used together with scan mode, then the channels are cyclically
repeated, from the N-th channel back to channel 1 etc.

Так все-таки с нулевого канала стартует сканирующий режим, или с 1-го?

Второй вопрос: если несколько каналов подключены не по порядку, как лучше сделать последовательное чтение значений? Сейчас сделано так
Код:
#define LEFT_Y_ADC_CHANNEL      ADC1_CHANNEL_3
#define LEFT_X_ADC_CHANNEL      ADC1_CHANNEL_2
#define RIGHT_Y_ADC_CHANNEL     ADC1_CHANNEL_0
#define RIGHT_X_ADC_CHANNEL     ADC1_CHANNEL_1
const unsigned char analog_channels[4] = {LEFT_X_ADC_CHANNEL, LEFT_Y_ADC_CHANNEL, RIGHT_X_ADC_CHANNEL, RIGHT_Y_ADC_CHANNEL};
volatile unsigned int analog_values[4];                         // массив данных аналоговых джойстиков

INTERRUPT_HANDLER(ADC_IRQ, ITC_IRQ_ADC1)
{
  static unsigned char channel;         // для последовательного перебора каналов             
  uint16_t temph = 0;
  uint8_t templ = 0;
  ADC1->CSR &= ~(ADC1_CSR_EOC);         // сброс флага окончания преобразования
  ADC1->CR1 &= ~ADC1_CR1_ADON;          // выкл АЦП для смены канала
  ADC1->CSR &= ~(ADC1_CSR_CH);          // сброс входных каналов по маске
  ADC1->CSR |= analog_channels[channel];// выбор следующего канала
  templ = ADC1->DRL;                    /* Read LSB first */
  temph = ADC1->DRH;                    /* Then read MSB */
  analog_values[channel] = templ | (uint16_t)(temph << (uint8_t)8);
  channel++;                            // следующий канал
  channel &= 3;                         // не более 4х каналов, от 0 до 3               
  ADC1->CR1 |= ADC1_CR1_ADON;            // вкл АЦП                     
  ADC1->CR1 |= ADC1_CR1_ADON;           // старт преобразования
}

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8S вопрос по АЦП
СообщениеДобавлено: 11 янв 2022, 17:11 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 2043
Привет!
У меня вот так было сделано в датчике протечки (4 года назад делал):
Код:
ADC1->CSR = 0x02; //2й канал
ADC1->CR1 = 0x40; //Fadc = Fmaster/8 = 2MHz, Continius mode
ADC1->CR2 = 0x08; // Right alignement
ADC1->TDRL =0b00011100; //отключить триггер шмидта на 2м, 3м и 4м. //изменено 15.12.2017   

void floor_sensor(void)                                        {// Считывания показаний ADC
char j;
   for (j=0;j<3;j++)
    {
      ADC1->CSR = ((j+2)&0xf);
      ADC1->CR1 |=ADC1_CR1_ADON;
      SleepMs(1);
      ADC1->CR1 |=ADC1_CR1_ADON;
     while (!(ADC1->CSR & ADC1_CSR_EOC));
      cnt[j+4] = ADC1->DRL;
      cnt[j+4] |=(ADC1->DRH & (~0b11111100))<<8;//ADC_result <<=8;
    }
}


Решение так себе но рабочее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8S вопрос по АЦП
СообщениеДобавлено: 08 апр 2022, 05:08 
Заглядывает иногда

Зарегистрирован: 07 апр 2022, 01:37
Сообщения: 54
DocID14587 Rev 14 стр. 432 нигде не сказано что он с первого. Тем более что он в обратном порядке считает.

Там много неточностей ошибок в документации и недокументированных возможностей.

Я как делаю.
1. При заходе в прерывание Читаю результат.
2. Потом пишут номер канала с остальными битами которые можно прописать в макроопредлении
ADC1->CSR=канал | ADC1_CSR_BITS;
чтобы лишний раз не дергать мультиплексор.
бросаю в цифровой фильтр значение (это создает некоторую задержку после переключение )
Дергаю "запуск" АЦП.

При желании можно через одно прерывание выставлять переключаем мультиплексор потом запуск АЦП. Но это больше на PIC и AVR имеет смысл.
Ну и конечно не следует забывать разобраться с флагами после выхода из прерывания чтобы назад не вернуться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8S вопрос по АЦП
СообщениеДобавлено: 08 апр 2022, 12:33 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 721
Откуда: Мать городов Русских
Сканирующий режим всегда измеряет каналы, начиная с нулевого по выбранный. Без пропусков. По порядку. Если нужно несколько различных каналов измерять, используйте прерывание АЦП для переключения каналов.
Сам в своё время столкнулся с этим, пришловь помучиться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8S вопрос по АЦП
СообщениеДобавлено: 08 апр 2022, 14:19 
Заглядывает иногда

Зарегистрирован: 07 апр 2022, 01:37
Сообщения: 54
SOVA писал(а):
Сканирующий режим всегда измеряет каналы, начиная с нулевого по выбранный. Без пропусков. По порядку. Если нужно несколько различных каналов измерять, используйте прерывание АЦП для переключения каналов.
Сам в своё время столкнулся с этим, пришловь помучиться.


В STM8L, по многочисленным просьбам, сделана возможность сканировать есть возможность сканировать не все подряд, а только те которые отмечены.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8S вопрос по АЦП
СообщениеДобавлено: 10 апр 2022, 18:52 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 721
Откуда: Мать городов Русских
Тема про STM8S.


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


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


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

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB