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);
}
@DevilWAH, 👍0
Обсуждение1 ответ
взгляните на таблицу данных, сравните ее с вашим кодом на предмет любых несоответствий.
основываясь на быстром чтении, ваш код не соответствует спецификации.
приведение коммуникаций в рутину помогло бы сохранить единообразие.
В чем проблема с моим кодом? для листа данных требуется 32-битный начальный кадр из нулей, за которым следует N номеров управляющих фей, которые сами по себе составляют 32 бита (яркость, КРАСНЫЙ, зеленый, синий). как только все кадры управления будут отправлены, вам нужно будет отправить тактовые циклы, чтобы переместить команды в конец полосы (это не требуется для одного светодиода) . Как я уже говорил, одни и те же кадры отлично работают на raspberry pi, поэтому проблема не в структуре данных. Что касается того, чтобы поместить это в рутину, я сделаю это либуарием, как только у меня будет правильный синтаксис., @DevilWAH
- LoRa перестает работать через несколько часов. Кнопка сброса Arduino не работает
- Сбой при записи данных MPU-6050 на SD-карту
- Как использовать SPI на Arduino?
- Как увеличить скорость записи на SD-карту в Ардуино
- Как считывать данные с помощью Arduino SPI
- Как передать более 1 байта сразу по шине SPI?
- avrdude: stk500_getsync(): not in sync: resp=0x00
- Ошибка "avrdude:stk500_recv(): programmer is not responding" при загрузке скетча в Arduino Pro Mini
Проверьте здесь 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