OLED SSD1306 variabili globali al 73%

Ciao a tutti, chiedo il perché installando le librerie per il funzionamento del SSD1306 consuma cosi tanto le variabili. Guardando dei video su youtube ne consuma poco più del 40%

“errore” presunto nel caricamento:

Lo sketch usa 11646 byte (36%) dello spazio disponibile per i programmi. Il massimo è 32256 byte.
Le variabili globali usano 1511 byte (73%) di memoria dinamica, lasciando altri 537 byte liberi per le variabili locali. Il massimo è 2048 byte.

codice inserito su arduino uno R3:

/*********************************************************************
This is an example for our Monochrome OLEDs based on SSD1306 drivers

  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/category/63_98

This example is for a 128x64 size display using I2C to communicate
3 pins are required to interface (2 I2C and one reset)

Adafruit invests time and resources providing this open source code, 
please support Adafruit and open-source hardware by purchasing 
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries.  
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

/*
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif*/

int couter = 0;

void setup()   {                
  Serial.begin(9600);

  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
  // init done
  
  // Clear the buffer.
  display.clearDisplay();  
}

void loop() 
{
  display.setTextSize(1);
  display.setTextColor(WHITE);

  while (couter < 55){
  display.setCursor(couter,couter);
  display.println("Hello world!");
  couter ++;
  display.display();
  display.clearDisplay();
  delay(5);
  }

while (couter > 1){
  display.setCursor(couter,couter);
  display.println("Hello world!");
  couter --;
  display.display();
  display.clearDisplay();
  delay(5);
  }
}

Vi ringrazio per l’aiuto

Scusate mi sa che ho sbagliato la posizione del post andava Software non in Hardware : - [

Prova u8glib (googla). La 1, non la 2.

grazie SukkoPera va al 12%, ma come mai fa un consumo cosi elevato?

Per ottimizzare la velocità di aggiornamento degli oled con controller SSD1306 è meglio usare un buffer da 1k, 128*64 = 8192 bit ovvero 1 kB, dove prima viene fatto l'aggiornamento della videata e poi viene trasferito in toto nella ram del display, da qui l'occupazione di 1 k ram più quella normalmente richiesta.
La u8glib permette di usare buffer di dimensioni minori, da un lato hai meno occupazione di ram, dall'altro lato perdi abbastanza in velocità di refresh del display.
L'occupazione della flash invece dipende molto da quanti, quali font, vengono caricati ed eventuali icone, in tutti i casi il solo software per la gestione del display è abbastanza "ingombrante" di suo.
Detto in altri termini, con un Atmega328 non si riesce a fare più di tanto con un display grafico, meglio passare a micro con più flash e ram.

Grazie Astrobeed in poche parole devo passare a un mega giusto!

Dipende da cosa devi fare e che performance vuoi. Una Uno può essere sufficiente se non devi fare qualcosa di troppo complicato e non devi aggiornare lo schermo troppo spesso.

SukkoPera:
...e non devi aggiornare lo schermo troppo spesso.

seguivo questo 3d... cosa intendi per troppo spesso? nel senso, quale frequenza intendi quando parli di troppo spesso?
io con un i2c oled con aggiornamento ogni 5 millis non da problemi....

miky_police:
io con un i2c oled con aggiornamento ogni 5 millis non da problemi....

:o :o :o :o
Quale è Il senso di aggiornare un display ogni 5 millisecondi ? ? ?

Guglielmo

gpb01:
:o :o :o :o
Quale è Il senso di aggiornare un display ogni 5 millisecondi ? ? ?

Guglielmo

:smiley: in effetti è un po esagerato… e comunque avevo pensato di creare una specie di refresh ogni volta si tocchi un comando per modificare appunto la “videata” con i nuovi dati…
rimane il fatto che ogni 5 millis non da problemi :smiley:

miky_police:
rimane il fatto che ogni 5 millis non da problemi :smiley:

... ti rendi conto vero che la permanenza dell'immagine sulla retina è dai 20 agli 80 millisecondi ?

Guglielmo

gpb01:
... ti rendi conto vero che la permanenza dell'immagine sulla retina è dai 20 agli 80 millisecondi ?

Guglielmo

:o :fearful:
colgo l'occasione per chiederti una cosa forse tanto stupida quanto superficiale. riducendo drasticamente il refresh rate come detto prima si avrebbe anche una sensibile riduzione di consumi sul micro?

No, il micro comunque gira a 16MHz e non è che lo fermi perché non gli fai fare una certa funzione. E comunque, il consumo della MCU è irrisorio rispetto al consumo di tutto il resto dell'HW che hai intorno. :wink:

Guglielmo

gpb01:
No, il micro comunque gira a 16MHz e non è che lo fermi perché non gli fai fare una certa funzione. E comunque, il consumo della MCU è irrisorio rispetto al consumo di tutto il resto dell'HW che hai intorno. :wink:

Guglielmo

è proprio come sospettavo. Grazie!

Grazie a tutti per le spiegazioni
buona serata