Использование двух SPI устройств (Nano + SPIFlash + LCD)
- Войдите на сайт для отправки комментариев
К ардуине нано (подходит из-за размера), подключены два устройства:
Winbond flash на 4Мб и Nokia 5510 lcd.
Чтобы не было ограничений памяти, использую минимальную библиотеку для дисплея: https://github.com/platisd/nokia-5110-lcd-library/
Для памяти отлично подошла эта библиотека: https://github.com/Marzogh/SPIMemory
Подключены оба устройства. Нужно выводить картинки из подключенной памяти на дисплей. Экран отлично работает, когда подключены оба устройства (там указаны используемые пины), если я вызываю его так:
#include <Nokia_LCD.h> Nokia_LCD lcd(3 /* CLK */, 4 /* DIN */, 5 /* DC */, 6 /* CE */, 7 /* RST */); void setup() { // Initialize the screen lcd.begin(); // Set the contrast lcd.setContrast(60); // Clear the screen lcd.clear(false); //delay(100); // Draw the image lcd.draw(testimage, 504, true);
Когда я выполняю код с подключенной флеш памятью, он выводит на экран треш и перестаёт нормально рисовать, при этом данные из памяти отлично считываются и выводятся в серийный порт:
#include<SPIMemory.h> #include <Nokia_LCD.h> SPIFlash flash(10); //CS 10, D0 12, CLK 13, DI 11 Nokia_LCD lcd(3 /* CLK */, 4 /* DIN */, 5 /* DC */, 6 /* CE */, 7 /* RST */); void setup() { Serial.begin(9600); Serial.println("Accesing flash..."); flash.begin(); readbytes_toserial(); // read bytes and print to serial Serial.println(); lcd.begin(); // Set the contrast lcd.setContrast(60); // Good values are usualy between 40 and 60 // Clear the screen by filling it with pixels lcd.clear(false); lcd.draw(testimg, 504, true); }
Как использовать оба устройства одновременно правильно?
ИМХО, проблема может быть в нехватке памяти. В Сериал вы выводите свои байты по одному, а на экран выпихиваете весь массив разом. Попробуйте и на экран выводить картинку побайтно, считали один байт - вывели, потом другой.
Пфф, даже стыдно сказать, я затупил. Перечитал сорцы библиотеки, нашёл место
Ну и как бы всё понятно, нужно было false поставить, чтобы из progmem не читал. Теперь 2 загруженных массива спокойно с картинками одновременно в оперативке и отрисовывается, всё занимает 1593 байт (77%) динамической памяти