Например TDA7294

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





Текущее время: Ср апр 24, 2024 00:40:37

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


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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Проблемы с каскадом на MAX7219 + STM32F103C8
СообщениеДобавлено: Вс июн 07, 2020 20:16:23 
Родился

Зарегистрирован: Пт фев 07, 2014 23:53:17
Сообщений: 13
Рейтинг сообщения: 0
Добрый день уважаемые! Прошу помощи в запуске каскада. Одна микросхема работает нормально, при подключении второй информация на индикаторах дублируется или две цифры накладываются друг на друга (одна ярче вторая тусклее).
инициализация SPI
Спойлер
Код:
 
    SPI_InitTypeDef SPIConf;
    SPIConf.SPI_Direction = SPI_Direction_1Line_Tx;
    SPIConf.SPI_Mode = SPI_Mode_Master;
    SPIConf.SPI_DataSize = SPI_DataSize_16b;
    SPIConf.SPI_CPOL = SPI_CPOL_Low;
    SPIConf.SPI_CPHA = SPI_CPHA_1Edge;
    SPIConf.SPI_NSS = SPI_NSS_Soft | SPI_NSSInternalSoft_Set;
    SPIConf.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    SPIConf.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_Init(SPI1, &SPIConf);
    SPI_Cmd(SPI1, ENABLE);

инициализация GPIO
Спойлер
Код:
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);
    GPIO_InitTypeDef PORT;
    PORT.GPIO_Pin   = SCK_Pin | MOSI_Pin;
    PORT.GPIO_Speed = GPIO_Speed_2MHz;
    PORT.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &PORT);
    PORT.GPIO_Pin   = SS_Pin;
    PORT.GPIO_Speed = GPIO_Speed_2MHz;
    PORT.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &PORT);

инициализация MAX7219
Спойлер
Код:
    SPISend(OP_DISPLAYTEST,0);
    SPISend(OP_SHUTDOWN,1);
    SPISend(OP_SCANLIMIT, SCANLIMIT);
    SPISend(OP_DECODEMODE,DECODEMODE);
    SPISend(OP_INTENSITY, 1);

отправка данных
Спойлер
Код:
     for(;;){ 
     GPIO_ResetBits(GPIOA, SS_Pin);
      while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
      SPISend(OP_DIGIT7, 8);
      SPISend(OP_NOOP, 0x0000 );       
      while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
      GPIO_SetBits(GPIOA, SS_Pin);

      GPIO_ResetBits(GPIOA, SS_Pin);
      while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
      SPISend(OP_DIGIT7, 1);
      while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
      GPIO_SetBits(GPIOA, SS_Pin);}


Добавлено after 1 hour 7 minutes 15 seconds:
соединены так
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблемы с каскадом на MAX7219 + STM32F103C8
СообщениеДобавлено: Пн июн 08, 2020 06:46:00 
Встал на лапы

Карма: 3
Рейтинг сообщений: 6
Зарегистрирован: Пн окт 01, 2018 09:19:51
Сообщений: 127
Рейтинг сообщения: 0
Прерывание
Код:
void SPI2_IRQHandler( void ) {
  if ( SPI2->SR & SPI_SR_RXNE ) {
    SPI_RBuffer[SPI_RPos++] = SPI2->DR;
      if ( ++SPI_RPos == SPI_RCount )
        SPI_RPos = 0;

    if ( SPI_SCount ) {
      if ( ( SPI_SCount & 0x7 ) == 0 ) {
        GPIOB->ODR |=  GPIO_ODR_ODR12;
        GPIOB->ODR &= ~GPIO_ODR_ODR12;
      }
      SPI2->DR = SPI_SBuffer[SPI_SPos++];
      SPI_SCount--;
    } else {
      GPIOB->ODR |=  GPIO_ODR_ODR12;
      SPI2->CR2  &= ~SPI_CR2_RXNEIE;
    }
  }
}


формирование посылки
Код:
uint32_t temp;

  while ( SPI_SCount ) {}
  SPI2->CR2  &= ~SPI_CR2_RXNEIE;
  GPIOB->ODR &= ~GPIO_ODR_ODR12;
  for ( temp = 0; temp < 8; temp++ ) {
    SPI_SBuffer[temp * 8 + 0] = temp + 1;
    SPI_SBuffer[temp * 8 + 1] = DATA[ temp + 24 ];
    SPI_SBuffer[temp * 8 + 2] = temp + 1;
    SPI_SBuffer[temp * 8 + 3] = DATA[ temp + 16 ];
    SPI_SBuffer[temp * 8 + 4] = temp + 1;
    SPI_SBuffer[temp * 8 + 5] = DATA[ temp + 8 ];
    SPI_SBuffer[temp * 8 + 6] = temp + 1;
    SPI_SBuffer[temp * 8 + 7] = DATA[ temp + 0 ];
  }
  SPI_SPos    = 1;
  SPI_SCount  = 63;
  SPI2->DR    = SPI_SBuffer[0];
  SPI2->CR2  |= SPI_CR2_RXNEIE;


GPIO_ODR_ODR12 - строб

4 последовательно включенных макса


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Проблемы с каскадом на MAX7219 + STM32F103C8
СообщениеДобавлено: Пн июн 08, 2020 15:51:30 
Родился

Зарегистрирован: Пт фев 07, 2014 23:53:17
Сообщений: 13
Рейтинг сообщения: 0
imsushka, Спасибо.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


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

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


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