SPI.H библиотека для управления APA102

Я пытаюсь запустить полосу адресуемых светодиодов APA102 с помощью Mini pro.

Ту же полосу я могу запустить с помощью raspberry pi с помощью SPI, поэтому я знаю, что полоса работает и какие данные мне нужно отправить, чтобы она заработала.

Мой текущий код выглядит следующим образом, и я сократил его до минимума, как я его вижу.

Все это компилируется и запускается, но на светодиодной ленте ничего нет. В stip есть только данные и часы, которые должны быть подключены к CLK, и данные для подключения к MOSI.

Все, что я хочу, это иметь возможность отправлять 32-битное значение,

Я также пытался

uint32_t value = 0xE0ffffff 

но опять не повезло

void setup() {
  // put your setup code here, to run once:

  Serial.begin(9600);

  SPI.begin();

  byte start = 0x00;
  SPI.transfer(start);
  SPI.transfer(start);
  SPI.transfer(start);
  SPI.transfer(start);

  SPI.transfer(0xEF);
  SPI.transfer(255);
  SPI.transfer(0);
  SPI.transfer(10);
}

, 👍0

Обсуждение

Проверьте здесь https://www.pololu.com/product/2552/resources. Библиотека AdaFruit может быть настроена для HW SPI., @Mikael Patel

Я играл с этой библиотекой, и она отлично работает, но я не вижу, чтобы вы могли настроить ее на использование SPI, вы можете переключиться на FastGPIO, но не на SPI., @DevilWAH

Как я уже сказал, проверьте библиотеку AdaFruit https://github.com/adafruit/Adafruit_DotStar., @Mikael Patel

Приношу извинения, я нажал на первую библиотеку, которая не была библиотекой Adafruit. Получил его сейчас и просматривал. Спасибо, @DevilWAH

ХОРОШО, свежий взгляд, и теперь все работает нормально, у меня возникает странная проблема, когда код, который он загрузил в Ardunio, загорается случайным образом на полосе. но если я сброшу Ardunio и включу питание полосы, все будет работать так, как ожидалось. Не уверен, что это за поведение, но, похоже, оно происходит только после загрузки, когда подключена последовательная связь. В любом случае спасибо за ссылку, я не использую там библиотеку, но, глядя на нее, я вижу, как они это делают, и они делают то же самое со мной, я пишу 32-битные файлы, используя spi.transfer(буфер, размер), и это кажется хорошим :), @DevilWAH

Я предполагаю, что случайные огни при загрузке связаны с сигналами SPI, используемыми при программировании прошивки. Я бы рекомендовал отключить светодиоды во время загрузки, выключить питание, подключить светодиод и затем включить питание. Альтернативно добавление сигнала выбора микросхемы, например, блокирование тактового сигнала., @Mikael Patel

Давайте [продолжим это обсуждение в чате](http://chat.stackexchange.com/rooms/55603/discussion-between-devilwah-and-mikael-patel)., @DevilWAH


1 ответ


-1

взгляните на таблицу данных, сравните ее с вашим кодом на предмет любых несоответствий.

основываясь на быстром чтении, ваш код не соответствует спецификации.

приведение коммуникаций в рутину помогло бы сохранить единообразие.

,

В чем проблема с моим кодом? для листа данных требуется 32-битный начальный кадр из нулей, за которым следует N номеров управляющих фей, которые сами по себе составляют 32 бита (яркость, КРАСНЫЙ, зеленый, синий). как только все кадры управления будут отправлены, вам нужно будет отправить тактовые циклы, чтобы переместить команды в конец полосы (это не требуется для одного светодиода) . Как я уже говорил, одни и те же кадры отлично работают на raspberry pi, поэтому проблема не в структуре данных. Что касается того, чтобы поместить это в рутину, я сделаю это либуарием, как только у меня будет правильный синтаксис., @DevilWAH