Перейти к содержанию

Передача по SPI


Grampus

Рекомендуемые сообщения

Добрый день!

ПОМОГИТЕ ПОЖАЛУЙСТА!

в описании для одного дисплея нашел код для STM на СИ

там есть строчка которая мне не понятна, точнее смысл ее понятен но нет объявления аргументов функции

помогите пожалуйста. В общем ситуация такая 

 

spi_write ( DTA, 0x00 )                                     spi_write ( CMD, 0x01) 

вот эта функция

DTA - выполняет установку пина в 1 ,    CMD -  выполняет установку пина в 0 

0x00 , 0x01, .........0xFF     это либо данные либо команда. 

 и все бы ничего но все это нужно передать по HAL_SPI_Transmit 

помогите написать эту функцию с описанием аргументов и всех действий.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20 минут назад, Grampus сказал:

в описании для одного дисплея нашел код для STM на СИ

Дык там описание или код??? Где С-код то??? Вижу только название функции, функции не вижу :(

По тому что ты написал помочь тебе не возможно - это бред какой то.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

1 минуту назад, ruhi сказал:

Дык там описание или код??? Где С-код то??? Вижу только название функции, функции не вижу :(

По тому что ты написал помочь тебе не возможно - это бред какой то.

Вот фрагмент кода 

/** инициализация таблицы градаций яркости */
static void lcd_set_gray_scale(void)
{
   unsigned char cnt = 0;
   unsigned char step = 0x0C;
   unsigned char max_step = 0xB4;
   spi_write(CMD, 0xB8); /** таблица градаций яркости */
   for (cnt = step; cnt <= max_step; cnt += step)
      spi_write(DTA, cnt);
   spi_write(CMD, 0x00); /** разрешить работу таблицы градаций яркости */
}

static void lcd_set_col(unsigned char start, unsigned char end)
{
   spi_write(CMD, 0x15); /** Set Column Address */
   spi_write(DTA, start); /** начальный адрес */
   spi_write(DTA, end); /** конечный адрес */
}

static void lcd_set_row(unsigned char start, unsigned char end)
{
   spi_write(CMD, 0x75); /** Set Row Address */
   spi_write(DTA, start); /** начальный адрес */
   spi_write(DTA, end); /** конечный адрес */
}

static void lcd_set_start_line(unsigned char start)
{
   spi_write(CMD, 0xA1);
   spi_write(DTA, start);
}

static void lcd_set_wr_ram(void)
{
   spi_write(CMD, 0x5C); /** Разрешает микроконтроллеру записать данные в RAM */
}

static void lcd_current_control(unsigned char val)
{
   spi_write(CMD, 0xC7); // Master Contrast Current Control
   spi_write(DTA, (val > 0x0F) ? 0x0F : val);
}

/** очистка дисплея */
static void lcd_clr(void)
{
   unsigned int i = 0, j = 0;
   lcd_set_col(0x1C, 0x5B); /** 112 SEG до 367 SEG = 112 SEG / 4 до 367 SEG / 4 = 0x1C - 0x5B */
   lcd_set_row(0x00, 0x3F);
   
   for (i = 0; i < 64; i++)
   {
      lcd_set_wr_ram();
      for (j = 0; j < 128; j++)
         spi_write(DTA, 0x00);
   }
}
 

 

но тут тоже только функция есть а описание нету. 

 

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 минуту назад, Grampus сказал:

void spi_write(unsigned char pin, unsigned char val)

Вроде как, ты эту функцию должен сам написать-реализовать.

Функция должна выполнять запись байта в СПАй и дожидаться окончания отправки.

как то так:

void spi_write(unsigned char pin, unsigned char val)

{

Set_Bit_function(pin);

HAL_SPI_Transmit(val);

}

И судя по тому что ты написал надо объявить:

#define CMD 0

#define DTA 1

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

8 минут назад, ruhi сказал:

Вроде как, ты эту функцию должен сам написать-реализовать.

Функция должна выполнять запись байта в СПАй и дожидаться окончания отправки.

как то так:

void spi_write(unsigned char pin, unsigned char val)

{

Set_Bit_function(pin);

HAL_SPI_Transmit(val);

}

И судя по тому что ты написал надо объявить:

#define CMD 0

#define DTA 1

да, но мне нужно ( если я правильно понял) дисплею по СПАй сказать это команда или данные и потом еще байт отправить! 

просто байт данных могу отправить, а нужно одновременно отправить CMD или DTA  и байт

т.е. всю функцию отправить в СПАй.

 

Ссылка на комментарий
Поделиться на другие сайты

@Grampus Ну что вы за люди. У дисплея название есть? Как отвечать на такие вопросы. Данные/Команда могут передаваться или по СПИ или внешней ногой.

Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, Grampus сказал:

сказать это команда или данные

дак вот эту функцию

Set_Bit_function(pin);

еще надо написать, или просто код сброса установки пина в зависимости от значения параметра, как то так:

void spi_write(unsigned char pin, unsigned char val)

{

if(pin == 1) set(PORTX.PINY);

else clear(PORTX.PINY);

...

 

там должна быть какие то функции ХАЛа типа:

HAL_Set_Port и/или HAL_Clear_Port

Если следовать:

57 минут назад, Grampus сказал:

DTA - выполняет установку пина в 1 ,    CMD -  выполняет установку пина в 0 

 

Изменено пользователем ruhi
добавил

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, MasterElectric сказал:

@Grampus Ну что вы за люди. У дисплея название есть? Как отвечать на такие вопросы. Данные/Команда могут передаваться или по СПИ или внешней ногой.

WEX025664BLPP3N00000    дисплей

SSD1322  контроллер дисплея 

Ссылка на комментарий
Поделиться на другие сайты

Если Вы используете 4-проводный SPI, то D/C определяется по отдельной линии порта.

Если же 3-проводный, то D/C добавляется 9-м битом к слову данных и идет первым.

Какой вариант у Вас? 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Grampus сказал:

и все бы ничего но все это нужно передать по HAL_SPI_Transmit 

Вся проблема решает выкидыванием нафиг говноHALa и тратой 10 минут на написание своей функции работы с SPI.

Ссылка на комментарий
Поделиться на другие сайты

Господа благодарю всех, в общем сделал так :

void spi_write ( uint8_t d, uint8_t OLED_DATA)
{
if(d==1)
GPIOB->BSRR |= GPIO_BSRR_BS_8;       // установили пин в 1 - передаем данные

if(d==0)
GPIOB->BSRR |= GPIO_BSRR_BR_8;      // установили пин в 0 - передаем команду


 HAL_SPI_Transmit_DMA (&hspi1, OLED_DATA_i, sizeof(OLED_DATA));        // передаем по spi 
 OLED_DATA_i [0] = OLED_DATA;
}

 

Ссылка на комментарий
Поделиться на другие сайты

void spi_write ( uint8_t d, uint8_t OLED_DATA)
{
  if(d)GPIOB->BSRR = GPIO_BSRR_BS_8;  // установили пин в 1 - передаем данные
  else
  GPIOB->BSRR = GPIO_BSRR_BR_8;  // установили пин в 0 - передаем команду


 HAL_SPI_Transmit_DMA(&hspi1, OLED_DATA_i, sizeof(OLED_DATA));  // передаем по spi 
 OLED_DATA_i[0] = OLED_DATA;
} 

найдите 10 различий

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

В 03.12.2018 в 22:33, MasterElectric сказал:

void spi_write ( uint8_t d, uint8_t OLED_DATA)
{
  if(d)GPIOB->BSRR = GPIO_BSRR_BS_8;  // установили пин в 1 - передаем данные
  else
  GPIOB->BSRR = GPIO_BSRR_BR_8;  // установили пин в 0 - передаем команду


 HAL_SPI_Transmit_DMA(&hspi1, OLED_DATA_i, sizeof(OLED_DATA));  // передаем по spi 
 OLED_DATA_i[0] = OLED_DATA;
} 

найдите 10 различий

Добрый день! я до сих пор воюю с дисплеем  WEX025664CLPP3N00000, в сети нашел описание подключения к AVR МК, с помощью библиотеки U8glib. 

Подскажите пожалуйста могу ли я использовать эту библиотеку для STM32. Я не умею подключать сторонние библиотеки! ((( 

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

На сколько помню дисплеи SPI работают так ставим ножку D/C выбором команда, или дата, потом строб в 1 запись данных в регистр данных после строб вниз.

С АВР перенести не проблема, только время нужно тратить, я так ардуиновские библиотеки под себя для СТМ по регистрам делал, главное понять по библиотеке что нужно, потом сконфигурировать под СТМ интерфейсы, и по алгоритмам библиотеки написать свои функции и все.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Всем привет. Как-то видел на ютубе ролик, где показывали чип, вроде 8-ми выводной, трансивер со встроенным модулятором/демодулятором и минимумом обвеса. Последние пару дней искал и не нашёл, может кто знает ФИО этой микросхемы? Суть такова. Ещё в начале 90-х делал проводное дистанционное управление на микросхемах LM567. Работает безотказно, помехоустойчивость высокая, ни одного сбоя за всё Время эксплуатации. Упрощенная схема верхняя, в приложенном файле. Теперь хочу перевести на беспроводную связь, как на нижнем рисунке. В общем, нужен совет по выбору, микросхемы с минимумом обвеса или готового модуля, чтобы в режиме передачи он/а имел/а вход для подачи сигнала, а при приёме выход НЧ. Пояснение к схеме. Не стал писать порядковые номера элементов. Там, где написано С1, там везде конденсатор одного номинала, как и резисторы. Т.е. где указан R1 там тоже везде стоит один номинал. Если кто не в теме, то LM567 - микросхема тонального декодера со встроенным генератором. Нажимаем в передатчике DA1 одну из кнопок и на выходе имеем некоторую частоту, определяемую элементами задающей RC цепи. Приёмники DA2 - DA4 тоже генерируют частоту и тоже определяемую этими же по схеме элементами. Срабатывает та микросхема, на входе которой частота совпадает с выходной частотой передатчика. В принципе, в верхней схеме хватило бы и два ключа, т.к. нажатие сразу двух кнопок включает резисторы R1 и R2 в параллель и формируется своя частота. Т.е. в приёмнике DA4 нужно ставить номинал резистора, равный параллельному включению двух резисторов R1 и R2. Но тема не об этом. Я понимаю, что сейчас есть цифра и можно передавать коды, но, что имею, то имею и хочу запустить такую схему, что на приложенном рисунке внизу. Вопрос стоит о более простом решении ВЧ части - трансивера. Надеюсь, что поможете решить поставленную задачу. Спасибо.          
    • Это же балалайка-потаскушка  Там все просто,по даташитам микросхем можно сориентироваться. @zezar ,а в чем дефект то?
    • какой размер колец? или проще, можно ссылочку чтобы посмотреть
    • @Romanchek82 в данной ситуации скорее "подложена под ножку стола у дядюшки Ляо")
    • КИТ на Озоне, 2 канала за 500р. РФ. Я сам с конструктора начинал, там и опыт паять получите.  не надо с платы, схемы начинать, блок питания сначала соберёте, КИТ распаяйте, в корпус всё оформите. Одно до ума изделие доведите. Там и поймёте, куда дальше двигаться. А по схеме, ЕЩЁ раз, они есть на любое ОУ в даташит. По "ушникам", пятиножки в бОльшем случае - достаточно (по ссылке) прежде, чем Сухову, Нечаеву,.. в ж. "Радио" писать, готовился, после школы в библиотеку, вечерами за паяльник... пока обратная связь приходила (письма), уже многое исправил, да, не методом тыка, а через понимание физических процессов.  Быстро это только ЕГЭ, описательный, творческий процесс отсутвует (мозгами шевелить, статьи анализировать, углубляться и видеть перспективу).  Паять совет не нужен, ручками, ручками, готовый кит и в корпус.
    • Привет!  Мне не известно, есть ли другие варианты формата прошивки. Почитайте ветку , может кто то и выкладывал.
  • Похожий контент

×
×
  • Создать...