Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с АЦП CH32V203
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт фев 17, 2026 13:53:25

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


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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Работа с АЦП CH32V203
СообщениеДобавлено: Вт янв 06, 2026 22:05:42 
Потрогал лапой паяльник
Аватар пользователя

Карма: 19
Рейтинг сообщений: 8
Зарегистрирован: Чт окт 31, 2013 10:54:32
Сообщений: 386
Рейтинг сообщения: 0
Мяу коты :) Дошел до работы с АЦП в контроллере CH32V203. И не могу запустить чтение 1 канала АЦП на ноге РА1. Тактирование порта включил.

Вот код:
Код:
void adc_init(void)
{
    //PA1-канал ADC1
    GPIOA->CFGLR &= ~( GPIO_CFGLR_CNF1 | GPIO_CFGLR_MODE1);

    //ADC Init
    RCC->APB2PCENR |= RCC_APB2Periph_ADC1;
    ADC1->CTLR2 |= ADC_ADON; //enable ADC
    delay_ms(100);

    ADC1->CTLR2 |= ADC_RSTCAL;
    while(ADC1->CTLR2 & ADC_RSTCAL);
    ADC1->CTLR2 |= ADC_CAL;
    while(ADC1->CTLR2 & ADC_CAL);

    ADC1->CTLR1 = 0;
    ADC1->CTLR2 |= ADC_ADON;

    ADC1->SAMPTR2 &= ~ADC_SMP1;
    ADC1->SAMPTR2 |= ADC_SMP1_0 | ADC_SMP1_2;

    //ADC1->RSQR1 = 0;
    //ADC1->RSQR2 = 0;
    ADC1->RSQR3 &= ~ADC_SQ1;

    ADC1->CTLR2 &= ~ADC_ALIGN;

    ADC1->CTLR1 &= ~ADC_SCAN;
    ADC1->CTLR2 &= ~ADC_CONT;

}


И чтение канала
Код:
uint16_t adc_read_single(void)
{
    ADC1->CTLR2 |= ADC_SWSTART;
    while(!(ADC1->STATR & ADC_EOC));
    ADC1->STATR &= ~ADC_EOC;
    return ADC1->RDATAR;
}


Не могу понять как настроить регистры PSQR, они все такого формата и не понятно что в них писать.
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с АЦП CH32V203
СообщениеДобавлено: Вт янв 06, 2026 22:38:37 
Мудрый кот

Карма: 25
Рейтинг сообщений: 499
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1867
Откуда: KN34PC, Болгария
Рейтинг сообщения: 1
У меня к CH32V002:
Код:
// select 1 channel
  ADC1->RSQR1 &= ~(0xF << 20);  // L = 0, one conversion
  ADC1->RSQR3 = 1; 
  ADC1->SAMPTR2 |= ADC_SMP2_2 | ADC_SMP2_1 | ADC_SMP2_0;  // 0b111 -> 239.5 cycles// ADC_IN1

и
Код:
uint16_t ADC1_read(void) {
  ADC1->CTLR2 |= ADC_ADON;     // second ADON = start

  ADC1->CTLR2 |= ADC_SWSTART;  // start conversion
  while (!(ADC1->STATR & ADC_EOC));

  return ADC1->RDATAR;
}

ADC1->CTLR2 |= ADC_ADON; -> реально будет 2 раза, второе делает writing 1 will start the conversion


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с АЦП CH32V203
СообщениеДобавлено: Вт янв 06, 2026 22:47:09 
Потрогал лапой паяльник
Аватар пользователя

Карма: 19
Рейтинг сообщений: 8
Зарегистрирован: Чт окт 31, 2013 10:54:32
Сообщений: 386
Рейтинг сообщения: 0
Не поверите, код оказался рабочий, косяк был в выводе данных.
Забыл указать куда выводить, не указал буфер в sprintf.
Код:
sprintf(buffer, "ADC: %u, Voltage: %lu mV\r\n", i, i1);


А дипсик расжевал про работу с регистрами ADC_RSQRx.

Сижу два часа голову ломаю.

Добавлено after 2 minutes 32 seconds:
У меня к CH32V002:

ADC1->CTLR2 |= ADC_ADON; -> реально будет 2 раза, второе делает writing 1 will start the conversion


Добавил в функцию чтения и заработало, а то получается один раз читало канал АЦП и все.


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

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


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

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


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

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


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