С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
1

Настройка ЦАП в STM8L-Discovery

13.10.2015, 12:26. Показов 5141. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, обучаюсь программированию МК с помощью stm8l-Discovery.

Возникла проблема при настройке ЦАП. Необходимо подать на ножку PB4 определенное значение (ни важно какое).
Для задание значения выходного регистра использую регистр DAC_DHR8, который передает это значение в выходной регистр по триггеру (второй способ ). Триггер использую программный SWTRIG, вот тут и возникла проблема.

Чтобы инициировать передачу нужно установить бит SWTRIG1 (судя по тому что написано в руководстве). Но когда я его хочу установить таким образом

C
1
DAC_SWTRIGR = 1;
Компилятор выдает ошибка, ведь он только для чтения.

Как правильно нужно устанавливать бит SWTRIG1 ?
В руководстве написано про этот бит
s/r
в чем отличие от w/r ?

Добавлено через 7 минут
Вся программа:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "iostm8l152c6.h" // 
 
int main( void )
{
  CLK_PCKENR1_bit.PCKEN17 = 1; // give clocking in DAC
  CLK_PCKENR2_bit.PCKEN25 = 1; // for acces to RI registers (clocking comparator)
  
  RI_IOSR3_bit.CH15E = 1; // turn on I/O switch for PB4
  
  DAC_CR1_bit.TEN = 1; // DAC transfer data through the trigger
  DAC_CR1_bit.TSEL = 7; // set means through the softwear (softwear trigger)
  DAC_CR1_bit.BOFF = 1; // set internal buffer for reduce output impedance
                        // and derive external loads directly, without OA 
                        // (op. amplifier)
  
  
  DAC_CR1_bit.EN = 1; // powered DAC
  
  DAC_DHR8 = 189;
 // DAC_SWTRIGR = 1;  Тут возникает ошибка !!!
  
  
  return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2015, 12:26
Ответы с готовыми решениями:

Переключить тактовый генератор с HSI на LSI (STM8l-Discovery)
Здравствуйте, в качестве обучения захотелось переключить тактовый генератор с HSI на LSI. Но...

ds18b20 и STM8L – Discovery.
Задумал я подключить датчик ds18b20 STM8L – Dyscovery. Код думаю писать в ИАРе. Погуглил на этот...

hd44780, stm8l discovery
Пытаюсь сделать подобие меню на 44780 (WH1604A), столкнулся с проблемой - при отладке через IAR с...

STM8L-discovery + HCSR04
Нужна помощь в написании программы для платы STM8L-discovery (stm8l152c6) и HCSR04. Среда...

STM8L Discovery + COM Port
Есть Дисковери, есть программатор с выведенными Rx и Tx от FT232RL (программатор такой...

22
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
13.10.2015, 13:00 2
foxis,
Цитата Сообщение от foxis Посмотреть сообщение
// DAC_SWTRIGR = 1; *Тут возникает ошибка !!!
, а не так регистр записывается DAC_SWTRIG1 = 1?
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
13.10.2015, 13:08 3
http://www.st.com/web/en/resou... 218714.pdf страница 238 рассказывает нам, что бит SWTRIG1 находится в регистре DAC_SWTRIGR, а если покопаться в папке STM8/inc, то в инклудах можно найти описание структуры регистра DAC_SWTRIGR и даже вот такие дефайны:
C
1
#define DAC_SWTRIG_SWTRIG1       DAC_SWTRIG_bit.SWTRIG1
P.S. а конкретный ответ не дам, злой я
1
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
13.10.2015, 13:38  [ТС] 4
_SayHelli, SWTRIGR это регистр (DAC_SWTRIGR), а SWTRIG1, 2
это его биты (судя по руководству).
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
13.10.2015, 13:41 5
мой ответ Вы похоже решили проигнорировать, печалька
0
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
13.10.2015, 13:47  [ТС] 6
спасибо за намек, Витальич , а в каком файле вы нашли этот дефайн ?

Я вот открываю файл: stm8\inc\iostm8l152c6.h (для моего процессора)
и там нет таких хидеров касательно ЦАП. Есть только такие

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*-------------------------------------------------------------------------
 *      DAC bit fields
 *-----------------------------------------------------------------------*/
#ifdef __IAR_SYSTEMS_ICC__
 
#define DAC_CR1_EN               DAC_CR1_bit.EN
#define DAC_CR1_BOFF             DAC_CR1_bit.BOFF
#define DAC_CR1_TEN              DAC_CR1_bit.TEN
#define DAC_CR1_TSEL             DAC_CR1_bit.TSEL
 
#define DAC_CR2_DMAEN            DAC_CR2_bit.DMAEN
#define DAC_CR2_DMAUDRIE         DAC_CR2_bit.DMAUDRIE
 
#define DAC_SWTRIGR_SWTRIG       DAC_SWTRIGR_bit.SWTRIG
 
#define DAC_SR_DMAUDR            DAC_SR_bit.DMAUDR
 
#define DAC_RDHRH_RDHRH          DAC_RDHRH_bit.RDHRH
 
#define DAC_LDHRL_LDHRL          DAC_LDHRL_bit.LDHRL
 
#define DAC_DORH_DORH            DAC_DORH_bit.DORH
 
#endif
 
/*-------------------------------------------------------------------------
 *      DAC bit masks
 *-----------------------------------------------------------------------*/
#define MASK_DAC_CR1_EN          0x01
#define MASK_DAC_CR1_BOFF        0x02
#define MASK_DAC_CR1_TEN         0x04
#define MASK_DAC_CR1_TSEL        0x38
 
#define MASK_DAC_CR2_DMAEN       0x10
#define MASK_DAC_CR2_DMAUDRIE    0x20
 
#define MASK_DAC_SWTRIGR_SWTRIG  0x01
 
#define MASK_DAC_SR_DMAUDR       0x01
 
#define MASK_DAC_RDHRH_RDHRH     0x0F
 
#define MASK_DAC_LDHRL_LDHRL     0xF0
 
#define MASK_DAC_DORH_DORH       0x0F
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
13.10.2015, 13:48 7
1. Какой компилятор используете?
2. Полный текст ошибки?
0
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
13.10.2015, 13:55  [ТС] 8
Витальич,

Компилятор IAR (на си).

В следующей строке выводит ошибку:

C
1
DAC->SWTRIGR |= DAC_SWTRIGR_SWTRIG1; // вместо строки 20, изложенного выше кода программы
Ошибка следующего содержания:

Error[Pe020]: identifier "DAC_SWTRIGR_SWTRIG1" is undefined D:\Обучение\stm8l\6_ADC_value\main.c 21
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
13.10.2015, 14:23 9
Судя по заголовочному файлу у Вас есть только бит DAC_SWTRIGR_SWTRIG
0
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
13.10.2015, 14:29  [ТС] 10
Витальич,

Возможно это связано с тем, что у меня иар стоит бесплатный на 8К.

А так я попробовал вбить строку:

C
1
DAC->SWTRIGR |= DAC_SWTRIGR_SWTRIG
Компилятор пишет:

Error[Pe020]: identifier "DAC" is undefined
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
13.10.2015, 15:49 11
Залейте архив с проектом, посмотрю
0
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
13.10.2015, 16:03  [ТС] 12
Витальич,
Хорошо, заранее большое спасибо.
(хотел предупредить: у меня название проекта ни совсем правильное вместо
ADC надо было DAC поставить)
Вложения
Тип файла: zip 6_DAC_value.zip (595.1 Кб, 10 просмотров)
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
13.10.2015, 16:24 13
Вот так:
C
1
2
  //DAC->SWTRIGR |= DAC_SWTRIGR_SWTRIG1;
  DAC_SWTRIGR_bit.SWTRIG = 1;
Логику не смотрел, но сразу бросается в глаза, а где конфигурация источника тактирования и остальной периферии?
0
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
13.10.2015, 16:37  [ТС] 14
Витальич,

пробовал сделать
C
1
DAC_SWTRIGR_bit.SWTRIG = 1;
Компилятор пишет ошибку:

Error[Pe137]: expression must be a modifiable lvalue

Тактирование ЦАП и компаратора1:

C
1
2
CLK_PCKENR1_bit.PCKEN17 = 1; // give clocking in DAC
  CLK_PCKENR2_bit.PCKEN25 = 1; // for acces to RI registers (clocking comparator)
Замыкаю ключ для PB4-PB6:
C
1
RI_IOSR3_bit.CH15E = 1; // turn on I/O switch for PB4
Далее идет выбор триггера для передачи данных в выходной регистр, выбор программного триггера
и подключение буфера на выходе:

C
1
2
3
4
5
 DAC_CR1_bit.TEN = 1; // DAC transfer data through the trigger
 DAC_CR1_bit.TSEL = 7; // set means through the softwear (softwear trigger)
 DAC_CR1_bit.BOFF = 1; // set internal buffer for reduce output impedance
                        // and derive external loads directly, without OA 
                        // (op. amplifier)
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
14.10.2015, 12:08 15
Лучший ответ Сообщение было отмечено raxp как решение

Решение

Привет. На изи не помогли таки да ладно их ...
Что то мало я смог найти по даку , а документацию изучать влом, нет у меня STM8L только STM8S, поэтому пошел по пути настоящих кодеров, скачал либу с офф сайта и собрал проект под IAR.
Офф либа это обертка над периферией МК, функции в ней названы более, менее понятны, можно и без документации разобраться.
ВНИМАНИЕ есть нюансы.
1. Код в майне работает/не работает не знаю, негде проверить.
2. Я использовал STD и не подключал кроме дака остальную периферию, для подключения нужного модуля добавляйте в проект нужный Вам си файл, h файл подцепится автоматом
Миниатюры
Настройка ЦАП в STM8L-Discovery  
Вложения
Тип файла: 7z STM8L15X_Template.7z (5.61 Мб, 11 просмотров)
2
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
14.10.2015, 23:21 16
foxis, Шаблон я сделал правильный, инфа 146%, а вот что получилось с кодом? опубликуйте, плз.
ВНИМАНИЕ: 1. аккуратней с настройкой проекта (не знаешь не лезь ) Пути в нём относительные запустится с любого места. 2. Если не будет хватать памяти, прошивку релиза на 20% можно сократить. Как? Пишите, поправлю проект. Правда вырубится GTAG.
P.S. Я тут на ебеи по пьяни решил заказать платку с "L", самое вкусное в ней это DAC, DMA и энергосбережение.
P.P.S. по либе могу много рассказать по серии "S", много модулей перевел с неё на прямое управление через регистры, с другой стороны беглый взгляд по "L" говорит, что внешние прерывания работают совсем по другому (в "S" серии руки бы оторвал за то что они нагородили) здесь логичней и почти как у взрослых STM32, есть отличия и в других модулях. Кстати, Либа гарантирует перенос кода, если верить рекламе, я не верю
P.P.P.S. И на хрена Вы взялись за STM8L, я то понятно зачем, оптимизация производства, а Вам на хрена этот геморой?
0
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
15.10.2015, 12:08  [ТС] 17
Витальич
спасибо вам большое, за помощь.

Думаю что я понял в чем причина.
Начну сначала:

1) Если к проекту подцепить исходник

C
1
#include "stm8l15x_dac.c" //
То там есть встроенная функция для установки
регистра DAC->SWTRIGR, чтобы он дальше записал данные
в выходной регистр ЦАП. (правда там еще кучу файлов в довесок придется цеплять)

Функция имеет следующий вид
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
Она то как раз и устанавливает бит SWTRIG. (SWTRIG1 у меня почему то нет
видимо у меня проц по количеству ног немного отличается)

2) На самом деле в окне quick watch в iar увидеть как
устанавливается бит SWTRIG невозможно, потому что после загрузки
данных в выходной регистр, этот бит сбрасывается аппаратно.
И это происходит настолько быстро, что установку бита невозможно увидеть.

3) Обнаружил, что ЦАП работает проверив сигнал на ноге PF0 (по схеме на рисунке 24, с.127
руководства RM0031). Однако я ожидал что сигнал будет на ноге PB4 (рисунок 24). Но его там не было.

4) Работоспособность аналоговых ключей я проверил подключив внутренний генератор опорного напряжения
к ноге PD6. Все исправно работало.

5) Теперь остался вопрос почему нет сигнала на PB4 при включении аналоговых ключей
"IO Switches" ?

Возможно это связано с тем, что на схеме (рис.24) после выхода ЦАП имеется
ключ на котором написано следующее:

"Closed for 28- and 32-pin packages"

А у меня корпус из 48 ног. Т.е. судя по надписи для моей микросхемы этот
ключ всегда разомкнут и посмотреть, что происходит на выходе я могу только на ноге
PF0, а на ноге PB4 не смогу .

Вот такая вот запутанная история получается судя по тому что написано в руководстве.

Добавлено через 19 минут




Цитата Сообщение от Витальич Посмотреть сообщение
вот что получилось с кодом? опубликуйте, плз.
Код успешно запустился на ноге PF0, выдает 2,92 В. Еще раз спасибо.

Цитата Сообщение от Витальич Посмотреть сообщение
И на хрена Вы взялись за STM8L, я то понятно зачем, оптимизация производства, а Вам на хрена этот геморой?
Когда выбирал отладочную плату для обучения, остановился именно на stm8l-discovery, потому что она дешевая и функциональная, в сравнении с теми же ардуино, в stm модулей внутри процессора намного больше, за те же деньги, и еще дисплейчик есть к тому же.
А мне для обучения с чем большими модулями смогу поиграться тем лучше.
Вот и взялся за эту платку.
1
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
15.10.2015, 12:10 18
Цитата Сообщение от foxis Посмотреть сообщение
Код успешно запустился на ноге PF0, выдает 2,92 В. Еще раз спасибо.
Код в майн опубликуйте, плз.
1
6 / 6 / 0
Регистрация: 11.07.2011
Сообщений: 122
15.10.2015, 16:56  [ТС] 19
Цитата Сообщение от Витальич Посмотреть сообщение
Код в майн опубликуйте, плз.
Нет проблем, Витальич, вот кода из майна:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "stm8l15x.h"
 
 
 
void main(void)
{
// сброс внутреннего комутатора МК  
 SYSCFG_RIDeInit(); 
// Здесь ДАК должен высовываться на GPIOB.4 
 SYSCFG_RIIOSwitchConfig(RI_IOSwitch_15, ENABLE); 
 
// подаем клок на дак 
CLK_PeripheralClockConfig(CLK_Peripheral_DAC, ENABLE); 
 
DAC_DeInit();
// инициализация DAC_Trigger_None
DAC_Init(DAC_Channel_1, DAC_Trigger_None, DAC_OutputBuffer_Enable); 
DAC_Cmd(DAC_Channel_1, ENABLE);
 
  while (1)
  {
  }
}
 
 
 
 
#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{ 
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 
  while (1)
  {
  }
}
#endif
1
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 1
18.01.2018, 22:27 20
если ещё важно и актуально
кароч тут всё просто ты хочешь одновременно иаровские и стмовские библиотеки юзать , а вторые у тебя не подключены

я {не знаю} как тут архив прикрепить так что тебе прийдётся самому скачать эти заголовки под именем
#include "stm8L15x.h"
#include "stm8L15x_dac.h"
подключишь их и в настройках проэкта укажи путь где они лежать и будет тебе счастье!
Миниатюры
Настройка ЦАП в STM8L-Discovery  
0
18.01.2018, 22:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2018, 22:27
Помогаю со студенческими работами здесь

АЦП STM8L discovery
запускаю одиночное преобразование таким способом: //Функция инициализации АЦП для режима...

10-канальный диммер на STM8L-DISCOVERY
Для школы, где учится мой младший, сделал 10-канальный диммер плавного управления яркостью...

STM8l discovery С чего начать?
Программатор и отладочная плата на STM8l discovery. С чего начать изучения, какой софт и от откуда...

STM8S discovery как программатор STM8L
Сделал сегодня приятное открытие в документации к дискавери: Вот такая засада. А пробовал...

STM8L-DISCOVERY не хочет SPI видеть (((
Я сдался... Уже трое суток сплошного гугля и рытья в чужих исходниках. Даташит на тему SPI наверное...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru