Например TDA7294

Форум РадиоКот • Просмотр темы - STM32Fxxx вывод последовательности битов
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 01:20:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пт авг 05, 2022 15:04:24 
Родился

Зарегистрирован: Ср мар 18, 2020 10:25:01
Сообщений: 14
Откуда: Москва
Рейтинг сообщения: 0
Доброго все времени суток. Есть очень не стандарный вопрос: можно ли каким-либо способом преобразовать любой стандартный интерфейс (UART, SPI, CAN) в поток битов, например в кодировки NRZ средствами самого мк ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пт авг 05, 2022 17:42:34 
Друг Кота
Аватар пользователя

Карма: 13
Рейтинг сообщений: 359
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 4313
Откуда: Воронеж
Рейтинг сообщения: 0
С такой задачей справится и GPIO. Или по какой-то причине хочется именно периферию применить?

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пт авг 05, 2022 18:06:27 
Родился

Зарегистрирован: Ср мар 18, 2020 10:25:01
Сообщений: 14
Откуда: Москва
Рейтинг сообщения: 0
Применение GPIO (даже через DMA) - это уж совсем крайность.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пт авг 05, 2022 21:20:10 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
SPI (I2S) - чисто data, никакого "обрамления", кодирование, как раз - nrz
или я не понял вопроса
можно еще таймером через dma.


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Сб авг 06, 2022 07:58:33 
Родился

Зарегистрирован: Ср мар 18, 2020 10:25:01
Сообщений: 14
Откуда: Москва
Рейтинг сообщения: 0
a797945, вы правильно поняли вопрос. Да, я понимаю, что можно через gpio с таймером по dma. Но проблема в том, что кодировка может быть любой: NRZ, NRZI, манчестерский кол итд. Сейчас есть проект, в котором прием NRZI, а вот выход может быть другим.

Добавлено after 10 minutes 49 seconds:
a797945, да еще забыл добавить: просто поток байтов как в мк то и из него без какого либо тактирования со стороны.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Сб авг 06, 2022 08:55:32 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
не имел ввиду gpio.
самим таймером, способ разжеван в мигалках на ws2812
примерно в таком духе (выводил 32-б слова с определенным таймингом):
Спойлер
Код:
TIM1->CCMR1 = (TIM_CCMR1_OC1PE
         |TIM_CCMR1_OC1M_1
         |TIM_CCMR1_OC1M_2
         |TIM_CCMR1_OC2PE
         |TIM_CCMR1_OC2M_1
         |TIM_CCMR1_OC2M_2   );
TIM1->CCER = (TIM_CCER_CC1E | TIM_CCER_CC1NE   |TIM_CCER_CC2E | TIM_CCER_CC2NE);      //
TIM1->DIER   =    TIM_DIER_UDE;   
TIM1->CCR1 = 0;
TIM1->CCR2 = 0;
TIM1->ARR = 8-1;
TIM1->PSC = 180-1;      //50kHz
TIM1->EGR = TIM_EGR_UG;
TIM1->BDTR |= TIM_BDTR_MOE;
TIM1->DCR = ((uint16_t)0x010D);   //
      

// TIM4 KeyDelay
   TIM4->PSC = 7200-1;      // 0.5ms
  TIM4->ARR = 5000-1;      //
  TIM4->EGR = TIM_EGR_UG;

  DMA1_Channel5->CCR  = 0;   
  DMA1_Channel5->CPAR  = ((uint32_t)&(TIM1->DMAR));   
  DMA1_Channel5->CMAR  = ((uint32_t)&buf[0]);   
  DMA1_Channel5->CNDTR = (4*(32+4))*2;   
  DMA1_Channel5->CCR  = DMA_CCR5_CIRC|DMA_CCR5_MINC|DMA_CCR5_PSIZE_0|DMA_CCR5_MSIZE_0|
  DMA_CCR5_PL|DMA_CCR5_DIR|DMA_CCR5_TCIE|DMA_CCR5_HTIE);   

DMA1->IFCR = ((uint32_t)0x0FFFFFFF);      // Clears all flags


uint32_t data0,data1,data2,data3;
uint8_t a=0x80;      
uint32_t b=0;
uint32_t c=1;   
uint32_t d=3;   

DMA1_Channel5->CCR |= DMA_CCR5_EN;

TIM1->CR1 |= TIM_CR1_CEN;      
uint32_t sp=4;      //50kHz
   

while (1) {

data0=(0x80|((c<<=1)<<8));      // 01
data1=(0x40|((b++)<<8));      // 02
data2=(0x20|((d<<=1)<<8));      // 04
data3=(0b10101010101010101010101001010101);   // AA

   
   
while (!(DMA1->ISR&DMA_ISR_HTIF5)) { ;}

W2Buf(data0,data1,Abuf1);

   (a==1)?(a=0x80):(a>>=1);
   if (c==0) c=1;
   if (d==0) d=3;
            
   if (!(TIM4->CR1&TIM_CR1_CEN)) {
           
         if (!(GPIOB->IDR & K2)) {
         sp++;
         if (sp==15) sp=0;
         TIM1->CR1   = 0;      
         TIM1->ARR = 8-1;   
         switch(sp) {
         case 0:       TIM1->PSC = 818-1;      break;   //11kHz
         case 1:       TIM1->PSC = 750-1;      break;   //12kHz
         case 2:       TIM1->PSC = 620-1;      break;   //14.5kHz
         case 3:       TIM1->PSC = 188-1;      break;   //48kHz
         case 4:       TIM1->PSC = 180-1;      break;   //50kHz
         case 5:       TIM1->PSC = 91-1;      break;   //99kHz
         case 6:       TIM1->PSC = 90-1;      break;   //100kHz
         case 7:       TIM1->PSC = 36-1;      break;   //250kHz
         case 8:       TIM1->PSC = 35-1;      break;   //257kHz
         case 9:       TIM1->PSC = 19-1;      break;   //473kHz
         case 10:       TIM1->PSC = 18-1;      break;   //500kHz
         case 11:       TIM1->PSC = 10-1;   TIM1->ARR = 9-1;      break;   //800kHz
         case 12:      TIM1->PSC = 11-1;      break;   //818kHz
         case 13:       TIM1->PSC = 9-1;      break;   //1000kHz
         case 14:       TIM1->PSC = 8-1;      break;   //1125kHz         
         }
            TIM1->EGR = TIM_EGR_UG;
            TIM1->CR1 |= TIM_CR1_CEN;   
            TIM4->CR1 |= TIM_CR1_CEN|TIM_CR1_OPM;
         }   // key pressed
   }   // time key
   
   while (!(DMA1->ISR&DMA_ISR_TCIF5)) {;}
   DMA1->IFCR = DMA_IFCR_CGIF5;   
W2Buf(data2,data3,Abuf2);      
}  // end while
}   // END main



void W2Buf(uint32_t w1,uint32_t w2,uint32_t Abuf) {
   uint32_t y=0x0004000F;   //
   uint32_t n=0x00040000;   
   uint32_t z=0;   //
   
   uint32_t *p = (uint32_t*)&buf[Abuf];   

   for (uint32_t i=0;i<32;i++) {(w1&1)?(*p=y):(*p=n); w1>>=1; p++;}
   for (uint32_t i=0;i<4; i++) {*p=z;   p++;}
   for (uint32_t i=0;i<32;i++) {(w2&1)?(*p=y):(*p=n); w2>>=1; p++;}
   for (uint32_t i=0;i<4; i++) {*p=z;   p++;}

   }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пн авг 08, 2022 07:23:14 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 196
Откуда: Россия, Омск
Рейтинг сообщения: 0
Забавно. А я для вывода битов в WS2812 использовал SPI с кольцевым буфером (фактически, буфером на два светодиода) и его заполнением через DMA по переходу через середину и конец буфера. Конкретно для диодов - отличное решение. Для более широких временнЫх интервалов, лучше всё же таймер.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пн авг 08, 2022 08:30:54 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Я для адресных светодиодов таймер с DMA использовал.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пн авг 08, 2022 18:58:59 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 2
в той приспособе (на blue pill) у меня получился I2S на любые (условно) скорость и размер слова. data и clock с двух каналов одного таймера.
а поскольку данные готовятся "в ручную", то и кодировку можно прикрутить разную, какую-то элементарно, какую-то чуть геморойней. поэтому и предложил.
формировать данные в буфере, а dma через таймер сам будет выталкивать на нужной скорости.

пишу "получился" потому, что цель была не s2i - это мои замуты с Arinc, по второму кругу. :)

без какого либо тактирования со стороны.

не вижу в чем затык, не нужен clock - просто не отдаете его, даже не формируете.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Ср авг 10, 2022 15:38:32 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 97
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1155
Рейтинг сообщения: 0
Поток произвольных битов легко сделать на LPC43xx. Там и периферия соответствующая имеется - SGPIO. Хоть на ввод хоть на вывод. Хоть с DMA хоть без. С макс. частотой <=102МГц (если не путаю).
Вроде в некоторых других линейках LPC SGPIO тоже есть.

SGPIO - это не костыли на GPIO+DMA. Совсем другой уровень.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пт авг 12, 2022 15:51:16 
Родился

Зарегистрирован: Ср мар 18, 2020 10:25:01
Сообщений: 14
Откуда: Москва
Рейтинг сообщения: 0
в той приспособе (на blue pill) у меня получился I2S на любые (условно) скорость и размер слова. data и clock с двух каналов одного таймера.
а поскольку данные готовятся "в ручную", то и кодировку можно прикрутить разную, какую-то элементарно, какую-то чуть геморойней. поэтому и предложил.
формировать данные в буфере, а dma через таймер сам будет выталкивать на нужной скорости.

пишу "получился" потому, что цель была не s2i - это мои замуты с Arinc, по второму кругу. :)

без какого либо тактирования со стороны.

не вижу в чем затык, не нужен clock - просто не отдаете его, даже не формируете.


Да, вы правы, насчет вывода, а как быть со входом. Ни SPI, ни I2C без тактирования из вне ничего не будет принимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Пт авг 12, 2022 16:59:29 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
Вам же дали грамотный совет- применяйте "шапку по Сеньке".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Ср авг 17, 2022 17:18:13 
Родился

Зарегистрирован: Ср мар 18, 2020 10:25:01
Сообщений: 14
Откуда: Москва
Рейтинг сообщения: 0
Уважаемые, может быть подскажите возможное решение вопроса: есть сформированный массив из n элементов (каждый 1 байт). Его нужно преобразовать в NRZI кодировку. Каким алгоритмом это можно сделать ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Ср авг 17, 2022 21:20:49 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 160
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
Представьте, как выглядит NRZI:
- если подряд идет два нулевых бита, состояние выхода не переключается.
- если соседние биты меняются из 1 в 0, состояние выхода не переключается.
- если соседние биты меняются из 0 в 1, состояние выхода переключится между битами на противоположное.
- если подряд идут два единичных бита, состояние выхода переключится между этими битами на противоположное.
(существует вариант, когда выход инвертируется при двух нулевых битах, а при двух единичных не изменяется)

Таким образом, есть 4 входных комбинации и 2 выходных состояния. Это надо и записать. Проверка состояние бита в языке Си делается через логическую операцию AND по маске, содержащей 1 в проверяемом разряде. Здесь нужно проверять два соседних бита. Можно сделать несколькими способами. Например вот так:
Код:
   for(int bit = 0; bit < 7; bit++)
   {
      if(((byte >> bit) & 0x03) < 0x2)
         change[bit] = FALSE;
      else
         change[bit] = TRUE;
   }

, где массив change[] содержит признак, требующий смены состояния на выходе (THUE) после передачи бита или оставляющий состояние выхода без изменения (FALSE).

PS. Кодирование NRZ и NRZI значительно отличается по виду. В NRZ смена состояния выхода на противоположное происходит при изменении двух соседних битов и по форме оно повторяет битовые измениния. А в NRZI алгоритм сложнее. Вам какое всё-таки нужно? Вначале вы писали про NRZ а сейчас NRZI хотите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Чт авг 18, 2022 10:18:41 
Родился

Зарегистрирован: Ср мар 18, 2020 10:25:01
Сообщений: 14
Откуда: Москва
Рейтинг сообщения: 0
MLX90640, спасибо. Сейчас принято решение про NRZI. Я понимаю как устроена кодировка NRZI. Вопрос в следующем: есть последовательность байтов, она может быть любой длины (ну в разумных пределах, естественно). Проблема в том, что в ручную, когда последовательность маленькая можно и в ручную построить последовательность. А вот когда она неизвестного размера.... Я понимаю, что NRZ и NRZI принципиально отличаются. Меня интересует NRZI. Просто про NRZ я написал для примера, там могла быть абсолютно любая кодировка.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Чт авг 18, 2022 16:22:49 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
А вот когда она неизвестного размера....
А в чём проблема держать во временной переменной последний бит и при переходе на следующий байт просто учитывать его?

ЗЫ: Про приколу накидал алгоритм с табличной перекодировкой. Compiler Explorer.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32Fxxx вывод последовательности битов
СообщениеДобавлено: Чт авг 18, 2022 18:46:36 
Родился

Зарегистрирован: Ср мар 18, 2020 10:25:01
Сообщений: 14
Откуда: Москва
Рейтинг сообщения: 0
VladislavS, спасибо.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: ESASHA и гости: 30


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y