INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
07.01.2021, 16:42
Beitrag #1
SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
Hallo,
Ich bin gerade dabei mir eine Lüftersteuerung zu bauen, um das Klima in meiner Werkstatt (Keller) zu verbessern. Gibts auch zu kaufen, allerdings recht teuer, dachte das bekomme ich in nem Tag locker selber gebaut -nicht-.
Bin gerade dabei die Komponenten einzeln zu Verstehen um später einen passenden Code zu bauen, allerdings verzweifel ich an dem Display.

Meine Komponenten sind:
Arduino Uno
HYT 221 Feuchtigkeits Temperatur Sensor
TCA9548A Multiplexer
Grove OLED Display 1.12 V2.2

Relais, Lüfter etc kommen später noch dazu.

Die I2C Adresse von einem Feuchtigkeitssensor habe ich bereits geändert, damit ich beide auslesen kann& die sich nicht in die Quere kommen.

Die Sensoren funktionieren mit dem Multiplexer,
Das Display funktioniert ohne den Multiplexer ebenfalls, mit jedoch nicht mehr bzw. nicht konsistent, mal wird ein abgeschnittener Text teil im oberen bereich vom Display abgeschnitten angezeigt, mal ein Breiter weißer Streifen und meisstens nichts. Für mich ist der Fehler absolut nicht reproduzierbar. Hatte das Display auch schon an einem anderen I2C Anschluss, jedoch ohne Effekt.

Habe langsam das Gefühl, dass das Display mit dem SH1107G Treiber keine gute Wahl war ... im Zweifel würde ich mir auch ein anderes zulegen Smile
Vielleicht kann mir hier ja irgendwie geholfen werden!

Code:
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>


#define TCAADDR 0x70

U8G2_SH1107_SEEED_128X128_1_HW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

void tcaselect(uint8_t i) {
  if (i > 7) return;

  Wire.beginTransmission(TCAADDR);
  Wire.write(1 << i);
  Wire.endTransmission();
}

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

#define HYT_ADDR 0x29
#define OLED_ADDR 0x3C


}


void loop(void) {

  tcaselect(1);                                        // BUS 1 waehlen
  double humidity;
  double temperature;

  Wire.beginTransmission(HYT_ADDR);                    // Beginnt Kommunikatino Via I2C auf angegebenem Bus
  Wire.requestFrom(HYT_ADDR, 4);
  if (Wire.available() == 4) {
    int b1 = Wire.read();
    int b2 = Wire.read();
    int b3 = Wire.read();
    int b4 = Wire.read();
    Wire.endTransmission();

    int rawHumidity = b1 << 8 | b2;
    rawHumidity =  (rawHumidity &= 0x3FFF);
    humidity = 100.0 / pow(2, 14) * rawHumidity;

    b4 = (b4 >> 2);
    int rawTemperature = b3 << 6 | b4;
    temperature = 165.0 / pow(2, 14) * rawTemperature - 40;



    Serial.print(humidity);
    Serial.print("% - Temperature: ");
    Serial.println(temperature);
  }
  else {
    Serial.println("Sensor kurzes Kabel fehler");
  }


  tcaselect(0);                                     //BUS 0 waehlen
  
  u8g2.clearBuffer();        
  u8g2.setFont(u8g2_font_ncenB08_tr);
  u8g2.drawStr(0, 10, "Hello World!");
  u8g2.sendBuffer();        
}

Vielen dank &
LG
Maxim
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2021, 17:00
Beitrag #2
RE: SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
Wofür soll der TCA9548A gut sein? Den brauchst Du nicht.
I2C ist ein Bus, da kannst Du mehrere Teilnehmer anschließen, wenn diese nicht die gleiche I2C-Adresse haben und das haben sie augenscheinlich nicht.

Wofür hast Du die SPI-Lib eingebunden? Wer arbeitet damit?
Brauchst Du Grafik oder nur Text?
Wenn nur Text, dann könnte die U8x8-Lib vom gleichen Autor helfen Speicher zu sparen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2021, 10:54
Beitrag #3
RE: SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
Hi Tommy,
Tausend dank. Da hatte ich einen ganz großen denkfehler und den Bus nicht überhauptnicht richtig verstanden.
Nun geht mein Display, ohne Multiplexer und die Sensoren ebenfalls;
Bin nun auch mit der U8x8-Lib unterwegs. Danke für den Hilfreichen Tipp (Zahlen Reichen, Soll nur feuchtigkeit und Temperatur zeigen)

Cheers
Maxim
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2021, 11:05
Beitrag #4
RE: SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
Schön, dass es funktioniert und danke für die Rückmeldung.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2021, 11:50 (Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2021 11:51 von Kanka.)
Beitrag #5
RE: SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
REhallo,

Da habe ich mich leider doch zu früh gefreut.
Das Display geht leider doch nicht parallel. Irgendwie will es die I2C Adresse nicht richtig annehmen.

Die U8x8-lib geht immer davon aus, das Display auf dem niedrigsten Bus zu finden, so hatte ich das gelesen zumindest.
Die Sensoren haben jedoch niedrigere Adressen, als das Display. Sobald Ich Sensoren und Display Parallel nutze geht das Display nicht mehr (schätze, weil die Daten für den Display eben an den Sensor gehen, der die kleinere I2C Adresse hat).

versuche via. dem Display die Richtige Adresse zuzuweisen, das ist dem Display jedoch vollkommen egal. Wenn ich dort etwas andere eingebe geht es genauso.
Hat dafür jemand eine Idee? Ansonsten könnte ich auch die Adressen der beiden Sensoren Ändern, damit diese erst nach dem Display kommen ..
Code:
u8x8.setI2CAddress(0x3C * 2);


Der Code für das Display lautet:

Code:
#include <Arduino.h>
#include <U8x8lib.h>



U8X8_SH1107_SEEED_128X128_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);



void setup(void)
{

  u8x8.setI2CAddress(0x3C * 2);
  u8x8.begin();
  u8x8.setPowerSave(0);


}

void loop(void)
{
  u8x8.setFont(u8x8_font_chroma48medium8_r);
  u8x8.drawString(0, 5, "Hello World!");
  delay(2000);
}

Liebe Grüße
und einen Schoenen Sonntag
Maxim
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2021, 12:00
Beitrag #6
RE: SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
Es gibt keinen niederen und höheren Bus, nur Adressen.
Was soll das hier?
Code:
u8x8.setI2CAddress(0x3C * 2);
Warum nimmst Du die Adresse *2? Das macht die Wire-Lib selbst.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2021, 12:03
Beitrag #7
RE: SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
Falls hier jemensch später mal mitlesen sollte,
bei mir lag es an dem konstruktor oben, habe den auf

Code:
U8X8_SH1107_SEEED_128X128_HW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);  //Display Config Wichtig!
geändert. Also von _SW_ zu _HW_.


Nun nimmt der die I2C Adressänderung via. an. Wenn ich dort die Adresse zu was anderem Ändere geht das display entsprechend nicht mehr.

Code:
u8x8.setI2CAddress(0x3C * 2);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2021, 12:05 (Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2021 12:06 von Kanka.)
Beitrag #8
RE: SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung
(10.01.2021 12:00)Tommy56 schrieb:  Es gibt keinen niederen und höheren Bus, nur Adressen.
Was soll das hier?
Code:
u8x8.setI2CAddress(0x3C * 2);
Warum nimmst Du die Adresse *2? Das macht die Wire-Lib selbst.

Gruß Tommy

Meinte natürlich hoehere und niedrigere Adressen sorry Smile
Das steht so in dem GitHub wiki von der Library drin.
(https://github.com/olikraus/u8g2/wiki/u8...2caddress)
Habs gerade mal testweise rausgenommen, dann geht das Display auch nicht.

LG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Laserwert auf OLED Display ausgeben Blauepi 18 851 22.03.2021 14:00
Letzter Beitrag: Blauepi
  TFT-LCD-Display (Extension) phg 3 404 13.03.2021 19:26
Letzter Beitrag: Tommy56
  Werte im Display per Taster wechseln bmxruler 8 672 27.01.2021 11:22
Letzter Beitrag: bmxruler
  Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll. generic_user492 3 402 26.01.2021 14:11
Letzter Beitrag: MicroBahner
  Oled Wire Frequenz huber5093 3 376 21.01.2021 23:45
Letzter Beitrag: hotsystems
  OLED Bildschirm Problem JoeIsFame 79 2.979 04.01.2021 06:41
Letzter Beitrag: Bitklopfer
  2,3" monochorme 128x32 Display Thor Wallhall 39 1.660 26.12.2020 16:42
Letzter Beitrag: Tommy56
  Problem Arduino Mega und Nextion Touch Display pds14 9 1.191 28.10.2020 11:20
Letzter Beitrag: hotsystems
  Rotary Encoder und I2C Display gleichzeitig verwenden BenGroll 3 1.113 27.07.2020 10:23
Letzter Beitrag: hotsystems
Wink Arduino TFT Display MEGA 2560 Samsuino 48 18.370 23.07.2020 15:45
Letzter Beitrag: sam_217

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste