Jump to content
Kirill Lubinets

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

Recommended Posts

Необходимо выводить на блок из 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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Конденсаторы Panasonic. Часть 4. Полимеры – номенклатура

В заключительной, четвертой статье из цикла «Конденсаторы Panasonic» рассматриваются основные достоинства и особенности использования конденсаторов этого японского производителя на основе полимерной технологии. Главной конструктивной особенностью таких конденсаторов является полимерный материал, используемый в качестве проводящего слоя. Полимер обеспечивает конденсаторам высокую электрическую проводимость и пониженное эквивалентное сопротивление (ESR). Номинальная емкость и ESR отличается в данном случае высокой стабильностью во всем рабочем диапазоне температур. А повышенная емкость при низком ESR идеальна для решения задач шумоподавления и ограничения токовых паразитных импульсов в широком частотном диапазоне.

Читать статью

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By n_angelo
      Привет, знатоки. Написал свою первую программу для контроллера STM8L152C6T6 (STM8L-Discovery). Это, собственно, моя первая программа для контроллеров вообще. Я многого не знаю и не понимаю. Возможно ваш ответ на мой вопрос будет банален.
      Используемая периферия: DAC, DMA, TIM4, CLK, GPIO
      Задача у программы такая:
      В EEPROM зашит один период синусоиды с дискретизацией 44100Гц. Период занимает ровно 101 байт, что по сути должно быть равно 2,29мс (1/44100*101). В коде программы только конфигурация периферии, одно прерывание на кнопке и пустой бесконечный цикл, который ничего не делает. Всю работу выполняет таймер, который настроен выдавать запрос к DMA на каждые 1/44100 (ядро тактируется 2мГц, таймер считает до 45). В свою очередь DMA забирает из EEPROM по одному байту на каждый запрос от таймера и передаёт его в DAC. Далее DAC выводит бесконечную синусоиду на ногу PF0. Прерывание на кнопке запускает весь этот механизм и зажигает светодиод.
      Проблема:
      Измеряя ногу PF0 осциллографом было замечено, что период синусоиды занимает около ≈4мс. Фото под катом.
      Меня это расстроило. Экспериментально выяснилось, что стоит только вписать в бесконечный цикл какую-нибудь проверку, например, [если значение текущего байта синусоиды = 0xFF, то зажечь светодиод, если 0x00, то потушить], то осциллограф показывает правильный тайминг в 2(с копейками)мс. В принципе в теле цикла может быть что угодно, кроме пустоты, и тайминг налаживается.
      Я не могу отдебажить дизассемблер, т.к. его не знаю. Это у меня в планах. Но я очень хочу понять, что происходит и почему пустой цикл рушит тайминг.
      Спасибо.
       
       
       
       
    • By n_angelo
      Привет. Хочу узнать ваше мнение. Я новичок в embedded. Можно сказать, что пришел с веба. Малость Python, JS, C. Меня, конечно, предупреждали начать с AVR, но я уверенный в себе решил сразу залезть на STM32. Вынашивая идею для проекта, параллельно курив Reference Manual и Data Sheet по STM32, я понял что его будет слишком жирно для проекта. Я перескочил на STM8L. И тут меня начал огорчать мир embedded. При переходе между stm8 и stm32 нужно менять IDE (TrueStudio на STVD). Во избежание таких курьёзов я пересаживаюсь на IAR. В процессе подключения родной библиотеки от ST, понимаю что библиотека от IAR для того же самого STM8L152C6T6 дико отличается (макросы, структуры). Привет веб-разработка. Как такое могло произойти, что под один и тот же контроллер ST даёт одну библиотеку, а IAR другую. И нигде в уроках тебя не предупредят об этом. Ну, ребят, у меня всего одна жизнь. Вы уже договоритесь там между собой? Придите к единому стандарту. Или они так решили новичков завендерлочить? Моё мнение (не претендует на правильное): пробираясь сквозь тернии популярной архитектуры ARM, инфраструктуры, инструментария, забываешь про бизнес-логику устройств. А еще просто пропасть между "я ничего не понимаю" и "господи, я зажег светодиод". Речь не о копипастерах с уроков, а действительно понимая что ты делаешь, в каком регистре, что меняешь. Это путь в 2000 (а то и больше) страниц на английском перечитанных по несколько раз, чтобы отоложилось. И в конце тебя ждут разные версии одной и той же библиотки в разных IDE. И сидишь вдупляешь... ну почему... я же в правильный регистр кладу правильную маску... ох, наболело. Такое ощущение что не для людей это всё делали, не для людей.
      Ваше мнение?
    • By WDGRAF
      Газоразрядная индикаторная панель ГИП, 2ШТ. на плате.
      3000р. торг.

       
    • By Olga Kovin
      Индикатор ИВ-11. С хранения. Групповая упаковка по 100шт. Год выпуска: 1985-1988. В наличии: 1500шт. Цена: 35р/шт.     
      Индикатор ИЛЦ1-8/8.  С хранения. Групповая упаковка по 6шт. Год выпуска: 1990. В наличии: 320шт. Цена:  60р/шт.     
      Лампа генераторная ГМИ-42Б. С хранения, в упаковке. Паспорта нет. Год выпуска: 1986. В наличии: 1шт. Цена: 10000р    
      Вольтамперметр М2051. С хранения, в упаковке.  Есть ЗИП. Присутствуют следы коррозии (см. фото). Исправен. В наличии: 1шт. Цена: 3500р     
      Амперметр Э538. С хранения, в упаковке. В наличии: 9шт. Цена: 3000р/шт.      
      Вольтметр Э543. С хранения, в упаковке. В наличии: 14шт. Цена: 2300р/шт.     
      Вольтметр Э544. С хранения, в упаковке. В наличии: 20шт. Цена: 3300р/шт.    
      Секундомер ПВ-53Щ. С хранения, в упаковке. В наличии: 58шт. Цена: 800р/шт.   
       
      Саратовская обл., г. Энгельс.
      Отправим: почтой, транспортной компанией, в Москву - с курьером.
      Наличный-безналичный расчет
      Контакты: 
      Ольга
      Моб. тел.:+7904-240-51-17.
      E-mail: olgalosewa86@mail.ru























    • By D.Rash
      Всем доброго времени суток.Продолжаю тему ремонта весовых индикаторов CAS.Через 6 лет после первой публикации по ремонту CAS 
      https://forum.cxem.net/index.php?/topic/119709-не-работает-бп-на-top245yn-для-весов-cas-ci-6000a/
      мне в руки попал весовой индикатор CAS CI-5010A.
      Неисправность  - выдаёт ошибку после самотестирования при включении: CH 02, что в мануале расшифровано как  " Некорректно подключен тензодатчик или ошибка в модуле АЦП."
      Во включенном состоянии мерцают два крайних разряда семиразрядного вакуумно-люминесцентного индикатора  (F52b (7DIGIT))
      Хозяин индикатора уверяет что сбой произошёл после скачка напряжения второй раз.В первый раз сервис поменял весь блок по гарантии.Причину неисправности обозначили так :"Вышел из строя АЦП".
      Есть у кого варианты куда начинать копать? С цепями питания более менее понятно( в теме по ссылке выше разбирали), здесь симптомы другие...

  • Сообщения

    • А почему именно 600 ом  ? Соотношение 600:8 - в динамик придёт одна восьмидесятая часть звука  Динамик 32...50 ом и никаких дополнительных резисторов. В теме это всё мильйон раз обсуждалось, не надо лениться пользоваться поиском по теме.
    • Перемотал полностью трансформатор(первичка 45 вит.,вторички-4 по13вит.),сделал перерасчет в обновленной версии программы-всё сходится,но,напряжение падает на 5-5,в и стабильно держится хоть ты тресни.
    • Я понимаю, когда речь идет о качестве, но не о громкости. Представьте себе компьютерные АС, которых не слышно при подключении к встроенной звуковухе. 
    • А вот Вам доброе лицо нашей артистки Марии Кожевниковой (35лет). Матери троих детей. Звезды сериала "Универ". Оцените! Какие чудеса творит косметика. Фото без макияжа и с макияжем.
    • Не, кина не смотрел. Я просто знаю, что простые схемы "от любого пульта" корректно не работают. Для этого мне даже кина не надо показывать. Простые схемы самые нестабильные.
    • это чё очередной ушник ретро при таких позорных мощностях  с такой искажухой  или конструкция для начинающих для развития двигательных навыков паяния плат а там питалово 75 вольтей и укусить может нехило)))))))) ? 2030 таким в руки !)))
  • Покупай!

×
×
  • Create New...