C Display EA DOG XL 160

Dieses Thema im Forum "Hardware" wurde erstellt von achim S., 7. Juli 2018.

  1. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    309
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Hallo Gemeinde
    such in verschiedenen Foren nach dem Display DOG XL160 von EA. Ist ein Display (Graphik) mit dem I2C Bus und wird mit 3,3V betrieben. Habe verschiedene Codes und Anleitungen für SPI gefunden. Da ich es aber mit I2C ansteuere passt das nicht. Leider scheint kaum jemand mit dem Bus zu arbeiten. Da ich verschiedene Displays von EA kenne und nutze, müsste es doch möglich sein. Leider ist die Beschreibung beim Hersteller sehr kurz geraten. Es wird der IC UC1610 verwendet.
    Kann mir jemand helfen das Teil zu verstehen?
    Die Hardware läuft korrekt, kann die Adresse 0x7e und 0x7a auslesen. Beim Rest gibt es noch grosse Proleme.

    achim
     
  2. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    309
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Sorry, habe das Datenblatt vergessen. Hier ist es.
     

    Anhänge:

  3. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    309
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    noch das Datenblatt des Herstellers zum display
     
  4. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    309
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    noch mal
     

    Anhänge:

  5. Dirk

    Dirk Administrator
    Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.172
    Zustimmungen:
    117
    Punkte für Erfolge:
    63
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Hallo Achim,

    wenn du bereits ein SPI-Beispiel für die Initialisierung der Register für das LCD hast, solltest du diese eigentlich einfach für I2C verwenden können.

    (Mit dem Display kenne ich mich nicht aus und das Datenblatt habe ich nur überflogen)

    Zuerst sendest du ein Kommando SYSTEM RESET, danach die einzelnen Register initialisieren. Danach Daten in das Grafikram schreiben.

    upload_2018-7-8_7-8-56.png

    upload_2018-7-8_7-16-18.png



    upload_2018-7-8_7-27-18.png
     
  6. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    309
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Hallo Dirk
    genau dort fängt mein Problem an. Habe danach schon einiges geschrieben. Das init klappt aber nicht. Dann hat das Teil ja 2 Adressen und 2 Leseadressen, sind aber scheinbar anders. Ist denn beim SPI auch so ein init drin wie beim I2C Bus?
    achim
     
  7. Dirk

    Dirk Administrator
    Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.172
    Zustimmungen:
    117
    Punkte für Erfolge:
    63
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Bei deinem Display ist die I2C Adresse abhängig vom logischen Zustand des Pin A2. Du kannst somit zwei Displays am selben Bus betreiben.
    Bei dem EA Datenblatt ist ja beschrieben, welche Adressen in Abhängigkeit von A2 verwendet werden, und zwar das komplette Byte (mit I2C Adresse + A3 + A2+ C/D, R/W)

    Der LCD Controller hat noch einen weiteren Adresspin A3, der ist aber bei dem LCD immer auf high.

    Ich gehe davon aus, dass Register und deren Initialisierung unabhängig non der Hardwareschnittstelle sind. Du hast ja Codes und Anleitungen für SPI gefunden, da ist sicherlich auch eine Initialisierung vorhanden.
     
  8. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    309
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Hast du die Beschreibung zu I2C im Datenblatt gefunden? Welche Seite?
     
  9. Dirk

    Dirk Administrator
    Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.172
    Zustimmungen:
    117
    Punkte für Erfolge:
    63
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Seite 30
     
  10. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    309
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Hallo Gemeinde
    bin immer noch an dem Display dran. Habe das init in den Griff bekommen. Leider fehlen noch alle Sachen zum schreiben oder Löschen. Habe mal geschaut wie es andere machen. Andere ist stark übertrieben. Es scheint nichts zu geben was mit dem i2C Bus läuft.
    Das init und die ersten Daten zum Display:


    CodeBox C und C++
    void wahl_display()
         {
            #define LCD_COL_ADDRESS_LSB   0x00  // 4: column address
            #define LCD_COL_ADDRESS_MSB   0x10  // 4: column address
            #define LCD_TEMP_COMP         0x24  // 5: Set Temperature Compensation
            #define LCD_PANEL_LOAD        0x28  // 6: Set Panel loading
            #define LCD_PUMP_CTRL         0x2C  // 7: Set pump control
            #define LCD_POWER_LOW_VOLTAGE 0x2B  // 7: Power controll set
            #define LCD_ADV_PROG_CTRL     0x30  // 8: advanced program control first word
            #define LCD_START_LINE        0x40  // 9: display scroll line set LSB
            #define LCD_START_LINE2       0x50  // 9: display scroll line set MSB
            #define LCD_PAGE_ADDRESS      0x60  // 10: Page address set
            #define LCD_VOLTAGE_BIAS      0x81  // 11: Bias set
            #define LCD_PARTIAL_CTRL      0x84  // 12: Set partial display control
            #define LCD_RAM_ADDR_CTRL     0x88  // 13: Set RAM address control
            #define LCD_FIXED_LINES       0x90  // 14: Set display fixed lines
            #define LCD_LINE_RATE         0xA0  // 15: Set line rate
            #define LCD_ALL_PIXEL         0xA4  // 16: show all points
            #define LCD_DISPLAY_POSITIV   0xA6  // 17: display positiv  ist neu
            #define LCD_DISPLAY_INVERTED  0xA7  // 17: display invertiert  ist neu
            #define LCD_DISPLAY_ON        0xAF  // 18: Display on   ist neu
            #define LCD_DISPLAY_OFF       0xAE  // 18: Display off  ist neu
            #define LCD_MAPPING_CTRL_6    0xC0  // 19: LCD mapping control 6:00
            #define LCD_MAPPING_CTRL_12   0xC6  // 19: LCD mapping control verdreht um 180°
            #define LCD_GRAY_SHADE        0xD0  // 20: LCD gray shade
            #define LCD_RESET_CMD         0xE2  // 21: System reset
            #define LCD_NO_OP             0xE3  // 22: NOP
            #define LCD_BIAS_RATIO        0xE8  // 24: Bias Ratio
            #define LCD_CURSOR_MODE_RESET 0xEE  // 25: Reset cursor update mode
            #define LCD_CURSOR_MODE_SET   0xEF  // 26: Set cursor update mode
            #define LCD_COM_END           0xF1  // 27: Set COM End
            #define LCD_PARTIAL_START     0xF2  // 28: Set partial display start
            #define LCD_PARTIAL_END       0xF3  // 29: Set partial display end
            #define LCD_WINDOW_START_COL  0xF4  // 30: Window program start column
            #define LCD_WINDOW_START_PAGE 0xF5  // 31: Window program start column
            #define LCD_WINDOW_END_COL    0xF6  // 32: Window program start column
            #define LCD_WINDOW_END_PAGE   0xF7  // 33: Window program start column
            #define LCD_WINDOW_PROGRAM    0xF8  // 34: Enable window programming
           
             #define LCD_WIDTH            160   // Breite LCD
             #define LCD_HEIGHT           104   // Höhe LCD
             #define LCD_RAM_PAGES        26       // size of LCD RAM
             #define LCD_PIXEL_PER_BYTE   4       // using double pixels
             #define LCD_DOUBLE_PIXEL     1
             #define SHIFT_ADDR_NORMAL    0       // column offset for normal orientation
             #define SHIFT_ADDR_TOPVIEW   0       // column offset for bottom view orientation   
         }
    
    void lcd_init()
         {
             i2c_start(Write_Command);               // set device address and write mode
             i2c_write(LCD_COM_END);                        // Set last COM electrode to 103  F1  
             i2c_write(0x67);                        // number of COM electrodes - 1   67  
             i2c_write(LCD_MAPPING_CTRL_6);            // SEG (column) and COM (row) normal   C0   
             i2c_write(LCD_START_LINE);                        // Set Display Startline to 0   40   
             i2c_write(LCD_START_LINE2);                        // Set Display Startline to 0   50   
             i2c_write(LCD_POWER_LOW_VOLTAGE);                        // Set Panelloading to 28..38nF   2B  
             i2c_write(0xEB);                        // Set Bias to 1/12   EB   
             i2c_write(LCD_VOLTAGE_BIAS);                        // Set Contrast   81  
             i2c_write(0x5F);                        // Set Contrast   5F 
             i2c_write(0x89);                        // Set Auto-Increment     89   
             i2c_write(LCD_DISPLAY_ON);                        // Display on    AF   
             i2c_stop();                             // set stop bus
         }
    

    vielleicht kann mir jemand dabei helfen

    achim
     
  11. achim S.

    achim S. Mitglied

    Registriert seit:
    16. Januar 2010
    Beiträge:
    309
    Zustimmungen:
    6
    Punkte für Erfolge:
    18
    Versuche das Display zu löschen (Inhalt). Dazu muss ich den Speicher mit 0 beschreiben. Bisher habe ich so versucht. Leider ohne Erfolg.


    CodeBox C und C++
    void lcd_clear_all()
         {
             
           int16_t Page;
           //int8_t Col;  
           //#define Page
           //#define Col   
           for(Page=0; Page<=16640; Page ++)
             {
               //for(Col=0; Col<=159; Col++)
                {
                  i2c_start(Write_Command);  
                  //i2c_write(0x78);
                  i2c_write(0x00);
                  //i2c_write(0x60 | Page);
                  //i2c_write((Col & 0x0F));           // LSB
                  //i2c_write(((Col >> 4) | 0x10));    // MSB
                   i2c_stop();   
                //I2C_Write(0x7A);
                //I2C_Write(0xCC);
                }
             }
         }
    

    Was nicht funktioniert (vielleicht habe ich auskommentiert. Das Display hat 160 x 104
    Hat jemand eine Idee dazu?
    achim
     
  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren und die Seite optimal für dich anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden