Forum: Mikrocontroller und Digitale Elektronik Code for grösseres, 1.3"-Display anpassen (u8glib)


von Laurin (wildatheart)


Angehängte Dateien:

Lesenswert?

Hallo liebe Gemeinde

Ich habe ein LED-Panel nach einem Design von einem 
"instructables.com"-User gebaut. Original verwendet der Autor ein 0.96" 
I2C Display (128x64). Ich wollte nun für ein grösseres Panel ein 1.3" 
Dislay (auch I2C und 128x64) verwenden. Leider friert nun das Display 
sofort nach dem Power Up ein und reagiert nicht auf Befehle des 
Drehknopfes etc (das kleinere funktioniert im gleichen Setting 
einwandfrei).
Ich habe mich bereits an das Arduino-Forum gewandt. Die User dort sind 
alle der Meinung, dass das grössere Display ohne Code-Änderungen 
funktionieren sollte..

In meiner Schaltung verwende ich ein Atmega328P. Die Display wird mit 
der u8glib-Library angesteuert. Der Autor des Designs meinte, man müsse 
wohl die Identifiers des u8glib ändern.
Weiss jemand von euch, was zu tun ist?
Ich danke euch schon jetzt!

wildatheart

Hier der Code:

--

Welchen Teil von
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang 
hast Du jetzt nicht verstanden?

: Bearbeitet durch User
von Hans M. (Gast)


Lesenswert?

Laurin E. schrieb:
> Screen::Screen() {
> #ifndef u8glib_h
> #define u8glib_h
> #include <u8glib.h>
> #endif
>   //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL,
> /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);// for u8g2lib
>   //U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK |
> U8G_I2C_OPT_FAST);
>   _valueChange = true;
>   _showBigText = false;
>   _showBat = false;
>   _showBottom = false;
>   _showCaption = false;
>
> }

was solln das sein?
Hat das neue Display auch den SSD1306 drauf?
Wenn nicht und es nur kompatibel ist,

Laurin E. schrieb:
>Der Autor des Designs meinte, man müsse
>wohl die Identifiers des u8glib ändern.

schau mal ob die lib beim Init die ID ausliest und da der Vergleich fehl 
schlägt.

MfG, Hans

von Joachim B. (jar)


Lesenswert?

Laurin E. schrieb:
> Hallo liebe Gemeinde
> Ich habe mich bereits an das Arduino-Forum gewandt. Die User dort sind
> alle der Meinung, dass das grössere Display ohne Code-Änderungen
> funktionieren sollte..

is so

> In meiner Schaltung verwende ich ein Atmega328P. Die Display wird mit
> der u8glib-Library angesteuert. Der Autor des Designs meinte, man müsse
> wohl die Identifiers des u8glib ändern.

wie wäre es mit der richtigen Controllerwahl?

#include "U8glib.h"
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);  // Dev 
0, Fast I2C / TWI
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);  // Display which does not 
send ACK

PS du hast mein Mausscrollrad zerstört!

von Laurin (wildatheart)


Lesenswert?

Danke vielmals Joachim! Welche Line kommt jetzt wohin? Es müssen 
sämtliche Zeilen betreffend der u8glib-Library geändert werden, oder? 
Sorry ich bin code-technisch noch im Anfänger-Stadium ;)

PS: Tut mir echt leid wegen deiner Maus! Soll ich Dir eine neue 
schenken?? ;)

von Laurin (wildatheart)


Lesenswert?

Hab's mal probiert. Die Darstellung erscheint sofort und ohne Noise, 
aber es reagiert noch nicht auf Commands des Drehknopfes und Button.
Der Newbie ist kläglich gescheitert ;)

Ausschnitt 1

//Input and Output
#define BUTTON1 8
#define BUTTON_ON 7
#define DT 2
#define CLK 3

#define COLD 9
#define WARM 10

#define OLED_RESET 4


//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI

class Button
{


Ausschnitt 2

RotEnc rotenc;
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);
Screen screen;
Button button1(BUTTON1);
Button buttonOn(BUTTON_ON);
Light light(WARM, COLD);
Thermistor therm1(0);
Thermistor therm2(1);
//Thermistor therm3(2);
Voltage volt1(3);


Ausschnitt 3

//Screen-methods

Screen::Screen() {
#ifndef u8glib_h
#define u8glib_h
#include <u8glib.h>
#endif
  //U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI
  //U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);  // 
Dev 0, Fast I2C / TWI
  U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);  // Display which does 
not send ACK
  _valueChange = true;
  _showBigText = false;
  _showBat = false;
  _showBottom = false;
  _showCaption = false;

von Laurin (wildatheart)


Lesenswert?

Hallo alle

Ich habe das Display gewechselt, da ich mit der Code-Anpassung nicht 
klarkomme. Das grosse Display hat jetzt denselben Controller wie das 
kleine (SSD1306). Wenn ich die Schaltung mit externem Quarz auf 16MHz 
takte, kommt nur ein Rauschen auf dem Display. Wenn ich den Chip jedoch 
durch den internen 8MHz-Oszi takte, wird das Programmierte korrekt 
dargestellt. Nur leider ist die Reaktionszeit (auf Commands durch 
Drehknopf etc.) sehr lang.

Weiss jemand, was ich tun könnte?

von Joachim B. (jar)


Lesenswert?

Laurin E. schrieb:
> Weiss jemand, was ich tun könnte?

programmieren lernen

entweder die Timings am Display bei 16MHz langsamer machen oder
die Timings für den Encoder bei 8MHz schneller machen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.