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
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.