подключаю Arduino Uno micro-usb к max7219 к двум четырехразрядным индикаторам. подключение проверял; менял чип на запасной; писал скетчи в arduino ide с использованием стандартной библиотеки spi, с использованием библиотеки ledcontrol; но нет реакции, а точнее в любом случае горят все сегменты. help)
Простите заранее… Вы пример именно для этого устройства испытывали? (я spi именно для ардуино не трогал). Но использовал для at91sam3u4. Сталкивался с тем, что разные режимы для разных устройств встречаются. А именно касательно тактирования: 1) высокий уровень-фронт низкого уровня 2) высокий уровень-тыл низклгл уровня 3) низкий уровень-фронт высокого уровня 4) низкий уровень-тыл высокого уровня Имею ввиду, что каждый бит сопровождается переходом по одному из четырех по тактированию. (Чип селект на индикаторе думаю тоже прсаживаете портом на корпус) Попробуйте найти пример именно для этого устройства. Еще раз извините!
Если все 100% верно, загружайте пример для ledcontrol. А самое главное, сам на этом попадал, поставьте по питанию керамику и электролит на 470мкф. Есть у китайских клонов косяк при включении. Это не шутка из 10 штук без кондера запустилась одна раз-через-раз, с кондером работают все.
режим выставлял согласно требованиям из даташита. (старший бит вперед + настройки режимов передачи данных) сейчас переберу их все по очереди.. посмотрим. а так еще такой момент.. в даташите указана частота 10 mhz, а в arduino стандарт spi на 4. можно и это, конечно, проверить, но причина должна быть иная
вот подробная картина Код (C++): #include <SPI.h> // What pin on the Arduino connects to the LOAD/CS pin on the MAX7219/MAX7221 #define LOAD_PIN 10 /** * Transfers data to a MAX7219/MAX7221 register. * * @param address The register to load data into * @param value Value to store in the register */ void maxTransfer(uint8_t address, uint8_t value) { // Ensure LOAD/CS is LOW digitalWrite(LOAD_PIN, LOW); // Send the register address SPI.transfer(address); // Send the value SPI.transfer(value); // Tell chip to load in data digitalWrite(LOAD_PIN, HIGH); } void setup() { // Set load pin to output pinMode(LOAD_PIN, OUTPUT); // Reverse the SPI transfer to send the MSB first SPI.setBitOrder(MSBFIRST); // Start SPI SPI.begin(); // Run test // All LED segments should light up maxTransfer(0x0F, 0x01); delay(1000); maxTransfer(0x0F, 0x00); // Enable mode B maxTransfer(0x09, 0xFF); // Use lowest intensity maxTransfer(0x0A, 0x00); // Only scan one digit maxTransfer(0x0B, 0x00); // Turn on chip maxTransfer(0x0C, 0x01); } void loop() { // Loop through each code for (uint8_t i = 0; i < 0x10; ++i) { maxTransfer(0x01, i); delay(500); } }
А где "два четырехразрядных индикатора" на схеме ? 1 ногу отцепить от контроллера и прицепить к нулю чего происходит? 12 и 13 ноги поднять и потыкать туда пальцем ?
В общем, оказалось, что распиновка моего индикатора SMA410364 с общим анодом. думаю как теперь изменить схему подключения
Простите идиота (меня)! Но разве инвертировать сигналы (без библиотеки) нельзя? Как по сигналам A,B,C.... , так и по выбору разрядов индикатора.
Я имел ввиду(инверсию): Согласно ссылки: https://pro-diod.ru/electronica/max7219-max7221-drajver-dlya-svetodiodnoj-indikacii.html Тое сть выбор знакоместа не (0001...1000), а (1110...0111) ну и соответственно все сегменты светятся при 00000000 и не светятся при 11111111 Ну и: MAX7219 интерфейс Serial 3-Wire MAX7221 — Serial SP