Увеличить SRAM УНО/НАНО через отдельный Atmega328p

Andezit
Offline
Зарегистрирован: 24.02.2020

У меня есть один проект, в котором присутствует 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();
  }
}

 

rkit
Offline
Зарегистрирован: 23.11.2016

нет

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Нет. У Меги много срама и специальная шина для ее рашшырения, у 328 такова нет. 

1 жызненное правило: С SD комфортнее работать на Меге. 

2. Библиотеку OLED лучше брать без экранного буфера. 

Andezit
Offline
Зарегистрирован: 24.02.2020

Сорян, че такое экранный буфер? + А если с оперативкой с видеокарты?

negavoid
Offline
Зарегистрирован: 09.07.2016

А нет её, видеокарты-то. Oled ssd1306 - это как монитор, а отдельного видеопроцессора нет - работу с монитором обеспечивает "центральный процессор" - то есть всё та же 328p. И для работы этого монитора библиотекой отжирается половина оперативки уны/наны на видеопамять, ну, как будто у вас видеокарта встройка intel - для её работы драйвер отжирает кусок оперативки. В случае с ардуиной можно взять другую библиотеку, которая не будет так делать.

PS #1 Можно ли увеличить оперативку вашего компа, который стоит у вас под столом, с помощью компа в соседней комнате?

kostyamat
Offline
Зарегистрирован: 16.11.2017

В три раза больше оперативы, при совместимости по ногам с Нано, вас устроит?
Покупайте нано-подобное на Atmega4808. Wavgad на Али уже во всю торгует такими.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Можно и разделить, на одной дисплей, на другой - всё остальное. Уж на это должно памяти хватить. Сцепить чем нибудь типа UART/SPI/I2C. Что называется из дерьма и палок

 

slider
Offline
Зарегистрирован: 17.06.2014

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