Комментарии 17
Использовать ногодрыганье когда есть аппаратный SPI - такое себе.
Вот тут посмотрите как реализована работа по SPI с этим чипом: https://github.com/i2make/TM1638_using_hardwareSPI/blob/91d131355ccdd123a5a64fbfb2d4ce565ab7c0c8/src/TM16XX.cpp#L141
"Всё украдено написано до нас" :)
Самому учиться программировать интересней. Но ... В этой библиотеке используется стандартная функция shiftOut() в которой по сути используется то же самое ногодрыганье: https://github.com/arduino/ArduinoCore-avr/blob/63092126a406402022f943ac048fa195ed7e944b/cores/arduino/wiring_shift.c#L40
Я не спорю хорошо это или плохо, но не лучше ли сразу учиться использовать нужные интерфейсы правильно?
Изначально мне нужно было проверить работоспособность купленной платы, но потом я решила воспользоваться ситуацией и детальней разобраться с тем как устроен и работает SPI. Я сейчас пытаюсь реализовать аппаратный spi на fpga, опять же исключительно в целях самообразования. И «ногодрыганье» мне помогло это получше в голове уложить.
Честно говоря, я долго думала, делиться своим «велосипедом» или нет,но если бы не поделилась, то не получила бы столько ценных советов и ссылок
В этой микросхеме самое интересное, что там есть вариант хитрого подключения когда один байт это не все сегменты одного разряда индикатора, а один сегмент восьми разрядов. И вот там код выходит прикольный.
Я писал полностью свою реализацию отображения на нем. У меня волосы зашевелились на голове когда я прочитал описание адресации сегментов )))))
есть вариант хитрого подключения
Так а в чем проблема? Не используйте индикаторы с общим анодом, для индикаторов с общим катодом там все норм. А если вдруг надо - то перекодировать буфер, ортогонально развернув индикацию, - ну несколько минут для написания программы и немного тактов для его обслуживания.
А вот написать полудуплекс для чтения клавиатуры совсестно с выводом индикации на TM1638 при работе на пристойных скоростях SPI (>2 MHz, ну для Ардуино пристойных) - ну задачка уже поинтереснее.
Я когда стала читать на неё описание, не могла никак принять, почему именно так в ней всё странно расположено
может и велосипед, но мне нравится что детально разжевано
Раз уж влезла в программирование мк, не пожалей 7-10т.р. на простенький осциллограф. На пару каналов, хотя бы. Тогда вопросы "почему не работает/работает не так" будут решаться быстрее.
Или, как вариант, макетка FPGA с включённым анализатором сигналов. Особенно если потом в область verilog залезть захочется.
У меня есть возможность воспользоваться осциллографом, но почему-то конкретно в этом случае мне такая мысль в голову не пришла
За логический анализатор на FPGA отдельное спасибо! это интересно, обязательно попробую воспользоваться
В подавляющем большинстве случаев для начала достаточно логического анализатора на cy7c68013a за 400руб.

Параметр LSBFIRST указывает, что передача будет осуществляться старшим битом вперёд (да, в документации указано, что передача должна осуществляться именно так).
Показания документации на shiftOut()
расходятся с вашими:
MSBFIRST or LSBFIRST. (Most Significant Bit First, or, Least Significant Bit First).
Но вообще-то он не SPI, а I2C без адреса, отправляется на него по I2C нормально, а вот чтение несколько сложнее.
Подключаем модуль TM1638 к Arduino без библиотеки SPI