Увеличить SRAM УНО/НАНО через отдельный Atmega328p
- Войдите на сайт для отправки комментариев
Пнд, 24/02/2020 - 20:05
У меня есть один проект, в котором присутствует SD-reader u OLED 128*64, и вместе они не уживаются - дисплей не работает. В плане: по отдельности в двух разных скетчах они работают, а в одном монитор делает херню:
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for (;;); } OUTPUT: SSD1306 allocation failed
Я почитал на англоязычных форумах, и узнал, что нужно иметь ардуинку с большим срамом, типо Меги. У меня присутствует УНО и НАНО с 328p на 2КБ срама и отдельная микросхема(та же). Возможно ли Увеличить SRAM УНО/НАНО через отдельный Atmega328p?
#include <SPI.h> #include <SD.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define NUMFLAKES 10 // Number of snowflakes in the animation example #define LOGO_HEIGHT 16 #define LOGO_WIDTH 16 #define path "/apps" #define CSPin 10 String *songList; File dir; int nSongs = 0; void setup() { Serial.begin(9600); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for (;;); } Serial.println("Program started"); if (!SD.begin(CSPin)) { Serial.println("SD initialization failed!"); while (1); } Serial.println("SD initialization done."); dir = SD.open(path); listSongs(dir); } void loop() { // put your main code here, to run repeatedly: } void listSongs(File folder){ nSongs = 0; while(true){ File entry = folder.openNextFile(); if(!entry){ folder.rewindDirectory(); break; }else{ nSongs++; } entry.close(); } Serial.print("Songs found:"); Serial.println(nSongs); songList = new String[nSongs]; Serial.println("Songs List:"); for(int i = 0; i < nSongs; i++){ File entry = folder.openNextFile(); songList[i] = entry.name(); entry.close(); display.display(); display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println(songList[i]); display.display(); } }
нет
Нет. У Меги много срама и специальная шина для ее рашшырения, у 328 такова нет.
1 жызненное правило: С SD комфортнее работать на Меге.
2. Библиотеку OLED лучше брать без экранного буфера.
Сорян, че такое экранный буфер? + А если с оперативкой с видеокарты?
А нет её, видеокарты-то. Oled ssd1306 - это как монитор, а отдельного видеопроцессора нет - работу с монитором обеспечивает "центральный процессор" - то есть всё та же 328p. И для работы этого монитора библиотекой отжирается половина оперативки уны/наны на видеопамять, ну, как будто у вас видеокарта встройка intel - для её работы драйвер отжирает кусок оперативки. В случае с ардуиной можно взять другую библиотеку, которая не будет так делать.
PS #1 Можно ли увеличить оперативку вашего компа, который стоит у вас под столом, с помощью компа в соседней комнате?
В три раза больше оперативы, при совместимости по ногам с Нано, вас устроит?
Покупайте нано-подобное на Atmega4808. Wavgad на Али уже во всю торгует такими.
Можно и разделить, на одной дисплей, на другой - всё остальное. Уж на это должно памяти хватить. Сцепить чем нибудь типа UART/SPI/I2C. Что называется из дерьма и палок
1. есть много OLED либ , есть совсем мало потребляющие оперативы и кода.
2. есть 8 МегаБайт SPI оперативы PSRAM в SOP-8 , по 60руб . https://aliexpress.ru/item/4000242457828.html
но это для ваших личных целей , а не для либ.
библиотека для arduino IDE в esp32 cam .
в инете есть и даташит со всеми диаграммами если что.
не проверял на atmega328 . надо питание снижать до 3.3в , или преобразователи уровней или параллельно микроSD , только отдельно CS. иль вавгат 328 , она на 3.3в может 32мгц, но вопрос подойдут ли либы.