реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как проще/правильнее сделать смену режимов встроенных OP усилителей?, компактный код
Make_Pic
сообщение Jun 23 2018, 05:16
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?

Просится оформить в виде структур, но как лучше сделать переключение/программирование режимов OP в зависимости от состояний программы?
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 23 2018, 12:05
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Make_Pic @ Jun 23 2018, 08:16) *
Просится оформить в виде структур

Поскольку в этой Вашей теме нет запрета на C++, то тут напрашивается использование не структур, а классов, наделенных соотв. функционалом.
Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров.
"Лишнее" вырезано с целью упрощения понимания.

Timer.hpp:
CODE


#pragma once

.....

#include "Include/stm32l1xx.h"
#include "Interrupt.hpp"

.....

namespace stm32l1
{
class TimerBase
{
public:
explicit TimerBase(TIM_TypeDef * registers, Interrupt::Index irqIndex);
virtual ~TimerBase();

void installVector(stm32l1::Interrupt::Vector& vector);

void run();
void stop();

void setPrescaler(uint16_t value);
void setBaseFrequencyHz(uint32_t frequencyHz);

.............

private:
volatile TIM_TypeDef * timer;
uint32_t baseFrequencyHz;
Interrupt interrupt;

.............


};


#ifdef TIM2
class TimerTIM2 : public TimerBase
{
public:
TimerTIM2() : TimerBase(TIM2, TIM2_IRQn) { }
Irq<TIM2_BASE, TIM_DIER_UIE, TIM_SR_UIF> irqUpdate;
...................
};
#endif


#ifdef TIM3
class TimerTIM3 : public TimerBase
{
public:
TimerTIM3() : TimerBase(TIM3, TIM3_IRQn) { }

...................

};
#endif

// и так далее



Если вырезать вообще все лишнее, то вот суть:

Код
class TimerBase
{
public:
    TimerBase(TIM_TypeDef * registers); // Вся реализация TimerBase в соотв. cpp файле
}

......

class TimerTIM2 : public TimerBase
{
public:
    TimerTIM2() : TimerBase(TIM2)  {}
}



На структурах в голом C это тоже возможно, но получится несколько колхозно что ли, но вполне реализуемо )))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Jun 24 2018, 06:03
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(Forger @ Jun 23 2018, 15:05) *
Поскольку в этой Вашей теме нет запрета на C++, то тут напрашивается использование не структур, а классов, наделенных соотв. функционалом.
Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров.
"Лишнее" вырезано с целью упрощения понимания.
...

На структурах в голом C это тоже возможно, но получится несколько колхозно что ли, но вполне реализуемо )))

А как на СИ такое сделать (не приходит что то вумное в голову)?
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 24 2018, 06:37
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Make_Pic @ Jun 24 2018, 09:03) *
А как на СИ такое сделать (не приходит что то вумное в голову)?

В таком случае, имхо, разумнее использовать штатную библиотеку периферии от TI под нужный вам камень.
Иначе выйдет "шило на мыло" wink.gif






--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Jun 24 2018, 17:46
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(Forger @ Jun 24 2018, 10:37) *
В таком случае, имхо, разумнее использовать штатную библиотеку периферии от TI под нужный вам камень.
Иначе выйдет "шило на мыло" wink.gif


Я в IAR пишу.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 24 2018, 17:47
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Make_Pic @ Jun 24 2018, 20:46) *
Я в IAR пишу.

А я - в Keil. Но при чем тут это?


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Jun 25 2018, 02:10
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(Forger @ Jun 24 2018, 21:47) *
А я - в Keil. Но при чем тут это?

Тогда так спрошу как чайник (да простит меня...) Как использовать либы от CCS в IAR тем более в Keil (MSP430 не поддерживает это ядро) в контексте данной темы? И есть еще какие либо варинты смены реимов OP операациоников на лету?
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 25 2018, 05:22
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Make_Pic @ Jun 25 2018, 05:10) *
Как использовать либы от CCS в IAR тем более в Keil (MSP430 не поддерживает это ядро) в контексте данной темы?

Вижу три варианта:
1. искать либу под IAR (например, на гитхабе),
2. переделывать существующую либу под IAR (нужные части),
3. писать проект целиком под CCS

Цитата
И есть еще какие либо варинты смены реимов OP операациоников на лету?

Вооружившисть даташитом, изучить функционал существующих библиотек.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jun 25 2018, 07:58
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Make_Pic @ Jun 23 2018, 08:16) *
Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?

Просится оформить в виде структур, но как лучше сделать переключение/программирование режимов OP в зависимости от состояний программы?

Учитывая достаточно скромные ресурсы по RAM для этого контроллера, CPP использовать возможно, но естественно при этом будет несколько больше расходоваться
RAM и flash. Если алгоритм прикладной задачи и объем данных небольших, то вполне возможно.
--
Для "упаковки" текста функционала вместо собственно функций можно использовать макросы.
Их использование увеличит быстродействие, улучшит читабельность кода и его "портабельность", если все макро-определения делать в одном h-файле.
(аналогично inline - функциям)
Код
#define PORT_CS   P1OUT
#define MASK_CS_FLASH  0x01
#define MASK_CS_RTC      0x02
#define CS_ACTIVE_FLASH  ( PORT_CS &= ~MASK_CS_FLASH )
#define CS_OFF       ( PORT_CS = 0xFF )

ps
у Ti есть MSP430Ware == driverlib.
Пробовал использовать их HAL, но "не пошло", выписывал потом все оптимально и компактно и собственноручно. В HAL-реализациях только подсматривал основы.

Цитата(Make_Pic @ Jun 25 2018, 05:10) *
И есть еще какие либо варинты смены реимов OP операациоников на лету?

"на лету" - это термин, или как ? Самое близкое к этому (?) - аппаратное прерывание и изменение конфигурации в обработчике евойном.
Поскольку из вопроса видно, что "не на лету" Вы уже реализовали, выкладывайте код.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 25 2018, 08:10
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(k155la3 @ Jun 25 2018, 10:51) *
Учитывая достаточно скромные ресурсы по RAM для этого контроллера, CPP использовать возможно, но естественно при этом будет несколько больше расходоваться

Не пугайте народ: один и тот же код на CPP требует практически столько же RAM, как и голый C (разумеется, без дин. памяти). В больших и серьезных проектах эта разница может быть даже в пользу плюсов.
А вот c ROM ситуация не такая однозначная - тут все сильно зависит от проекта и опыта программиста: криворукий может на плюсах нагородить такой огород, что никакого проца не хватит.

зы. В контексте данной темы все равно не понятно, чего именно хочет ТС. Впрочем, как и в других его темах wink.gif
Подобные темы будет порождать холивары и офф. Это практически неизбежно.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 25 2018, 11:19
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Make_Pic @ Jun 23 2018, 08:16) *
Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?
Ваш вопрос очень напоминает тему про 'Гайку М3' от уважаемого iosifik
Вы хотите что то конкретное с этими усилителями сделать, или просто поиграться?
На вопрос в его исходной постановке ответить невозможно - не хватает данных.

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 08:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01465 секунд с 7
ELECTRONIX ©2004-2016