0,96" IIC OLED library

Welche Library benutzt ihr? Habe die von Adafruit getestet, die frisst die Hälfte an Ressourcen, da wäre ich mit meinem kram zusammen bei 92% RAM und Flash. Habt ihr eine schmälere Lib im Einsatz?

skorpi080: Habt ihr eine schmälere Lib im Einsatz?

Was willst Du machen, Grafik und Text, nur Text? SW oder Farbe?

Grafik und Text: olikraus

Nur Text: olikraus oder MicroLCD

Bei Oliver gibt es eine speichersparende Nurtext-Variante.

Das weiß ich ehrlich gesagt noch garnicht.
Wär top wenn ich beide Libs bekommen könnte.

skorpi080: Das weiß ich ehrlich gesagt noch garnicht.

Wie darf ich das verstehen?

Ich hab erst das Display ausgepackt und wollte erst nur testen. Vielleicht fällt mir noch eine Idee ein, wie ich es in meine Taster-Rahmen im Haus einbauen soll, dann wird entschieden wozu es gebraucht werden soll. Die u8g2lib hab ich getestet, Hallo Welt 30% Speicher. u8glib wollte nicht kompilieren. Die MicroLCD kenn ich noch nicht.

Habe dieses OLED, in weiß. Damals gabs da keine Auswahl und die waren ohne Versandkosten. https://de.aliexpress.com/item/-/32717936245.html Bei den geht also nur SW, richtig?

skorpi080:
u8glib wollte nicht kompilieren.

So habe ich getestet:

#include <Arduino.h>
#include "U8glib.h"
#include <SPI.h>
#include <Wire.h>

// setup u8g object, please remove comment from one of the following constructor calls
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  // I2C / TWI
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);  // Display which does not send AC

void draw(void) {
  // graphic commands to redraw the complete screen should be placed here
  u8g.setColorIndex(1);         // pixel on
  //u8g.setFont(u8g_font_unifont);
  u8g.setFont(u8g_font_6x10);
  u8g.drawStr( 0, 10, "21.8.2017 11:11");
}

void setup(void) {
}

void loop(void) {
  // picture loop
  u8g.firstPage();
  do {
    draw();
  } while ( u8g.nextPage() );

  // rebuild the picture after some delay
  delay(50);
}

Das kommt als Fehlermeldung:

/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c: In function 'u8g_atmega_spi_out':
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:76:3: error: 'SPDR' undeclared (first use in this function)
   SPDR = data;
   ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:76:3: note: each undeclared identifier is reported only once for each function it appears in
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:78:12: error: 'SPSR' undeclared (first use in this function)
   while (!(SPSR & (1<<SPIF))) 
            ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:78:23: error: 'SPIF' undeclared (first use in this function)
   while (!(SPSR & (1<<SPIF))) 
                       ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c: In function 'u8g_com_atmega_hw_spi_fn':
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:118:7: error: 'SPCR' undeclared (first use in this function)
       SPCR = 0;
       ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:119:19: error: 'SPE' undeclared (first use in this function)
       SPCR =  (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
                   ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:119:30: error: 'MSTR' undeclared (first use in this function)
       SPCR =  (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
                              ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:119:40: error: 'SPR1' undeclared (first use in this function)
       SPCR =  (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
                                        ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:119:50: error: 'SPR0' undeclared (first use in this function)
       SPCR =  (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
                                                  ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:119:60: error: 'CPOL' undeclared (first use in this function)
       SPCR =  (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
                                                            ^
/Users/skorpi08/Documents/Arduino/libraries/U8glib_Arduino-master/src/clib/u8g_com_atmega_hw_spi.c:119:70: error: 'CPHA' undeclared (first use in this function)
       SPCR =  (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
                                                                      ^
exit status 1
Fehler beim Kompilieren für das Board ATmega324.

Versuche es bitte mal mit einem ATmega328. Ich habe es mit einem UNO probiert

Gerade nochmal probiert: Ich bekomme viele Warnungen "unused parameter", aber es funktioniert.

Das wäre aber nicht die Lösung :D Ich brauchs für den 324er.

Bei Oliver gibt es eine speichersparende Nurtext-Variante.

Welche wäre es? Oder war es das Beispiel mit Hello World mit 30% Verbrauch?

Biete 19%:

#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include <U8x8lib.h>

/* Constructor */
U8X8_SSD1306_128X64_NONAME_HW_I2C oled(/* reset=*/ U8X8_PIN_NONE);

void setup(void)
{
  oled.begin();
  oled.setFont(u8x8_font_artossans8_r);
  oled.drawString(0, 0, "Hallo Welt!");
}

void loop(void) {}

Der Sketch verwendet 5.908 Bytes (18%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 394 Bytes (19%) des dynamischen Speichers, 1.654 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.

Der Sketch verwendet 5992 Bytes (18%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes. Globale Variablen verwenden 394 Bytes (19%) des dynamischen Speichers, 1654 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Das geht wohl, kompilieren.

Jetzt noch den:

#include <Wire.h>
#include <MicroLCD.h>

LCD_SSD1306 lcd; /* for SSD1306 OLED module */

void setup()
{
    lcd.begin();
    lcd.setCursor(0, 0);
    lcd.setFontSize(FONT_SIZE_SMALL);
    lcd.print("21.8.2017 11:11");
}

void loop(){}

Der Sketch verwendet 8.712 Bytes (27%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 278 Bytes (13%) des dynamischen Speichers, 1.770 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.

Der Sketch verwendet 8768 Bytes (27%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 278 Bytes (13%) des dynamischen Speichers, 1770 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Das geht wohl auch, mit einigen Progmem Warnungen.

Also kennst du sonst auch keine Lib die nicht so “verschwenderisch” ist?

Nur Wire allein braucht 4% / 10%, den Rest wird die Fontdefinition beanspruchen.

Speichersparendere Libs sind mir nicht bekannt. Will ja aber nichts heißen ;)

Ich hab da wohl einige noch gefunden die weniger verbrauchen als u8glib.

SSD1306Ascii //nur text, ganz klein also
Adafruit_SSD1306-master
Adafruit-GFX-Library-master
Arduino_SSD1306_OLED-master
esp8266-oled-ssd1306-master
MultiLCD
OLED_I2C
OLED_StatusIcons
oled-display-master
ozoled-oled-display-096-i2c-driver-library-master
TinyOzOled-master
U8g2_Arduino-master
U8glib_Arduino-master
WIFI-Kit-8-Test2

Ich benutze die Adafruit. Funktioniert einwandfrei-von daher hatte ich nie das Bedürfnis nach ner anderen. Was aber lohnt (wenn denn sinnvoll): die Schriftarten abspecken. Alles, was aktuell gar nicht benötigt wird, fliegt raus, das bringt dann so richtig Speicher. Mitunter braucht man ja nur die Ziffern, oder aber nur Gross- oder Kleinbuchstaben, teilweise nur einige...

Ab und zu mal, zeigt das Display nix an. Also zB. Lib 1 läuft Lib 2 läuft Lib 3 läuft

Am nächsten Tag, Lib 1 läuft Lib 2 läuft nicht Lib 3 läuft

Tag darauf, Lib 1 läuft Lib 2 läuft Lib 3 läuft nicht

usw...

Manchmal muss ich mehrere Sketche draufladen und dann laufen wieder alle 3 verschiedene Libarys. Kennt ihr das oder hab nur ich solche scherze?

Sketchgröße ist bei

Der Sketch verwendet 15318 Bytes (47%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes. Globale Variablen verwenden 1237 Bytes (60%) des dynamischen Speichers, 811 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Manchmal, sind noch reste vom alten Sketch im neuen. Also zB Lib 1 Zeile 1, MOIN Zeile 7, Abends

Lib 2 Zeile 1, MOIN //von Lib 1 Zeile 2, Hello Zeile 7, Abends //von Lib 1

Hmmmm-wenn ich mich recht entsinne haben diese OLED's mehrere Seiten (2) Bildschirm-Speicher eingebaut. Möglicherweise schwirrt da auf einer anderen Seite noch was vom vorherigen Programm rum? Wenn du beim neu bespielen die Stromversorgung nicht trennst, wäre das denkbar.

clear display schafft für Ordnung. Einmal im Setup kann mans wohl noch machen.