Проблемы с выводом значений на lcd320*480

Тема в разделе "Arduino & Shields", создана пользователем D_REC, 7 янв 2022.

  1. b707

    b707 Гуру

    UTFTGlue - это обертка поверх либы McuFriend_kbv
    Эта библиотека содержит специальный быстрый код для работы с регистрами на Мега, но по умолчанию он выключен.
    Без регистров все очень медленно.
    Чтобы его включить, нужно расскомментировать две настройки
    USE_MEGA_8BIT_PROTOSHIELD
    USE_SPECIAL
    первая из них находится в файле mcufriend_special.h, вторая точно не знаю, поищите
    И да, для связи с дисплеем выбирать только пины, совпадающие с расположением пинов шилда, на других ничего работать не будет

    Еще обратите внимание на ID дисплея(первый парметр конструктора) У вас он = 0, судя по библиотеке, это для дисплеев ili9341, а у вас вроде другой. Но тут могу ошибаться, может быть при ID =0 библиотека сама определяет дисплей
     
    Рокки1945 нравится это.
  2. D_REC

    D_REC Нерд

    USE_SPECIAL в файле mcufriend_shield.h.

    не совсем понятно к каким пинам подключать. PF0 - это что?

    //################################### MEGA2560 ##############################
    #elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) //regular UNO shield on MEGA2560
    //LCD pins |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | |RD |WR |RS |CS |RST|
    //AVR pin |PH4|PH3|PE3|PG5|PE5|PE4|PH6|PH5| |PF0|PF1|PF2|PF3|PF4|
    #define RD_PORT PORTF
    #define RD_PIN 0
    #define WR_PORT PORTF
    #define WR_PIN 1
    #define CD_PORT PORTF
    #define CD_PIN 2
    #define CS_PORT PORTF
    #define CS_PIN 3
    #define RESET_PORT PORTF
    #define RESET_PIN 4
     
  3. b707

    b707 Гуру

    это порты ввода вывода
    смотрите распиновку меги
     
  4. D_REC

    D_REC Нерд

    У меня так и подключено. Но при этом когда я расскоментирую USE_SPECIAL, белый экран и ничего не меняется.
     
  5. User248

    User248 Гик

    Есть ещё библа RGBmatrixPanel. Может быть с ней работает нормально.
     
  6. b707

    b707 Гуру

    она совсем не для этих экранов
     
  7. b707

    b707 Гуру

    а USE_MEGA_8BIT_PROTOSHIELD раскомментировали?
    Белый экран - это неверный контроллер. Я вам писал, что у вас ID экрана неправильное - проверили? Там в библиотеке в примерах есть диагностический скетч, который выдают инфу о экране - запустите его и посмотрите, что определится
     
  8. User248

    User248 Гик

    Ясно. Просто увидел там и там #include <Adafruit_GFX.h> и подумал, что аналогичные.
     
  9. D_REC

    D_REC Нерд

    USE_MEGA_8BIT_PROTOSHIELD раскомментировал первым делом.
    Я считывал ID выдает 9341. и при нуле это стандартный.
     
  10. b707

    b707 Гуру

    вы понимаете в чем смысл этой настройки? - если да, то должны понимать, что не работать там нечему.
    Если у вас без этой настройки все работает - значит вы просто где-то в пинах напортачили, надо сесть и разобраться.

    Но вообще этот дисплей не подходит для Меги, как ни крути, он все равно будет работать не быстро.
    Переходите на СТМ32
     
  11. D_REC

    D_REC Нерд

    Я так понимаю должен включится параллельный режим.
    Но при расскоментировании USE_MEGA_8BIT_PROTOSHIELD ничего не меняется. А после USE_SPECIAL ничего не выводится на экран. Да наверное придется переходить на СТМ. Но это чуть позже. Нужно ещё изучить особенности стмки.
     
  12. b707

    b707 Гуру

    нет, параллельный режим там и так включен, иначе дисплей бы не работал.
    Эта настройка включает прямой доступ к регистрам, код через которые в несколько раз быстрее. чем через функции ардуино. Но принцип работы с дисплеем не меняется. поэтому я и говорю, что если работало без настройки - должно работать и с ней.
     
    Последнее редактирование: 10 янв 2022
  13. D_REC

    D_REC Нерд

    У меня дисплей в виде шилда. Подключить по другому не получится иначе питание пойдет не на те ноги. Пины ардуины заданы так как указано в даташите, да и в других программах так же. Я скопирол.
    Но такие же дисплеи есть с подключением на дополнительную гребёнку, та что с торца Меги. Возможно только те пины работают более быстро с дисплеем.
    https://a.aliexpress.com/_AClu9o
     
  14. b707

    b707 Гуру

    номера пинов для USE_MEGA_8BIT_PROTOSHIELD, есть в коде - сравните со своими. Если совпадает - значит этот код рассчитан на ваш дисплей и должен работать
     
  15. D_REC

    D_REC Нерд

    По мне так все совпадает. Пины совпадают.

    #define USE_MEGA_8BIT_PROTOSHIELD
    //#define USE_MEGA_8BIT_SHIELD // 4.7sec Mega2560 Shield
    //#define USE_MEGA_8BIT_PORTC_SHIELD // 4.7sec Mega2560 Shield
    //#define USE_MEGA_16BIT_SHIELD // 2.14sec Mega2560 Shield
    //#define USE_BLD_BST_MEGA32U4
    //#define USE_BLD_BST_MEGA2560 // 12.23sec Uno Shield (17.38s C)
    //#define USE_BLD_BST_MEGA4809 // 5.43sec XPRO-Adapter (7.09s C)
    //#define USE_DUE_8BIT_PROTOSHIELD
    //#define USE_DUE_16BIT_SHIELD //RD on PA15 (D24)
    //#define USE_BOBCACHELOT_TEENSY
    //#define USE_OPENSMART_SHIELD_PINOUT_UNO
    //#define USE_OPENSMART_SHIELD_PINOUT_MEGA
    //#define USE_OPENSMART_SHIELD_PINOUT_DUE //thanks Michel53
    //#define USE_ELECHOUSE_DUE_16BIT_SHIELD //Untested yet
    //#define USE_MY_BLUEPILL
    //#define USE_ADIGITALEU_TEENSY
    //#define USE_MIKROELEKTRONIKA
    //#define USE_XPRO_MEGA4809
    //#define USE_MY_PICO

    #elif defined(__AVR_ATmega2560__) && defined(USE_MEGA_8BIT_PROTOSHIELD)
    //LCD pins |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | |RD |WR |RS |CS |RST|
    //AVR pin |PA7|PA6|PA5|PA4|PA3|PA2|PA1|PA0| |PF0|PF1|PF2|PF3|PF4|
    //digital# | 29| 28| 27| 26| 25| 24| 23| 22| | A0| A1| A2| A3| A4|
    #warning USE_MEGA_8BIT_PROTOSHIELD
    #define RD_PORT PORTF
    #define RD_PIN 0
    #define WR_PORT PORTF
    #define WR_PIN 1
    #define CD_PORT PORTF
    #define CD_PIN 2
    #define CS_PORT PORTF
    #define CS_PIN 3
    #define RESET_PORT PORTF
    #define RESET_PIN 4



    #define USE_SPECIAL //check for custom drivers

    #define WR_ACTIVE2 {WR_ACTIVE; WR_ACTIVE;}
    #define WR_ACTIVE4 {WR_ACTIVE2; WR_ACTIVE2;}
    #define WR_ACTIVE8 {WR_ACTIVE4; WR_ACTIVE4;}
    #define RD_ACTIVE2 {RD_ACTIVE; RD_ACTIVE;}
    #define RD_ACTIVE4 {RD_ACTIVE2; RD_ACTIVE2;}
    #define RD_ACTIVE8 {RD_ACTIVE4; RD_ACTIVE4;}
    #define RD_ACTIVE16 {RD_ACTIVE8; RD_ACTIVE8;}
    #define WR_IDLE2 {WR_IDLE; WR_IDLE;}
    #define WR_IDLE4 {WR_IDLE2; WR_IDLE2;}
    #define RD_IDLE2 {RD_IDLE; RD_IDLE;}
    #define RD_IDLE4 {RD_IDLE2; RD_IDLE2;}

    #if defined(USE_SPECIAL)
    #include "mcufriend_special.h"
    #if !defined(USE_SPECIAL_FAIL)
    #warning WE ARE USING A SPECIAL CUSTOM DRIVER
    #endif
    #endif
    #if !defined(USE_SPECIAL) || defined (USE_SPECIAL_FAIL)

    #if 0



    //################################### MEGA2560 ##############################
    #elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) //regular UNO shield on MEGA2560
    //LCD pins |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | |RD |WR |RS |CS |RST|
    //AVR pin |PH4|PH3|PE3|PG5|PE5|PE4|PH6|PH5| |PF0|PF1|PF2|PF3|PF4|
    #define RD_PORT PORTF
    #define RD_PIN 0
    #define WR_PORT PORTF
    #define WR_PIN 1
    #define CD_PORT PORTF
    #define CD_PIN 2
    #define CS_PORT PORTF
    #define CS_PIN 3
    #define RESET_PORT PORTF
    #define RESET_PIN 4

    #define EMASK 0x38
    #define GMASK 0x20
    #define HMASK 0x78
    #define write_8(x) { PORTH &= ~HMASK; PORTG &= ~GMASK; PORTE &= ~EMASK; \
    PORTH |= (((x) & (3<<0)) << 5); \
    PORTE |= (((x) & (3<<2)) << 2); \
    PORTG |= (((x) & (1<<4)) << 1); \
    PORTE |= (((x) & (1<<5)) >> 2); \
    PORTH |= (((x) & (3<<6)) >> 3); \
    }

    #define read_8() ( ((PINH & (3<<5)) >> 5)\
    | ((PINE & (3<<4)) >> 2)\
    | ((PING & (1<<5)) >> 1)\
    | ((PINE & (1<<3)) << 2)\
    | ((PINH & (3<<3)) << 3)\
    )
    #define setWriteDir() { DDRH |= HMASK; DDRG |= GMASK; DDRE |= EMASK; }
    #define setReadDir() { DDRH &= ~HMASK; DDRG &= ~GMASK; DDRE &= ~EMASK; }
    #define write8(x) { write_8(x); WR_STROBE; }
    #define write16(x) { uint8_t h = (x)>>8, l = x; write8(h); write8(l); }
    #define READ_8(dst) { RD_STROBE; dst = read_8(); RD_IDLE; }
    #define READ_16(dst) { uint8_t hi; READ_8(hi); READ_8(dst); dst |= (hi << 8); }

    #define PIN_LOW(p, b) (p) &= ~(1<<(b))
    #define PIN_HIGH(p, b) (p) |= (1<<(b))
    #define PIN_OUTPUT(p, b) *(&p-1) |= (1<<(b))