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
  Arduino Nano + Waveshare Barcode Reader + E-Paper Display MasterOfPuppets 16 953 Gestern 09:24
Letzter Beitrag: hotsystems
  Multiplexer TCA9548A Library Franz54 8 276 20.07.2021 04:55
Letzter Beitrag: N1d45
  Poti wert in Minuten auf dem LCD Display ausgeben senseman 83 5.706 05.06.2021 00:52
Letzter Beitrag: senseman
  Poti-Wert auf OLED Display anzeigen senseman 34 2.298 24.05.2021 22:09
Letzter Beitrag: senseman
  Konvertieren von Display Daten pe_martin 14 822 09.05.2021 15:54
Letzter Beitrag: pe_martin
  Laserwert auf OLED Display ausgeben Blauepi 18 1.808 22.03.2021 14:00
Letzter Beitrag: Blauepi
  TFT-LCD-Display (Extension) phg 3 830 13.03.2021 19:26
Letzter Beitrag: Tommy56
  Werte im Display per Taster wechseln bmxruler 8 1.082 27.01.2021 11:22
Letzter Beitrag: bmxruler
  Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll. generic_user492 3 700 26.01.2021 14:11
Letzter Beitrag: MicroBahner
  Oled Wire Frequenz huber5093 3 635 21.01.2021 23:45
Letzter Beitrag: hotsystems

Gehe zu:


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