0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 574
|
|
1 | |
STM8S ADC03.07.2012, 21:22. Показов 34713. Ответов 29
Метки нет (Все метки)
Кто-нибудь использовал scan mod в STM8S? Если да, поясните пожалуйста как им пользоваться и от куда забирать данные? или лучше пример с комментариями :)
0
|
03.07.2012, 21:22 | |
Ответы с готовыми решениями:
29
STM8S-Discovery Stm8s и L293d STM8S и ST7565P STM8s TIM1 ШИМ |
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
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); Код
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; }
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
|
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 574
|
|
07.07.2012, 23:01 | 20 |
Сделал все, как по даташиту.... Заморочки больше надо вытворять в прерывании.
0
|
07.07.2012, 23:01 | |
07.07.2012, 23:01 | |
Помогаю со студенческими работами здесь
20
stm8s-discovery + stm8s207cb(c8) косяк в библиотеке stm8s ST-LiNK от stm8s-discovery Работа таймеров в STM8S тип сигнала stm8s STM8S - Halt и CFG_GCR_AL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
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-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|