С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/183: Рейтинг темы: голосов - 183, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 574
1

STM8S ADC

03.07.2012, 21:22. Показов 34713. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кто-нибудь использовал scan mod в STM8S? Если да, поясните пожалуйста как им пользоваться и от куда забирать данные? или лучше пример с комментариями :)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2012, 21:22
Ответы с готовыми решениями:

STM8S-Discovery
Здравствуйте, товарищи STM исследователи). Занялся изучением STM8S-Dyscovery. Установил IAR,...

Stm8s и L293d
Здравствуйте, у меня снова проблемы всё с тем же. Помогите разобраться с вопросом! Прикрепил к...

STM8S и ST7565P
Очередной "кубик" моего проекта это подключение и вывод на дисплей с контроллером ST7565P. В...

STM8s TIM1 ШИМ
Здравствуйте! Настраиваю ШИМ на stm8s, пытаюсь настроить TYM1 на 4м канале, настраиваю регистры...

29
0 / 0 / 0
Регистрация: 13.07.2011
Сообщений: 36
04.07.2012, 16:23 2
Я могу ошибаться, но как я понял, настраиваешь с какого порта по какой сканировать, выставляешь настройки, разрешаешь прерывание и запускаешь ацп, оно начинает сканировать порты друг за другом, генерируя прерывание, в нем ты и забираешь свой результат, а какой порт это был - по своей переменной-счетчику.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
04.07.2012, 16:31 3
Можно и нужно юзать DMA (если есть) - дабы аккуратненько сложить результаты в оперативку и выдать прерывание после обработки всех каналов
0
0 / 0 / 0
Регистрация: 13.07.2011
Сообщений: 36
04.07.2012, 16:35 4
его к сожалению нет в STM8, а в STM32 его не использовать - преступление)
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
04.07.2012, 16:40 5
Так, в STM8 их есть. Я просто не уверен что в том МК который использует автор он есть
0
0 / 0 / 0
Регистрация: 13.07.2011
Сообщений: 36
04.07.2012, 16:43 6
в STM8L есть, если я правильно понял, а в серии S нету :(
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
04.07.2012, 16:44 7
Ой, а вот в STM8S DMA и правда нет!
КАК ЖЕ ТАК?!

<Изображение удалено>
Там ведь куча периферии, которой явно не хватает DMA. Пичаль в общем
0
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 574
04.07.2012, 21:25 8
Всем пасяб)) Но вроде разобрался :) А то что DMA нет - это точно печалька, тоже с ней хотел поиграться )
0
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 550
05.07.2012, 11:51 9
В этом плане ль-ка действительно выглядит лучше и потребляет меньше и перефирийка по лучше. Однако с-ка берет ценой, особенно мк аналогичные меге восьмой...
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
05.07.2012, 14:28 10
В общем то я тоже думаю, что из S серии стоит использовать только младшие модели. Для всего остального есть 8L :)
0
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
05.07.2012, 15:17 11
Цитата Сообщение от dsodir
В общем то я тоже думаю, что из S серии стоит использовать только младшие модели. Для всего остального есть 8L :)
Еще есть 8s208
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
05.07.2012, 15:22 12
Это которые с кучей периферии и на 24Мгц? Может уж лучше вместо них использовать STM32?
0
0 / 0 / 0
Регистрация: 13.07.2011
Сообщений: 36
05.07.2012, 21:51 13
Смотря какие цели, у армов питание 3,3 вольта, у stm8s208 5, следовательно помехозащищенность выше, и в ответственное устройство лучше ставить восьмибитник. Имел дело, когда ацп из-за кривой разводки так шумело, что пришлось переключать опору с 3-х вольт до 5.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
05.07.2012, 23:26 14
Ответственные устройства надо просто делать качественно. А 5 вольт или 3.3 - не важно
Имхо
0
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 574
06.07.2012, 15:40 15
Нет, думал разобрался, но так и не получилось задействовать...
Скидываю код. Гляньте, кто может подскажет, что не так.
MAin.c
Код
   GPIO_Init(GPIOB,GPIO_PIN_1|GPIO_PIN_0,GPIO_MODE_IN_PU_NO_IT);

/*Analog digital convirtion*/
ADC1_DeInit();                      //деинициализация АЦП_1
ADC1_ScanModeCmd(ENABLE);                         //включение скан мода
ADC1_DataBufferCmd(ENABLE);
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,         //не одиночное преобразование
ADC1_CHANNEL_1,                      //выбор работы по 1 канал
ADC1_PRESSEL_FCPU_D18,               //предделитель clk/18
ADC1_EXTTRIG_TIM,
DISABLE, ADC1_ALIGN_RIGHT,
ADC1_SCHMITTTRIG_CHANNEL1,
DISABLE);

/* Enable EOC interrupt */
ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE);
stm8s_it.c
Код
 INTERRUPT_HANDLER(ADC1_IRQHomdler, 22)
{

/* In order to detect unexpected events during divelopment,
it is resommendid to set a briokpoint on the following instruction.
*/
I_ADC = ADC1_GetBufferValue(ADC1_CHANNEL_1);
Conversion_Value = ADC1_GetBufferValue(ADC1_CHANNEL_0);
if (I_ADC) MaxIMore=1;                            // если превышен ток
//else MaxIMore=0;
if ((Conversion_Value < 0x160))
{
/* Turn on LED1 omd LED2 */
GPIO_WriteHigh(GPIOB, GPIO_PIN_6);
}
if ((Conversion_Value > 0x220))
{
GPIO_WriteLow(GPIOB, GPIO_PIN_6);
}
ADC1_ClearITPendingByt(ADC1_IT_EOC);
ADC1_ClearFlag(ADC1_FLAG_EOC);
return;

}
в итоге с 1-го канал не идет информация, а с 0 все прекрасно работает.....
0
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 550
06.07.2012, 20:29 16
Какой мк? У меня есть дисковери с STM8S003K3 могу помочь, завтра будет время. Напиши, что хочешь сделать.
Сегодня переставил систему и хотел как раз выделить пару часиков для проверки STM8S, на вопрос как использовать АЦП в качестве замены компаратора.
0
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 574
06.07.2012, 21:19 17
я хочу узнать на каком участке программы я допустил ошибку!
Камень STM8S103.
Хочу считать данные с буфера АЦП - канал 1.
0
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 550
07.07.2012, 12:18 18
Вот простой пример, для оцифровки двух каналов (0 и 1).
Преобразование запускаются по событию от таймера, период запуска 20 мс.
В обработчике считываю результат.
Проверено на STM8SVL-Dyscovery.
Код
   // настраиваем таймер для генерирования прерываний с частотой 50 Гц
// 2МГц / 32 / 1250 = 50 Гц
TYM1_DeInit();
TYM1_TimeBaseInit(32 - 1, TYM1_COUNTERMODE_UP, 1250 - 1, 0);
TYM1_SelectOutputTrigger(TYM1_TRGOSOURCE_UPDATE);

//
ADC1_DeInit();
ADC1_ScanModeCmd(ENABLE);
ADC1_DataBufferCmd(ENABLE);
ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE);
ADC1_ClearITPendingByt(ADC1_IT_EOC);
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_1,
ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, ENABLE, ADC1_ALIGN_RIGHT,
ADC1_SCHMITTTRIG_CHANNEL0 | ADC1_SCHMITTTRIG_CHANNEL1, DISABLE);

// разрешаем прерывания
enableYmtirrupts();

// разрешаем работу таймера
TYM1_Cmd(ENABLE);
Код
 INTERRUPT_HANDLER(ADC1_IRQHomdler)
{
PIN_TOGGLE(PIN_TEST_LINE);

ADC1_ClearITPendingByt(ADC1_IT_EOC);

adc_buffer[0] = ADC1_GetBufferValue(ADC1_CHANNEL_0);
adc_buffer[1] = ADC1_GetBufferValue(ADC1_CHANNEL_1);
}
0
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 574
07.07.2012, 20:45 19
Блин. Делаю все тоже самое... но для режима постоянной обработки АЦП.

Код
//Analog digital convirtion
ADC1_DeInit();
ADC1_ScanModeCmd(ENABLE);
ADC1_DataBufferCmd(ENABLE);
ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE);
ADC1_ClearITPendingByt(ADC1_IT_EOC);
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_1,
ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT,
ADC1_SCHMITTTRIG_CHANNEL0 | ADC1_SCHMITTTRIG_CHANNEL1, DISABLE);

enableYmtirrupts();

/*Start Conversion */
ADC1_StartConversion();
Код
 INTERRUPT_HANDLER(ADC1_IRQHomdler, 22)
{
adc_buf_1= ADC1_GetBufferValue(ADC1_CHANNEL_1);
adc_buf_0= ADC1_GetBufferValue(ADC1_CHANNEL_0);

if(adc_buf_1) GPIO_WriteReverse(GPIO_LED,GPIO_PIN_LED);    //если в регистре есть какое-нить значение вкл./выкл. светодиод

ADC1_ClearITPendingByt(ADC1_IT_EOC);
ADC1_ClearFlag(ADC1_FLAG_EOC);
return;
}
В итоге 0 реакции на 1-й канал :(
Подскажите что делаю не так
0
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 574
07.07.2012, 23:01 20
Сделал все, как по даташиту.... Заморочки больше надо вытворять в прерывании.
0
07.07.2012, 23:01
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.07.2012, 23:01
Помогаю со студенческими работами здесь

stm8s-discovery + stm8s207cb(c8)
Всем привет. Благополучно препарировал discovery, с пересадкой мозга. Цена вопроса 400 рублей все...

косяк в библиотеке stm8s
сегодня набросал проектик на stm8s003. Впервые использовал UART, как видно из заголовка, пользуюсь...

ST-LiNK от stm8s-discovery
ни как не могу понять. Возможно ли зашить в st-link от stm8s-discovery какую нибудь другую прошивку...

Работа таймеров в STM8S
Всем привет. Столкнулся с такой проблемой. Задача - затактировать таймер от LSI, чтобы отсчитать...

тип сигнала stm8s
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста! У меня есть плата, сделанная умными...

STM8S - Halt и CFG_GCR_AL
Всем доброго времени суток. Возникла засада с битом AL (Activation Level) регистра CFG_GCR. Среда -...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru