Kirill Lubinets

STM32f303vc вывод на блок семисегментного дисплея

3 сообщения в этой теме

Необходимо выводить на блок из 4 семисегментных индикаторов данные, управление лежит на двух сдвиговых регистрах:
Первый хранит в себе число на вывод, второй адрес(адресует на конкретный разряд в блоке).

 

Данные передаю через аппаратный SPI, настроенный в STM32CubeMX, но он у меня не работает.

Мой алгоритм

Задаю наборы для отображения на индикаторе и адресные наборы для перемещения по разрядам в блоке.

 uint8_t i,j = 0;
  uint8_t buff[8] = {1,2,3,4,5,6,7,8};
  uint8_t digit[10] = { 
      0xC0, // 0
      0xF9, // 1
      0xA4, // 2
      0xB0, // 3
      0x99, // 4
      0x92, // 5
      0x82, // 6
      0xF8, // 7
      0x80, // 8
      0x90, // 9 
  };
  uint8_t chr[4] = { 
      0x8,  
      0x4,  
      0x2,  
      0x1  
  };

Строб необходим для начала записи данных в регистр хранения сдвигового регистра

void strob(void){
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
HAL_Delay(85);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
HAL_Delay(85);
}

Функция передачи данных с использованием HAL функции и строба.
void spi_send(uint8_t *data, uint8_t it){
  strob();
 uint8_t *d = data;
  for(j = 0; j <=it; j++){
    d = &data[j];
  HAL_SPI_Transmit ( &hspi1, d, 8, 50); 
  }
  strob();
}

Отправляю смешение по элементам блока семисегментного индикатора.

  while (1)
  { i++;
    if(i<=4){
spi_send(chr, i);
  } else i = 4;
  i = -1;
  

s.7z

Файлы с IAR проектом и CubeMX проектом инициализации.

1dsfs.7z

Пример работы индикатора

video_2018-07-04_00-13-42.mp4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lexter    306

Похоже, да. :)

Без указания модели индикатора, без схемы подключения и с неработающим аппаратным SPI вряд ли кто будет в вашем коде разбираться.

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...

  • Похожие публикации

    • Автор: megavolt3101
      Здравствуйте уважаемые форумчане. Пытаюсь связать два микроконтроллера по шине LIN. В качестве мастера выбрал контроллер STM8S103F3P6 (Его Usart умеет только LIN MASTER). В качестве ведомого выбрал STM8S208RBT6 (У него 2 Усарта, один из которых умеет быть ведомым LIN) Собрал на двух макетных платах. LIN трансивер TJA1020 Прием и передача работают нормально. Но как дошло дело до защиты от потери линии связи, тут возникли проблемы. После обрыва линии связи и ее восстановления связь возобновляется. Но вот после короткого замыкания шины LIN ведомое (SLAVE) устройство намертво виснет. Точнее виснет в обработчике прерывания от USART3. Я пытался принудительно очистить флаг приема по узарту (UART3_FLAG_RXNE) и флаг приема хедер байта (UART3_FLAG_LHDF). А также скидывал флаг брэйк байта (UART3_FLAG_LBDF). Ничего не помогает программа не возвращается из прерывания по приему от USART_3. Но зато если в этот момент с ведущего устройства снова подать команду, то работоспособность ведомого устройства восстанавливается. Тоже самое помогает, если в обработчике прерывания по USART_3 принудительно подать рандомную команду на передачу. То есть, так как линия одна, она сама свою же команду и принимает, получается. Вроде все нормально, но как то коробит такой колхозный способ защиты от короткого замыкания шины. Подскажите, может я забываю еще какой нибудь скинуть флаг при случае коротыша на линии LIN или есть еще каrой нибудь правильный способ обойти защиту от потери связи после кратковременного замыкания на шине. Надеюсь тут есть люди, которые что-то делали с шиной LIN ?

      Прилагаю инициализацию для мастер устройства 
      UART1_Init( 9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
      UART1_LINBreakDetectionConfig( UART1_LINBREAKDETECTIONLENGTH_11BITS);
      UART1_ITConfig( UART1_IT_RXNE_OR, ENABLE);
      UART1_LINCmd( ENABLE);
      enableInterrupts();

      И для Ведомого устройства
      UART3_Init( 9600, UART3_WORDLENGTH_8D, UART3_STOPBITS_1, UART3_PARITY_NO, UART3_MODE_TXRX_ENABLE);
      UART3_LINConfig( UART3_LIN_MODE_SLAVE, UART3_LIN_AUTOSYNC_ENABLE,UART3_LIN_DIVUP_LBRR1);
      UART3_LINBreakDetectionConfig( UART3_LINBREAKDETECTIONLENGTH_11BITS);
      UART3_ITConfig( UART3_IT_RXNE_OR, ENABLE);
      UART3_ITConfig( UART3_IT_LBDF, ENABLE);
      UART3_ITConfig( UART3_IT_LHDF, ENABLE);
      UART3_LINCmd( ENABLE);
      enableInterrupts();

      А также обработчик прерывания для ведомого устройства
      //Обработчик прерывания для UART3.
      INTERRUPT_HANDLER( UART3_RX_IRQHandler, 21)
      {
      if( UART3_GetFlagStatus( UART3_FLAG_LHDF)){recUART3_Header=UART3_ReceiveData8(); UART3_ClearFlag(UART3_FLAG_LHDF);}
      if( UART3_GetFlagStatus( UART3_FLAG_RXNE)){recUART3_Data=UART3_ReceiveData8(); UART3_ClearFlag(UART3_FLAG_RXNE);}
      if( UART3_GetFlagStatus( UART3_FLAG_LBDF)){ UART3_ClearFlag( UART3_FLAG_LBDF);}
      if( UART3_GetFlagStatus(UART3_FLAG_OR_LHE)){UART3_SendData8(0x00);UART3_ClearFlag(UART3_FLAG_OR_LHE);}// Отправляю пустую команду через USART_3
      }
    • Автор: Krokodil007
      Продам
      ИВ-4, новые, с хранения, 183 шт. по 150 р/шт.
      Местонахождение: Саратовская обл.
      Возможна отправка почтой в любой регион РФ.


    • Автор: Sergey-Ufa
      Продам семисегментные вакуумные люминесцентные индикаторы:
      ИВ-4                 91шт.           50 руб./шт.

      https://rudatasheet.ru/tubes/iv4/
      ИВ-6               110 шт.         30 руб./шт.

      http://www.radiolamp.ru/sprav/ind/iv6.html
      ИВ-11              98 шт.           80 руб./шт.

      https://rudatasheet.ru/tubes/iv11/
      ИВ-27        7 шт.           80 руб./шт.

      http://yarelektronika.ru/files/image/ИВ-27М.PDF
      ИВЛ1-7/5      7 шт.           150 руб./шт.

      http://radio-hobby.org/uploads/datasheets/ivl/ivl1 7.5.pdf
      Цена без стоимости пересылки. Все индикаторы новые. Так как детали стеклянные и хрупкие, то требуется хорошая их упаковка и отправка возможна только посылкой. Поэтому для маленькой партии стоимость пересылки может равняться или даже быть больше стоимости деталей. При заказе большой партии возможна скидка. Все предложения в личку.
    • Автор: Радиосталкер
      Доброго времени суток. На китайских часах сгорели сегменты на индикаторе
      Точно такой же сегментный индикатор найти не могу, поэтому решил собрать из 4 отдельных индикаторов и применить светодиоды двоеточие(секунды)

      Микросхема T2488DD3

      У меня есть 4 штуки 7 - сегментные индикаторы и два светодиода(для секунды) и хочу их соединить с помощь по этой схеме:

      но в схеме на данный момент только 4 сегмента, а как применить к этой схеме двоеточие?
      Заранее спасибо!
    • Автор: Роман Туркин
      Уважаемые товарищи, ранее на форуме была подобная тема и решением вопроса был совет: использовать биполярный транзистор.
      Так же была указана схема подключения нагрузки.
      Ссылка на тему
      Прошу помочь с разводкой. Я примерно прикинул как это будет выглядеть, но я могу быть не прав, так как в схемотехнике почти полный 0.
      P.S. товарищи заранее спасибо! И это должно вклеиться в схему usb удлиннителя.

  • Сообщения

    • Доброго времени . 
      Встал вопрос питания светодиодной 50 Ватной матрицы от сети 220 - на питание от сети она и рассчитана ) 
      Питание матрицы в условиях автономности .. т.е. через преобразователь 12-220 В . 
      На Айли экспрес  был найден преобразователь на основе МС ( ШИМ) SG3525A ..Заявленная мощность нагрузки 150 Вт . 
      Вопрос.. Будет ли все это работать в связке ( матрица и данный преобразователь )? 
      Сомнения дилетанта закл. в след . 
      1) "не сотв. нагрузки по мощности преобразователя ( "недогруз "
      ПНа .. Слышал где то что может не запуститься.. 
      2) подойдет ли под подобный ПН вобще такая нагрузка ( в виде LED матрицы . ) ? 
      https://ru.aliexpress.com/item/DC-AC-12-110-200-220-280-150/32860160527.html?ws_ab_test=searchweb0_0%2Csearchweb201602_1_10065_10068_5730211_319_317_5729711_10696_453_10084_454_10083_10618_10307_10301_538_537_536_10059_10884_10889_10887_100031_321_322_10915_10103_10914_10911_10910-10889%2Csearchweb201603_51%2CppcSwitch_0&algo_pvid=2a4622e9-aa2c-44c9-b98e-e2712d8873f0&algo_expid=2a4622e9-aa2c-44c9-b98e-e2712d8873f0-9&af=10546&cv=89827&cn=42pjw9hlnjm71r3ov1h2cul4udxgqjew&dp=v5_42pjw9hlnjm71r3ov1h2cul4udxgqjew&af=10546&cv=89827&cn=42pjw9hlnjm71r3ov1h2cul4udxgqjew&dp=v5_42pjw9hlnjm71r3ov1h2cul4udxgqjew&afref=http%3A%2F%2Faway.vk.com%2Faway.ph&aff_platform=default&cpt=1545072393812&sk=ccfBY4yg&aff_trace_key=008830d5bad548a4bcde528239531318-1545072393812-08075-ccfBY4yg&terminal_id=49d7f3d168ea4ab992b44d6a905f38f7
    • Так просто редко бывает и он опять может быть пробит, нужен ремонт, а не просто замена...  
    • Просто макет рамы понравился. Человек (на драйве нашел) только собрался делать.    Согласен, с лампочками самый удобный вариант. Включай по одной и добавляй тем самым нагрузку. Но они дорогие однако, такие если ватт на 190 если. Это минимум 6 штук нужно.
    • А ну похвастай фотками в железе
    • Он имеет ввиду, что электролиты сдохли. Но как после первого глюка тогда он может проработать в течение 2-х лет без единого сбоя?