Форум программистов, компьютерный форум, киберфорум
Наши страницы

Микроконтроллеры

Войти
Регистрация
Восстановить пароль
 
 
foxis
5 / 5 / 0
Регистрация: 11.07.2011
Сообщений: 122
#1

Настройка ЦАП в STM8L-Discovery - Микроконтроллер

13.10.2015, 12:26. Просмотров 1313. Ответов 19
Метки нет (Все метки)

Здравствуйте, обучаюсь программированию МК с помощью 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2015, 12:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Настройка ЦАП в STM8L-Discovery (Микроконтроллер):

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

Ищу ЦАП - Микроконтроллер
Здравствуйте.Подскажите пожалуйста код микросхемы цап. Заранее спасибо.

ЦАП R-2R. Генерация треугольника - Микроконтроллер
Добрый день. Собрал из резисторов 5 разрядный ЦАП к ATmega8, среда AVR Studio 6. Вывожу треугольник следующим кодом int main(void) ...

Получить 20-битный ЦАП - Микроконтроллер
Привет знатоки. Такая идея - выводим на один 10-битный ЦАП первые 10 бит сигнала и на еще один вторые 10 бит, но его выход делим...

ШИМ и ЦАП C8051F020 - Микроконтроллер
Уважаемые господа! Есть задача настроить вывод микроконтроллера так, чтобы с него исходили импульсы определенной частоты, причем по...

ЦАП из логических выводов - Микроконтроллер
Здравствуйте. Столкнулся с одной проблемой - у меня есть микроконтроллер с 24 логическими выходами. Я хотел сделать на ее основе 3...

19
Витальич
1245 / 1156 / 168
Регистрация: 02.12.2013
Сообщений: 4,802
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
foxis
5 / 5 / 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
Витальич
1245 / 1156 / 168
Регистрация: 02.12.2013
Сообщений: 4,802
15.10.2015, 12:10 #18
Цитата Сообщение от foxis Посмотреть сообщение
Код успешно запустился на ноге PF0, выдает 2,92 В. Еще раз спасибо.
Код в майн опубликуйте, плз.
1
foxis
5 / 5 / 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
fsfsfsf
0 / 0 / 0
Регистрация: 18.01.2018
Сообщений: 1
18.01.2018, 22:27 #20
если ещё важно и актуально
кароч тут всё просто ты хочешь одновременно иаровские и стмовские библиотеки юзать , а вторые у тебя не подключены

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

Работа с ЦАП в ADUC812 - Микроконтроллер
Подскажите,пожалуйста,как запрограммировать ЦАП ADUC812 на С? Подойдет любой простейший пример программы

В ЦАП из USART. Как? - Atmega AVR микроконтроллер
Здравствуйте. Подскажите пожалуйста как мне восьмибитное число выданное в UART превратить в напряжение. Ну т.е. выдаю 256 получаю +5В,...

PIC16F628. Как реализовать ЦАП? - Микроконтроллер
Мне нужно запрограммировать pic16f728a так что бы одна его нога давала напряжение в виде ступенек от 0 до 5 вольт, я знаю как сделать что...

Как реализовать 16-и битный ЦАП? - Микроконтроллер
Возникло желание собрать WAV-PCM плеер на пике (18ф2520). Не могу понять, как организовать 16-и битный цап? С карточки получаем 16-и битное...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru