Увеличить 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мгц, но вопрос подойдут ли либы.