STM32 Интерактивная шахматная доска.

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Идея.

1.Полноразмерная шахматная доска.
2.Контроллер STM32F103C6T6 с шахматным движком.
3.STM32 получает ход от доски в виде e2e4.
4.STM32 передает ход на доску в виде подсветки полей откуда - куда.
Что реализовано.
п.2 - STM32F103C6T6 с шахматным движком.
п.3 - частично
п.4 - частично
Написана прога под Виндовс для теста шахматного движка.
Коммуникация проги и движка осуществляется через esp8266.
IMG_20260616_122707.jpg
2026-06-19_14-19-11_gif_001.gif
Продолжение следует ...
 

poty

★★★★★★★
19 Фев 2020
3,653
1,048
А что будет передавать ход от доски? Какой механизм?
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
А что будет передавать ход от доски? Какой механизм?
Идея такая.
8 сдвиговых регистров 74HC165

IMG_20260502_094302..jpg
И в каждой клетке геркон или датчик Холла.
В архиве схема для Протеус 8
 

Вложения

Изменено:

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Кто готов подключиться к Проекту?
Что нужно на данный момент.
1.Для симуляции в Proteus.
В Proteus 8.8 SP1 симуляция max7219 и MATRIX-8x8 вместе с STM32F103C6T6 не работает как задумывалось, точнее вообще не работает.
В реальном железе max7219 с STM32F103C6T6 работает правильно.
С Arduino Nano - max7219 и MATRIX-8x8 в Proteus 8.8 SP1 и в железе работает правильно.
2.Сделать печатную плату.
Разводку в SprintLayout я сделаю сам.
3.Нужны 64 геркона или 64 датчика Холла.
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Может так кого нибудь заинтересует.
В архиве прога под Виндовс, прошивки для ESP8266-01 и STM32F103C6T6.
Схема простая - достаточно соединить RX-TX, TX-RX stm и esp.
Остальное (MAX) не обязательно.
Запустить прогу, подключиться к ESP и можно играть.
PS
Прошивка для STM32F103C6T6 отладочная, релиз немного меньше.
Я использую IAR EW for Arm 9.30.1.
 

Вложения

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
По пункту
1.Для симуляции в Proteus
В архиве два простых проекта для Proteus 8.8 SP1
Ардуино нано и STM.
На STM просто перемещающая точка по матрице
Кто сможет симулировать в Proteus проект max7219 и MATRIX-8x8 вместе с STM32F103C6T6
 

Вложения

poty

★★★★★★★
19 Фев 2020
3,653
1,048
@alexlaw, без распознавания фигур? Не, в таком варианте неинтересно.
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Изменено:

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Кто может помочь симулировать в Proteus проект max7219 и MATRIX-8x8 вместе с STM32F103C6T6 ?

Ответили мне на одном из форумов так

Добрый вечер.
Причина почти наверняка в несовершенстве модели SPI для STM32F103C6 в вашей версии Proteus (8.8 SP1) и в том, как эта модель обрабатывает быстрые команды.

Вот основные причины, почему симуляция с STM32 не работает, в то время как с Arduino Nano и в реальном железе все отлично.

1. Главный подозреваемый: Проблемы с моделью SPI в Proteus
Это самая вероятная причина. Моделирование сложных периферийных модулей, таких как SPI, в Proteus — это всегда компромисс между скоростью симуляции и точностью . Вы сталкиваетесь с его ограничениями:

Неполная эмуляция SPI: Модель SPI в вашей версии Proteus может просто "не успевать" или некорректно обрабатывать биты данных, которые посылает ваш STM32, особенно если частота SPI высокая . В результате MAX7219 получает "мусор" и не зажигает нужные светодиоды.

Скорость работы: Proteus эмулирует работу микроконтроллера значительно медленнее, чем он работает в реальности . Ваши 1-секундные задержки в симуляции могут превратиться в 5-10 секунд, а передача данных по SPI может идти с таймингами, которые не распознает модель MAX7219.

2. Разные уровни моделей: Arduino vs. STM32
Arduino Nano: Модель ATmega328P (сердце Arduino Nano) в Proteus очень зрелая и хорошо отлаженная, так как существует уже много лет. Ее цифровые выводы и SPI работают в симуляции предсказуемо.

STM32F103C6: Модель этого контроллера в Proteus — это тоже "актер", который имитирует работу, но не всегда делает это идеально, особенно для таких задач, как быстрая передача данных по SPI . Ваша версия 8.8 SP1 может иметь баги в модели SPI для STM32F1, которые были исправлены в более новых версиях.

3. Критическая уязвимость: Ток GPIO в симуляции
В Proteus есть известная особенность: выходной ток на симулируемых пинах STM32 очень мал . Если вы подключаете выводы STM32 напрямую ко входам MAX7219, модель может "видеть" логический 0, а не логическую 1, потому что у MAX7219 в симуляции другое входное сопротивление. На реальной плате все работает, так как реальный ток достаточен.

4. Конфигурация тактирования и "Опция байты"
Хотя вы говорите, что на реальном железе все работает, для STM32F103C6 есть нюансы, которые часто "убивают" симуляцию:

Частота: Убедитесь, что в настройках проекта (в Arduino IDE) и в свойствах самого микроконтроллера в Proteus (двойной клик по нему) установлена одинаковая частота, например, 8 МГц от внешнего кварца .

Flash-память: STM32F103C6 имеет 32 КБ Flash, а не 64, как C8. Ошибки в "Option Bytes" (защита памяти) на реальном чипе могут мешать, но в симуляции это может проявляться как полный отказ программы стартовать

PS
Пока та и не смог решить вопрос - симулировать в Proteus проект max7219 и MATRIX-8x8 вместе с STM32F103C6T6.

Код для STM32CubeMX касающийся max7219
max7219:
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define DECODE_MODE_REG     0x09
#define INTENSITY_REG       0x0A
#define SCAN_LIMIT_REG      0x0B
#define SHUTDOWN_REG        0x0C
#define DISPLAY_TEST_REG    0x0F
/* USER CODE END PD */

................

static void write_reg(uint8_t reg, uint8_t value) {
  uint8_t tx_data[2] = { reg, value };
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
  HAL_SPI_Transmit(&hspi1, tx_data, 2, 100);
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
}

static void set_row(uint8_t row_index) {
  write_reg(row_index + 1, 0xFF);
}

static void set_col(uint8_t col_index) {
  for (int i = 0; i < 8; i++) {
    write_reg(i + 1, 0x01 << col_index);
  }
}

static void clear(void) {
  for (int i = 0; i < 8; i++) {
    write_reg(i + 1, 0x00);
  }
}

static void max7219_init() {
  write_reg(DISPLAY_TEST_REG, 0);
  write_reg(SCAN_LIMIT_REG, 7);
  write_reg(DECODE_MODE_REG, 0);
  write_reg(SHUTDOWN_REG, 1);
  clear();
}
/* USER CODE END 0 */
Хотя я использую IAR EW for Arm 9.30.1.
 
Изменено:

Bruzzer

★★★★✩✩✩
23 Май 2020
810
251
На wokwi.com есть модель для STM32F103C8 (для C6 нет) можно попробовать там. (но возможно потребуется VPN)
Скажите в чем смысл использования Proteus ? В нем есть удобная отладка для STM32F103 ?
Я использовал Proteus только для AVR ( в основном 328) и были места, которые неправильно работали в Proteus, но правильно на wokwi. (наверно и наоборот тоже было, уже не помню). И отладчик PROTEUS для AVR 328 мне не понравился.
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Скажите в чем смысл использования Proteus ?
Мне нравится Протеус и если что то не работает и я не могу понять почему,то эта заноза не дает мне покоя.
В нем есть удобная отладка для STM32F103 ?
С отладкой пошаговой я так и не разобрался не в IAR EW for Arm не в SEGGER Embedded Studio 8.10b
Да могу подключиться к IAR и смотреть и менять переменные, но не пошагово отлаживать
На wokwi.com есть модель для STM32F103C8
Первый раз слышу, надо посмотреть
 

Вложения

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Наконец сделал блок управления (определения) хода фигур.
IMG_20260629_205337.jpgIMG_20260629_205947.jpgIMG_20260629_210103.jpg
Может и не очень красиво)))
Но это прототип, причем рабочий.
Жду герконы, заказал.
 

Эдуард Анисимов

★★★★★★★
23 Сен 2019
2,507
1,002
60
Марий-Эл
Мне нравится Протеус и если что то не работает и я не могу понять почему
Как бы он не нравился, но в 60% случаях он работает неправильно.
MAX7219 и без протеуса хорошо работает.
IAR для отладки полное говно. Keil получше, но мне не понравился.
CubeIDE неплох, но в последних версиях ST его испортили.
 

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
96
12
51
Не понятно, но очень интересно!
Если шахматный движок уже реализован на STM с использованием UART, то ...
может быть просто реализовать доску на ArduinoNano и подключить к STM через COMPIM?
Если протокол обмена известен, то я бы попробовал.
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Ни каких компьютеров.
Доска нужна для взаимодействия с человеком.
2.Контроллер STM32F103C6T6 с шахматным движком.
3.STM32 получает ход от доски в виде e2e4.
4.STM32 передает ход на доску в виде подсветки полей откуда - куда.
Сейчас можно играть через ESP, могу конечно в прогу и COM порт добавить.
Движок работает неплохо, пару раз меня сделал)))
 
Изменено:

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
96
12
51
Я в Proteus создам саму доску и соединю её с прошитой STM через USB-UART преобразователь.
Теперь, если у меня будет описание протокола обмена, то смогу написать программу для Arduini Nano, чтобы просимулировать её работу.
Потом можно и за реальный проект взяться. Хорошо бы как-то фиксировать касание матрицы для задания хода.
В принципе можно даже отказаться от AduinoNano, тогда вместо UART использовать 3-и выхода для подключения к доске.
Сигналы DCD, DSR, CTS можно через USB-UART передавать в Proteus через COMPIM.

1782763936829.png1782764041045.png
 
Изменено:

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
96
12
51
Хорошо. Вернёмся к п.1 - Полноразмерная шахматная доска. Из чего?

64-матрицы 8x8 под каждой датчик Холла?
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Вот для Протеус 8.8 SP1
Но поиграть в Протеусе не получится. Слишком Протеус тупит.
Симуляция.jpg
Если вы хорошо знаете Протеус, то помогите подружить STM и MAX7219 (именно в Протеусе)

Полноразмерная шахматная доска. Из чего?
clip0040_6.jpg
 

Вложения

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
71
2
Воронеж
Нашел интересный ресурс у Китайцев.
программа Proteus для MicroPython
Но как это работает?
Попробовал, но не запустился - max7219.pdsprj
Лог:
ISIS Release 9.01.02 (Build 42460) (C) Labcenter Electronics 1990- 2025.
Compiling design 'C:/17062026ve6/max7219.pdsprj'.
Netlist compilation completed OK.
Netlist linking completed OK.
Partition analysis completed OK.
Simulating partition [F2187544]
PROSPICE 9.00.00 (Build 42422) (C) Labcenter Electronics 1993-2025.
Loaded netlist 'C:\Users\CD86~1\AppData\Local\Temp\LISA5444.SDF' for design 'max7219.pdsprj'
Cannot identify source file name from the manifest: '.inf' [U1_CORE] @0.000000125s
Python execution terminated [U1_CORE] @0.000000125s
 

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
96
12
51
Я всё еще не понимаю Вас.. Если отложить, пока, симуляцию в сторону.
Поле из 64-х матриц. Каждая матрица - это шахматная клетка, где будет выводиться шахматная фигура или пустая клетка.
Касаясь магнитом такой клетки, указывается фигура, которая делает ход.
Касаясь следующей клетки, указывается куда делается ход.
Соответственно, схема должна передавать на STM ход пользователя, а так же принимать и отображать ход движка.
Сейчас роль доски выполняет программа под Windows. Надо заменить её какой-то схемой, подключаемой к STM также как и ESP (через UART).

Роль дублирующей доски также выполняет ATTINY 2313 c OLED-дисплеем, которая сидит на RX того же UART.

Если надо, чтобы сама STM всем управляла (не через UART) - дорабатываем прогу на STM без симуляции.
 
Изменено: