- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 13

Thema: Raspberry Pi3 und zwei OLED Displays?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    https://www.diymore.cc/products/diym...rry-pi-3-3v-5v

    Das hier wäre der Knecht. Leider gibt es auf der Seite kein Datenblatt, oder ich bin zu doof es zu finden.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von hirnfrei Beitrag anzeigen
    Das hier wäre der Knecht. Leider gibt es auf der Seite kein Datenblatt, oder ich bin zu doof es zu finden.
    Das ist doch schon mal was. Da springt einem doch SSH1106 ins Auge. Und dann ist der Weg zum Datenblatt nicht mehr weit. Und da findet man, daß das unterste Bit der I2C Adresse über den Pin A0 eingestellt werden kann. Somit können 2 Displays mit einem SSH1106 Controller an einem I2C Bus betrieben werden. Ob dieser Pin auf deinem Modul nach draußen geführt wird oder ob man dazu einen Widerstand/Jumper auf dem Modul umlöten muß hab ich jetzt nicht untersucht.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    HaWe
    Gast
    auf der Rückseite ist irgendeine Brücke gelötet und mit 0x78 - - - 0x7A beschriftet... das könnte etwas sein zum addr switchen.
    Welche Adresse hat er jetzt momentan?

    https://cdn.shopify.com/s/files/1/01...g?v=1531218776

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Auf meinen Displays ist es immer auf 0x78 gelötet. Wenn ich das also richtig verstanden habe, muss ich die Lötbrücke entfernen und auf 0x7A stellen. Dann muss ich also nur noch schauen, wo ich das im Programm ändern muss.

    Richtig soweit?

  5. #5
    HaWe
    Gast
    Zitat Zitat von hirnfrei Beitrag anzeigen
    Auf meinen Displays ist es immer auf 0x78 gelötet. Wenn ich das also richtig verstanden habe, muss ich die Lötbrücke entfernen und auf 0x7A stellen. Dann muss ich also nur noch schauen, wo ich das im Programm ändern muss.

    Richtig soweit?
    ich VERMUTE: ja!
    Es gibt Libs, wo du mehrere OLED-Objekte mit verschiedenen spezifischen Adressen instanziieren kannst, und dann spricht nichts dagegen.
    Das geht für Arduinos naturgemäß etwas einfacher als bei Raspis, da es viel mehr Auswahl gibt.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Schon einmal besten Dank!

    Ich werde zuerst mal ein Display mit dem Raspi ansteuern. Dann sollte ich die nötige Erfahrung haben um zu wissen, was ich da alles brauche und dann sollte auch die Adresse zu finden sein, nehme ich doch mal stark an. Zur Not nehme ich mir eine Lib und stricke sie um. Sollte ja nicht ganz so schwierig sein, hoffe ich zumindest.

  7. #7
    HaWe
    Gast
    C++ ?

    dann probier mal die hier:

    Displays
    OLED 128x64 SSD1306, SH1106





    I2C Bus speed: STANDARD + FAST-I2C (100-400kHz, getestet)
    aktuelle Treiber-Version:
    http://hallard.me/adafruit-oled-display-driver-for-pi/
    https://github.com/hallard/ArduiPi_OLED
    https://github.com/jonesman/ArduiPi_OLED // neue I2C Treiber ohne sudo



    Anwendungsbeispiel:
    https://raspilab.blog/2015/03/31/mei...lay-ansteuern/

    Zur Verwendung mit Geany: zusätzlicher build-Parameter

    -lArduiPi_OLED // lowercase "-L"


    7 verschiedene OLED Typen werden unterstützt:
    0 Adafruit SPI 128x32 SSD1306
    1 Adafruit SPI 128x64 SSD1306
    2 Adafruit I2C 128x32 SSD1306
    3 Adafruit I2C 128x64 SSD1306
    4 Seeed I2C 128x64 SSD1308
    5 Seeed I2C 96x96 SSD1327
    6 NoName I2C 128x64 SH1106

    Den richtigen OLED Type muss man ausprobieren, bei mir funktioniert Type 6, d.h. also für den Konsole-Aufruf des Bespielprogramms in examples:

    sudo ./oled_demo --verbose --oled 6


    vereinfachter Start der demo mit festem I2C oled Type 6, ohne Command Line Parameter :
    Code:
    //----------------------------------------------------------------------
    int main(int argc, char **argv)
    {
      int i;
       
      // Oled supported display in ArduiPi_SSD1306.h
    
      // I2C change parameters to fit to your LCD
      if ( !display.init(OLED_I2C_RESET, 6) )
       exit(EXIT_FAILURE);
    
      display.begin();
       
      // init done
      
      //.... Code!
      
      display.close();
      
    } 
    
    //----------------------------------------------------------------------

    einfacher Testcode, testweise zusammen mit wiringPi :
    Code:
    //----------------------------------------------------------------------/*
     * 
     * 
     * OLED Display
     * plus wringPi  millis + delay
     *
     * http://hallard.me/adafruit-oled-display-driver-for-pi/
     * https://github.com/hallard/ArduiPi_OLED
     *  
     * ver 0001
     * 
     */
     
     
    #include <string.h>
    #include <unistd.h>
    #include <errno.h>
    #include <stdio.h>
    #include <stdint.h>
    #include <stdlib.h>
    #include <linux/I2C-dev.h>
    #include <sys/ioctl.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    #include <stdbool.h>
    #include <string.h>
    #include <termio.h>
    
    #include <wiringPi.h>
    #include <wiringPiI2C.h>
    
    #include <ArduiPi_OLED_lib.h>
    #include <Adafruit_GFX.h>
    #include <ArduiPi_OLED.h>
    
    
    #define  byte  uint8_t
     
    
    // Instantiate the OLED display
    ArduiPi_OLED oledtft;
    
    
    void oled_cls() {
         oledtft.clearDisplay(); 
         oledtft.display(); 
    }
    
    
    void oled_printxy(int x, int y, char * str) {
         oledtft.setCursor(x,y);
         oledtft.print(str);
         oledtft.display(); 
    }
    
    
    
    
    // mimic conio.h kbhit
    bool kbhit(void)
    {
        struct termios original;
        tcgetattr(STDIN_FILENO, &original);
    
        struct termios term;
        memcpy(&term, &original, sizeof(term));
        term.c_lflag &= ~ICANON;
        tcsetattr(STDIN_FILENO, TCSANOW, &term);
    
        int characters_buffered = 0;
        ioctl(STDIN_FILENO, FIONREAD, &characters_buffered);
        tcsetattr(STDIN_FILENO, TCSANOW, &original);
        bool pressed = (characters_buffered != 0);
    
        return pressed;
    }
    
    
    //========================================================================= 
    
    
    
    int main() {
    
       int check;
       char sbuf[100];   
       uint32_t msec, millisav;
       
       // wiringPi   
       setenv("WIRINGPI_GPIOMEM", "1", 1);       // no sudo for gpios required
       check = wiringPiSetup();                  // init by wiringPi pin numbering
       if( check == -1 ) return 1;     
       
       // Oled supported display in ArduiPi_SSD1306.h
       // change parameters to fit to your LCD
       if ( !oledtft.init(OLED_I2C_RESET, 6) )
         exit(EXIT_FAILURE);
    
       oledtft.begin();
       
       // init done
      
       oled_cls();
    
       // test
     
       oledtft.setTextSize(1);
       oledtft.setTextColor(WHITE);
       oledtft.setTextSize(1); 
       oledtft.setCursor(0, 0);  oledtft.print(" 0 Hello, world!\n");
       oledtft.setCursor(0, 8);  oledtft.print(" 8 I2C OLED");  
       oledtft.setCursor(0,16);  oledtft.print("16 128x64 addr 0x3c"); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< !!!!!
       oledtft.setCursor(0,24);  oledtft.print("24 8x21 char size=1");
       oledtft.setCursor(0,32);  oledtft.print("32 ");
       oledtft.setCursor(0,40);  oledtft.print("40 ");
       oledtft.setCursor(0,48);  oledtft.print("48 456789112345678921");
       oledtft.setCursor(0,56);  oledtft.print("56 ");
       oledtft.display();
       sleep(1);
       oled_cls();
    
    
       millisav=millis();
       while(1) {
         msec = millis() - millisav;
         
         sprintf(sbuf, " millisec = %ld \n", msec);        
         printf(sbuf);     
         oledtft.setTextColor(WHITE, BLACK);
         oled_printxy( 0,16, sbuf);
         
         if (kbhit())
         {
             int c = getchar();
             if(c==27) break;
         }   
         delay(500);   
       }
       
       oled_cls();
       oledtft.close();
       
       return (0);
    }
    
    
    //----------------------------------------------------------------------


    du kannst ja C++, wschl kriegst du das auch dann mit 2 versch. Instanzen hin...
    Geändert von HaWe (15.08.2018 um 11:12 Uhr) Grund: addr 0x3c

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 04.07.2018, 10:00
  2. Asus Project Precog: Convertible nutzt zwei Displays als Tastatur oder Anzeige
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 05.06.2018, 16:42
  3. OLED Adapter
    Von TomT. im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 2
    Letzter Beitrag: 28.07.2009, 21:39
  4. TFT OLED AMOLED 4 bis 5 ZOLL
    Von Siro im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 07.04.2009, 12:28
  5. Zwei getrennt regelbare PWM-Signale an zwei Pins von PortC
    Von Hender im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 10.02.2006, 10:44

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests