8-битный | 16-битный параллелл ILI9341

Andreas_ferm
Вт 06 октября 2015 г. 12:16
Хороший день, все, я все новичок в STM32 и ранее выполнял только небольшие проекты на досках Arduiono, в основном используя уже окончательные библиотеки.

Теперь я достиг точки, когда у меня не хватает навыков программирования, поэтому вместо того, чтобы оптимизировать свой код, я начал смотреть на Maple Mini и подумал, что было бы здорово добавить «хороший» графический интерфейс в мой проект.

Я заказал китайский 3.2 "TFT+Touch+SD Card Combo, но о том, о чем я не знал и не думал заранее, было проверить необходимое соединение (я только что прочитал здесь и увидел все включенные библиотеки для вышеупомянутого контроллера дисплея), но все они используя SPI. Таким образом, дисплей появился по почте, и я узнал, что у него не было никакого интерфейса SPI (по крайней мере, для дисплея, только для Touch и SD -карты)

Есть ли варианты работы, которые можно использовать с STM32Duino? Что будет моим лучшим шансом на то, чтобы заставить это работать? (Изначально я думал о том, чтобы пойти на мега, но выберите Maple Mini Clone, так как я был впечатлен различными демонстрациями TFT, которые я видел)

Я пытался просмотреть «все» в Интернете, но нашел только небольшие указатели, и ни один из не целевых для STM32duino. (Я нашел один пост, где кто -то разместил версию UTFT с поддержкой STM32, которая была основана на каком -то подростковом порту, но это также было сделано только для SPI, и я не мог найти никаких водителей ILI9341 TFT 'для параллельной связи... Ну, был один для ILI9481, но я не уверен, можно ли это использовать при прямой замене.

У любого есть аналогичный дисплей, и он работает с Maple Mini?

Спасибо!
Андреас

Mrburnette
Вт 06 октября 2015 г. 12:25
Начните с поиска этого форума для Pig-O-Scope...
Весь форум проиндексирован Google, поэтому вы можете сформировать запрос как: pig scope site:stm32duino.com

Andreas_ferm
Вт 06 октября 2015 г., 19:07
Спасибо за быстрый ответ Рэй,

Я полагаю, что я почесал большую часть этого форума (хотя я, возможно, пропустил в какой -то скрытой теме). Я также посетил и изучил страницу ваших проектов (которая, я думаю, был одним из факторов, которые заставили меня хотеть дать Maple Mini A 'Go')

В любом случае, вся информация, которую я нашел для ILI9341, с SPI-подключением, чего, я полагаю, не хватает моего модуля (служба после продажи от китайских продавцов оставляет довольно много, чтобы попросить IMHO). Я увидел, что была библиотека Adafruit для AVR, которая была поддержкой SPI и 8 -битного параллелла для ILI9341, но мне еще не удобно в деталях низкого уровня плат STM32 для порта это).

Todo-List's и 2 малыша, как правило, убивают большую часть моего времени, поэтому я надеялся, что другие более низкоуровневые, чем я, уже посмотрел бы на это. :)

Andreas_ferm
Вторник 06 октября 2015 г., 21:39
Устал ждать ответа от продавца и попытался оторвать экран от печатной платы, и от маркировки это, кажется, SSD1289, так что теперь вернемся к чертежной доске, чтобы увидеть, что возможно с этой новой информацией... :)

ZMEMW16
Вт 06 октября 2015 г., 21:53
Я думал, что опубликовал свой первый ответ, кажется, он потерялся; Ниже приведен

Фотографии спины, любой текст идентификации, ссылка на продавца/дискрипция была бы полезна
Я предложил Google с ILI9341 и PDF, заменить SSD1289 - Возвращает насыпные нагрузки ссылок

Режим чипсов устанавливается на 4 контакта одинаковыми с SSD1289, и я подозреваю, что шелковый экран может быть одним размером, подходит для всех типов/моделей. Когда вы открыли его, вы можете увидеть, для чего он настроен (AVO/Multimeter Cestiance Pint на землю) и оттуда
Далее следует предположить SPI и попытаться прочитать из регистра (id-code1/2/3) и посмотрите, имеет ли это смысл.
Вам, возможно, придется отправить несколько значений, чтобы сначала сбросить его.
Также регистры идентификатора варьируются от драйвера к водителю :-)
Моя отправная точка - использование эскиза SPI, собираюсь пойти по этому пути для некоторых из моих дисплеев

Стивен

Andreas_ferm
Вт 06 октября 2015 г. 22:19
Экран, который я купил, был этим: http: // www.aliexpress.com/item/free-shi ... 24430.HTML

И это выглядит точно так же, как этот http: // www.Sainsmart.com/sainsmart-3-2- ... ER-Reviews Но когда я посмотрю на заднюю часть печатной платы, моя плата использует TSC2046 в качестве контроллера сенсорного экрана (но это на потом, первый шаг - это возможность отображать что -то полезное на экране)

На «ленте», которая подключила дисплей к печатной плате, написан T32-1289 V21

Я сомневаюсь, что этот дисплей использует SPI, всех 40pins, которые есть у PCB, те, которые указывают на SPI, для чтения SD-карты (SD_CLK, SD_DIN и т. Д..) и прикосновение (T_CS, T_CLK и т. Д..) и я думаю, что DB0-15 и CS, REST, RD, WR, RS для фактического дисплея в параллельном режиме?

Mrburnette
Вторник 06 октября 2015 г. 11:47
Andreas_ferm написал: <...>
Я сомневаюсь, что этот дисплей использует SPI, всех 40pins, которые есть у PCB, те, которые указывают на SPI, для чтения SD-карты (SD_CLK, SD_DIN и т. Д..) и прикосновение (T_CS, T_CLK и т. Д..) и я думаю, что DB0-15 и CS, REST, RD, WR, RS для фактического дисплея в параллельном режиме?

ZMEMW16
Ср. 07 октября 2015 г. 12:52
Я гугл 'T32-1289 v21 TFT LCD 3.2 '

http: // www.WayEngineer.com/32-tft-lcd-w ... Hrl9orjsgs
Внизу находится ссылка на PDF -файл спецификации дисплея, это до того, как прикреплена печатная плата.

P12 подробно описывает интерфейс как параллельный тип 8080 - 16 -битные данные, управление RD/WR/CS/RS & 2.8 В мощность

https: // www.Raspberrypi.орг/форумы/Просмотр ... п?P = 307273 доходность

http: // static.электрокрагон.com/wp-cont ... Play-3.JPG
Это соответствует вашему?

Хорошо, это малиновая, но 1rytttttttttttttttt Кошка только что тренировалась через клавиатуру, она мочилась.
Во всяком случае, есть схема, которая может быть интересной; 4040 & 3x 4094, чтобы дать интерфейс SPI

TSC2046, вероятно, является версией TI XPT2046 и, вероятно, заменой впадания
Стивен

Martinayotte
Ср. 07 октября 2015 г., 2:18
Здесь обсуждалось несколько чипсетов ...
Но давайте скажем, что я недавно заказал на 8 -битную репутацию на ЖК -дисплей: http: // www.eBay.CA/ITM/141647130960
Я не нашел библиотеку совместимой как есть, но нашел кусочки кода вместе, так что вот часть моего эскиза, используя этот ЖК -дисплей на моем NetDuio2plus:
uint8_t LCD_RST = PC4; uint8_t LCD_CS = PC3; uint8_t LCD_RS = PC2; uint8_t LCD_WR = PC1; uint8_t LCD_RD = PC0; uint8_t DPINS[] = {PC7, PC6, PA3, PA2, PB12, PB8, PB9, PA1, PA0, PA6}; #define Black 0x0000 #define White 0xFFFF #define Red 0xF800 #define Green 0x07E0 #define Blue 0x102E #define Cyan 0x07FF #define Magenta 0xF81F #define Navy 0x000F #define DarkGreen 0x03E0 #define Purple 0x780F #define Olive 0x7BE0 #define DarkGrey 0x7BEF #define DarkCyan 0x001F #define Yellow 0xFFE0 #define Orange 0xFD20 uint16 indexed_color[] = { Black, White, Red, Green, Blue, Cyan, Magenta, Navy, DarkGreen, Purple, Olive, DarkGrey, DarkCyan, Yellow, Orange}; #define background Black void LCD_Init() { pinMode(LCD_RST, OUTPUT); pinMode(LCD_CS, OUTPUT); pinMode(LCD_RS, OUTPUT); pinMode(LCD_WR, OUTPUT); pinMode(LCD_RD, OUTPUT); for (uint8_t i = 2; i <= 9; i++) pinMode(DPINS[i], OUTPUT); digitalWrite(LCD_CS, HIGH); digitalWrite(LCD_RS, HIGH); digitalWrite(LCD_WR, HIGH); digitalWrite(LCD_RD, HIGH); digitalWrite(LCD_RST, HIGH); delay(5); digitalWrite(LCD_RST, LOW); delay(15); digitalWrite(LCD_RST, HIGH); delay(15); digitalWrite(LCD_CS, LOW); lcd_cmd(0xE9); lcd_data(0x20); lcd_cmd(0x11); // Exit Sleep delay(100); lcd_cmd(0xD1); lcd_data(0x00); lcd_data(0x71); lcd_data(0x19); lcd_cmd(0xD0); lcd_data(0x07); lcd_data(0x01); lcd_data(0x08); lcd_cmd(0x36); lcd_data(0x19); // lcd_data(0x48); lcd_cmd(0x3A); // Set_pixel_format lcd_data(0x05); // color setings, 05h - 16bit pixel, 11h - 3bit pixel lcd_cmd(0xC1); lcd_data(0x10); lcd_data(0x10); lcd_data(0x02); lcd_data(0x02); lcd_cmd(0xC0); // Set Default Gamma lcd_data(0x00); lcd_data(0x35); lcd_data(0x00); lcd_data(0x00); lcd_data(0x01); lcd_data(0x02); lcd_cmd(0xC5); // Set Frame Rate lcd_data(0x04); // 72Hz lcd_cmd(0xD2); // Power Settings lcd_data(0x01); lcd_data(0x44); lcd_cmd(0xC8); //Set Gamma lcd_data(0x04); lcd_data(0x67); lcd_data(0x35); lcd_data(0x04); lcd_data(0x08); lcd_data(0x06); lcd_data(0x24); lcd_data(0x01); lcd_data(0x37); lcd_data(0x40); lcd_data(0x03); lcd_data(0x10); lcd_data(0x08); lcd_data(0x80); lcd_data(0x00); lcd_cmd(0x2A); // Set_column_address 320px lcd_data(0x00); lcd_data(0x00); lcd_data(0x00); lcd_data(0xEF); lcd_cmd(0x2B); // Set_page_address 480px lcd_data(0x00); lcd_data(0x00); lcd_data(0x01); lcd_data(0x3F); // lcd_data(0x8F); lcd_cmd(0x29); //display on lcd_cmd(0x2C); //display on digitalWrite(LCD_CS, HIGH); } void lcd_write_bus(uint8_t val) { unsigned char i, temp, data; data = val; for (i = 2; i <= 9; i++) pinMode(DPINS[i], OUTPUT); for (i = 8; i <= 9; i++) { temp = (data & 0x01); if (temp) digitalWrite(DPINS[i], HIGH); else digitalWrite(DPINS[i], LOW); data = data >> 1; } for (i = 2; i <= 7;i++) { temp = (data & 0x01); if (temp) digitalWrite(DPINS[i], HIGH); else digitalWrite(DPINS[i], LOW); data = data >> 1; } digitalWrite(LCD_WR, LOW); digitalWrite(LCD_WR, HIGH); } void lcd_cmd(uint8_t cmd) { digitalWrite(LCD_RS, LOW); lcd_write_bus(cmd); } void lcd_data(uint8_t data) { digitalWrite(LCD_RS, HIGH); lcd_write_bus(data); } void lcd_cmd_data(uint8_t cmd, uint8_t data) { lcd_cmd(cmd); lcd_data(data); } void SetWindows(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2) { lcd_cmd(0x2a); // Set_column_address 4 parameters lcd_data(x1 >> 8); lcd_data(x1); lcd_data(x2 >> 8); lcd_data(x2); lcd_cmd(0x2b); // Set_page_address 4 parameters lcd_data(y1 >> 8); lcd_data(y1); lcd_data(y2 >> 8); lcd_data(y2); lcd_cmd(0x2c); // Write_memory_start } void LCD_Clear(unsigned int j) { unsigned int x, y; lcd_cmd(0x02c); // write_memory_start digitalWrite(LCD_RS, HIGH); digitalWrite(LCD_CS, LOW); SetWindows(0, 0, 319, 479); // 479, 319); for (x = 0; x < 480; x++) for (y = 0; y < 320; y++) { lcd_data(j >> 8); lcd_data(j); } digitalWrite(LCD_CS, HIGH); } void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c) { unsigned int i, j; lcd_cmd(0x02c); //write_memory_start digitalWrite(LCD_RS, HIGH); digitalWrite(LCD_CS, LOW); l = l + x; SetWindows(x, y, l, y); j = l * 2; for (i = 1; i <= j; i++) { lcd_data(c >> 8); lcd_data(c); } digitalWrite(LCD_CS, HIGH); } void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c) { unsigned int i,j; lcd_cmd(0x02c); //write_memory_start digitalWrite(LCD_RS, HIGH); digitalWrite(LCD_CS, LOW); l = l + y; SetWindows(x, y, x, l); j = l * 2; for (i = 1; i <= j; i++) { lcd_data(c >> 8); lcd_data(c); } digitalWrite(LCD_CS, HIGH); } void Rect(unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int c) { H_line(x , y , w, c); H_line(x , y+h, w, c); V_line(x , y , h, c); V_line(x+w, y , h, c); } void FillRect(unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int c) { unsigned int i; for (i = 0; i < h; i++) { H_line(x , y , w, c); H_line(x , y+i, w, c); } } #define fontXSizeSmal 8 #define fontYSizeSmal 12 #define fontXSizeBig 16 #define fontYSizeBig 16 #define fontXSizeNum 32 #define fontYSizeNum 50 #define fontdatatype const uint8_t #define fontdatatype16 const uint16_t // Font Size : 8x12 1140 bytes fontdatatype smallFont[1140] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x20, 0x00, 0x00, // ! 0x00, 0x28, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // " 0x00, 0x00, 0x28, 0x28, 0xFC, 0x28, 0x50, 0xFC, 0x50, 0x50, 0x00, 0x00, // # 0x00, 0x20, 0x78, 0xA8, 0xA0, 0x60, 0x30, 0x28, 0xA8, 0xF0, 0x20, 0x00, // $ 0x00, 0x00, 0x48, 0xA8, 0xB0, 0x50, 0x28, 0x34, 0x54, 0x48, 0x00, 0x00, // % 0x00, 0x00, 0x20, 0x50, 0x50, 0x78, 0xA8, 0xA8, 0x90, 0x6C, 0x00, 0x00, // & 0x00, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ' 0x00, 0x04, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x04, 0x00, // ( 0x00, 0x40, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00, // ) 0x00, 0x00, 0x00, 0x20, 0xA8, 0x70, 0x70, 0xA8, 0x20, 0x00, 0x00, 0x00, // * 0x00, 0x00, 0x20, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, // , 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, // . 0x00, 0x08, 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x00, // / 0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, // 0 0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, // 1 0x00, 0x00, 0x70, 0x88, 0x88, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00, 0x00, // 2 0x00, 0x00, 0x70, 0x88, 0x08, 0x30, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, // 3 0x00, 0x00, 0x10, 0x30, 0x50, 0x50, 0x90, 0x78, 0x10, 0x18, 0x00, 0x00, // 4 0x00, 0x00, 0xF8, 0x80, 0x80, 0xF0, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, // 5 0x00, 0x00, 0x70, 0x90, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, // 6 0x00, 0x00, 0xF8, 0x90, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, // 7 0x00, 0x00, 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, // 8 0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x78, 0x08, 0x48, 0x70, 0x00, 0x00, // 9 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // : 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, // ; 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, // < 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, // = 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, // > 0x00, 0x00, 0x70, 0x88, 0x88, 0x10, 0x20, 0x20, 0x00, 0x20, 0x00, 0x00, // ? 0x00, 0x00, 0x70, 0x88, 0x98, 0xA8, 0xA8, 0xB8, 0x80, 0x78, 0x00, 0x00, // @ 0x00, 0x00, 0x20, 0x20, 0x30, 0x50, 0x50, 0x78, 0x48, 0xCC, 0x00, 0x00, // A 0x00, 0x00, 0xF0, 0x48, 0x48, 0x70, 0x48, 0x48, 0x48, 0xF0, 0x00, 0x00, // B 0x00, 0x00, 0x78, 0x88, 0x80, 0x80, 0x80, 0x80, 0x88, 0x70, 0x00, 0x00, // C 0x00, 0x00, 0xF0, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0xF0, 0x00, 0x00, // D 0x00, 0x00, 0xF8, 0x48, 0x50, 0x70, 0x50, 0x40, 0x48, 0xF8, 0x00, 0x00, // E 0x00, 0x00, 0xF8, 0x48, 0x50, 0x70, 0x50, 0x40, 0x40, 0xE0, 0x00, 0x00, // F 0x00, 0x00, 0x38, 0x48, 0x80, 0x80, 0x9C, 0x88, 0x48, 0x30, 0x00, 0x00, // G 0x00, 0x00, 0xCC, 0x48, 0x48, 0x78, 0x48, 0x48, 0x48, 0xCC, 0x00, 0x00, // H 0x00, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x00, // I 0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x90, 0xE0, 0x00, // J 0x00, 0x00, 0xEC, 0x48, 0x50, 0x60, 0x50, 0x50, 0x48, 0xEC, 0x00, 0x00, // K 0x00, 0x00, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x44, 0xFC, 0x00, 0x00, // L 0x00, 0x00, 0xD8, 0xD8, 0xD8, 0xD8, 0xA8, 0xA8, 0xA8, 0xA8, 0x00, 0x00, // M 0x00, 0x00, 0xDC, 0x48, 0x68, 0x68, 0x58, 0x58, 0x48, 0xE8, 0x00, 0x00, // N 0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, // O 0x00, 0x00, 0xF0, 0x48, 0x48, 0x70, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00, // P 0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0xE8, 0x98, 0x70, 0x18, 0x00, // Q 0x00, 0x00, 0xF0, 0x48, 0x48, 0x70, 0x50, 0x48, 0x48, 0xEC, 0x00, 0x00, // R 0x00, 0x00, 0x78, 0x88, 0x80, 0x60, 0x10, 0x08, 0x88, 0xF0, 0x00, 0x00, // S 0x00, 0x00, 0xF8, 0xA8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, // T 0x00, 0x00, 0xCC, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x30, 0x00, 0x00, // U 0x00, 0x00, 0xCC, 0x48, 0x48, 0x50, 0x50, 0x30, 0x20, 0x20, 0x00, 0x00, // V 0x00, 0x00, 0xA8, 0xA8, 0xA8, 0x70, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00, // W 0x00, 0x00, 0xD8, 0x50, 0x50, 0x20, 0x20, 0x50, 0x50, 0xD8, 0x00, 0x00, // X 0x00, 0x00, 0xD8, 0x50, 0x50, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, // Y 0x00, 0x00, 0xF8, 0x90, 0x10, 0x20, 0x20, 0x40, 0x48, 0xF8, 0x00, 0x00, // Z 0x00, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00, // [ 0x00, 0x40, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x10, 0x08, 0x00, 0x00, // 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00, // ] 0x00, 0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ^ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, // _ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ' 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48, 0x38, 0x48, 0x3C, 0x00, 0x00, // a 0x00, 0x00, 0xC0, 0x40, 0x40, 0x70, 0x48, 0x48, 0x48, 0x70, 0x00, 0x00, // b 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x48, 0x40, 0x40, 0x38, 0x00, 0x00, // c 0x00, 0x00, 0x18, 0x08, 0x08, 0x38, 0x48, 0x48, 0x48, 0x3C, 0x00, 0x00, // d 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48, 0x78, 0x40, 0x38, 0x00, 0x00, // e 0x00, 0x00, 0x1C, 0x20, 0x20, 0x78, 0x20, 0x20, 0x20, 0x78, 0x00, 0x00, // f 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x48, 0x30, 0x40, 0x78, 0x44, 0x38, // g 0x00, 0x00, 0xC0, 0x40, 0x40, 0x70, 0x48, 0x48, 0x48, 0xEC, 0x00, 0x00, // h 0x00, 0x00, 0x20, 0x00, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, // i 0x00, 0x00, 0x10, 0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0xE0, // j 0x00, 0x00, 0xC0, 0x40, 0x40, 0x5C, 0x50, 0x70, 0x48, 0xEC, 0x00, 0x00, // k 0x00, 0x00, 0xE0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x00, // l 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xA8, 0xA8, 0xA8, 0xA8, 0x00, 0x00, // m 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x48, 0x48, 0x48, 0xEC, 0x00, 0x00, // n 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x30, 0x00, 0x00, // o 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x48, 0x48, 0x48, 0x70, 0x40, 0xE0, // p 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x48, 0x48, 0x48, 0x38, 0x08, 0x1C, // q 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x60, 0x40, 0x40, 0xE0, 0x00, 0x00, // r 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x40, 0x30, 0x08, 0x78, 0x00, 0x00, // s 0x00, 0x00, 0x00, 0x20, 0x20, 0x70, 0x20, 0x20, 0x20, 0x18, 0x00, 0x00, // t 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x48, 0x48, 0x48, 0x3C, 0x00, 0x00, // u 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x48, 0x50, 0x30, 0x20, 0x00, 0x00, // v 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA8, 0x70, 0x50, 0x50, 0x00, 0x00, // w 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x50, 0x20, 0x50, 0xD8, 0x00, 0x00, // x 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x48, 0x50, 0x30, 0x20, 0x20, 0xC0, // y 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x10, 0x20, 0x20, 0x78, 0x00, 0x00, // z 0x00, 0x18, 0x10, 0x10, 0x10, 0x20, 0x10, 0x10, 0x10, 0x10, 0x18, 0x00, // { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // | 0x00, 0x60, 0x20, 0x20, 0x20, 0x10, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, // } 0x40, 0xA4, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ~ }; fontdatatype16 bigFont[1520] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0000, 0x0000, 0x0700, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0F80, 0x0700, 0x0700, 0x0000, 0x0000, 0x0700, 0x0700, 0x0700, 0x0000, // ! 0x0000, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0630, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // " 0x0000, 0x0C30, 0x0C30, 0x0C30, 0x7FFE, 0x7FFE, 0x0C30, 0x0C30, 0x0C30, 0x0C30, 0x7FFE, 0x7FFE, 0x0C30, 0x0C30, 0x0C30, 0x0000, // # 0x0000, 0x0240, 0x0240, 0x0FF8, 0x1FF8, 0x1A40, 0x1A40, 0x1FF0, 0x0FF8, 0x0258, 0x0258, 0x1FF8, 0x1FF0, 0x0240, 0x0240, 0x0000, // $ 0x0000, 0x0000, 0x0000, 0x0E10, 0x0E30, 0x0E70, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E70, 0x0C70, 0x0870, 0x0000, 0x0000, 0x0000, // % 0x0000, 0x0000, 0x0F00, 0x1980, 0x1980, 0x1980, 0x0F00, 0x0F08, 0x0F98, 0x19F8, 0x18F0, 0x18E0, 0x19F0, 0x0F98, 0x0000, 0x0000, // & 0x0000, 0x0000, 0x0700, 0x0700, 0x0700, 0x0E00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ' 0x0000, 0x0000, 0x00F0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0700, 0x0380, 0x01C0, 0x00F0, 0x0000, 0x0000, // ( 0x0000, 0x0000, 0x0F00, 0x0380, 0x01C0, 0x00E0, 0x0070, 0x0070, 0x0070, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0F00, 0x0000, 0x0000, // ) 0x0000, 0x0000, 0x0180, 0x1188, 0x0990, 0x07E0, 0x07E0, 0x3FFC, 0x3FFC, 0x07E0, 0x07E0, 0x0990, 0x1188, 0x0180, 0x0000, 0x0000, // * 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180, 0x0180, 0x0FF0, 0x0FF0, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, // + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0700, 0x0700, 0x0700, 0x0E00, 0x0000, // , 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0700, 0x0700, 0x0700, 0x0000, 0x0000, // , 0x0000, 0x0000, 0x0002, 0x0006, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x1C00, 0x0000, 0x0000, // / 0x0000, 0x0000, 0x0FF0, 0x1C38, 0x1C78, 0x1CF8, 0x1CF8, 0x1DB8, 0x1DB8, 0x1F38, 0x1F38, 0x1E38, 0x1C38, 0x0FF0, 0x0000, 0x0000, // 0 0x0000, 0x0000, 0x0180, 0x0180, 0x0380, 0x1F80, 0x1F80, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x1FF0, 0x0000, 0x0000, // 1 0x0000, 0x0000, 0x0FE0, 0x1C70, 0x1C38, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E38, 0x1C38, 0x1FF8, 0x0000, 0x0000, // 2 0x0000, 0x0000, 0x0FE0, 0x1C70, 0x1C38, 0x0038, 0x0070, 0x03C0, 0x03C0, 0x0070, 0x0038, 0x1C38, 0x1C70, 0x0FE0, 0x0000, 0x0000, // 3 0x0000, 0x0000, 0x00E0, 0x01E0, 0x03E0, 0x06E0, 0x0CE0, 0x18E0, 0x1FF8, 0x1FF8, 0x00E0, 0x00E0, 0x00E0, 0x03F8, 0x0000, 0x0000, // 4 0x0000, 0x0000, 0x1FF8, 0x1C00, 0x1C00, 0x1C00, 0x1C00, 0x1FE0, 0x1FF0, 0x0078, 0x0038, 0x1C38, 0x1C70, 0x0FE0, 0x0000, 0x0000, // 5 0x0000, 0x0000, 0x03E0, 0x0700, 0x0E00, 0x1C00, 0x1C00, 0x1FF0, 0x1FF8, 0x1C38, 0x1C38, 0x1C38, 0x1C38, 0x0FF0, 0x0000, 0x0000, // 6 0x0000, 0x0000, 0x1FFC, 0x1C1C, 0x1C1C, 0x1C1C, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0380, 0x0380, 0x0000, 0x0000, // 7 0x0000, 0x0000, 0x0FF0, 0x1C38, 0x1C38, 0x1C38, 0x1F38, 0x07E0, 0x07E0, 0x1CF8, 0x1C38, 0x1C38, 0x1C38, 0x0FF0, 0x0000, 0x0000, // 8 0x0000, 0x0000, 0x0FF0, 0x1C38, 0x1C38, 0x1C38, 0x1C38, 0x1FF8, 0x0FF8, 0x0038, 0x0038, 0x0070, 0x00E0, 0x07C0, 0x0000, 0x0000, // 9 0x0000, 0x0000, 0x0000, 0x0000, 0x0380, 0x0380, 0x0380, 0x0000, 0x0000, 0x0380, 0x0380, 0x0380, 0x0000, 0x0000, 0x0000, 0x0000, // : 0x0000, 0x0000, 0x0000, 0x0000, 0x0380, 0x0380, 0x0380, 0x0000, 0x0000, 0x0380, 0x0380, 0x0380, 0x0700, 0x0000, 0x0000, 0x0000, // ; 0x0000, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x1C00, 0x1C00, 0x0E00, 0x0700, 0x0380, 0x01C0, 0x00E0, 0x0070, 0x0000, // < 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // = 0x0000, 0x1C00, 0x0E00, 0x0700, 0x0380, 0x01C0, 0x00E0, 0x0070, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x1C00, 0x0000, // > 0x0000, 0x03C0, 0x0FF0, 0x1E78, 0x1838, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x01C0, 0x0000, 0x0000, 0x01C0, 0x01C0, 0x01C0, 0x0000, // ? 0x0000, 0x0FF8, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x1CFC, 0x1CFC, 0x1CFC, 0x1CFC, 0x1C00, 0x1C00, 0x1C00, 0x1FF0, 0x07F8, 0x0000, // @ 0x0000, 0x0000, 0x03C0, 0x07E0, 0x0E70, 0x1C38, 0x1C38, 0x1C38, 0x1C38, 0x1FF8, 0x1C38, 0x1C38, 0x1C38, 0x1C38, 0x0000, 0x0000, // A 0x0000, 0x0000, 0x1FF0, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0FF0, 0x0FF0, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x1FF0, 0x0000, 0x0000, // B 0x0000, 0x0000, 0x07F0, 0x0E38, 0x1C38, 0x1C00, 0x1C00, 0x1C00, 0x1C00, 0x1C00, 0x1C00, 0x1C38, 0x0E38, 0x07F0, 0x0000, 0x0000, // C 0x0000, 0x0000, 0x1FE0, 0x0E70, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E70, 0x1FE0, 0x0000, 0x0000, // D 0x0000, 0x0000, 0x1FF8, 0x0E18, 0x0E08, 0x0E00, 0x0E30, 0x0FF0, 0x0FF0, 0x0E30, 0x0E00, 0x0E08, 0x0E18, 0x1FF8, 0x0000, 0x0000, // E 0x0000, 0x0000, 0x1FF8, 0x0E18, 0x0E08, 0x0E00, 0x0E30, 0x0FF0, 0x0FF0, 0x0E30, 0x0E00, 0x0E00, 0x0E00, 0x1F00, 0x0000, 0x0000, // F 0x0000, 0x0000, 0x07F0, 0x0E38, 0x1C38, 0x1C38, 0x1C00, 0x1C00, 0x1C00, 0x1CF8, 0x1C38, 0x1C38, 0x0E38, 0x07F8, 0x0000, 0x0000, // G 0x0000, 0x0000, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1FF0, 0x1FF0, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0000, 0x0000, // H 0x0000, 0x0000, 0x0FE0, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0FE0, 0x0000, 0x0000, // I 0x0000, 0x0000, 0x01FC, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x3870, 0x3870, 0x3870, 0x3870, 0x0FE0, 0x0000, 0x0000, // J 0x0000, 0x0000, 0x1E38, 0x0E38, 0x0E70, 0x0EE0, 0x0FC0, 0x0F80, 0x0F80, 0x0FC0, 0x0EE0, 0x0E70, 0x0E38, 0x1E38, 0x0000, 0x0000, // K 0x0000, 0x0000, 0x1F00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E08, 0x0E18, 0x0E38, 0x1FF8, 0x0000, 0x0000, // L 0x0000, 0x0000, 0x1C1C, 0x1E3C, 0x1F7C, 0x1FFC, 0x1FFC, 0x1DDC, 0x1C9C, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x0000, 0x0000, // M 0x0000, 0x0000, 0x1C1C, 0x1C1C, 0x1E1C, 0x1F1C, 0x1F9C, 0x1DDC, 0x1CFC, 0x1C7C, 0x1C3C, 0x1C1C, 0x1C1C, 0x1C1C, 0x0000, 0x0000, // N 0x0000, 0x0000, 0x03E0, 0x07F0, 0x0E38, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x0E38, 0x07F0, 0x03E0, 0x0000, 0x0000, // O 0x0000, 0x0000, 0x1FF0, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0FF0, 0x0FF0, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x1F00, 0x0000, 0x0000, // P 0x0000, 0x0000, 0x03E0, 0x0F78, 0x0E38, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C7C, 0x1CFC, 0x0FF8, 0x0FF8, 0x0038, 0x00FC, 0x0000, // Q 0x0000, 0x0000, 0x1FF0, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0FF0, 0x0FF0, 0x0E70, 0x0E38, 0x0E38, 0x0E38, 0x1E38, 0x0000, 0x0000, // R 0x0000, 0x0000, 0x0FF0, 0x1C38, 0x1C38, 0x1C38, 0x1C00, 0x0FE0, 0x07F0, 0x0038, 0x1C38, 0x1C38, 0x1C38, 0x0FF0, 0x0000, 0x0000, // S 0x0000, 0x0000, 0x1FFC, 0x19CC, 0x11C4, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x07F0, 0x0000, 0x0000, // T 0x0000, 0x0000, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0FE0, 0x0000, 0x0000, // U 0x0000, 0x0000, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0EE0, 0x07C0, 0x0380, 0x0000, 0x0000, // V 0x0000, 0x0000, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C9C, 0x1C9C, 0x1C9C, 0x0FF8, 0x0FF8, 0x0770, 0x0770, 0x0000, 0x0000, // W 0x0000, 0x0000, 0x1C70, 0x1C70, 0x1C70, 0x0EE0, 0x07C0, 0x0380, 0x0380, 0x07C0, 0x0EE0, 0x1C70, 0x1C70, 0x1C70, 0x0000, 0x0000, // X 0x0000, 0x0000, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0EE0, 0x07C0, 0x0380, 0x0380, 0x0380, 0x0380, 0x0FE0, 0x0000, 0x0000, // Y 0x0000, 0x0000, 0x1FF8, 0x1C38, 0x1838, 0x1070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E08, 0x1C18, 0x1C38, 0x1FF8, 0x0000, 0x0000, // Z 0x0000, 0x0000, 0x07F0, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x07F0, 0x0000, 0x0000, // [ 0x0000, 0x0000, 0x1000, 0x1800, 0x1C00, 0x0E00, 0x0700, 0x0380, 0x01C0, 0x00E0, 0x0070, 0x0038, 0x001C, 0x0007, 0x0000, 0x0000, // 0x0000, 0x0000, 0x07F0, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x07F0, 0x0000, 0x0000, // ] 0x0000, 0x0180, 0x03C0, 0x07E0, 0x0E70, 0x1C38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ^ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7FFF, 0x7FFF, // _ 0x0000, 0x0000, 0x1C00, 0x1C00, 0x0700, 0x0700, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // ' 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0FE0, 0x0070, 0x0070, 0x0FF0, 0x1C70, 0x1C70, 0x1C70, 0x0FD8, 0x0000, 0x0000, // a 0x0000, 0x0000, 0x1E00, 0x0E00, 0x0E00, 0x0E00, 0x0FF0, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x1BF0, 0x0000, 0x0000, // b 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0FE0, 0x1C70, 0x1C70, 0x1C00, 0x1C00, 0x1C70, 0x1C70, 0x0FE0, 0x0000, 0x0000, // c 0x0000, 0x0000, 0x00F8, 0x0070, 0x0070, 0x0070, 0x0FF0, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0FD8, 0x0000, 0x0000, // d 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0FE0, 0x1C70, 0x1C70, 0x1FF0, 0x1C00, 0x1C70, 0x1C70, 0x0FE0, 0x0000, 0x0000, // e 0x0000, 0x0000, 0x03E0, 0x0770, 0x0770, 0x0700, 0x0700, 0x1FE0, 0x1FE0, 0x0700, 0x0700, 0x0700, 0x0700, 0x1FC0, 0x0000, 0x0000, // f 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0FD8, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0FF0, 0x07F0, 0x0070, 0x1C70, 0x0FE0, // g 0x0000, 0x0000, 0x1E00, 0x0E00, 0x0E00, 0x0E00, 0x0EF0, 0x0F38, 0x0F38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x1E38, 0x0000, 0x0000, // h 0x0000, 0x0000, 0x01C0, 0x01C0, 0x01C0, 0x0000, 0x0FC0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x0FF8, 0x0000, 0x0000, // i 0x0000, 0x0000, 0x0070, 0x0070, 0x0070, 0x0000, 0x03F0, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x1C70, 0x0CF0, 0x07E0, // j 0x0000, 0x0000, 0x1E00, 0x0E00, 0x0E00, 0x0E00, 0x0E38, 0x0E70, 0x0EE0, 0x0FC0, 0x0EE0, 0x0E70, 0x0E38, 0x1E38, 0x0000, 0x0000, // k 0x0000, 0x0000, 0x0FC0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x0FF8, 0x0000, 0x0000, // l 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x1C9C, 0x1C9C, 0x1C9C, 0x1C9C, 0x1C9C, 0x1C9C, 0x1C9C, 0x0000, 0x0000, // m 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FE0, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0000, 0x0000, // n 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0FE0, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0FE0, 0x0000, 0x0000, // o 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BF0, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0FF0, 0x0E00, 0x0E00, 0x1F00, // p 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FB0, 0x38E0, 0x38E0, 0x38E0, 0x38E0, 0x38E0, 0x1FE0, 0x00E0, 0x00E0, 0x01F0, // q 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1EF0, 0x0FF8, 0x0F38, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x1F00, 0x0000, 0x0000, // r 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0FE0, 0x1C30, 0x1C30, 0x0F80, 0x03E0, 0x1870, 0x1870, 0x0FE0, 0x0000, 0x0000, // s 0x0000, 0x0000, 0x0000, 0x0100, 0x0300, 0x0700, 0x1FF0, 0x0700, 0x0700, 0x0700, 0x0700, 0x0770, 0x0770, 0x03E0, 0x0000, 0x0000, // t 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0FD8, 0x0000, 0x0000, // u 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x1C70, 0x0EE0, 0x07C0, 0x0380, 0x0000, 0x0000, // v 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1C1C, 0x1C1C, 0x1C1C, 0x1C9C, 0x1C9C, 0x0FF8, 0x0770, 0x0770, 0x0000, 0x0000, // w 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1CE0, 0x1CE0, 0x0FC0, 0x0780, 0x0780, 0x0FC0, 0x1CE0, 0x1CE0, 0x0000, 0x0000, // x 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x0E38, 0x07F0, 0x03E0, 0x00E0, 0x01C0, 0x1F80, // y 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FE0, 0x18E0, 0x11C0, 0x0380, 0x0700, 0x0E20, 0x1C60, 0x1FE0, 0x0000, 0x0000, // z 0x0000, 0x0000, 0x01F8, 0x0380, 0x0380, 0x0380, 0x0700, 0x1C00, 0x1C00, 0x0700, 0x0380, 0x0380, 0x0380, 0x01F8, 0x0000, 0x0000, // { 0x0000, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x01C0, 0x0000, // | 0x0000, 0x0000, 0x1F80, 0x01C0, 0x01C0, 0x01C0, 0x00E0, 0x0038, 0x0038, 0x00E0, 0x01C0, 0x01C0, 0x01C0, 0x1F80, 0x0000, 0x0000, // } 0x0000, 0x0000, 0x1F1C, 0x3B9C, 0x39DC, 0x38F8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 // ~ }; void lcdPrint(String text, int x, int y, int fontSize, int color) { int fontXSize ; int fontYSize ; switch (fontSize) { case 1: fontXSize = fontXSizeSmal ; fontYSize = fontYSizeSmal ; break; case 2: fontXSize = fontXSizeBig ; fontYSize = fontYSizeBig ; break; case 3: fontXSize = fontXSizeNum ; fontYSize = fontYSizeNum ; default: fontXSize = fontSize / 1.4 ; fontYSize = fontSize ; // space = fontSize / 3 ; } char charInput ; int cLenght = text.length(); int charDec ; int c ; int charHex ; char char_array[cLenght]; text.toCharArray(char_array, cLenght) ; for (int i = 0; i < cLenght ; i++) { charInput = char_array[i] ; charDec = int(charInput); digitalWrite(LCD_CS, LOW); SetWindows(x + (i * fontXSize), y, x + (i * fontXSize) + fontXSize - 1, y + fontYSize ); long charHex1 ; for ( int n = 0 ; n < fontYSize ; n++ ) { if (fontSize == 1) charHex1 = pgm_read_word_near(smallFont + ((charDec - 32) * fontYSize) + n); if (fontSize == 2) charHex1 = pgm_read_word_near(bigFont + ((charDec - 32) * fontYSize) + n); for (int t = 1; t < fontXSize + 1 ; t++) { if (( charHex1 & (1 << (fontXSize - t))) > 0 ) { c = color ; } else { c = background ; }; lcd_data(c >> 8); lcd_data(c); } } digitalWrite(LCD_CS, HIGH); } }

ZMEMW16
Ср. 07 октября 2015 г., 3:24
Это по хорошей цене, £ 5 UKP, стоит попробовать (дважды :-)

Этот фрагмент тоже довольно полезен

Стивен

Andreas_ferm
Ср. 07 октября 2015 г. 13:28
Я немного подумал об этом в течение дня, и кажется, что «работать» UTFT будет путь вперед. В огромном монстре STM32-Thread на Arduino.CC Я нашел «портированную» библиотеку UTFT от Madias (http: // форум.Ардуино.CC/INDEX.PHP?актио ... ACH = 114619) и кажется, что он адаптировал определения HW из "HW_MX20DX256.H ", но только для 4 и 5 -контактных серийных. Запчасти около 8 и 16 -битных параллелей прокомментированы.

Это выглядит немного похоже
case 16: */ *(volatile uint8_t *)(&GPIOD_PDOR) = VH; GPIOB_PCOR = 0x000F000F; // clear data lines B0-3,B16-19 GPIOB_PSOR = (0x0F & VL) | ((VL >> 4) << 16); // set data lines 0-3,16-19 if set in cl pulse_low(P_WR, B_WR); */ break;

Мадиас
Ср. 07 октября 2015 г. 13:48
Да, это команда записи порта AVR, она не будет функционировать с STM32.
Может быть, это то, что вы ищете (попробуйте код в последнем посте)
http: // форумы.Leaflabs.com/тема.PHP?ID = 226
Тогда вы можете адаптировать его для библиотеки UTFT
Вот какой -то более быстрый код записи для конкретных выводов (снова код в последнем сообщении)
http: // www.STM32duino.com/viewtopic.PHP ... +PIN#P5796
Другие поисковые термины для Google "Leaflabs Fast Pin Write" и т. Д....

Rogerclark
Ср. 07 октября 2015 г., 8:02 вечера
Если вы хотите писать целый порт за раз, посмотрите этот поток

http: // www.STM32duino.com/viewtopic.PHP?T = 474#P4550

Andreas_ferm
Ср. 07 октября 2015 г. 20:46
Спасибо за эту ссылку, Роджер, кажется, касается той же то же самое, что и я.

Я все еще пытаюсь расшифровать то, что на самом деле сделано в этом подростковом порту, а затем стараюсь сделать точно так же, но на кленовом мини -

И я думаю, что у меня больше всего теоретически покрыта (я.E Я нашел эквивалентные регистры STM32, GPIOX_OTYPER, GPIOX_BSSR, GPIOX_MODER

Одна вещь, которую я еще не понимаю, - это функция, называемая utft :: _ set_direction_gregisters (режим байта), где подростковый порт называется много
PORTD_PCR0 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); PORTD_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); PORTD_PCR2 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); PORTD_PCR3 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); PORTD_PCR4 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); PORTD_PCR5 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); PORTD_PCR6 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); PORTD_PCR7 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);

Мадиас
Ср. 07 октября 2015 г. 20:55
Это просто переназначение PIN?
https: // форум.PJRC.com/threads/431-reas ... -(SPI-SCK)

Rogerclark
Ср. 07 октября 2015 г. 11:24
Я ничего не знаю о программировании Teensy, но выглядит так, будто оно устанавливает Pinmode порта

STM32 имеет реестр управления для каждого порта, но он разделен на контроль низкий режим и управляйте высоким регистром, каждая ширина 32 бита в ширину.
STM32 должен сделать это, потому что каждый порт имеет ширину 16 бит, но я думаю, что есть 4 управляющего бита на PIN (ну, ему нужно более 2 на вывод)

Следовательно, он должен разделить управление для каждого порта через 2 регистра.

Если необходимо установить Pinmode для всего порта (или части порта), вам нужно будет настроить один или оба регистра управления для этого порта.

Самый простой способ выяснить, что делать, - это посмотреть на функцию PinMode.

https: // github.com/rogerclarkmelbourne/ ... TAL_F1.CPP

и в

gpio_set_mode ()

Andreas_ferm
Ср 14 октября 2015 г. 8:39
Доброе утро, ребята,

Я только что получил этот экран. И точно так же, как резюме, это действительно был экран SSD1289, который запускается в 16 -битном параллельном режиме (еще не имел времени, чтобы попробовать 8), и я использовал библиотеку UTFT, которую я нашел, опубликованную Madias где -то.

Честно говоря, у меня были проблемы с пониманием «как» выполнить реализацию, используя целые или части портов GPIO (я дал ему шанс, но она не сработала), поэтому вместо этого я использовал «пользовательские порты» и цифровой авторитет для каждого PIN

И UTFT_DEMO работал и завершен (без задержек) через 17501 мс, и путем изменения цифровой записи на GPIO_WRITE_BIT он завершен за 7029 мс.

Теперь наступает вопрос, и имейте в виду, что это первый раз, когда я использовал дисплей TFT, будет ли эта производительность «достаточной», для меня он будет только GUI с кнопками и показывает данные для системы пива пивоваренного завода С датчиком температуры и двумя SSR для управления теплом и насосом.

Я предполагаю, что «самый простой» целый порт записи » - поместить все данные на GPIOA на Maple Mini, но тогда это также взяло бы также булавки SPI1, которые я надеялся использовать для сенсорного экрана или может один из них Используйте SPI2 с уточом, например,?

Думаю, я немного укусил, увидев, какое повышение производительности я получил от DigitalWrite до gpio_write_bit.

Если 16 линий данных будут на разных портах, то речь идет о всей «маскирующей» вещи, которую у меня в настоящее время возникают проблемы с пониманием.

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

Rogerclark
Ср 14 октября 2015 г. 8:53 утра
Это будет значительно быстрее, написав 16 бит за один раз, или даже на 8 бит от 2 отдельных портов.

Если вам нужна хорошая производительность дисплея, вы должны инвестировать в доску, у которой достаточно бесплатных выводов, чтобы вы могли посвятить целый порт на дисплей.
(Это все еще будет стоить вам менее 15 долларов)

Смотрите этот пост, мой @madias о досках, которые он использует.

http: // www.STM32duino.com/viewtopic.PHP ... = 650#p6841

Но если вы не делаете много обновлений экрана, то разница в общей производительности вашей системы E.глин. Включая контроль SSR и т. Д.

С точки зрения того, способна ли плата STM32 на 72 МГц обращаться с управлением пивоваренным заводом, а также управлять сенсорным дисплеем. Я подозреваю, что это не будет проблемой.

Однако вам нужно убедиться, что вы не пишете код «блокировки», я.e Не используйте Delay () или не делайте ничего, что ждет за какое -то время () цикл для пользователя Enput E.глин. сенсорный экран.

Некоторые из библиотек сенсорного экрана имеют обнаружение сенсорных прерываний, поэтому вы должны использовать, которые были возможными

В качестве альтернативы вы можете посмотреть на использование одной из каркас RTOS, которая была перенесена; Я знаю, что @victorpv имел хорошие результаты, используя Freertos

Andreas_ferm
Ср 14 октября 2015 г. 9:15 утра
Спасибо за эту информацию, Роджер. Я думаю, что попробую использовать его в текущей конфигурации, и если необходимость представлена ​​в будущем, я исследую эти доски :)

Ахулл
Пн 26 октября 2015 г., 22:47
Кто -нибудь опубликовал рабочую версию UTFT LIB, которая работает с такими параллельными дисплеями?..
Изображение
Изображение

Rogerclark
Пн 26 октября 2015 г., 22:49
Энди

Я думал, что кто -то сказал, что они перенесли это, но я не могу вспомнить, где они опубликовали.

(Извини)

Zoomx
Вт 27 октября 2015 г. 9:16
На Arduino UTFT не может работать с этим щитом, потому что он использует булавки 0-7 вместо контактов 2-9, которые используются этим щитом.
Я считаю, что у Мадиаса есть порт этой библиотеки.

Ахулл
Вт 27 октября 2015 г. 11:51
Установите это, у меня есть библиотека, которая может работать, но есть проблема с дисплеем (некачественная паянка). Я посмотрю, смогу ли я вернуть его к жизни, и если да, я возьму трещину, чтобы перенести что -нибудь стабильное для этого.

. Похоже, они приходят в нескольких разных вариантах, поэтому мне нужно предположить, какой у меня есть : D

Andreas_ferm
Вт 27 октября 2015 г. 14:32
Если DisplayDriver поддерживается UTFT, он должен работать. Для моего 16 -битного дисплея я сделал изменения, такие как прикрепленный файл (только для 16 -битного))

Это не самый быстрый подход, так как я не был уверен, как выполнять операции в целом (или частях а) порта.

Тот же подход будет работать и для 8 -бит, я думаю

Zoomx
Ср 28 октября 2015 г. 11:43
Ахулл,
У меня есть щит, у которого, кажется, проблемы с зелеными, не все значения отображаются. Я нашел двух других парней на форуме Arduino, у которых есть такая же идентичная проблема здесь https: // форум.Ардуино.CC/INDEX.PHP?Тема = 343637 и здесь https: // форум.Ардуино.CC/INDEX.PHP?Тема = 338835.0.
У всех нас есть проблемы на зеленом канале. У вас такая же проблема?

Ахулл
Ср 28 октября 2015 г. 11:55 утра
Zoomx написал:Ахулл,
У меня есть щит, у которого, кажется, проблемы с зелеными, не все значения отображаются. Я нашел двух других парней на форуме Arduino, у которых есть такая же идентичная проблема здесь https: // форум.Ардуино.CC/INDEX.PHP?Тема = 343637 и здесь https: // форум.Ардуино.CC/INDEX.PHP?Тема = 338835.0.
У всех нас есть проблемы на зеленом канале. У вас такая же проблема?

E-Dredon
Вт 17 ноября 2015 г., 16:55
Andreas_ferm написал:Добрый день всем, я все новичок в STM32 и ранее выполнял только небольшие проекты на
У любого есть аналогичный дисплей, и он работает с Maple Mini?

Спасибо!
Андреас

Iwalpola
Сб 2 июля 2016 г., 15:58
Мне удалось изменить стандартную библиотеку STM32 под названием ADAFRIT_ILI9341_STM для работы с 8 -битной параллелью.

https: // github.com/iwalpola/adafruit_ili9341_8bit_stm
Демонстрация:
https: // www.YouTube.com/watch?v = makmazyzmwm

Все изменения в оригинальных файлах были отслеживались с помощью GIT, так что кто -то может учиться, читая коммиты.

Кроме того, PinMode () должен быть заменен, обновляя CRL и CRH, что я скоро сделаю.

Концзакп
Чт 14 июля 2016 г., 17:43
Потрясающая работа! Я здесь новичок, так что все привет!

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

Концзакп
Солнце 17 июля 2016 г. 10:58 утра
Может ли кто -нибудь помочь мне с этим экраном, чтобы заработать сенсорный экран (SPFD5408) ? Когда я собираюсь использовать библиотеку сенсорного screen_stm, я получаю ошибки, как ниже, и ни одна из других библиотек не работает, или я что -то упускаю. У кого -нибудь есть рабочий сенсорный экран для этого TFT ?
hardware/Arduino_STM32/STM32F1/variants/generic_stm32f103c/variant.h:18:14: error: 'uint8_t' does not name a type static const uint8_t SCK = BOARD_SPI1_SCK_PIN;

Ахулл
Солнце 17 июля 2016 г., 11:07
Вы можете взглянуть на https: // github.com/joaolopesf/spfd5408
У меня некоторое время не было игры с этим конкретным экраном, и я не получаю много свободного времени.
Реальная жизнь продолжает бросать в большие кучки суширов..

Концзакп
Солнце 17 июля 2016 г., 11:24

Ахулл
Солнце 17 июля 2016 г., 11:38 утра
Вы пробовали библиотеку "как есть". Похоже, он использует довольно стандартный синтаксис Arduino, чтобы поговорить с сенсорным устройством.
int TouchScreen::readTouchY(void) { pinMode(_xp, INPUT); pinMode(_xm, INPUT); digitalWrite(_xp, LOW); digitalWrite(_xm, LOW); pinMode(_yp, OUTPUT); digitalWrite(_yp, HIGH); pinMode(_ym, OUTPUT); digitalWrite(_ym, LOW); return (1023-analogRead(_xm)); }

Концзакп
Солнце 17 июля 2016 г. 13:43
:( Вот почему я пытался использовать touch_screen_library_stm, включенный в аппаратный пакет STM32 Arduino. Сначала я получал ошибки, как этот:
In file included from /home/pilot/Pulpit/arduino-1.6.9/hardware/Arduino_STM32/STM32F1/variants/generic_stm32f103c/pins_arduino.h:6:0, from /home/pilot/Pulpit/arduino-1.6.9/hardware/Arduino_STM32/STM32F1/libraries/Touch-Screen-Library_STM/TouchScreen_STM.cpp:8: /home/pilot/Pulpit/arduino-1.6.9/hardware/Arduino_STM32/STM32F1/variants/generic_stm32f103c/variant.h:17:29: error: 'BOARD_SPI1_NSS_PIN' was not declared in this scope static const uint8_t SS = BOARD_SPI1_NSS_PIN; ^ /home/pilot/Pulpit/arduino-1.6.9/hardware/Arduino_STM32/STM32F1/variants/generic_stm32f103c/variant.h:18:29: error: 'BOARD_SPI2_NSS_PIN' was not declared in this scope static const uint8_t SS1 = BOARD_SPI2_NSS_PIN; ^ /home/pilot/Pulpit/arduino-1.6.9/hardware/Arduino_STM32/STM32F1/variants/generic_stm32f103c/variant.h:19:29: error: 'BOARD_SPI1_MOSI_PIN' was not declared in this scope static const uint8_t MOSI = BOARD_SPI1_MOSI_PIN; ^ /home/pilot/Pulpit/arduino-1.6.9/hardware/Arduino_STM32/STM32F1/variants/generic_stm32f103c/variant.h:20:29: error: 'BOARD_SPI1_MISO_PIN' was not declared in this scope static const uint8_t MISO = BOARD_SPI1_MISO_PIN; ^ /home/pilot/Pulpit/arduino-1.6.9/hardware/Arduino_STM32/STM32F1/variants/generic_stm32f103c/variant.h:21:29: error: 'BOARD_SPI1_SCK_PIN' was not declared in this scope static const uint8_t SCK = BOARD_SPI1_SCK_PIN;

Martinayotte
Солнце 17 июля 2016 г. 14:26
Вы не должны комментировать их в варианте.h, оставь их там.
Ошибка, которую вы получили, заключается в том, что эти определения не загружаются из STM32F1/Variants/Maple/Poard/Poard.H, где они определены, вероятно, потому что этот файл никогда не загружается, вероятно, потому что ваш эскиз не включает в себя "Arduino.H "как первый заголовок.

Концзакп
Солнце 17 июля 2016 г. 15:17
Добавление Arduino.h в заглушении эскиза ничего не меняет. все еще те же ошибки.

Концзакп
Солнце 17 июля 2016 г. 16:44
Ребята, мне действительно нужно, чтобы это работало. Я сделаю пожертвование человека $$, который сможет мне помочь с этим

Martinayotte
Солнце 17 июля 2016 г., 17:45
Похоже, что проблема связана с тем фактом, что сенсорный экран-library_stm/touchscreen_stm.CPP ошибочно, включая "pins_arduino.H ", просто комментируя, включая, я скомпилировал ...

Концзакп
Солнце 17 июля 2016 г. 18:45
Да, теперь он компилируется, но все еще не работает. Не получить ответа от сенсорного экрана. Я попробовал конфигурацию PIN -кода как это:
#define YP PB6 // LCD_RS #define XM PB7 // LCD_CS #define YM PA0 // LCD_D0 #define XP PA1 // LCD_D1

Martinayotte
Солнце 17 июля 2016 г., 8:19 вечера
К сожалению, у меня нет такого дисплея TFT, поэтому я не могу помочь вам для отладки времени выполнения.

Концзакп
Пн 18 июля 2016 г. 12:18
Хорошо, я взял на рабочий пример от Arduino Uno. Я отрезал все из библиотеки, что мне не нужно, и от отдыха я создал функцию в простом эскизе. На Arduino uno он работает отлично, и теперь он не полагается на какую -либо внешнюю библиотеку. Но .... Всегда есть некоторые, но в конце ... Я получаю ошибки компиляции.

эскиз:
// Touch screen library with X Y and Z (pressure) readings as well // as oversampling to avoid 'bouncing' // This demo code returns raw readings, public domain //for STM32 #define YP PB3 // must be an analog pin, use "An" notation! #define XM PB4 // must be an analog pin, use "An" notation! #define YM PB5 // can be a digital pin #define XP PB6 // can be a digital pin //for arduino //#define YP A2 // must be an analog pin, use "An" notation! //#define XM A3 // must be an analog pin, use "An" notation! //#define YM 8 // can be a digital pin //#define XP 9 // can be a digital pin #define pressureThreshhold 20 #define platform 1 //1 for arduino, 2 for STM32 void setup(void) { Serial.begin(115200); } void loop(void) { // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // For the one we're using, its 300 ohms (rxplate) across the X plate getPoint_new(XP, YP, XM, YM, 300); } void getPoint_new(byte xp, byte yp, byte xm, byte ym, int rxplate) { int x, y, z; int samples[2]; byte i, valid; byte xp_port = digitalPinToPort(xp); byte yp_port = digitalPinToPort(yp); byte xm_port = digitalPinToPort(xm); byte ym_port = digitalPinToPort(ym); byte xp_pin = digitalPinToBitMask(xp); byte yp_pin = digitalPinToBitMask(yp); byte xm_pin = digitalPinToBitMask(xm); byte ym_pin = digitalPinToBitMask(ym); valid = 1; pinMode(yp, INPUT); pinMode(ym, INPUT); *portOutputRegister(yp_port) &= ~yp_pin; *portOutputRegister(ym_port) &= ~ym_pin; pinMode(xp, OUTPUT); pinMode(xm, OUTPUT); *portOutputRegister(xp_port) |= xp_pin; *portOutputRegister(xm_port) &= ~xm_pin; delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle for (i=0; i<2; i++) { samples[i] = analogRead(yp); } // Allow small amount of measurement noise, because capacitive // coupling to a TFT display's signals can induce some noise. if (samples[0] - samples[1] < -4 || samples[0] - samples[1] > 4) { valid = 0; } else { samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples } x = (1023-samples[1]); pinMode(xp, INPUT); pinMode(xm, INPUT); *portOutputRegister(xp_port) &= ~xp_pin; pinMode(yp, OUTPUT); *portOutputRegister(yp_port) |= yp_pin; pinMode(ym, OUTPUT); delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle for (i=0; i<2; i++) { samples[i] = analogRead(xm); } // Allow small amount of measurement noise, because capacitive // coupling to a TFT display's signals can induce some noise. if (samples[0] - samples[1] < -4 || samples[0] - samples[1] > 4) { valid = 0; } else { samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples } y = (1023-samples[1]); // Set X+ to ground pinMode(xp, OUTPUT); *portOutputRegister(xp_port) &= ~xp_pin; // Set Y- to VCC *portOutputRegister(ym_port) |= ym_pin; // Hi-Z X- and Y+ *portOutputRegister(yp_port) &= ~yp_pin; pinMode(yp, INPUT); int z1 = analogRead(xm); int z2 = analogRead(yp); if (rxplate != 0) { // now read the x float rtouch; rtouch = z2; rtouch /= z1; rtouch -= 1; rtouch *= x; rtouch *= rxplate; rtouch /= 1024; z = rtouch; } else { z = (1023-(z2-z1)); } if (! valid) { z = 0; } if (z > pressureThreshhold && z < 1000){ Serial.print("X = "); Serial.print(x); Serial.print("\tY = "); Serial.print(y); Serial.print("\tPressure = "); Serial.println(z); } }

Martinayotte
Пн 18 июля 2016 г., 13:02
Вам нужно изменить «байт» на «gpio_dev*», чтобы скомпилировать.
gpio_dev* xp_port = digitalPinToPort(xp); gpio_dev* yp_port = digitalPinToPort(yp); gpio_dev* xm_port = digitalPinToPort(xm); gpio_dev* ym_port = digitalPinToPort(ym);

Концзакп
Пн 18 июля 2016 г. 18:06
Есть некоторый прогресс ... Я вижу некоторые показания, но они нестабильны и ненадежны. И это не показывает давления ...

Martinayotte
Пн 18 июля 2016 г., 8:08 вечера
.CPP

Ахулл
Пн 18 июля 2016 г., 22:05
Концзакп написал:Есть некоторый прогресс ... Я вижу некоторые показания, но они нестабильны и ненадежны. И это не показывает давления ...

Martinayotte
Пн 18 июля 2016 г., 11:16 вечера
... .

Концзакп
Вт 19 июля 2016 г., 11:22 утра
Это рабочий набросок, в котором остался только диапазон для калибровки
//for STM32 #define YP PB0 // RS must be an analog pin, use "An" notation! #define XM PA0 // CS must be an analog pin, use "An" notation! #define YM PB7 // D0 can be a digital pin #define XP PA1 // D1 can be a digital pin #define pressureThreshhold 20 #define NUMSAMPLES 6 void setup(void) { Serial.begin(115200); } void loop(void) { // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // For the one we're using, its 300 ohms (rxplate) across the X plate getPoint_new(XP, YP, XM, YM, 300); } void getPoint_new(byte xp, byte yp, byte xm, byte ym, int rxplate) { int x, y, z; int samples[NUMSAMPLES]; byte i, valid; gpio_dev* xp_port = digitalPinToPort(xp); gpio_dev* yp_port = digitalPinToPort(yp); gpio_dev* xm_port = digitalPinToPort(xm); gpio_dev* ym_port = digitalPinToPort(ym); byte xp_pin = digitalPinToBitMask(xp); byte yp_pin = digitalPinToBitMask(yp); byte xm_pin = digitalPinToBitMask(xm); byte ym_pin = digitalPinToBitMask(ym); valid = 1; pinMode(yp, INPUT); pinMode(ym, INPUT); *portOutputRegister(yp_port) &= ~yp_pin; *portOutputRegister(ym_port) &= ~ym_pin; pinMode(xp, OUTPUT); pinMode(xm, OUTPUT); *portOutputRegister(xp_port) |= xp_pin; *portOutputRegister(xm_port) &= ~xm_pin; for (i=0; i pressureThreshhold && z < 1000){ Serial.print("X = "); Serial.print(x); Serial.print("\tY = "); Serial.print(y); Serial.print("\tPressure = "); Serial.println(z); } } static void insert_sort(int array[], uint8_t size) { uint8_t j; int save; for (int i = 1; i < size; i++) { save = array[i]; for (j = i; j >= 1 && save < array[j - 1]; j--) array[j] = array[j - 1]; array[j] = save; } }

Martinayotte
Вт 19 июля 2016 г., 16:29
Во-первых, вы должны знать, что эта LIB использует прямые 8 бит PA7-PA0 для шины данных. Перемещение PA0 в CS вам также нужно будет изменить функцию write8 ().
Кстати, была опечатка в комментариях adafruit_ili9341_8bit_stm.H: //Pin stm32 |PA7|PA6|PA5|PA4|PA3|PA2|PC1|PA0|

Концзакп
Вт 19 июля 2016 г., 16:43
Переключение порта на порт звучит хорошо. Как я могу это сделать ?

Martinayotte
Вт 19 июля 2016 г., 17:27
Посмотрите здесь:
#define TFT_CNTRL GPIOB #define TFT_DATA GPIOA

Концзакп
Вторник 19 июля 2016 г., 19:28
Так что я должен получить:

Данные порта | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
PIN STM32 | PB7 | PB6 | PB5 | PB4 | PB3 | PB2 | PB1 | PB0 |

Контрольные булавки | rd | wr | rs | cs | rst |
PIN STM32 | PA4 | PA5 | PA6 | PA7 | PA8 |

Но есть небольшая проблема. Нет PB2 PIN: http: // www.STM32duino.com/скачать/файл.PHP?ID = 17

Ахулл
Вт 19 июля 2016 г., 19:45
PB2 - это Boot1, но я не уверен, что это пригодны для использования.

Изображение

Концзакп
Вт 19 июля 2016 г., 19:55
охх:/ это не пригодна для использования, тогда. Так можно сместить эти булавки, чтобы начать не с PB0, а с PB3 ? Если да, то как сделать это в этих функциях? Это повлияет на SPI2? Я надеюсь не потому, что мне нужно будет его использовать.

Ахулл
Вт 19 июля 2016 г., 8:07 вечера
Концзакп написал:охх:/ это не пригодна для использования, тогда. Так можно сместить эти булавки, чтобы начать не с PB0, а с PB3 ? Если да, то как сделать это в этих функциях? Это повлияет на SPI2? Я надеюсь не потому, что мне нужно будет его использовать.

Концзакп
Вт 19 июля 2016 г., 8:16 вечера
Таким образом, это отрезает меня от обоих SPI. Мне нужен один из SPI, чтобы быть пригодным для использования.

Martinayotte
Вт 19 июля 2016 г., 8:17 вечера
Ахулл написал:PB2 - это Boot1, но я не уверен, что это пригодны для использования.

Концзакп
Вт 19 июля 2016 г., 8:22 вечера
Вы имеете в виду аппаратное обеспечение, примерно 4,7 ком между PB2 и GND? Таким образом, я смогу использовать этот PIN -код обычно, а также смогу вводить загрузчик ?

Martinayotte
Вт 19 июля 2016 г., 8:58 вечера
Да ! В моем случае я использую 10K, и в рамках своей прошивки PDB2 затем устанавливается как выход GPIO в Setup ().

Концзакп
Вторник 19 июля 2016 г., 21:03
Okey, поэтому в заключение я буду установить в коде библиотеки
#define TFT_CNTRL GPIOA #define TFT_DATA GPIOB

Rogerclark
Вторник 19 июля 2016 г., 21:27
Boot1 игнорируется, если Boot0 не будет вытянут высоко.

Maple Mini Leaves Boot1 плавает.

Это становится проблемой только в том случае, если вы хотите мигать через сериал, в котором. Случай должен убедиться, что Boot1 потянут низко, в противном случае мигание через сериал ненадежен, так как код может переключаться в ОЗУ, а не ПЗУ

Концзакп
Ср. 20 июля 2016 г., 11:17
К сожалению, после того, как изменения изменений не работает. Я меняю соединения на:
Port data |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | Pin stm32 |PB7|PB6|PB5|PB4|PB3|PB2|PB1|PB0| Control pins |RD |WR |RS |CS |RST| Pin stm32 |PA4|PA5|PA6|PA7|PA8|

Стивестронг
Ср. 20 июля 2016 г. 12:57
Привет,
Я купил аналогичную доску (2.4 -дюймовый Touch LCD), и я планирую заставить его бежать в следующие дни (завтра в скорее) с синей таблеткой.
Мои требования:
- Используйте USB -сериал для мониторинга
- Используйте SPI для SD -карты -> Port Pins PA4..7
- Используйте сенсорный экран -> Port Pins PA0..3
- Используйте 8 контактов данных -> Port Pins PB8..15
- Используйте контрольные булавки -> свободно настраивается на оставшихся штифтах порта

Я собираюсь использовать версию @iwapola, которая, кажется, довольно хорошо оптимизирована.
Тем не менее, я вижу, что управляющие штифты слишком ограничены, а затем я буду переделать их более гибким способом.
Затем я поделюсь своей рабочей версией, которую вы могли бы взять 1 к 1, если бы это картирование PIN -кода было бы хорошо для вас.

Martinayotte
Ср. 20 июля 2016 г. 13:00
Концзакп написал:Я что -то упускаю ?

Стивестронг
Ср. 20 июля 2016 г. 14:33
Внимание!
В соответствии с этот Сайт, кажется, что контакты XP и YM совместно используются с D6 и D7, YP и XM с LCD_WR и LCD_CD (помечены как LCD_RS на моей плате), соответственно. //I need to change the pins below for it to work. NOt sure why #define YP A1 // must be an analog pin, use "An" notation! #define XM A2 // must be an analog pin, use "An" notation! #define YM 7 // can be a digital pin #define XP 6 // can be a digital pin #define TS_MINX 150 #define TS_MINY 120 #define TS_MAXX 920 #define TS_MAXY 940 // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // For the one we're using, its 300 ohms across the X plate TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 // optional #define LCD_RESET A4

Cologne86
Ср. 20 июля 2016 г., 19:41
привет,
Сначала спасибо за отличную работу вместе :)
Библиотека для 8 -битного ЖК -дисплея работает очень хорошо, и это действительно быстро!.
Но теперь я хочу использовать сенсорный экран и нуждается в аналоговых булавках управления.
Как вы сказали, прежде чем я поменял порты и использовал B8 на B15 для данных. #define TFT_CNTRL GPIOA #define TFT_DATA GPIOB #define TFT_RD PA4 #define TFT_WR PA5 #define TFT_RS PA6 #define TFT_CS PA7 #define TFT_RST PA8

Cologne86
Ср. 20 июля 2016 г. 8:10 вечера
ОК, Сри :)
Сейчас все работает, я только что отредактировал и сохранил неправильный файл (тот же файл неправильный папка) :ржу не могу:

Концзакп
Ср. 20 июля 2016 г., 8:50 вечера
К сожалению, PB2 не реагирует на команду мигания. Есть ли другой путь ? Может быть, нужно сделать еще несколько настройки, чтобы PB2 работал в качестве цифрового питания не только загрузки не только. Может быть, мы сможем начать с PIN PB3, а не PB0?

Стивестронг
Ср. 20 июля 2016 г., 22:43
Cologne86 написал:ОК, Сри :)
Сейчас все работает, я только что отредактировал и сохранил неправильный файл (тот же файл неправильный папка) :ржу не могу:

Martinayotte
Ср. 20 июля 2016 г., 11:02
Концзакп написал:К сожалению, PB2 не реагирует на команду мигания. Есть ли другой путь ? Может быть, нужно сделать еще несколько настройки, чтобы PB2 работал в качестве цифрового питания не только загрузки не только. Может быть, мы сможем начать с PIN PB3, а не PB0?

Rogerclark
Ср. 20 июля 2016 г. 11:45
Я думаю, что на схеме Bluepill его 100 тыс

http: // wiki.STM32duino.com/images/c/c1/ ... эматический.PDF

Так что все еще должно быть в порядке

Изменить, предполагая, что схема, которую мы имеем для чертежа, верна, и они не изменили дизайн

Martinayotte
Чт 21 июля 2016 г. 12:48
У меня нет никаких таблеток, но, глядя на схему, вы предоставляете ссылку, да, на заголовке джемпер есть 100 тыс. Заголовок перемычки, предполагая, что перемычка удаляется ... : ugeek:

Rogerclark
Чт 21 июля 2016 г. 1:14
РЖУ НЕ МОГУ

Я посмотрел на свой Redpill, и у нее нет PB2 PIN

Поэтому я снова посмотрел на схему, и PB2 не разбит на булавки (которые такие же, как на Maple Mini) - вероятно, в качестве его Boot1 (даже если его можно использовать)

Таким образом, OP должен сообщить нам, какую доску они используют, или, возможно, они сбивают с толку PB2 с другим PIN

Martinayotte
Чт 21 июля 2016 г. 1:44
Rogerclark написал:(Это то же самое, что и на Maple Mini) - вероятно, в качестве его Boot1 (даже если его можно использовать)

Rogerclark
Чт 21 июля 2016 г. 1:52 утра
Я думаю, мы говорим о разных досках

Я не вижу этого на своем красном

Изображение

Martinayotte
Чт 21 июля 2016 г., 2:09
Rogerclark написал: Я не вижу этого на своем красном

Rogerclark
Чт 21 июля 2016 г., 3:12
Я согласен, Maple Mini - гораздо лучшая доска, чем синяя или красная таблетка (я не думаю, что красная таблетка тоже все еще доступна)

Стивестронг
Чт 21 июля 2016 г., 9:40
Что касается того, как определить сенсорные контакты, предполагается, что сопротивление между XM-XP и YM-yp должно быть измерено.
Одна пара имеет немного большее сопротивление, чем другая пара из -за геометрии дисплея (4: 3), я полагаю.
Таким образом, я понял, что на моем дисплее сенсорные булавки нанесены на карту следующим образом:
(XP -XM): LCD_WR - D0 = ~ 330 Ом
(Yp -im): lcd_cd (или _rs) - d1 = ~ 500 Ом
Итак, в моем случае, это не D6 и D7, которые используются, как опубликовано ранее.
Но я думаю, что это отличается от дисплея.

Концзакп
Чт 21 июля 2016 г., 9:57 утра
Я проверял каждый штифт с наброзом мигания. Просто PB2 не отвечает. Я пытался изменить соединения без какого -либо успеха. У меня синие таблетки http: // www.eBay.PL/ITM/201529768817?_tr ... Ebidx%3ait

Кажется, что это то же самое, что в этой таблице данных http: // wiki.STM32duino.com/images/c/c1/ ... эматический.PDF
.

Rogerclark
Чт 21 июля 2016 г., 10:03
@konczakp


У этой платы нет PIN PB2

Как вы думаете, какая булавка PB2.

(Изображение по ссылке eBay)
Изображение

Концзакп
Чт 21 июля 2016 г. 10:33 утра
Вот этот :)

Изображение

РЕДАКТИРОВАТЬ: Если я, возможно, не поддержан резистор на этом PIN ?

Rogerclark
Чт 21 июля 2016 г., 10:54
Схема, по -видимому, указывает на то, что перемычка имеет 100 тыс.

Я сомневаюсь, что вы можете управлять дисплеем через 100 тыс., Вам нужно заменить 100K с гораздо более низким резистором значения.

Brunof777
Чт 21 июля 2016 г., 11:46
привет

Я делаю на этих булавках Port data |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | Pin stm32 |PB7|PB6|PB5|PB4|PB3|PB2|PB1|PB0| Control pins |RD |WR |RS |CS |RST| Pin stm32 |PA4|PA5|PA6|PA7|PA8|

Концзакп
Чт 21 июля 2016 г., 11:51
Здесь работает: http: // www.STM32duino.com/viewtopic.PHP ... = 40#p16131
или вы можете попробовать это: http: // www.STM32duino.com/viewtopic.PHP ... = 30#p16026 для вашего эскиза
Но если вы используете библиотеку, которая была включена в STM32 для пакета Arduino, вы не сможете ее запустить. Этот не работает. Попробуйте использовать функцию в первой ссылке.

Стивестронг
Чт 21 июля 2016 12:38
Вы пытались прокомментировать в "TouchScreen_STM.CPP "Линия 22: //#include "pins_arduino.h"

Martinayotte
Чт 21 июля 2016 12:50
Концзакп написал: РЕДАКТИРОВАТЬ: Если я, возможно, не поддержан резистор на этом PIN ?

Martinayotte
Чт 21 июля 2016 12:53
Стивестронг написал:Вы пытались прокомментировать в "TouchScreen_STM.CPP "Линия 22: //#include "pins_arduino.h"

Brunof777
Чт 21 июля 2016 г. 14:20
Стивестронг написал:Вы пытались прокомментировать в "TouchScreen_STM.CPP "Линия 22: //#include "pins_arduino.h"

Стивестронг
Чт 21 июля 2016 г. 14:27
@brunof777
Что вы имеете в виду под "не работать"? Скомпилируется ли? Вы получаете какие -либо распечатки?
Вы идентифицировали булавки для x и y пластин (XP, YP, XM, YM) ?

Brunof777
Чт 21 июля 2016 г., 15:11
Стивестронг написал:@brunof777
Что вы имеете в виду под "не работать"? Скомпилируется ли? Вы получаете какие -либо распечатки?
Вы идентифицировали булавки для x и y пластин (XP, YP, XM, YM) ?

Стивестронг
Чт 21 июля 2016 г. 15:15
До сих пор неясно, что вы имеете в виду, не работая.
Вы должны позволить серийным отпечаткам увидеть, что происходит....

Brunof777
Чт 21 июля 2016 г. 15:19
Стивестронг написал:До сих пор неясно, что вы имеете в виду, не работая.
Вы должны позволить серийным отпечаткам увидеть, что происходит....

Brunof777
Чт 21 июля 2016 г. 15:23
Brunof777 написал:Стивестронг написал:До сих пор неясно, что вы имеете в виду, не работая.
Вы должны позволить серийным отпечаткам увидеть, что происходит....

Brunof777
Чт 21 июля 2016 г., 15:40
Может, мне нужно что -то изменить в сенсорном экране_STM.Файл CPP?
Как этот код: uint16_t TouchScreen::pressure(void) { // Set X+ to ground pinMode(_xp, OUTPUT); digitalWrite(_xp, LOW); // Set Y- to VCC pinMode(_ym, OUTPUT); digitalWrite(_ym, HIGH); // Hi-Z X- and Y+ digitalWrite(_xm, LOW); pinMode(_xm, INPUT); digitalWrite(_yp, LOW); pinMode(_yp, INPUT); int z1 = analogRead(_xm); int z2 = analogRead(_yp); if (_rxplate != 0) { // now read the x float rtouch; rtouch = z2; rtouch /= z1; rtouch -= 1; rtouch *= readTouchX(); rtouch *= _rxplate; #if !defined (__STM32F1__) rtouch /= 1024; #else rtouch /= 4095; #endif return rtouch; } else { #if !defined (__STM32F1__) return (1023-(z2-z1)); #else return (4095-(z2-z1)); #endif } }

Концзакп
Чт 21 июля 2016 г. 18:09
Есть какой -то прогресс на моей стороне :) Теперь экран работает частично, потому что, когда я даю ему команду, чтобы изменить изображение, оно становится белым:/ и прикосновение работает также частично, потому что он работает только по одной стороне:/ любые предложения, что проверить ?

РЕДАКТИРОВАТЬ: Проблема с экраном возникает, когда я добавляю настройки прикосновения в код предварительного просмотра экрана:/

Стивестронг
Чт 21 июля 2016 г. 18:57
Возможно, это проблема обмена булавками между прикосновением и экраном.
В связь Я предоставил ранее, если вы прокручиваете дальше в нижней части страницы, это еще один фрагмент кода, где явно указано: #define MINPRESSURE 10 #define MAXPRESSURE 1000 void loop() { digitalWrite(13, HIGH); TSPoint p = ts.getPoint(); digitalWrite(13, LOW); // ***** if sharing pins, you'll need to fix the directions of the touchscreen pins ***** //pinMode(XP, OUTPUT); pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); //pinMode(YM, OUTPUT); // we have some minimum pressure we consider 'valid' // pressure of 0 means no pressing! if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { ...

Концзакп
Чт 21 июля 2016 г., 19:18
Окей, это сработало для меня. Но все же прикосновение работает только на одной короткой стороне, пока он отлично работал на других булавках

РЕДАКТИРОВАТЬ: Нет, я не измерял это. Честно говоря, я не знал, как я пробовал, что самое лучшая конфигурация:/

Стивестронг
Чт 21 июля 2016 г., 19:22
Вы не можете выбрать штучки, как вам нравится, Вы должны идентифицировать их, измеряя сопротивление!

Концзакп
Чт 21 июля 2016 г., 19:24
какая измерение, с помощью которой ?

Стивестронг
Чт 21 июля 2016 г., 19:24
В моем случае именно так моя доска циркусирован: // overlaps: #define YP LCD_CD //(RS?) // 330 Ohm #define XM LCD_D1 // 500 Ohm #define YM LCD_D0 // 330 Ohm #define XP LCD_CS // 500 Ohm

Концзакп
Чт 21 июля 2016 г., 19:31
Забавно, что когда я перешел на ваши настройки, изменилась только рабочая сторона :) Изменение YP и YM ничего не меняет.

Стивестронг
Чт 21 июля 2016 г., 19:34
Концзакп написал:Только рабочая сторона изменилась

Концзакп
Чт 21 июля 2016 г., 8:11 вечера
оставил одну кнопку

Стивестронг
Пт 22 июля 2016 12:05
Наконец -то удалось сделать сенсорный экран, без дисплея.
Для этого следует соответственно следующие контакты (дополнительно к булавкам пластин):
VCC (3.3 В),
Гнездо,
и - важный!
LCD_RD - >привязан к VCC. Эта линия правильно переключает направление одного из трансиверов шины (HC245) на плате, на котором подключены LCD_D0 и D1. Только если этот штифт высок, контакты LCD_D0 и D1 (YM, XM) можно использовать в качестве аналогового входа.

Стивестронг
Пт 22 июля 2016 г. 8:26 утра
Я только что понял, что можно идентифицировать штифты сенсорной пластины, следуя проводам от/до автобусных приемопередатчиков (U2, U3), потому что с одной стороны (сторона к слоту SD -карты) у них подключены контакты пластины.
РЕДАКТИРОВАТЬ
HM, я думаю, мне только что повезло, нет правила, с которым соединены штифты, я видел несколько разных вариантов в сети.
Но у всех них есть U3, переключающий LCD_D0..D7 PINS на сигнале LCD_RD.
Единственным надежным методом обнаружения пластин по -прежнему является измерение сопротивления, хотя наиболее распространенным является использование LCD_D6, D7. Моя плата использует LCD_D0, D1.
Другая сторона пластин обычно подключена к LCD_WR+CD, моя плата использует LCD_CS+RS (CD).

Cologne86
Пт 22 июля 2016 г., 11:29
Стивестронг написал:Cologne86 написал:ОК, Сри :)
Сейчас все работает, я только что отредактировал и сохранил неправильный файл (тот же файл неправильный папка) :ржу не могу:

Концзакп
Пт 22 июля 2016 12:07
Мне удается заставить это работать!
Здесь рабочий код как для экрана TFT, так и для прикосновения - прочитайте комментарии для настройки и соединений.
// @konczakp // // TFT settings // in Adafruit_ILI9341_8bit_STM.h // // #define TFT_CNTRL GPIOA // #define TFT_DATA GPIOB // #define TFT_RD PA4 // #define TFT_WR PA5 // #define TFT_RS PA6 // #define TFT_CS PA7 // #define TFT_RST PA8 // // Connection // Port data |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | // Pin stm32 |PB7|PB6|PB5|PB4|PB3|PB2|PB1|PB0| // Control pins |RD |WR |RS |CS |RST| // Pin stm32 |PA4|PA5|PA6|PA7|PA8| #include #include #include "Adafruit_ILI9341_8bit_STM.h" #define YP PA6 // LCD_RS #define XM PA7 // LCD_CS #define YM PB0 // LCD_D0 #define XP PB1 // LCD_D1 #define pressureThreshhold 20 #define NUMSAMPLES 12 Adafruit_ILI9341_8bit_STM tft = Adafruit_ILI9341_8bit_STM(); void testLines(uint16_t color) { int x1, y1, x2, y2, w = tft.width(), h = tft.height(); tft.fillScreen(ILI9341_BLACK); x1 = 0; y1 = h - 1; y2 = 0; for(x2=0; x2 pressureThreshhold && z < 100){ Serial.print("X = "); Serial.print(x); Serial.print("\tY = "); Serial.print(y); Serial.print("\tPressure = "); Serial.println(z); } } static void insert_sort(int array[], byte size) { byte j; int save; for (int i = 1; i < size; i++) { save = array[i]; for (j = i; j >= 1 && save < array[j - 1]; j--) array[j] = array[j - 1]; array[j] = save; } }

Стивестронг
Пт 22 июля 2016 12:50
@konczakp
Поздравляю, похоже, что у вас такое же картирование булавок, что и у моей доски.
Но вы не используете SD -карту, верно? В противном случае вам понадобится PA4..PA7 для SPI1.

Концзакп
Пт 22 июля 2016 г. 13:03
Я тоже буду использовать SD -карту, но оставляю ее на следующую стадию, потому что я никогда не использовал более одного «модуля» за один SPI. Я буду использовать SPI для чего -то другого, и когда все будет работать, я постараюсь добавить SD -карту.
Об этом картировании булавки - я думаю, что это то же самое для каждого щита от Arduino. Если кто -то купил TFT 2,4 Shield для Arduino, то это должно работать. Я не знаю о больших экранах, но легко проверить. Вместо измерения импеданса вывода вы можете сравнить с этим щитом http: // supertronik.pl/img/wyswietlacz_mega2560_3.JPG и изменить, как на другом щите. Все, что я делал, было основано на коде Arduino.

Кстати, кто -нибудь знает, как назначить прямое AERA для сенсорного экрана, чтобы проверить, нажал ли BTN на экране?

РЕДАКТИРОВАТЬ: Еще одно дело ... Есть ли возможность выключить экран и включить его, если экран был коснулся ?

Стивестронг
Пт 22 июля 2016 г. 13:15
Концзакп написал:Об этом картировании булавки - я думаю, что это то же самое для каждого щита от Arduino.

Стивестронг
Пт 22 июля 2016 г. 13:30
Концзакп написал: Есть ли возможность выключить экран и включить его, если экран был коснулся ?

Концзакп
Пт 22 июля 2016 г. 13:35
Я имел в виду, что LCD_RS и LCD_CS всегда аналоговые, и определение должно быть похоже на ниже
YP is LCD_RS XM is LCD_CS YM is LCD_D0 XP is LCD_D1

Cologne86
Пт 22 июля 2016 г. 15:45
Я измерил свой ЖК -дисплей, и это то же самое ;) Мне также нужно сделать кое -что в библиотеке сенсорного экрана :) Но существует некоторый выход, связанный с положением и давлением, связанным с давлением, но 2 образца не достаточно точно (поэтому давление часто сохраняется как 0), поэтому мне нужно изменить это...

Я переоделся, чтобы прикреплять A0-A3 и A8 для элементов управления, все, что вам нужно изменить, находится в строке 20 ADAFRIT_ILI9341_8BIT_STM.CPP TFT_CNTRL->regs->CRL = (TFT_CNTRL->regs->CRL & 0x0000FFFF) | 0x33330000;

Стивестронг
Пт 22 июля 2016 г., 17:24
Cologne86 написал:Это нормальное поведение для значений x и y зависеть друг от друга?

Cologne86
Пт 22 июля 2016 г. 18:07
Стивестронг написал: Нет, это не нормально. Я также получил это поведение, прежде чем я выяснил зависимость от LCD_RD PIN.

Концзакп
Пт 22 июля 2016 г. 18:16
Спасибо Cologne86! Я использовал вашу конфигурацию, и теперь у меня есть дополнительный SPI бесплатно :)

Cologne86
Пт 22 июля 2016 г., 19:15
пожалуйста :)
Вот простой набросок для использования дисплея и прикосновения, вы должны каким -то образом иметь рабочие библиотеки и изменить булавки, если ваши разные, остальные должны работать
(рисунок красной ручкой) // Touch screen library with X Y and Z (pressure) readings as well // as oversampling to avoid 'bouncing' // This demo code returns raw readings, public domain #include #include #include #include "Adafruit_ILI9341_8bit_STM.h" // These are the pins for the shield! #define YP PA2 // must be an analog pin #define XM PA3 // must be an analog pin #define YM PB8 // can be a digital pin #define XP PB9 // can be a digital pin #define RD PA0 #define XMIN 500 #define XMINBLACK 320 #define XMAX 3740 #define YMIN 420 #define YMAX 3640 #define MINPRESSURE 20 #define MAXPRESSURE 1000 // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // For the one we're using, its 300 ohms across the X plate TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); Adafruit_ILI9341_8bit_STM tft = Adafruit_ILI9341_8bit_STM(); void setup(void) { //Serial.begin(9600); delay(5); tft.begin(); //digitalWrite(RD, LOW); tft.fillScreen(ILI9341_BLACK); tft.setRotation(1); delay(1000); } void loop(void) { pinMode(RD,OUTPUT); digitalWrite(RD, HIGH); TSPoint p = ts.getPoint(); //set controlpins to output again TFT_CNTRL->regs->CRL = (TFT_CNTRL->regs->CRL & 0xFFFF0000) | 0x00003333; // we have some minimum pressure we consider 'valid' // pressure of 0 means no pressing! if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { int16_t x=calculateX(p.x); int16_t y=calculateY(p.y); //Serial.print("X = "); Serial.print(x); //Serial.print("\tY = "); Serial.print(y); //Serial.print("\tPressure = "); Serial.println(p.z); tft.fillCircle(x, y, 3, ILI9341_RED); } } uint16_t calculateX(uint16_t x) { return 320-(320*(x-XMIN))/(XMAX-XMIN); } uint16_t calculateY(uint16_t y) { return (240*(y-YMIN))/(YMAX-YMIN); }

Концзакп
Пт 22 июля 2016 г., 19:45
Можете ли вы показать, как вы рассчитываете эти булавки ?
TFT_CNTRL->regs->CRL = (TFT_CNTRL->regs->CRL & 0xFFFF0000) | 0x00003333;

Cologne86
Пт 22 июля 2016 г., 19:57
Концзакп написал:Можете ли вы показать, как вы рассчитываете эти булавки ?
TFT_CNTRL->regs->CRL = (TFT_CNTRL->regs->CRL & 0xFFFF0000) | 0x00003333;

Концзакп
Пт 22 июля 2016 г., 8:38 вечера
Спасибо!

Потому что оба SPI бесплатны ?

Cologne86
Пт 22 июля 2016 г., 21:10
https: // github.com/Victorpv/sdfat
Возьмите QuickStart One, он работает

Концзакп
Пт 22 июля 2016 г., 21:37
Вы знаете, как изменить это, чтобы запустить на SPI2 ?

Martinayotte
Пт 22 июля 2016 г., 21:52
Сделайте поиск на форуме, Роджер представил SPI.SetModule (n), который позволяет переключать SPI без изменения библиотеки. Конечно, вам нужно выполнять эти вызовы, каждый из которых вы хотите переключить выполнение кода с одного устройства на другое.

Концзакп
Sun 24 июля 2016 г., 15:40
Я видел этот метод, а также пытался (без какого -либо успеха) использовать его. Вот почему я спросил, есть ли у кого -нибудь рабочий набросок:/

@Stevestrong - в одной из тем о использовании SD -карты вы упомянули, что используете SPI.setModule (2) и он работает. Не могли бы вы поделиться своим кодом, пожалуйста?

Cologne86
Sun 24 июля 2016 г., 18:08
Если ваша цель SPI не слишком критическая, вы могли бы использовать другой штифт Slabeselect и получить доступ к ним один за другим, это даст вам еще 3 бесплатных вывода

У меня есть еще одна проблема с моим сенсорным экраном, я не знаю, сломано ли он или что -то не так :? Даже если RD установлен высоко, а код такой же, как и до того, как вход не обнаруживается правильно, я также измерил двойное сопротивление на x-achses с мультиметром (два раза сопротивление на X-achses за день до))...Кто -нибудь видит то же поведение или имеет идею?

Концзакп
Пн 25 июля 2016 г. 8:59 утра
Вы можете сделать некоторый тест с этим сенсорным экраном. Подключите один аналоговый штифт do GPIOA и второй к GPIOB, RD PIN -код с GND и другие 2 пина с цифровыми выводами, как вы хотите. Измените определение PIN -кода в эскизе и, пожалуйста, используйте мой эскиз, который я загрузил ранее. В этой конфигурации это должно работать отлично. Если это не так, то попробуйте изменить конфигурацию PIN -кода. Не подключайте другие булавки. С моим эскизом я получаю очень надежные показания. Так что ты тоже должен. Если вы можете измерить сопротивление, то экран должен быть в порядке. Ранее у меня была та же проблема. Я не могу вспомнить, что я сделал, но я начал с этой конфигурации PIN -кода. Разделение оба аналоговых контактов на различные GPIO уменьшит влияние между обоими аналоговыми контактами. Также в моем эскизе мне не нужно получить RD PIN. Более того, когда я устанавливал этот булавку высоко, у меня были странные чтения. Так что, возможно, RD PIN -код - проблема.

Об этой SD -карте. Я тоже пытался заставить его работать на SPI1, но без успеха. Это мое соединение с булавками:
SD pins |SCK |D0 |D1 |SS | Pin stm32 |PA5 |PA6 |PA7 |PA4|

Стивестронг
Пн 25 июля 2016 г., 11:52
spi1.png
SPI1.PNG (27.05 киб) просмотрено 567 раз

Концзакп
Пн 25 июля 2016 г. 12:05
Именно так я подключил его. Чтобы понять, я пытаюсь подключить SD-карту, которая находится на экране TFT, поэтому я не беспокоюсь о напряжении (потому что регулятор напряжения на борту) это TFT, на котором уже работает экран и прикосновение. Я отформатировал (под Ubuntu) SD -карту для жира, и это небольшая карта, 1 ГБ большой. Я также пытался переключить моси/мисо, но без успеха. Я также пробовал другие наброски и либерации, но и без какого -либо успеха:/

Стивестронг
Пн 25 июля 2016 г. 12:15 вечера
Стивестронг написал:Проверьте, является ли ваш SD -адаптер для 5 В или 3.3В.

Концзакп
Пн 25 июля 2016 г. 12:18
TFT поставляется с 5 I 3.3В. Нет штифта и т. Д. Для изменения вольтах, потому что есть регулятор напряжения. Это тот же экран, что и у вас.

Стивестронг
Пн 25 июля 2016 г. 12:21
Я имел в виду ваш адаптер SD -карты...

Концзакп
Пн 25 июля 2016 г. 12:28
Изображение

Я думаю, ты меня неправильно понял. Это мой адаптер SD. Есть регулятор напряжения, поэтому мне не волнует напряжение. Экран должен быть подключен с 3.3 и 5 В. Адаптер SD -карты находится на экране.

Стивестронг
Пн 25 июля 2016 г. 12:45
Да, право, я неправильно понял ситуацию.
Конечно, вы используете адаптер SD-борта. Так что это должно работать с 3.3В.
Будьте уверены, что 3.3V запас может отказаться до 1А.
Я проверю его вечером дома и дам вам знать результаты.

Ахулл
Пн 25 июля 2016 г., 19:15
У нас есть полная схема этой доски? Я вижу, что один из штифтов SD -карты отправляется в эти чипсы с плоскими упаковками в середине доски, я полагаю, что это значит.

Концзакп
Пн 25 июля 2016 г., 19:52
К сожалению, у меня нет схемы:/

Стивестронг
Пн 25 июля 2016 г., 8:55 вечера
Это то, что ближе всего к реальности, кроме соединения сенсорной пластины.
3.3V также питается от регулятора электроэнергии 5V.

U2 = U3 = HC245

Концзакп
Пн 25 июля 2016 г., 21:09
Stevestrong, вы пробовали со своей SD -картой TFT ?

Стивестронг
Пн 25 июля 2016 г., 21:19
Ну, я все еще борюсь с GIT, пытаясь получить главную ветвь и пытаться объединить мои локальные изменения, которые так или иначе слишком много, по сравнению с моим последним занятием...
Может быть, потому что это давно с тех пор, как я проверил в прошлый раз.
Извините, но кажется, что я не смогу собрать его сегодня :(

Концзакп
Пн 25 июля 2016 г., 21:21
это нормально. Я буду недоступен в течение одной недели, поэтому, когда вы будете готовы, просто вставьте его здесь, и я проверю позже. Спасибо

Бьянкифан
Вторник 26 июля 2016 г. 14:56
В начале весны этого года я сыграл немного с парой этих "MCUFRIENS" в сочетании с ООН.
IIRC было ILI9320, 25, 35, 41 и 86, все с резистивным сенсорным контроллером и слотом Micro SD.
Адафрутские либера ;)
Как раз тогда, когда я закончил либера.
Чему я узнал?
Каждый дисплей имеет еще одну маршрутизацию для его прикосновения, даже при совпадении формата и контроллера.
Так что есть только один путь: попробуй и попробуй...

Слот SD работает вообще, но было плохо.
Доступ к ней через SPI, пожалуйста, посмотрите на примеры adfruit tftlib.

Стивестронг
Вт 26 июля 2016 г. 18:01
Всем привет,
Я немного переработал Touch Lib, представив некоторые функции, такие как:
- Легко обнаружить прикосновение и получение координат в одном вызове функции
- Картирование возвращаемых координат с разрешением дисплея (по умолчанию: 320x240)
- Полуавтоматический (пользовательский) простой процесс калибровки (требует прикосновения к двум противоположным углам дисплея).
Если интересно, как его использовать, проверьте включенный пример INO.
Любой (конструктивный) комментарий приветствуется. :)
Веселиться!

Стивестронг
Ср. 27 июля 2016 г., 19:07
SD -карта работает вместе с Touch Lib.

Clou: доска должна быть оснащена 5 В!
В этом случае удалите 3.3 В проволока от таблетки.

Это не сработало с 3.3v от синей таблетки, вероятно, 3.3V регулятор таблетки тоже недостаточно силен для адаптера SD.
*** Touch demo with easy calibration + SD card info *** Calibrating the touch surface > please press one corner...ok. > and now press the diagonally opposite corner...ok. Calibration done! SdFat version: 20150321 Assuming the SD is the only SPI device. Edit DISABLE_CHIP_SELECT to disable another device. Assuming the SD chip select pin is: 4 Edit SD_CHIP_SELECT to change the SD chip select pin. touch the screen to start X = 319, Y = 81, Z = 1296 init time: 9 ms Card type: SDHC Manufacturer ID: 0X3 OEM ID: SD Product: SL16G Version: 8.0 Serial number: 0X72F2CA43 Manufacturing date: 8/2015 cardSize: 15931.54 MB (MB = 1,000,000 bytes) flashEraseSize: 128 blocks eraseSingleBlock: true OCR: 0XC0FF8000 SD Partition Table part,boot,type,start,length 1,0X0,0XC,8192,31093648 2,0X0,0X0,0,0 3,0X0,0X0,0,0 4,0X0,0X0,0,0 Volume is FAT32 blocksPerCluster: 64 clusterCount: 485710 freeClusters: 485700 freeSpace: 15915.42 MB (MB = 1,000,000 bytes) fatStartBlock: 8794 fatCount: 2 blocksPerFat: 3795 rootDirStart: 2 dataStartBlock: 16384 touch the screen to start

Концзакп
Ср. 27 июля 2016 г., 19:24
Можете ли вы указать соединение между TFT и STM32?

Стивестронг
Ср. 27 июля 2016 г., 19:37
Для сенсорных булавок, см. Определяет с эскиза INO.
Подключение SD -карты, дополнительно к 5 В, и GND от таблеток, является простым.

Будьте осторожны: не смешивайте названия портов Паксовый с Топор ! STM32 TFT PA4 SD_SS PA5 SD_SCK PA6 SD_DO (=MISO) PA7 SD_DI (=MOSI)

Cologne86
Ср. 27 июля 2016 г., 8:17 вечера
Стивестронг написал:Что касается того, как определить сенсорные контакты, предполагается, что сопротивление между XM-XP и YM-yp должно быть измерено.
Одна пара имеет немного большее сопротивление, чем другая пара из -за геометрии дисплея (4: 3), я полагаю.
Таким образом, я понял, что на моем дисплее сенсорные булавки нанесены на карту следующим образом:
(XP -XM): LCD_WR - D0 = ~ 330 Ом
(Yp -im): lcd_cd (или _rs) - d1 = ~ 500 Ом
Итак, в моем случае, это не D6 и D7, которые используются, как опубликовано ранее.
Но я думаю, что это отличается от дисплея.

Стивестронг
Ср. 27 июля 2016 г. 20:39
Что ж, если вы не подключите какой -либо другой штифт, и вы не касаетесь дисплея во время измерения, и сопротивление пластины меняется, это может только намекнуть на неисправность аппаратного обеспечения, я предполагаю.

Cologne86
Чт 28 июля 2016 г., 9:38 утра
Стивестронг написал:Что ж, если вы не подключите какой -либо другой штифт, и вы не касаетесь дисплея во время измерения, и сопротивление пластины меняется, это может только намекнуть на неисправность аппаратного обеспечения, я предполагаю.

Стивестронг
Чт 28 июля 2016 г., 11:31
Линии данных D0...D7 переключается через U3, который управляется сигналом LCD_RD.
Убедитесь, что этот вывод установлен на «высокий» («1»), чтобы использовать сенсорные штифты.

Cologne86
Чт 28 июля 2016 г., 11:45
Стивестронг написал:Линии данных D0...D7 переключается через U3, который управляется сигналом LCD_RD.
Убедитесь, что этот вывод установлен на «высокий» («1»), чтобы использовать сенсорные штифты.

Стивестронг
Чт 28 июля 2016 12:03
Вы поставляете доску 3.3 В или 5 В?
Если вы используете 3.3V от синей таблетки (STM32), этого может быть недостаточно, чтобы водить подсветку, SD -карту и LCD все вместе.
Я бы посоветовал вам использовать 5 В.

Cologne86
Чт 28 июля 2016 г., 13:02
Я подключил оба.

Стивестронг
Чт 28 июля 2016 г. 8:18 вечера
Cologne86 написал:Я подключил оба.

stmnoob0xff
Вторник 02 августа 2016 г. 2:07
Привет!

Я читал эту ветку и немного потерян..

У меня есть TFT (как упоминалось ранее) с надписью «TFT_320QVT_9341».

У него DB0 - DB -15.

Какой либератор должен использовать, и возможно ли все еще изменить конфигурацию PIN на STM32F4 (Discovery)?

Есть ли ссылка на то, как другие люди направлялись и настроили?

(Кажется, есть много набросок, но я не уверен, за каким я должен следить).

stmnoob0xff
Вторник 02 августа 2016 г. 2:37
Я только что нашел это (с немного большей охотой):

https: // www.элемент14.com/community/gro ... 2D-TFT-LCD

Будет ли это работать?

Концзакп
Сб 06 августа 2016 12:29
всем привет ... Я только что вернулся из своих праздников :) И я вернулся к своему проекту с TFT и SD -картой.

@stevestrong я попробовал код вашей SD -карты, и, к сожалению, он не работает :( Я подключился, как вы упомянули, но все еще ничего. Я купил даже другую доску для проведения тестов (Maple Mini), но ничего не изменилось : x Я пытался через 5 В и после этого с 3.3 В и, наконец, оба. Я подключил только булавки для SD -карты, все остальное не подключено. Я действительно не знаю, что делаю не так, я думаю, что упускаю небольшую часть, которую я не вижу, или не знаю, в чем проблема. Я знаю, что карта работает, потому что я провел тест с Arduino и простой код Cardinfo из Adruino Ide. На Ардионо все работает нормально, но не на кленовой мини - / синей таблетке.

Потому что я не знаю, как найти проблему ниже, - это моя схема кода и подключения:

связь
FTDI maple mini TFT_SD (USB-to-RS) | -----Rx------|------Tx-------| | -----Tx------|------Rx-------| | ----GND------|------GND------|-----GND------| | ----+3v------|------VCC------| |------PA4------|----SD_SS-----| |------PA5------|----SD_SCK----| |------PA6------|----SD_MISO---| |------PA7------|----SD_MOSI---| |------+5v-----|---------------> +5v from USB (GND already connected via PC and FTDI)

Концзакп
Сб 06 августа 2016 г. 14:15
Хорошо, я решил это! :) :)

Для меня этот код работает:
/* SD card read/write created Nov 2010 by David A. Mellis modified 9 Apr 2012 by Tom Igoe This example code is in the public domain. */ #include #include File myFile; void setup() { // Open serial communications and wait for port to open: Serial.begin(115200); delay(4000); Serial.print("Initializing SD card..."); if (!SD.begin(PA4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. myFile = SD.open("test.txt", FILE_WRITE); // if the file opened okay, write to it: if (myFile) { Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3."); // close the file: myFile.close(); Serial.println("done."); } else { // if the file didn't open, print an error: Serial.println("error opening test.txt"); } // re-open the file for reading: myFile = SD.open("test.txt"); if (myFile) { Serial.println("test.txt:"); // read from the file until there's nothing else in it: while (myFile.available()) { Serial.write(myFile.read()); } // close the file: myFile.close(); } else { // if the file didn't open, print an error: Serial.println("error opening test.txt"); } } void loop() { // nothing happens after setup }

Пито
Сб 06 августа 2016 г. 14:16
Попробуйте использовать SDFAT отсюда (автор SDFAT GitHub):
https: // github.com/greiman/sdfat
Попробуйте примеры, это должно работать.
PS: приведенный выше код старый.

Концзакп
Сб 06 августа 2016 г. 14:22
Спасибо, Пито! Я попробую это позже, потому что он начал работать с библиотекой SD, я думаю, что придержимся этого. Пока это не перестанет работать, потому что я хочу переместить SD -карту в SPI2 :)

Стивестронг
Сб 06 августа 2016 г. 22:08
Я послал пиар в Викторе, он содержит важные изменения, он не обновлял свой репо.
Так что попробуйте версию из моего репо.

Rogerclark
Сб 06 августа 2016 г. 22:15
Стив

Виктор не был на форуме целую вечность, я думаю, что мы должны предположить, что он больше не поддерживает ни одного из своих репо

Стивестронг
Сб 06 августа 2016 г. 22:20
Роджер, в этом случае я бы предложил включить SD Fat Lib в официальные либера?

Rogerclark
Солнце 07 августа 2016 12:36
Я думал, что официальный либера.
Или победители не были реализованы первоначальным автором LIB ?

Вадимель
Сб 13 августа 2016 г. 13:44
Я пытаюсь учиться руке, извините, если задаю глупые вопросы.
STM32F103C8T6 не имеет PC1, это ошибка?
Может быть, PA1 ?

Пито
Сб 13 августа 2016 г. 13:59
Нет PC1, но PC13,14,15

Вадимель
Сб 13 августа 2016 г. 14:16
Пито ОК, мне нужно изменить PIN -штифт шины DATA PC1 на PC13 ? в functions called write8(), setWriteDataBus()

Пито
Сб 13 августа 2016 г. 14:44
Измените PC1 на PA1

Вадимель
Сб 13 августа 2016 г., 17:23
Я думаю, что это ошибка, и нечего изменить??????.
//#определить tft_data gpioa
void Adafruit_ILI9341_8bit_STM::setWriteDataBus(void) { //set the pins to output mode //not required to mask and assign, because all pins of bus are set together TFT_DATA->regs->CRL = 0x33333333; //each pin is configured by four bits, and 0b0011 or 0x3 means output mode (same as pinmode()) }

Концзакп
Пн 15 августа 2016 г., 11:49
Привет,

Да SPFD5408 2.4 '' TFT -экран очень хорошо работает с Maple Mini и Blue Pills. Вы должны тщательно прочитать эту тему, потому что все здесь также с способом подключения TFT к STM32, а также что изменить и как в библиотеках. Несколько сообщений ранее я опубликовал все, что вам нужно для работы (также с примером рабочей эскиза), например, вот как изменить библиотеку http: // www.STM32duino.com/viewtopic.PHP ... 110#P16273 и ниже приведен пример из Cologne86. Это должно помочь вам получить эту работу.

Вадимель
Пн 15 августа 2016 г. 18:32
Концзакп
Я изменяюсь в adafruit_ili9341_8bit_stm.час
#define tft_cntrl gpioa
#define tft_data gpiob
#define tft_rd pa0
#define tft_wr pa1
#define tft_rs pa2
#define tft_cs pa3
#define tft_rst pa8
и
Tft_cntrl->регс->Crl = (tft_cntrl->регс->CRL & 0xffff0000) | 0x00003333;
в adafruit_ili9341_8bit_stm.CPP
============================================================================= ====
соединять

111.jpg
111.JPG (157.91 киб) просмотрено 720 раз

Cologne86
Пн 15 августа 2016 г., 8:12 вечера
Привет, Вадим,

Вот что у меня сейчас есть, работает в ILI9341 и почти работает для ILI9328/ILI9325 (медленнее и не работает на реверсе ландшафта)
с PB8-PB15 как D0-D7

Я точно не помню, что я изменил, но он все равно должен работать с хорошей производительностью для ILI9341

Я также добавил функцию PushColors для быстрее отображения SDCARD

.час /* See rights and use declaration in License.h This library has been modified for the Maple Mini */ #ifndef _ADAFRUIT_ILI9341H_ #define _ADAFRUIT_ILI9341H_ #include "Arduino.h" #include "Print.h" #include #include #define TFTLCD_DELAY 0xFF #define ILI9341_TFTWIDTH 240 #define ILI9341_TFTHEIGHT 320 #define ILI9341_NOP 0x00 #define ILI9341_SWRESET 0x01 #define ILI9341_RDDIDIF 0x04 #define ILI9341_RDDID 0xD3 #define ILI9341_RDDST 0x09 #define ILI9341_SLPIN 0x10 #define ILI9341_SLPOUT 0x11 #define ILI9341_PTLON 0x12 #define ILI9341_NORON 0x13 #define ILI9341_RDMODE 0x0A #define ILI9341_RDMADCTL 0x0B #define ILI9341_RDPIXFMT 0x0C #define ILI9341_RDIMGFMT 0x0D #define ILI9341_RDDSM 0x0E #define ILI9341_RDSELFDIAG 0x0F #define ILI9341_INVOFF 0x20 #define ILI9341_INVON 0x21 #define ILI9341_GAMMASET 0x26 #define ILI9341_DISPOFF 0x28 #define ILI9341_DISPON 0x29 #define ILI9341_CASET 0x2A #define ILI9341_PASET 0x2B #define ILI9341_RAMWR 0x2C #define ILI9341_RGBSET 0x2D #define ILI9341_RAMRD 0x2E #define ILI9341_PTLAR 0x30 #define ILI9341_VSCRDEF 0x33 #define ILI9341_TEOFF 0x34 #define ILI9341_TEON 0x35 #define ILI9341_MADCTL 0x36 #define ILI9341_VSCRSADD 0x37 #define ILI9341_IDMOFF 0x38 #define ILI9341_IDMON 0x39 #define ILI9341_PIXFMT 0x3A #define ILI9341_FRMCTR1 0xB1 #define ILI9341_FRMCTR2 0xB2 #define ILI9341_FRMCTR3 0xB3 #define ILI9341_INVCTR 0xB4 #define ILI9341_PRCTR 0xB5 #define ILI9341_DFUNCTR 0xB6 #define ILI9341_ETMOD 0xB7 #define ILI9341_PWCTR1 0xC0 #define ILI9341_PWCTR2 0xC1 #define ILI9341_PWCTR3 0xC2 #define ILI9341_PWCTR4 0xC3 #define ILI9341_PWCTR5 0xC4 #define ILI9341_VMCTR1 0xC5 #define ILI9341_VMCTR2 0xC7 #define ILI9341_PWCTRLA 0xCB #define ILI9341_PWCTRLB 0xCF #define ILI9341_RDID1 0xDA #define ILI9341_RDID2 0xDB #define ILI9341_RDID3 0xDC #define ILI9341_RDID4 0xD3 #define ILI9341_GMCTRP1 0xE0 #define ILI9341_GMCTRN1 0xE1 #define ILI9341_DGAMCTRL1 0xE2 #define ILI9341_DGAMCTRL2 0xE3 #define ILI9341_TCTRLA 0xE8 #define ILI9341_TCTRLB 0xEA #define ILI9341_PWRSEQ 0xED #define ILI9341_EN3GAM 0xF2 #define ILI9341_IFCTL 0xF6 #define ILI9341_PUMP 0xF7 #define ILI9341_MADCTL_MV BIT(5) #define ILI9341_MADCTL_MX BIT(6) #define ILI9341_MADCTL_MY BIT(7) #define ILI932X_START_OSC 0x00 #define ILI932X_DRIV_OUT_CTRL 0x01 #define ILI932X_DRIV_WAV_CTRL 0x02 #define ILI932X_ENTRY_MOD 0x03 #define ILI932X_RESIZE_CTRL 0x04 #define ILI932X_DISP_CTRL1 0x07 #define ILI932X_DISP_CTRL2 0x08 #define ILI932X_DISP_CTRL3 0x09 #define ILI932X_DISP_CTRL4 0x0A #define ILI932X_RGB_DISP_IF_CTRL1 0x0C #define ILI932X_FRM_MARKER_POS 0x0D #define ILI932X_RGB_DISP_IF_CTRL2 0x0F #define ILI932X_POW_CTRL1 0x10 #define ILI932X_POW_CTRL2 0x11 #define ILI932X_POW_CTRL3 0x12 #define ILI932X_POW_CTRL4 0x13 #define ILI932X_GRAM_HOR_AD 0x20 #define ILI932X_GRAM_VER_AD 0x21 #define ILI932X_RW_GRAM 0x22 #define ILI932X_POW_CTRL7 0x29 #define ILI932X_FRM_RATE_COL_CTRL 0x2B #define ILI932X_GAMMA_CTRL1 0x30 #define ILI932X_GAMMA_CTRL2 0x31 #define ILI932X_GAMMA_CTRL3 0x32 #define ILI932X_GAMMA_CTRL4 0x35 #define ILI932X_GAMMA_CTRL5 0x36 #define ILI932X_GAMMA_CTRL6 0x37 #define ILI932X_GAMMA_CTRL7 0x38 #define ILI932X_GAMMA_CTRL8 0x39 #define ILI932X_GAMMA_CTRL9 0x3C #define ILI932X_GAMMA_CTRL10 0x3D #define ILI932X_HOR_START_AD 0x50 #define ILI932X_HOR_END_AD 0x51 #define ILI932X_VER_START_AD 0x52 #define ILI932X_VER_END_AD 0x53 #define ILI932X_GATE_SCAN_CTRL1 0x60 #define ILI932X_GATE_SCAN_CTRL2 0x61 #define ILI932X_GATE_SCAN_CTRL3 0x62 #define ILI932X_PART_IMG1_DISP_POS 0x80 #define ILI932X_PART_IMG1_START_AD 0x81 #define ILI932X_PART_IMG1_END_AD 0x82 #define ILI932X_PART_IMG2_DISP_POS 0x83 #define ILI932X_PART_IMG2_START_AD 0x84 #define ILI932X_PART_IMG2_END_AD 0x85 #define ILI932X_PANEL_IF_CTRL1 0x90 #define ILI932X_PANEL_IF_CTRL2 0x92 #define ILI932X_PANEL_IF_CTRL3 0x93 #define ILI932X_PANEL_IF_CTRL4 0x95 #define ILI932X_PANEL_IF_CTRL5 0x97 #define ILI932X_PANEL_IF_CTRL6 0x98 /* #define ILI9341_PWCTR6 0xFC */ // Color definitions #define ILI9341_BLACK 0x0000 /* 0, 0, 0 */ #define ILI9341_NAVY 0x000F /* 0, 0, 128 */ #define ILI9341_DARKGREEN 0x03E0 /* 0, 128, 0 */ #define ILI9341_DARKCYAN 0x03EF /* 0, 128, 128 */ #define ILI9341_MAROON 0x7800 /* 128, 0, 0 */ #define ILI9341_PURPLE 0x780F /* 128, 0, 128 */ #define ILI9341_OLIVE 0x7BE0 /* 128, 128, 0 */ #define ILI9341_LIGHTGREY 0xC618 /* 192, 192, 192 */ #define ILI9341_DARKGREY 0x7BEF /* 128, 128, 128 */ #define ILI9341_BLUE 0x001F /* 0, 0, 255 */ #define ILI9341_GREEN 0x07E0 /* 0, 255, 0 */ #define ILI9341_CYAN 0x07FF /* 0, 255, 255 */ #define ILI9341_RED 0xF800 /* 255, 0, 0 */ #define ILI9341_MAGENTA 0xF81F /* 255, 0, 255 */ #define ILI9341_YELLOW 0xFFE0 /* 255, 255, 0 */ #define ILI9341_WHITE 0xFFFF /* 255, 255, 255 */ #define ILI9341_ORANGE 0xFD20 /* 255, 165, 0 */ #define ILI9341_GREENYELLOW 0xAFE5 /* 173, 255, 47 */ #define ILI9341_PINK 0xF81F /* Define pins and Output Data Registers */ //Port data |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | //Pin stm32 |PA7|PA6|PA5|PA4|PA3|PA2|PC1|PA0| //Control pins |RD |WR |RS |CS |RST| //Pin stm32 |PB4|PB5|PB6|PB7|PB8| #define TFT_CNTRL GPIOA #define TFT_DATA GPIOB #define TFT_RD PA0 #define TFT_WR PA1 #define TFT_RS PA2 #define TFT_CS PA3 #define TFT_RST PA8 #define TFT_RD_MASK digitalPinToBitMask(TFT_RD) #define TFT_WR_MASK digitalPinToBitMask(TFT_WR) #define TFT_RS_MASK digitalPinToBitMask(TFT_RS) #define TFT_CS_MASK digitalPinToBitMask(TFT_CS) #define RD_ACTIVE TFT_CNTRL->regs->BRR = TFT_RD_MASK #define RD_IDLE TFT_CNTRL->regs->BSRR = TFT_RD_MASK #define WR_ACTIVE TFT_CNTRL->regs->BRR = TFT_WR_MASK #define WR_IDLE TFT_CNTRL->regs->BSRR = TFT_WR_MASK #define CD_COMMAND TFT_CNTRL->regs->BRR = TFT_RS_MASK #define CD_DATA TFT_CNTRL->regs->BSRR = TFT_RS_MASK #define CS_ACTIVE TFT_CNTRL->regs->BRR = TFT_CS_MASK #define CS_IDLE TFT_CNTRL->regs->BSRR = TFT_CS_MASK #ifndef RD_STROBE #define RD_STROBE {RD_ACTIVE; RD_IDLE;} #endif #define WR_STROBE { WR_ACTIVE; WR_IDLE; } #define swap(a, b) { int16_t t = a; a = b; b = t; } //Set pins to the 8 bit number #define write8special(c) { TFT_DATA->regs->BSRR = ((~c)<<24) | ((c)<<8); WR_STROBE; } class Adafruit_ILI9341_8bit_STM : public Adafruit_GFX { public: Adafruit_ILI9341_8bit_STM(void); void begin(void), begin(uint16_t id), setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1), pushColors(uint16_t *data, uint8_t len, boolean first), pushColors(uint8_t *data, uint8_t len, boolean first), pushColor(uint16_t color), fillScreen(uint16_t color), #if defined (__STM32F1__) drawLine(int16_t x0, int16_t y0,int16_t x1, int16_t y1, uint16_t color), #endif drawPixel(int16_t x, int16_t y, uint16_t color), drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color), drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color), fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color), setRotation(uint8_t r), write8(uint8_t), writedata(uint8_t d), writecommand(uint8_t c), invertDisplay(boolean i); uint16_t color565(uint8_t r, uint8_t g, uint8_t b); /* These are not for current use, 8-bit protocol only! */ //uint8_t readdata(void), uint8_t readcommand8(uint8_t reg); uint32_t readID(void); uint8_t driver; private: uint8_t tabcolor; uint8_t read8(void); void setReadDataBus(void), setWriteDataBus(void), commandList(uint8_t *addr), flood(uint16_t color, uint32_t len), writeRegister16(uint16_t a,uint16_t d) ; #if defined (__STM32F1__) uint16_t lineBuffer[ILI9341_TFTHEIGHT]; // DMA buffer. 16bit color data per pixel #endif }; #endif //endif of the header file

Концзакп
Вторник 16 августа 2016 12:13
@Vadimel
На мой взгляд, у вас проблема с аппаратным обеспечением. У вас есть еще один экран, чтобы попробовать? Один из моих экранов был похож на ваш. Попробуйте подключиться, как и должно быть, и осторожно сжимайте с экраном пальцев на доску в разных областях при сбросе платы STM32. Проверьте, будет ли что -то. В моей ситуации, когда я сжимался в левом нижнем углу, он работал. Была некоторая проблема с пайками. Для меня это не выглядит как проблема с библиотекой. Когда у меня были проблемы с библиотекой, это было только мигающий или белый экран ни на что. Удаление одного PIN -кода означает, что вы не передаете всю информацию в TFT. Конечно, я мог бы ошибаться в этом случае.

@cologne86
Перевернутое изображение на экране означает, что существует другой чип, и существует необходимость в различной инициализации для этого экрана в библиотеке или в другой библиотеке.

Кстати:

У кого -нибудь есть библиотека для программного обеспечения Eagle ? Мне это нужно, чтобы подготовить доску

Вадимель
Вторник 16 августа 2016 г. 15:15
Концзакп он хорошо работает на https: // github.com/joaolopesf/spfd5408/.
I Code Program на Atmel (Arduino), но память Flash Program вышла.
Завтра я покупаю логический анализатор и сравниваю сигналы.
Извините, мой английский плохой : mrgreen: Надеюсь, ты понимаешь, что я пишу.

============================================================================= ==============
в атмеле (Arduino) Inicialization
else if (id == 0x9341) { uint16_t a, d; driver = ID_9341; CS_ACTIVE; writeRegister8(ILI9341_SOFTRESET, 0); //softreset == 0x01 delay(50); writeRegister8(ILI9341_DISPLAYOFF, 0); //0x28 writeRegister8(ILI9341_POWERCONTROL1, 0x23);// команда 0xC0 а потом данные 0x23 writeRegister8(ILI9341_POWERCONTROL2, 0x10);//команда 0xC1 а данные 0x10 writeRegister16(ILI9341_VCOMCONTROL1, 0x2B2B);//0xC5 writeRegister8(ILI9341_VCOMCONTROL2, 0xC0);//0xC7 writeRegister8(ILI9341_MEMCONTROL, ILI9341_MADCTL_MY | ILI9341_MADCTL_BGR); writeRegister8(ILI9341_PIXELFORMAT, 0x55); writeRegister16(ILI9341_FRAMECONTROL, 0x001B); writeRegister8(ILI9341_ENTRYMODE, 0x07); //0xB7 /* writeRegister32(ILI9341_DISPLAYFUNC, 0x0A822700);*/ writeRegister8(ILI9341_SLEEPOUT, 0); delay(150); writeRegister8(ILI9341_DISPLAYON, 0); //ILI9341_DISPLAYON 0x29 delay(500); // *** SPFD5408 change -- Begin // Not tested yet //writeRegister8(ILI9341_INVERTOFF, 0); //delay(500); // *** SPFD5408 change -- End setAddrWindow(0, 0, TFTWIDTH-1, TFTHEIGHT-1); return;

Вадимель
Чт 18 августа 2016 г., 19:12
Хорошо. теперь работает на SPFD5408 2.4 тфт

// данные порта | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
// Прикрепление Stm32 | PA7 | PA6 | PA5 | PA4 | PA3 | PA2 | PA1 | PA0 |
// Контрольные булавки | rd | wr | rs | cs | rst |
// PIN STM32 | PB4 | PB5 | PB6 | PB7 | PB15 |

http: // ifolder.компонент.UA/P6DZ77UR9LQ5.HTML
//инициализация НОВАЯ void Adafruit_ILI9341_8bit_STM::begin(void) { // toggle RST low to reset TFT_RST это PB8 if (TFT_RST > 0) { digitalWrite(TFT_RST, HIGH); delay(5); digitalWrite(TFT_RST, LOW); delay(20); digitalWrite(TFT_RST, HIGH); delay(150); } //reset(); writecommand(0x01); //softreset == 0x01 writedata(0x00); delay(50); writecommand(0x28); //ILI9341_DISPLAYOFF //0x28 writedata(0x00); // writecommand(ILI9341_PWCTR1); //Power control writedata(0x23); //VRH[5:0] writecommand(ILI9341_PWCTR2); //Power control writedata(0x10); //SAP[2:0];BT[3:0] //0x2B2B == 10 1011 0010 1011 writecommand(ILI9341_VMCTR1); //VCM control 0xC5 //изменил // writedata(0x3e); // // writedata(0x28); writedata(0x2B); writedata(0x2B); writecommand(ILI9341_VMCTR2); //VCM control2 0xC7 //изменил //writedata(0x86); //-- writedata(0xC0); writecommand(ILI9341_MADCTL); //ILI9341_MEMCONTROL == 0x36 Memory Access Control //0x36 //ILI9341_MADCTL_MY | ILI9341_MADCTL_MY 0x80 == 10000000 // ILI9341_MADCTL_BGR 0x08 == 1000 //10001000== 88 //заменил // writedata(0x48); writedata(0x88); writecommand(ILI9341_PIXFMT); //0x3A writedata(0x55); writecommand(ILI9341_FRMCTR1);//0xB1 // 0x001B==11011 // writedata(0x00); // writedata(0x18); //изменил writedata(0x00); writedata(0x1B); // writecommand(ILI9341_DFUNCTR); // 0xB6 Display Function Control //writedata(0x08); //writedata(0x82); //writedata(0x27); //writecommand(0xF2); // 3Gamma Function Disable //writedata(0x00); //writecommand(ILI9341_GAMMASET); //0x26 Gamma curve selected //writedata(0x01); //writecommand(ILI9341_GMCTRP1); // 0xE0 Set Gamma //writedata(0x0F); //writedata(0x31); //writedata(0x2B); //writedata(0x0C); //writedata(0x0E); //writedata(0x08); //writedata(0x4E); //writedata(0xF1); //writedata(0x37); //writedata(0x07); //writedata(0x10); //writedata(0x03); //writedata(0x0E); //writedata(0x09); //writedata(0x00); //writecommand(ILI9341_GMCTRN1); // 0xE1 Set Gamma ILI9341_GMCTRN1 0xE1 //writedata(0x00); //writedata(0x0E); //writedata(0x14); //writedata(0x03); //writedata(0x11); //writedata(0x07); //writedata(0x31); //writedata(0xC1); //writedata(0x48); //writedata(0x08); //writedata(0x0F); //writedata(0x0C); //writedata(0x31); //writedata(0x36); //writedata(0x0F); // delay(150); //ILI9341_ENTRYMODE writecommand(0xB7); writedata(0x07); delay(150); writecommand(ILI9341_SLPOUT); //Exit Sleep delay(500); writecommand(ILI9341_DISPON); //Display on 0x29 digitalWrite(PB7, HIGH); digitalWrite(PB5, HIGH); digitalWrite(PB4, HIGH); digitalWrite(PB8, LOW); delay(100); digitalWrite(PB8, HIGH); // Data transfer sync digitalWrite(PB7, LOW); digitalWrite(PB6, LOW); writecommand(0x00); for(uint8_t i=0; i<3; i++) writecommand(0x00); // Three extra 0x00s digitalWrite(PB7, HIGH); }

Вадимель
Ср 24 августа 2016 г., 8:41 вечера
Стивестронг написал:Cologne86 написал:Я подключил оба.

Cologne86
Ср 31 августа 2016 г. 9:32
В моем случае на печатной плате LCDS есть раскрывающийся регулятор AMS1117, поэтому он работает только с подключенным 5 В для обоих

Стивестронг
Ср 31 августа 2016 г. 9:46 утра
Cologne86 написал:В моем случае на печатной плате LCDS есть раскрывающийся регулятор AMS1117, поэтому он работает только с подключенным 5 В для обоих

Вадимель
Ср 31 августа 2016 г. 12:09
Но не в моем случае.
Изображение
Питание только 3.3V =)

Стивестронг
Ср 31 августа 2016 г., 13:40
Это странно, на борту 3.Регулятор 3V поставляет приемопередатчики и ЖК -дисплей, но не SD -карта. Это идентично моей доске.
Теперь мне нужно дважды проверить, почему эскиз SD -карты работал в моем случае без 3.3V PIN -штифт подключен...

Но тем временем у меня большие проблемы, ЖК -дисплей работает только с медленными сигналами, и я не знаю, почему.
Одно можно сказать, что фильтрационные конденсаторы отсутствуют на моей ЖК -доске.
Другое дело, что ЖК -дисплей работает с более быстрым переключением, если ЖК -дисплей разобрался, так что гибкий кабель прямой (не изогнут).
Кто -нибудь идея, почему?

Вадимель
Ср 31 августа 2016 г. 8:02 вечера
Стивестронг Что такое "медленные сигналы"
Вы положили задержку после "tft.командование », или что? =)
----------------------
У меня нет проблем с переключающими сигналами.
Но проблема с отключением порта Maple Com после использования TFT.командование. :?

Концзакп
Ср 31 августа 2016 г., 21:28
У меня такая же проблема с серийным. Я начал писать об этом здесь http: // www.STM32duino.com/viewtopic.PHP?P = 17253#P17255 Я думаю, что нашел проблему, но нет решения :(

Стивестронг
Чт, 01 сентября 2016 г., 8:41 утра
Медленное переключение означает битовое переключение с использованием функции DigitalWrite ().

Концзакп
Чт, 01 сентября 2016 г., 9:24 утра
@Vadimel
Если вы решите свою проблему с серийным отключением после звонка TFT, пожалуйста, опубликуйте здесь, что делать. Проверьте, происходит ли это, когда вы звоните tft.setTextSize(1);

Стивестронг
Чт, 01 сентября 2016 г., 11:53
Я не думаю, что settextSize () может вызвать проблемы.
Это просто настройка внутренней переменной:
https: // github.com/adafruit/adafruit-gf ... Х.CPP#1627
Вы должны проверить следующие команды TFT, чтобы определить основную причину.
Примечание:
Я идентифицировал ошибку (x координата) в случае ILI9325, в функции setrotation (). Когда вы устанавливаете вращение в нечетное число (1 или 3) печать текста с размером = 1 не работает. Это связано с отрицательным значением, поскольку x координата передается в функцию DrawPixel (), которая генерируется в функции SetRotation (), когда максимальная координата y будет назначена x.
https: // github.com/adafruit/tftlcd-libr ... Дюймовый.CPP#L396
Забавно, что другие размеры текста отображаются хотя.
Может быть, это также связано с вашей проблемой.

Концзакп
Чт, 01 сентября 2016 г., 19:08
Хорошо, но в моем случае, когда я удаляю settextize (), он работает нормально, так как это возможно ?

Томатл
Пт, сентябрь 02, 2016 6:16
Стивестронг написал:...
Другое дело, что ЖК -дисплей работает с более быстрым переключением, если ЖК -дисплей разобрался, так что гибкий кабель прямой (не изогнут).
Кто -нибудь идея, почему?

Стивестронг
Пт, 02 сентября 2016 г., 6:30 утра
Концзакп написал:Хорошо, но в моем случае, когда я удаляю settextize (), он работает нормально, так как это возможно ?

Стивестронг
Пт, сентябрь 02, 2016, 7:41
Tomatlab написал: Может быть, гибкий кабель имеет несколько повреждений, поэтому некоторые линии имеют высокое сопротивление, когда кабель согнут, а с помощью штифта образуется какой -то вид LPF.

Стивестронг
Сб 03 сентября 2016 г. 10:31
Стивестронг написал: Да, я боюсь, что мне нужно купить еще один модуль...

Стивестронг
Сб 03 сентября 2016 г. 10:32 утра
@konczakp
Я попробовал ваш код, и он работает на моем плате, с небольшими изменениями, изменянный цвет текста на белый, удален »#include <GFXFONT.час>".
Я должен был добавить в свой эскиз TFT.reset (), tft.readiD () и tft.Начните (идентификатор), поскольку Adafruit Lib требует такого пути (у меня есть контроллер ILI9328).
И я отобразил две текстовые линии на экране с «тестом», как и ожидалось, с разными размерами.
USB все еще подключен, работая с периодическим выводом.
Адаптированный эскиз - это tftpaint.INO включен в Exmaples (оригинальный tftpaint.Ино переименован в tftpain.в).
Прикреплен оригинал Adafruit Lib, адаптированный к STM32.
Используемый LIB доступен здесь.

Вадимель
Сб 03 сентября 2016 г., 8:41 вечера
Концзакп
Да, я проверяю это, это тфу.settextize (1); проблема

Затем используя TFT.settextize (2); , Comple Comple Serial Mapple не отключился.
затем тфу.settextize (1); Используя одноразовое COM -порт отсоединить, затем используйте снова -> это соединение.

Концзакп
Пн, 05 сентября 2016 г., 16:31
@stevestrong
У вас другой контроллер TFT. У меня есть SPFD5408. Пытаясь использовать вашу библиотеку, она показала мне неизвестный экран TFT, но он также подключался и отключался от последовательного порта во время проверки идентификатора, так что что -то не так с реализацией SPFD5408.

Я пытался удалить что -то еще, как вы сказали из кода и когда я удаляю TFT.println это работает. Таким образом, проблема заключается не в размере, а с отправкой команды, чтобы что -то изменить на экране с данным размером 1.

Хуже всего то, что когда я открываю последовательный порт и отправляю команду, чтобы что -то изменить на экране, он отключает меня, и я не могу снова подключиться. Мне нужно перезапустить Maple Mini.

Я использую библиотеку Iwalpola, потому что это была единственная работающая отлично. Любые новые мысли, что проверить еще?

Стивестронг
Пн, 05 сентября 2016 г., 18:54
@konczakp
Я вижу две возможности:
1. Попробуйте Жоао.
или
2. Попробуйте мою либера.начинать.

Концзакп
Чт, 08 сентября 2016 г., 14:39
@stevestrong
Я заставил, что ваша либера. К сожалению, проблема сохраняется. Это еще хуже, потому что, если я запускаю код тестового экрана и открываю сериал, то экран и сериал замораживает. Иногда он белый, но каждый раз, когда он перестает отвечать. Другая LIB написана для Arduino и, вероятно, нужно немного настройки, чтобы он работал на STM32. Я бы предпочел не пытаться сделать это и в конечном итоге с той же проблемой.

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

Стивестронг
Чт, 08 сентября 2016 г., 16:34
Мой последний выстрел:
Если использует другие размеры текста, чем работает «1», то вы можете отслеживать программное обеспечение, что происходит с «1», отладки функции «adafruit_gfx :: write», который называется «adafruit_gfx :: transchar», в конечном итоге это самое низкое. Уровень GFX функции. Более глубже являются функции доступа регистрации Iwalpola lib.
Если другие размеры также не работают, то я подозреваю, что проблема с источником питания, вы должны измерить, если 5V и 3.3 В синей таблетки, если все в порядке.
В качестве альтернативы попробуйте еще один внешний предложение 5 В, хотя мои платы (синие таблетки + ЖК -дисплей) работают с идеальным питанием от PC USB. Я использую только 5 В от синей таблетки до ЖК -доски. С другой стороны, регулятор питания ЖК -платы также может быть проблемой.

О да, еще одна вещь: если «графикт.Ино "(вместе со SPI.Begin ()) бегает без проблем, тогда iwalpola lib должен быть в порядке, что делает это еще более сложным... :?

Концзакп
Чт, 08 сентября 2016 г., 17:48
Другие размеры шрифта отлично работают. Только размер 1 делает проблемы. Я также заметил, что при настройке экрана размера 1 показывает немного другой шрифт. Отличается от размера 2. Эта проблема также сохраняется, когда я устанавливаю пользовательский шрифт. В то время как использование пользовательского серийного порта шрифта отключается каждый раз - это не связано с размером на этот раз. Таким образом, проблема наверняка с Adafruit GFX Lib. Я пытался выяснить, что может вызвать эту проблему, но я еще не смог ее найти. Но я все еще пытаюсь. Если у вас есть какие -либо предложения, как это сделать правильно и быстро, пожалуйста, скажите мне. графикт.Ино также вызывает ту же проблему. Я не подозреваю какую -либо проблему напряжения, потому что я бы заметил, что, делая также другие вещи не только изменение размера TEX.

Стивестронг
Чт, 08 сентября 2016 г., 17:57
Если вы думаете, что GFX LIB - это проблема, я прикрепляю свою хорошую рабочую местную копию, возможно, это помогает.
В противном случае, чтобы отлаживать, вы должны добавить несколько последовательных распечаток в ранее упомянутую соответствующую функцию. Или используйте отладчик....

О, только что вступил в мою мысль: вы используете последнюю версию STM32Duino от GitHub? Сериал был переработан в последнее время...

Концзакп
Чт, 08 сентября 2016 г., 8:13 вечера
Вот что я сделал:
1. Я понизил GCC с 4.От 9 до 4.8
2. Я попробовал вашу библиотеку Adafruit
3. Я попытался изменить библиотеку GFX, чтобы пройти двойной вместо этого Int, чтобы попытаться установить, например, Textsize на 1.5, но между 1.1-1.9 ничего не изменилось до размера текста - может быть, я что -то не так
4. Я обновил STM32 под Arduino IDE до новой версии

Ничто из вышеперечисленного не помогло :(

Стивестронг
Чт, 08 сентября 2016 г., 8:59 вечера
Концзакп написал: 4. Я обновил STM32 под Arduino Ide к новой версии

Концзакп
Чт, 08 сентября 2016 г., 21:15
Я скачал новейшую версию от Github в качестве Zip, и я заменил целую старую версию на новую. Я сделал, как все установил с самого начала.

Стивестронг
Пт, 09 сентября 2016 г., 7:22 утра
Хорошо, теперь я думаю, что Жоао не разработал свою собственную версию без какой -либо причины, поэтому может быть критическая разница между ILI9341 и SPFD5408...
Поэтому я бы просто взял свою либерацию (так как она получена из Adafruit Lib) в качестве основы и добавил специальные процедуры от Joao Lib, специфичные для SPFD5408. Очень легко добавить другой тип контроллера в LIB.
Или: возьмите Lib Joao и адаптируйте его к 8 -битным параллельным доступом, но я боюсь, что это займет у вас больше времени, чем первое предложение.

В качестве последнего предложения нарисуйте простой эскиз, который просто записывает один персонаж на ЖК -дисплее с Settextize (1) и отследите, какая функция вызывает проблему (если есть такая).

РЕДАКТИРОВАТЬ
Я только что понял, что Joao Lib использует настройку ILI9341, изменения по сравнению с оригинальным Adafruit Lib только актуальны как Чтобы получить доступ к регистрам (для Arduino Uno и Mega), но вообще нет разницы в значениях регистрации.
Поэтому я бы придерживался своего последнего предложения, чтобы найти основную причину, используя LIB IWALPOLA.
Двойная проверка проводки и определения PIN.

Концзакп
Пн, 3 октября 2016 г. 18:16
Теперь о подсветке. Я знаю, что нет простого способа смены регистрации, чтобы смягчить подсветку или даже снять его (если я ошибаюсь, покажи мне, как). Но есть способ сделать это! :) Экран может работать без +5 VCC. Он может быть прикреплен и отсоединен к включению/выключению питания, или вы можете положить резистор, чтобы сделать его тусклым. В моей ситуации у меня нет бесплатного штифта ШИМ, который был бы наиболее подходящим для того, чтобы его потускнели, поэтому мне нужно использовать цифровой с резистором на нем. И теперь самая сложная часть, которую я не знаю, как это сделать. Я пробовал несколько транзисторов NPN и PNP, MOSFET и OptoCouplers. Ничто из этого не сработало для меня, потому что они должны быть связаны с + и GND, но мне нужно включить/выключить только горячий провод ( +). Чтобы быть более ясным, мне нужно применить высокий пин для бывшего PB2, чтобы подключить +5 от USB до +5 на экране TFT. Любая идея, как это сделать? Я не пытался использовать SSR, но не хочу использовать механическую реле.
___________+5V USB | pin PB2 ----------------| on / off |__________ +5V TFT

Стивестронг
Пн, 3 октября 2016 г., 19:48
Транзистор тип PNP.
Верхний резистор также может быть 4K7.
Фон TFT питается, когда GPIO вывода привязана низко до «0».

Пито
Пн, 3 октября 2016 г., 19:55
Используйте PNP или P-MOSFET.
РЕДАКТИРОВАТЬ: Всегда используйте резерв 100OM серии со светодиодами дисплея.
Highsideswitch.jpg
Highsideswitch.JPG (13.47 киб) просмотрено 469 раз

Рик Кимбалл
Пн, 3 октября 2016 г., 8:08 вечера
@Stevestrong - это NPN или PNP -транзистор?

PNP, похоже, не работает с этой схемой

Схема Фальстада с использованием PNP, если вы обменяете PNP на NPN, она, кажется, чередуется между 1.6 В и 5.
https: // Goo.GL/4N91QE

Martinayotte
Пн, 3 октября 2016 г., 8:12 вечера
Это PNP !
Мне лично нравятся больше в МОПЕТА.

Стивестронг
Пн, 3 октября 2016 г., 22:57
Рик Кимбалл написал: Схема Фальстада с использованием PNP, если вы обменяете PNP на NPN, она, кажется, чередуется между 1.6 В и 5.
https: // Goo.GL/4N91QE

Концзакп
Вт 04 октября 2016 г., 18:56
Я попробовал схему, и она включается и выключается, но все еще есть некоторые проблемы, потому что она мигает. Я проверил выходное напряжение, и оно плавает около 0.1V. Он плавает в ритме (если я могу это сказать) серийного печати и задержка в эскизе. Это как: мигай, проверьте регистр NRF24L01, прочтите SD Card, Serial.println и снова мигайте, проверьте рег ..... и т. д.

РЕДАКТИРОВАТЬ1:
Стоит сказать, что я подключился к своему Maple Mini TFT с SD и NRF24L01+ и когда я отключаю какую -либо операцию в своем коде, отвечающую за NRF24L01 в программном обеспечении, он не мигает.

Edit2:
Кажется, что радио.румянец(); Из библиотеки engf24 отвечает за это, потому что, если я отключаю ее, все работает нормально. Любая идея почему?

Стивестронг
Вт 04 октября 2016 г., 8:59 вечера
Проверьте 5V и 3.Уровни 3 В, возьмите еще один адаптер 5 В с более высокой мощностью, радиосвязи нуждаются в большой мощности...

Пито
Вт 04 октября 2016 г., 21:34
Вы должны использовать Open Drain Otput на PB2, в противном случае высокий боковой переключатель не закроется полностью. Также PMOSFET не должен работать в схеме выше, полностью закрытая.
Это потому, что выход PB2 (когда он не настроен в качестве открытого дренажа) дает 0..3.3v, а излучатель (источник) выключателя PNP High Side. Поэтому еще 1.7 В (= 5-3.3) Оставаться между PB2 и эмиттером (источник) Таким образом, PNP или PMOSFET не будут полностью закрыты (вы не получите 0 В при TFT+).
Другой вариант-использовать NPN-транзистор в качестве драйвера высокопоставленного переключателя PNP (см. Ниже).
РЕДАКТИРОВАТЬ: Всегда используйте резерв 100OM серии со светодиодами дисплея.
NPN Driver и PNP High Side Switch.jpg
Драйвер NPN и выключатель PNP High Side.JPG (21.8 киб) просмотрено 427 раз

Rogerclark
Вт 04 октября 2016 г., 11:24
Я не уверен, что вы, ребята, используете это, но я считаю LTSpice очень хорошим для моделирования такого рода вещей. Его пользовательский интерфейс немного неуклюжий, но он бесплатный и делает хороший аналоговый анализ

(Но это требует некоторого привыкания, т.е. для настройки моделирования)

Концзакп
Ср. 05 октября 2016 г. 18:07
Я построил модифицированную схему, но она не работает. Он начал работать, когда я удалял резистор 22om из GND, но без этого резистора нет разницы в работе при рассмотрении первой цепи. Я также заметил странную вещь. Пока он мигает (как я упоминал ранее), когда я помещаю TFT +5 в GND, а после этого - +5, он останавливается, чтобы моргнуть. Вначале я думал, что мне придется переключиться только +5, но теперь я должен иметь возможность переключаться между GND и +5. Как я могу это сделать ? Или, может быть, как улучшить эту схему ? Или, может быть, я как -то ошибаюсь?

Стивестронг
Ср. 05 октября 2016 г. 18:56
Если вы установите штифт, чтобы открыть дренаж с помощью

pinmode (pb2, output_open_drain); // in setup ()

Тогда вариант первого цепи должен работать.
Мигание очень сильно выглядит так, как будто питания колопает при вызове функции радиопрограммы.
Попробуйте питать радиопрограмму отдельно.

Концзакп
Ср. 05 октября 2016 г., 8:12 вечера
Это ничего не изменило, к сожалению. Это все еще мигает. Отключение радио от Maple ничего не меняет, так что это не проблема, разворачивая источник питания при вызове радио. Если я все накапливаю и начну мигать, тогда, когда я касаюсь TFT +5 к GND, он перестает мигать, и сейчас на нем работает без мигания. Даже включение/выключение экрана почти работает, как и должно. Я писал почти потому, что когда низкий, еще немного зажигался, но это не большая проблема. Так что проблема все еще с этим экраном. К сожалению, это самый дешевый. Что дальше я могу сделать ?

Стивестронг
Ср. 05 октября 2016 г., 8:51 вечера
Единственная вещь, о которой я могу подумать, это то, что управляющий штифт ЖК -подсветки используется также в библиотеке радио, так что штифт переключается внутри написанной вами функции, которая вызывает проблему.

Концзакп
Чт, 6 октября 2016 г., 11:02
К сожалению, эта проблема не вызвана PIN -кодом, и ни NRF24L01, потому что, когда я меняю PIN -код или даже удаляю все, начиная от петли, оставляя только задержку (1000); Эта проблема остается :(

Ахулл
Чт, 6 октября 2016 г., 11:31
Если я все накапливаю и начну мигать, тогда, когда я касаюсь TFT +5 к GND, он перестает мигать, и сейчас на нем работает без мигания. Что это делает, если вы добавите слабый вытягивание (47K, 100 тысяч или даже больше) на этот штифт в GND?
Что если вы добавите конденсатор 1UF между PIN и GND?
Что если вы добавите слабый подтягивание к этой булавке?
Вы проверили пайку на дисплее? Один из тех, которые у меня были, был ужасным, и он выделил, показывал белый дисплей, мерцал и делал всевозможные странные вещи, пока я не тронул пайку и не очистил от огромного количества остатков потока.

Стивестронг
Чт, 6 октября 2016 г., 11:37
Извините, но я не могу предложить какие -либо другие идеи, если вы не покажете нам свои аппаратные соединения и программное обеспечение.

Концзакп
Чт 06 октября 2016 г. 12:20 вечера
Ахулл написал:Что это делает, если вы добавите слабый вытягивание (47K, 100 тысяч или даже больше) на этот штифт в GND?

Ахулл
Чт, 6 октября 2016 г., 12:36
Концзакп написал: 2. Может быть, Te Loversy может выключить подсветку по регистрации? Я видел в таблице данных от ILI9241, что это возможно. Что вы думаете? Как это сделать ? https: // cdn-shop.Адафрут.com/dataheets/ili9341.PDF Начиная со страницы № 169

Пито
Чт, 6 октября 2016 г. 13:01
Подсветка на этих дисплеях обычно 2 контакта = положительный и отрицательный.
Некоторые используют только 1 вывод, называемый светодиодом (положительный).

На печатной плате есть 4-6 светодиодов, подготовленных в последовательной/параллельной комбинации.

2pins:
Положительный штифт должен быть подключен к +TFT на вышеуказанных схемах (коллектор или слив PNP или PMOS -бокового переключателя) через резистор, скажем, резистор 100OM последовательно.
Не подключайте светодиоды подсветки без ограничивающего резистора!! На печатной плате дисплея нет резистора.
Отрицательный штифт должен быть подключен к GND.

1pin называется светодиод:
PIN должен быть подключен к +TFT на вышеуказанных схемах (коллекционер или слив PNP или PMOS -боковой переключатель.
Не подключайте светодиоды подсветки без ограничивающего резистора!! На печатной плате дисплея нет резистора.
Отрицательный штифт подключен к GND на печатной плате дисплея.

Стивестронг
Чт, 6 октября 2016 г., 13:05
@konczakp
Я не вижу аппаратного соединения, где вы управляете подсветкой...
Это порт pin Pb2 STM32? Похоже, он уже используется в качестве вывода данных D2.
Какой пин -код ЖК -платы вы контролируете подсветку? 5 В ПИНА? Кажется, что он уже используется для подачи 3V3 для SD...

Концзакп
Чт 06 октября 2016 г. 14:12
Я использую эта схема переключить +5 В на TFT. PIN 12 (PC15) дает высокий и низкий до основания PNP Transistor. На TFT есть 2 GND, поэтому я подключил их обоих с GND. Этот экран, кажется, работает даже без +5, потому что, если я дам ему только секунду в начале +5, то SD работает идеально даже без +5 подключения. Если я положил 120ом резисторов незадолго до TFT +5 с использованием вышеупомянутой схемы, я получу только белый экран немного потускнел. Я не вижу ни одного пин -кода, отмеченная как светодиод. Больше закулировки, отмеченной как 3.3V не связан ни с чем :?

Стивестронг
Чт 06 октября 2016 г. 14:27
Я лично нахожу очень странным, что SD-адаптер на ЖК-доске работает, не поставляя ни с 5, ни 3.3В.
Проблема в том, что мы не знаем точно, как выглядит схема доски.
Я бы испачкал маленький 3.Адаптер 3 В от доски и поставьте 3.3 В с платы STM32. Более того, вам нужно сделать короткий с 3.3V PIN -код LCD до 3.Линия 3V (вывод адаптера) на плате, потому что, насколько я знаю, нет подключения для дефолта. PIN 12 (PC15) дает высокий и низкий до основания PNP Transistor. Как выглядит сигнал? Вы устанавливаете его высоко и низко? Где именно (по сравнению с другими функциями SW)? Как быстро?

Пито
Чт, 6 октября 2016 г., 15:20
Я использую эту схему для переключения +5 В на TFT. PIN 12 (PC15) дает высокий и низкий до основания PNP Transistor. Ваша схема в порядке. Вам не нужен резистор 4K7 на землю. Позвольте 120ом последовательно с +TFT (перед светодиодами). Белый экран немного тусклый в порядке. Это означает, что у вас нет графики.
PC15 должен быть настроен как открытый выходной выход. Со стандартным выводом нажатия он может работать неправильно (см. Мой предыдущий пост). Опять же: Откройте выходной выход PC15 с вашим вышеупомянутым боковым переключателем PNP.
PS: Нам действительно нужно знать, по крайней мере, ссылку вашей доски на eBay или лучше схемы. Это может произойти, ваш дисплей получил только VCC +5 В, а 3.3V регулятор напряжения на нем. Светодиоды положительные аноды могут быть подключены к 5 В или 3.3V внутри, и отрицательные катоды светодиодов подключены к PIN -код LED_GND. Второй штифт GND может быть мастером GND. Затем вам нужно использовать NPN -переключатель с низкой боковой стороной, коллекционер, подключенный к LED_GND через резистор 120OM.
С Single +5V на плате вы переключите всю плату в сторону/включено с высоким боковым переключателем PNP.
Странно, не так ли? :)
С помощью NPN -бокового переключателя PC15 должен оставаться стандартным выходом (не открытым дренажом).
Low Side Led Switch.jpg
Светодиодный переключатель с низкой боковой.JPG (14.95 киб) просмотрено 747 раз

Концзакп
Чт, 6 октября 2016 г., 19:08
Это моя доска TFT. К сожалению, у меня нет схемы. Я лично нахожу очень странным, что SD-адаптер на ЖК-доске работает, не поставляя ни с 5, ни 3.3В. Я мог бы ошибаться, но я думаю, что это питается от других булавок

Я пытался питать экран через 3.3V (не штифтом, а непосредственно к регулятору напряжения 3.Выход 3V), но все еще мигает
Как выглядит сигнал? Я сделал таймер с Millis (), который отсчитывает 6 секунд, а после этого он выключает экран, тогда, если я коснусь экрана, он включает в себя, и запускает обратный отсчет для выключения.
Белый экран немного тусклый в порядке. Это означает, что у вас нет графики Боюсь, что в моем случае это не так, потому что, если я не ставлю эту резисторную графику, и с этим резистором это не. Конечно, используя эту схему.
Открыть выходной выход PC15 Я уже пробовал это с PNP Transistor, но это ничего не изменило
Второй штифт GND может быть мастером GND. Затем вам нужно использовать NPN -переключатель с низкой боковой стороной, коллекционер, подключенный к LED_GND через резистор 120OM. Обе контакты GND подключены в одной и той же точке, и не имеет значения, что я подключаю. Нет led_gnd, есть только один GND.

Я также попробовал PNP, управляемый NPN, но без изменений

Но есть еще одна вещь, которую я заметил. Затем я вынимаю SD -карту из слота SD, она перестает мигать:/

Ахулл
Чт 06 октября 2016 г., 22:57
Интересный...
Display.jpg
Отображать.JPG (94.63 киб) просмотрено 724 раза

Ахулл
Чт 06 октября 2016 г., 11:31
Ахулл написал:Интересный... Отображать.JPG

Концзакп
Пт 07 октября 2016 г., 7:35 утра
Я краснел эти посты в начале, но они ничего не обсуждают, что может быть полезным в моем случае. :(
На нем есть пара буферов с тремя состояниями 74HC245, так что может мультиплексировать сигналы дисплея каким-то странным образом Я знаю, но я понятия не имею, как отслеживать, что является подключением подсветки. Если мы не сможем сделать это, я думаю, что единственный способ будет уничтожить щит и проверить все пути на доске, чтобы увидеть, кто есть :плакать:

Стивестронг
Пт, 07 октября 2016 г., 7:37 утра
@konczakp,
Это не нормально, что вы не даете выделенного источника питания в ЖК -дисплей. Похоже, что теперь вы поставляете ЖК -плату над булавками данных/управления от STM32.
Вы должны кормить ЖК -доску с помощью 3.3V от STM32, с дополнительным проводом, припаянным между ЖК -бордовым штифтом 3V3 и 5V<>3.Выход адаптера мощности 3 В (3.3v) PIN. Это не было бы обычно необходимо, но если вы хотите контролировать 5V, у вас нет другой альтернативы.
Если вы этого не делаете, это нормально, что мощность рушится при обращении к SD -карте, ей нужны некоторые текущие импульсы при написании/чтении данных. Если вы вытащите SD -карту, это будет работать.

Пито
Пт, 07 октября 2016 г., 10:16 утра
Я удалил свой совет, как я нашел

https: // форум.Ардуино.CC/INDEX.PHP?топи ... MSG2451927
https: // форум.Ардуино.CC/INDEX.PHP?топи ... MSG2451875

Ребята говорят, что подсветка не может быть отключена, вы должны взломать доску, так как подсветка.
Также есть предупреждение в вышеуказанной резьбе сигналы 5V (или VCC 5 В??) может *распространяться через 245 буферов на VCC SDCARD (кто -то измерял до 4.3 В на розетке SDCARD).
https: // форум.Ардуино.CC/INDEX.PHP?топи ... MSG1764859

Поэтому я бы не использовал 5V, но 3.Только 3v VCC. И 3.3V сигналы, конечно.

*PITO: Это возможно через диоды защиты зажима, каждое устройство CMOS попадает на свои входы/выходы.

Ахулл
Пт, 07 октября 2016 г., 10:39
Для записи это -> http: // Разное.WS/2015/01/24/LCD-Touch-Screen-Information/ <- это довольно хороший ресурс для этих недорогих экранов.
Это указывает здесь -> https: // kedei.мир.Таобао.ком/ <- Для производителей страница Taobao.

Концзакп
Сб 8 октября 2016 г., 19:03
Потому что в Интернете нет такой вещи (или я не смог его найти), я напишу то, что достиг. Я пожертвовал 8-) 2 из моих экранов, чтобы проверить, как я могу подключить управление светодиодом. Я проверил один дешевле и еще дорого. Оба были куплены на eBay. Сначала о более дешевом. Это был Кедеэй, как я упоминал раньше. Ослабление регулятора напряжения и поставка 3.3v вместо этого ничего не изменил. Это было еще хуже. Я думаю, что это потому, что регулятор напряжения на борту может дать больше тока, а затем напрямую подключено 3.3 В от Maple Mini. Этот экран, по моему мнению, имеет неуместные разработанные соединения, и именно поэтому он мигает. Экран должен иметь три +3.3v провода, подключенные только для питания экрана, но в этом случае у него только два. Я не считаю светодиодного источника питания. Я вычитаю это из другого экрана, который не мигает и что похоже на этот, и имеет 3 источника питания. Мигание не будет заметно, если не используется SD -карта. Существует также что -то испорченное с другими соединениями, потому что без поставки +5 В на экран, оно не должно работать, потому что ему не хватает основного источника питания, и он каким -то образом насыщает мощность от других булавок. Но это работает, и это странно.
Давайте вернем. С помощью этого экрана мне придется вырезать жирный путь (см. Строение увеличенного) и припаять крошечный провод, чтобы сделать управление через PNP Transistor. В то же время, который был описан ранее. Это позволит мне включить светодиоды подсветки, но все равно будет мигать из -за SD -карты. Вторая проблема не в том, чтобы сломать экран во время разборки : D Они использовали много ленты для подключения экрана с платой. Так сделай это на свой риск
Tft.jpg
Тфу.JPG (134.31 киб) просмотрено 886 раз

Стивестронг
Сб 8 октября 2016 г. 8:21 вечера
У меня точно такой же дисплей, что и ваш дорогой (вторая картина). Он имеет чип драйвера ILI9328.
Спасибо за то, что выделили возможность контроля подсветки, я могу использовать его позже некоторое время.

Пито
Сб 8 октября 2016 г. 8:59 вечера
Может ли кто -нибудь обеспечить правильную рабочую схему для транзистора NPN для управления светодиодным включением/выключением? Возможно ли управлять транзистором NPN с ШИМ, чтобы изменить яркость светодиода? ..например, NPN Low Side Switch в схеме ниже. Нет другой лучшей схемы, afaik..
http: // www.STM32duino.com/viewtopic.PHP ... 220#P18680
Low At PC12 переключает светодиоды, 3.Светодиоды высокого выключателя 3 В. Просто отключите след боковой стороны GND резистора светодиода на плате и подключите сторону GND резистора в коллектор транзистора NPN. Какое значение резистора они используют на доске?
Если вы хотите использовать быстрый ШИМ, вы можете уменьшить R1 и R2, чтобы сказать 3K3.

Концзакп
Пн 10 октября 2016 г., 18:52
8-) Это работает!
У экрана TFT было 2.2 Ом, но я изменил его на 5 Ом, так что в этой схеме вместо 100 Ом я дал 5 Ом, и он отлично работает!

Ахулл
Пн 10 октября 2016 г., 19:24
Я подозреваю, что 2.2 Ом слишком высок, чтобы ваш регулятор напряжения справился, это позволило бы максимально ток около 1.5A протекать через светодиоды, предполагая белые светодиоды, которые падают почти все 3.3V, который (при условии, что есть 4 светодиода) может разрешить 375 мА за светодиод (или даже больше через отдельный светодиод, если они не очень хорошо сопоставлены).

Даже 5 Ом звучит немного чрезмерно, вы пробовали измерить ток через резистор 5 Ом, я подозреваю, что это будет порядок 660 мА. Все это предполагает, что, конечно, нет другого тока, ограничивающего резистор, который, вероятно, учитывая тенденцию досок затруднить питание. Я думаю, что 22 Ом может быть более здравым значением, так как это ограничит ток за светодиод примерно 40 мА и потенциальным максимумом около 165 мА, если что -то будет немного в форме груши, а один светодиод не проходит короткий замыкание.

Если вы не можете измерить ток через резистор непосредственно, измерьте падение напряжения по нему и выпустите его через закон ом (i = V/r)

Изменить: во всем вышеперечисленном я предполагаю идеальный транзистор, и транзистор водителя полностью включается, и что светодиодное напряжение типично для белого светодиода, где -то между 3.0 и 3.3В.

Есть проблемы с этими предположениями, и с помощью четырех светодиодов параллельно от одного резистора. Обычно это работает, но существует гораздо более высокий риск выскочить, или все они (из -за термического сбегающего от одного из привода светодиода), если вы заставите их жестко, чем было бы, если бы был ограниченный резистор, ограничивающий теку ВЕЛ.

Даже если вы управляете их с ШИМ, если значение резистора слишком низкое, вы все равно рискуете коричневым из своего блока питания, заставляя светодиоды мерцать и/или процессор сбой. Кроме того, если вы слишком сильно управляете регулятором напряжения или заставите светодиоды начинать разрушаться, перегрев, вы можете освободить волшебный дым как от светодиодов, так и от регулятора.

Если вы управляете светодиодами без транзистора (используя короткие, длинные импульсы ШИМ и подходящий отдельный резистор), это может сработать, но вы рискуете взорвать штифт GPIO, если выбранный вами резистор допускает больше, чем максимальный ток GPIO, если светодиод терпит неудачу. :( Вы не сможете управлять ими так же сильно, без транзистора, конечно.
Я также предполагаю четыре светодиода, может быть только два, в этом случае... Нам нужно сделать математику на двоих. :рулон:

Edit2: Я только что заметил, что тот, кто разработал фактический дисплей. Гораздо более разумный вариант, чем параллельно, все четыре светодиода, но дизайнер Shield удешевался, объединяя катоды вместе, ограничивая вариант только одним ограничивающим резистором.

Ахулл
Вт 11 октября 2016 г. 9:35 утра
Интересно, что первый экран с переворачиваемым дисплеем имеет код даты 2013 года, мне интересно, какие устройства они восстанавливаются. Я предполагаю, что они могут быть «избыточными» акциями, но более вероятно, что они поступают от особенно популярного потребительского устройства, скорее всего, по телефону предыдущего поколения. Может быть, мне следует спросить свою местную ремонтную мастерскую телефон, узнают ли они экран. : D

Концзакп
Вт 11 октября 2016 г., 17:18
Я только что измерил ток между резистором и светодиодом TFT. Самый высокий ток, который я видел. Это okey?

Ахулл
Ср 12 октября 2016 г. 12:19
Концзакп написал:Я только что измерил ток между резистором и светодиодом TFT. Самый высокий ток, который я видел. Это okey?

Концзакп
Ср 12 октября 2016 г., 7:05
Экран достаточно яркий, поэтому я буду придерживаться этого 5 Ом. Спасибо за помощь. Я очень ценю это :)

Пито
Ср 12 октября 2016 г. 8:47
Увеличение тока через светодиоды не может пропорционально увеличить яркость Поскольку первые светодиоды появились в семидесятых, правило было 20 мА. Все они были красными, с VF что -то вроде 1.6 В и с 5 В.
Интересно, что большинство дизайнеров, особенно из дешевых досок, следуют этой парадигме 200om (или 10-20 мА на светодиод), даже сегодня.
Я сделал измерение примерно на 20 различных светодиодах (в основном SMD, все цвета) из моей мусорной коробки, чтобы увидеть, какой ток вам нужно сегодня, чтобы иметь светодиод в качестве «индикатора» включения/выключения. Большинство светодиодов в порядке с 0.1ma для нормального использования в качестве индикатора состояния. Это приводит к резисторам многих килори. Умные дизайнеры недавно приняли 1K резисторы, но все же яркость настолько высока, что в условиях окружающей среды вы не можете увидеть кнопки из -за яркости светодиодов на печатной плате :)
Светодиоды значительно различаются в VF и в IF/яркости, поэтому измерение является единственным способом иметь представление о токе против VS. требуется яркость. Если OP будет экспериментировать, он видит, что дисплей работает нормально с 10 мА или меньше :)

Ахулл
Ср 12 октября 2016 г. 9:15 утра
При использовании плат STM32 в проектах, управляемых аккумулятором, я обычно удаляю «питание на» светодиод (или его текущий ограничивающий резистор, в зависимости от того, что лучше всего подходит с паяльником), так как он обычно рисует от 5 мА до 25 мА, в зависимости от того, какое Светодиоды были дешевыми в отмеченном в тот день, и какие резисторы, которые производитель уже набрал в машине Pick and Place. : D

Этот трюк, в сочетании с режимами низкой мощности на процессоре, может продлить срок службы батареи от нескольких часов до недель или даже месяцев.

Пито
Ср 12 октября 2016 г. 15:58
Представьте себе, что кто -то проектирует небольшую печатную плату с MCU, потребляющим 15 мА, и с двумя светодиодами 15 мА каждый. Это стандарт сегодня - они используют резисторы на 220 дюймов, так как они думают, что светодиоду нуждается в «20 мА», как это написано в каждом светодиодном таблице данных : шок: Я уже заменил резисторы на нескольких досках, я с учетом что -то забираю между 2K2 (синяя сторона) - 4K7 (красная сторона).

Концзакп
Сб 14 января 2017 г. 15:40
Я решил проблему с отключением сериала при установке размера текста на 1, как в здесь: http: // www.STM32duino.com/viewtopic.PHP ... 180#P17541. Я обнаружил, что это не единственная проблема с этой библиотекой для этого экрана. Используя эту LIB с ENRF24 LIB для NRF24L01+, он не позволял работать должным образом с NRF24L01 (NRF24L01 не получал никаких сигналов). Чтобы получить эту работу, просто прокомментируйте строку 60 в adafruit_ili9341_8bit_stm.CPP TFT_DATA->regs->BSRR = ((~c)<<16) | (c); //Set pins to the 8 bit number

Вадимель
Чт 27 апреля 2017 12:47
Я покупаю SPFD5408, но я нашел то, что является S6D0154.
Не покупайте подделки : D

S6D0154 -> TFT8K3654
http: // загружает.ru/9pxab.JPG

SPFD5408-> CK241_REV0.1
http: // s0.загружает.ru/t/9pxab.JPG

Read Registers on MCUFRIEND UNO shield controllers either read as single 16-bit e.g. the ID is at readReg(0) or as a sequence of 8-bit values in special locations (first is dummy) reg(0x0000) 01 54 ID: ILI9320, ILI9325, ILI9335, ... reg(0x0004) 00 00 00 00 Manufacturer ID reg(0x0009) 00 1E 00 00 00 Status Register reg(0x000A) 00 00 Get Power Mode reg(0x000C) 00 00 Get Pixel Format reg(0x0061) 00 00 RDID1 HX8347-G reg(0x0062) 00 00 RDID2 HX8347-G reg(0x0063) 00 00 RDID3 HX8347-G reg(0x0064) 00 00 RDID1 HX8347-A reg(0x0065) 00 00 RDID2 HX8347-A reg(0x0066) 00 00 RDID3 HX8347-A reg(0x0067) 00 00 RDID Himax HX8347-A reg(0x0070) 00 00 Panel Himax HX8347-A reg(0x00A1) 00 00 00 00 00 RD_DDB SSD1963 reg(0x00B0) 00 00 RGB Interface Signal Control reg(0x00B4) 00 00 Inversion Control reg(0x00B6) 00 00 00 00 00 Display Control reg(0x00B7) 00 00 Entry Mode Set reg(0x00BF) 00 00 00 00 00 00 ILI9481, HX8357-B reg(0x00C0) 00 00 00 00 00 00 00 00 00 Panel Control reg(0x00C8) 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA reg(0x00CC) 00 00 Panel Control reg(0x00D0) 00 00 00 Power Control reg(0x00D2) 00 00 00 00 00 NVM Read reg(0x00D3) 00 00 00 00 ILI9341, ILI9488 reg(0x00D4) 00 00 00 00 Novatek ID reg(0x00DA) 00 00 RDID1 reg(0x00DB) 00 00 RDID2 reg(0x00DC) 00 00 RDID3 reg(0x00E0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA-P reg(0x00E1) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA-N reg(0x00EF) 00 00 00 00 00 00 ILI9327 reg(0x00F2) 00 00 00 00 00 00 00 00 00 00 00 00 Adjust Control 2 reg(0x00F6) 00 00 00 00 Interface Control

астер
Ср 30 августа 2017 г., 7:19
Извините, но 25 страниц слишком много, чтобы прочитать, я только что получил дисплей с ILI9341
Изображение
(найдено в Google Immage)

Я попробовал библиотеку от Stevstrong
https: // github.com/stevstrong/adafruit_ ... 8bit_stm32

Но мне не удалось заставить его работать
Я использовал соединение в ADAFRIT_TFTLCD_8BIT_STM32.H файл и для SPI:
Tft_rs pa2
Tft_cs pa3
TFT_RST PB10
Mosi PA7
SCK PA5
Светодиод +3.3В
Мисо П.6

Я не подключал сенсорную часть и штифт постоянного тока, так как я не знаю, где я должен их подключить

И что это за?
TFT_WR PA1
TFT_RD PA0

Стивестронг
Ср 30 августа 2017 г., 7:36 утра
Вы публикуете в не то время.
Ваш дисплей имеет интерфейс SPI, а не 8 -битный параллельный.
Итак, вы должны использовать эту LIB: https: // github.com/rogerclarkmelbourne/ ... Li9341_stm
Может также актуально: ViewTopic.PHP?f = 9&T = 2425

Rogerclark
Ср 30 августа 2017 г., 7:37 утра
Вы не подключили D/C

астер
Ср 30 августа 2017 г. 14:31
[Стивестронг - Ср 30 августа 2017 г. 7:36] - Вы публикуете в не то время.
Ваш дисплей имеет интерфейс SPI, а не 8 -битный параллельный.
Итак, вы должны использовать эту LIB: https: // github.com/rogerclarkmelbourne/ ... Li9341_stm
Может также актуально: ViewTopic.PHP?f = 9&T = 2425
Я не только опубликовал в не той ветке, но и был настолько глуп, чтобы не заметить, что библиотека, которую я искал, уже была в репо : шок:
Теперь я использую вашу библиотеку, спасибо
Это сработало и составило немедленно, по какой -то причине я не могу использовать PA4 в качестве CS, но я думаю, что это уже известная проблема

Стивестронг
Ср 30 августа 2017 г. 14:42
[астер - Ср 30 августа 2017 г. 14:31] - По какой -то причине я не могу использовать PA4 в качестве CS, но я думаю, что это уже известная проблема
Проблема? Где?
Я всегда использую PA4 в качестве CS без проблем...

астер
Ср 30 августа 2017 г. 15:50
[Стивестронг - Ср 30 августа 2017 г. 14:42] - Проблема? Где?
Я всегда использую PA4 в качестве CS без проблем...
Я думаю, что я читал, что у него были проблемы с SDFAT, я не уверен

Я не знаю, что пытался подключить CS к PA4, и это не сработало, чем использовать другой PINT IT Worker
#define DC_pin PA1 #define RST_pin PA0 #define CS_pin PA2 /* CS PA4 SCK PA5 MISO PA6 MOSI PA7 */ Adafruit_ILI9341_STM tft(CS_pin, DC_pin, RST_pin); // input chip select, DC and reset pins

Стивестронг
Ср 30 августа 2017 г. 18:26
Я думаю, что ваша проблема - первая булавка.
Это не может быть определена PA0, Потому что это переводится как значение 0:
https: // github.com/rogerclarkmelbourne/ ... орд.H#180
И тогда первое булавка не будет переключена:
https: // github.com/stevstrong/arduino_s ... ТМ.CPP#178
Я думаю, что я должен исправить программное обеспечение, чтобы проверить ">= 0 ".

До тех пор попробуйте использовать любой другой PIN -код для RST.

И, как я уже сказал, PA4 должен работать как CS. Чтобы проверить это, напишите простую тестовую программу, чтобы переключить ее.

астер
Четверг 31 августа 2017 г. 16:37
вау, с более чем 30 булавками я выбираю единственные, которые не сработали бы :ржу не могу:

Я рад, что моя неудача помогла вам заметить небольшую ошибку в библиотеке
Кстати, проблема с PA4, которую я имел в виду, была следующая: ViewTopic.PHP?F = 44&P = 33802#P33802 Но, похоже, это было решено время назад
Теперь я думаю, что лучше остановить спам, и, возможно, администратор может переместить этот последний пост в правильном

Максиан
Чт 26 октября 2017 г. 5:36 утра
Стивестронг
Привет.
Я не могу инициализировать Дисплей ILI9431 16-битный. Появляется только белый экран.
Скажи мне, пожалуйста, что я делаю не так?

Используйте STM32F103C8T6 Blue Poard + Arduino IDE 1.8.4 + Arduino_stm32 + библиотека Adafruit_tftlcd_16bit_stm32 (//#определить use_fsmc 1 в adafruit_tftlcd_16bit_stm32.h) + набросок
Связь:
D0...D15 - PB0...15 (PB2 - снял перемычку и подключен к штифту)
WR, RS, CS - PA1, PA2, PA3
RST - PC15
Rd - подключен к 3.3V и GND


Если я использую библиотеку Adafruit_ili9341_8bit_stm (Iwalpola) с рекомендуемыми контактами подключения появляется изображение, но использовал только синий цвет и его оттенки.

П.С.
Написал текст, используя Google Translate с русского языка

Стивестронг
Чт 26 октября 2017 г. 8:38 утра
Не могли бы вы попробовать и изменить

1. Линия https: // github.com/stevstrong/adafruit_ ... M32.H#L103
к #if 1

Максиан
Чт 26 октября 2017 г. 14:40
[Стивестронг - Чт 26 октября 2017 г. 8:38] - 2. В соответствии https: // github.com/stevstrong/adafruit_ ... M32.H#L149
заменять Adafruit_gfx к "Adafruit_gfx_as"

Вы получаете какие -либо предупреждения во время сборки?
In file included from C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\examples\graphicstest\graphicstest.ino:7:0: C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\src/Adafruit_TFTLCD_16bit_STM32.h:149:60: error: expected class-name before '{' token class Adafruit_TFTLCD_16bit_STM32 : public Adafruit_GFX_AS { ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\examples\graphicstest\graphicstest.ino: In function 'void setup()': graphicstest:20: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width' Serial.print("TFT size is "); Serial.print((uint16_t)tft.width()); Serial.print("x"); Serial.println((uint16_t)tft.height()); ^ graphicstest:20: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'height' Serial.print("TFT size is "); Serial.print((uint16_t)tft.width()); Serial.print("x"); Serial.println((uint16_t)tft.height()); ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\examples\graphicstest\graphicstest.ino: In function 'long unsigned int testText()': graphicstest:179: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setCursor' tft.setCursor(0, 0); ^ graphicstest:180: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextColor' tft.setTextColor(WHITE); tft.setTextSize(1); ^ graphicstest:180: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextSize' tft.setTextColor(WHITE); tft.setTextSize(1); ^ graphicstest:181: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("Hello World!"); ^ graphicstest:182: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextColor' tft.setTextColor(YELLOW); tft.setTextSize(2); ^ graphicstest:182: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextSize' tft.setTextColor(YELLOW); tft.setTextSize(2); ^ graphicstest:183: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println(1234.56); ^ graphicstest:184: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextColor' tft.setTextColor(RED); tft.setTextSize(3); ^ graphicstest:184: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextSize' tft.setTextColor(RED); tft.setTextSize(3); ^ graphicstest:185: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println(0xDEADBEEF, HEX); ^ graphicstest:186: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println(); ^ graphicstest:187: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextColor' tft.setTextColor(GREEN); ^ graphicstest:188: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextSize' tft.setTextSize(5); ^ graphicstest:189: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("Groop"); ^ graphicstest:190: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextSize' tft.setTextSize(2); ^ graphicstest:191: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("I implore thee,"); ^ graphicstest:192: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'setTextSize' tft.setTextSize(1); ^ graphicstest:193: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("my foonting turlingdromes."); ^ graphicstest:194: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("And hooptiously drangle me"); ^ graphicstest:195: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("with crinkly bindlewurdles,"); ^ graphicstest:196: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("Or I will rend thee"); ^ graphicstest:197: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("in the gobberwarts"); ^ graphicstest:198: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("with my blurglecruncheon,"); ^ graphicstest:199: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'println' tft.println("see if I don't!"); ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\examples\graphicstest\graphicstest.ino: In function 'long unsigned int testLines(uint16_t)': graphicstest:206: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width' w = tft.width(), ^ graphicstest:212: error: 'h' was not declared in this scope y2 = h - 1; ^ graphicstest:214: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'drawLine' for(x2=0; x210; i-=5) { ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:39: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:364: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'fillTriangle' tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, ^ graphicstest:367: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'drawTriangle' tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\examples\graphicstest\graphicstest.ino: In function 'long unsigned int testRoundRects()': graphicstest:377: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width' cx = tft.width() / 2 - 1, ^ In file included from C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish.h:60:0, from C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/Arduino.h:30, from C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\examples\graphicstest\graphicstest.ino:1: graphicstest:381: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width' w = min(tft.width(), tft.height()); ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:35: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:381: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'height' w = min(tft.width(), tft.height()); ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:39: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:381: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width' w = min(tft.width(), tft.height()); ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:43: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:381: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'height' w = min(tft.width(), tft.height()); ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:47: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:385: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'drawRoundRect' tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0)); ^ graphicstest:385: error: 'cy' was not declared in this scope tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0)); ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\examples\graphicstest\graphicstest.ino: In function 'long unsigned int testFilledRoundRects()': graphicstest:394: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width' cx = tft.width() / 2 - 1, ^ In file included from C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish.h:60:0, from C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/Arduino.h:30, from C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master\examples\graphicstest\graphicstest.ino:1: graphicstest:399: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width' for(i=min(tft.width(), tft.height()); i>20; i-=6) { ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:35: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:399: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'height' for(i=min(tft.width(), tft.height()); i>20; i-=6) { ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:39: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:399: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width' for(i=min(tft.width(), tft.height()); i>20; i-=6) { ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:43: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:399: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'height' for(i=min(tft.width(), tft.height()); i>20; i-=6) { ^ C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\cores\maple/wirish_math.h:108:47: note: in definition of macro 'min' #define min(a,b) ((a)<(b)?(a):(b)) ^ graphicstest:401: error: 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'fillRoundRect' tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); ^ graphicstest:401: error: 'cy' was not declared in this scope tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); ^ Используем библиотеку Adafruit_TFTLCD_16bit_STM32-master версии 1.0.0 из папки: C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_TFTLCD_16bit_STM32-master Используем библиотеку Adafruit_GFX_AS в папке: C:\Users\MAKC-admin\Desktop\arduino-1.8.4\hardware\Arduino_STM32-master\STM32F1\libraries\Adafruit_GFX_AS (legacy) exit status 1 'class Adafruit_TFTLCD_16bit_STM32' has no member named 'width'

Стивестронг
Чт 26 октября 2017 г., 17:33
Хорошо, 2. Это была плохая идея.
Измените его обратно, пожалуйста.

Вы пробовали 1.?

Максиан
Чт 26 октября 2017 г., 17:59
Точка 1 я попробовал, затем я использовал точку.
После точки 1 на дисплее ничего не появилось (

Vegfokic
Чт 26 октября 2017 г., 18:58
Привет, Максиан

У меня также есть белый экран с 16 -битной библиотекой от Стива.
Вы проверили серийный монитор?
Мой серийный монитор распечатывает результат теста только в ЖК -дисплей.

Стивестронг
Чт 26 октября 2017 г., 19:26
Я думаю, что есть простая причина, по которой это не работает: здесь есть ошибка: https: // github.com/stevstrong/adafruit_ ... M32.H#L138 : mrgreen:
Пожалуйста, замените 0x44444444 на 0x333333333, в обоих местах.
Значение режима 4 означает входное плавание, значение 3 означает выход вывод 50 МГц.

Так что линия должна выглядеть как: #define setWriteDir() { TFT_DATA_PORT->regs->CRL = 0x33333333; TFT_DATA_PORT->regs->CRH = 0x33333333; } // set the bits as output

Максиан
Пт 27 октября 2017 г. 14:32
[Стивестронг - Чт 26 октября 2017 г., 19:26] - Я думаю, что есть простая причина, по которой это не работает: здесь есть ошибка: https: // github.com/stevstrong/adafruit_ ... M32.H#L138 : mrgreen:
Пожалуйста, замените 0x44444444 на 0x333333333, в обоих местах.
Значение режима 4 означает входное плавание, значение 3 означает выход вывод 50 МГц.

Так что линия должна выглядеть как: #define setWriteDir() { TFT_DATA_PORT->regs->CRL = 0x33333333; TFT_DATA_PORT->regs->CRH = 0x33333333; } // set the bits as output

Максиан
Пт 27 октября 2017 г. 16:11
Дисплей начал работать!!!
Заменил режим контроллера дисплея на 8 -битном и использовал библиотеку Adafruit_ili9341_8bit_stm (Iwalpola)
ИзображениеИзображение
Связь:
// данные порта | D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 |
// Прикрепление Stm32 | PA7 | PA6 | PA5 | PA4 | PA3 | PA2 | PA1 | PA0 |
// Контрольные булавки | rd | wr | rs | cs | rst |
// PIN STM32 | PB4 | PB5 | PB6 | PB7 | PB8 |

Схема щита и библиотеки для STM https: // yadi.SK/D/SOKPTV6NMLXEU


Стивестронг
Пытался подключиться на графике:
PB0...PB15 - DB8...DB15, DB0...DB7 Дисплей не начался (белый экран) для работы

Стивестронг
Солнце 29 октября 2017 г. 8:05 утра
В настоящее время мой 16 -битный дисплей подключен к плате Black F4.
Я должен найти некоторое время, чтобы подключить его к BP и выяснить, что там идет не так.

Wackedman
Пн, 18 декабря 2017 г. 14:11
У меня были некоторые проблемы с тем, чтобы заставить свой TFT LCD -щит для работы с синей таблеткой, он отлично работает на Uno, используя MCUFINIT_KBV LIB
Он сообщает в виде ILI9431 на UNO, он использует 8 контактов данных и 4 линии управления + RST, но при подключении к синей таблеток экран остается белым и последовательным выходом, как следует
Я попробовал стандартное подключение библиотеки (удаленная перемычка Boot1 и прикрепленный D2 к центральному штифту) Port data |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 | Pin stm32 |PB7|PB6|PB5|PB4|PB3|PB2|PB1|PB0| Control pins |RD |WR |RS |CS |RST| Pin stm32 |PA4|PA5|PA6|PA7|PA8|

Стивестронг
Пн, 18 декабря 2017 г. 14:19
Если вы используете мою LIB, то у вас должны быть все последовательные контакты данных по порядку от 0 до 7 (низкий шкур) или от 8 до 15 (высокая шлюха).
Я дважды проверю свою установку дома через пару часов.

Wackedman
Пн, 18 декабря 2017 г. 14:42
[Стивестронг - Пн, 18 декабря 2017 г. 14:19] - Если вы используете мою LIB, то у вас должны быть все последовательные контакты данных по порядку от 0 до 7 (низкий шкур) или от 8 до 15 (высокая шлюха).
Я дважды проверю свою установку дома через пару часов.
Спасибо, Стив, я подумал, что это может быть так. Думаю, я не изменил разгона по либера..

Должен ли я использовать #define use_adafruit_shield_pinout 1 ? РЕДАКТИРОВАТЬ: попробовал прокомментировать и не построить, те же результаты..

Стивестронг
Пн, 18 декабря 2017 г. 20:42
Я только что построил и загрузил свою либера.
Итак, теперь я предлагаю проверить Этот пример теста LCD_ID от David Чтобы доказать, что соединения в порядке.
И опубликовать здесь вывод серийного монитора.

Wackedman
Пн, 18 декабря 2017 г. 9:58 вечера
LCD_ID изменяется #define LCD_RST PA4 #define LCD_CS PA3 #define LCD_RS PA2 #define LCD_WR PA1 #define LCD_RD PA0 #define LCD_D0 PB0 #define LCD_D1 PB1 #define LCD_D2 PB2 #define LCD_D3 PB3 #define LCD_D4 PB4 #define LCD_D5 PB5 #define LCD_D6 PB6 #define LCD_D7 PB7

Стивестронг
Пн, 18 декабря 2017 г., 22:03
Сериал в порядке, ваша проводка неверна.

Или у вашей доски неудача.

Или PB2 не работает, вы должны сократить резистор R4.

Wackedman
Пн, 18 декабря 2017 г., 22:18
Просто погрузился в проводку, и теперь я получаю этот ответ..
Read Registers on MCUFRIEND UNO shield controllers either read as single 16-bit e.g. the ID is at readReg(0) or as a sequence of 8-bit values in special locations (first is dummy) reg(0x0000) 00 00 ID: ILI9320, ILI9325, ILI9335, ... reg(0x0004) 00 00 00 00 Manufacturer ID reg(0x0009) 00 00 00 00 00 Status Register reg(0x000A) 00 00 Get Power Mode reg(0x000C) 00 00 Get Pixel Format reg(0x0061) 00 00 RDID1 HX8347-G reg(0x0062) 00 00 RDID2 HX8347-G reg(0x0063) 00 00 RDID3 HX8347-G reg(0x0064) 00 00 RDID1 HX8347-A reg(0x0065) 00 00 RDID2 HX8347-A reg(0x0066) 00 00 RDID3 HX8347-A reg(0x0067) 00 00 RDID Himax HX8347-A reg(0x0070) 00 00 Panel Himax HX8347-A reg(0x00A1) 00 00 13 13 13 RD_DDB SSD1963 reg(0x00B0) 00 00 RGB Interface Signal Control reg(0x00B4) 00 44 Inversion Control reg(0x00B6) 00 02 82 27 04 Display Control reg(0x00B7) 00 06 Entry Mode Set reg(0x00BF) 00 06 06 06 06 06 ILI9481, HX8357-B reg(0x00C0) 00 00 00 00 00 00 00 00 00 Panel Control reg(0x00C8) 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA reg(0x00CC) 00 00 Panel Control reg(0x00D0) 00 00 00 Power Control reg(0x00D2) 00 00 00 03 03 NVM Read reg(0x00D3) 00 00 93 41 ILI9341, ILI9488 reg(0x00D4) 00 00 00 00 Novatek ID reg(0x00DA) 00 00 RDID1 reg(0x00DB) 00 00 RDID2 reg(0x00DC) 00 00 RDID3 reg(0x00E0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA-P reg(0x00E1) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA-N reg(0x00EF) 00 10 10 10 10 10 ILI9327 reg(0x00F2) 00 02 02 02 02 02 02 02 02 02 02 02 Adjust Control 2 reg(0x00F6) 00 01 00 00 Interface Control

Стивестронг
Пн, 18 декабря 2017 г., 22:38
Теперь для меня это выглядит нормально, это 9341.

Wackedman
Пн, 18 декабря 2017 г., 22:45
Хорошо, это хорошо знать..
Я только что скачал вашу последнюю версию LIB
Изменен #define tft_rst pb10 на PA4, чтобы соответствовать моей проводке..
Все еще получайте только белый экран :(

Стивестронг
Пн, 18 декабря 2017 г. 11:25
Какой я буду получить в серийном мониторе?

Wackedman
Пн, 18 декабря 2017 г. 11:51
Дефолл библиотеку и мою проводку обратно на оригинальные булавки..(RST на PB10)
GraphicStest Serial Output: (но все еще только с белым экраном)
TFT size is 240x320 Found ILI9341 LCD driver TFT begin done. rotation: 0, runtime: 22047 rotation: 1, runtime: 22046 rotation: 2, runtime: 22046 rotation: 3, runtime: 22046 Benchmark Time (microseconds) Screen fill 65196 Text 22046 Lines 177382 Horiz/Vert Lines 7988 Rectangles (outline) 6260 Rectangles (filled) 151869 Circles (filled) 97002 Circles (outline) 76594 Triangles (outline) 56363 Triangles (filled) 95581 Rounded rects (outline) 28134 Rounded rects (filled) 192794 Done!

Стивестронг
Вт 19 декабря 2017 г. 8:24
Проблема в том, что у меня нет 8 -битного параллельного ЖК -дисплея ILI9341, мой ILI9328, и он работает.
Но у меня есть 16 -битный ЖК -дисплей 9341, я проверю, в порядке ли последовательность инициирования регистрации в порядке.

Wackedman
Вт 19 декабря 2017 г. 10:17 утра
понять Стив...Я ценю ваши усилия!

РЕДАКТИРОВАТЬ: Наконец -то добрался до удаления и перемычки резистора R4, думая, что это поможет...Но это не имело никакого значения
Я просто собираюсь купить Spi Tft LCD..

Стивестронг
Сб 23 декабря 2017 г. 15:45
Я только что проверил свою 16 -битную параллельную LIB на синей таблетках с ILI9341 совместимым с ЖК -дисплеев ILI9341 320x480, и он работает, как и ожидалось. Benchmark Time (microseconds) Screen fill 54843 Text 23228 Lines 423008 Horiz/Vert Lines 6840 Rectangles (outline) 5712 Rectangles (filled) 134003 Circles (filled) 187443 Circles (outline) 177951 Triangles (outline) 118043 Triangles (filled) 122780 Rounded rects (outline) 53757 Rounded rects (filled) 192710

Wackedman
Сб 30 декабря 2017 г. 2:38 утра
Я попробовал ваши предложения, но все еще ничего не могу получить на экране..
Я использовал разгоночные материалы по умолчанию, просто для того, чтобы заставить его работать, тройной проверял проводку и даже непрерывность проверяла каждый пин -код, но не повезло ничего на экране...Принуждение #IF 1 работает медленнее (серийный выход), но все еще нет выхода на экране :(

Это странный ЖК -дисплей, единственная либера..

Я просто собираюсь купить ЖК -дисплей SPI для BluePill и держать этот щит для UNO (его медленнее на мега!)

РЕДАКТИРОВАТЬ: Получил работу над BluePill с последним MCUFRIEN LIB :)

Рикв
Пн 29 октября 2018 г., 8:50 вечера
Этот пост не совсем вписывается в эту теме, но результат здесь.
У меня есть Aduino Ide 1.8.5 установлено в C:...\ arduino. Есть библиотеки поддира, где я положил все свои либера. Но я также вижу \ lib dir под пользователями \..
Как они связаны друг с другом? Какой LIB используется IDE, если два существуют во время компиляции?
До сих пор я сделал несколько небольших проектов с Promini и Nano, чтобы почувствовать это. Нет проблем с установкой или использованием какой -либо LIB. Недавно я начал использовать чертежи.
Также никаких проблем для простых примеров. Но. Я планирую более сложный проект с использованием TFT с сенсорным экраном. Это работает над и отчеты, чтобы быть ILI9341, хотя поставщик говорит, что это UC8230S ?
Мне также понадобится SPI и I2C Comm, поэтому ввода времени для TFT должен быть выбран с осторожностью.
Я нашел необходимые либера?? Он не может найти очень простой GPIO.H и тому подобное (ошибка составьте на #include <Libmaple/GPIO.час>. Где те, кто должен быть? Я поместил их в разные места, но проблема остается.
У меня есть «Общая серия STMF103» и номер части платы «Blue Pill F103C8».
Я считаю, что моя конфигурация IDE для STM32F103C8 совершенно неверна. Как мне правильно его установить?

Вот как компилятор думает об этом: Arduino: 1.8.5 (Windows 8.1), Board:"Generic STM32F103 series, BluePill F103C8, 64k (default), STLink, Enabled with generic Serial, Smallest (-Os default)" C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\Rik\AppData\Local\Arduino15\packages -hardware C:\Users\Rik\Documents\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\Rik\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\Rik\Documents\Arduino\libraries -fqbn=STM32:stm32:GenF103:pnum=BLUEPILL_F103C8,flash=C8,upload_method=STLinkMethod,xserial=generic,opt=osstd -ide-version=10805 -build-path C:\Users\Rik\AppData\Local\Temp\arduino_build_586420 -warnings=default -build-cache C:\Users\Rik\AppData\Local\Temp\arduino_cache_32617 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.STM32Tools.path=C:\Users\Rik\AppData\Local\Arduino15\packages\STM32\tools\STM32Tools\1.1.0 -prefs=runtime.tools.arm-none-eabi-gcc.path=C:\Users\Rik\AppData\Local\Arduino15\packages\STM32\tools\arm-none-eabi-gcc\6-2017-q2-update -prefs=runtime.tools.CMSIS.path=C:\Users\Rik\AppData\Local\Arduino15\packages\STM32\tools\CMSIS\5.3.0 -verbose D:\Jdown\_Arduino\__Schetsen\graphicstest\graphicstest.ino Kan boards.txt niet vinden in C:\Users\Rik\Documents\Arduino\hardware\Arduino-STM32F1-corelibs\variants. Is het van voor versie 1.5? WARNING: Error loading hardware folder C:\Users\Rik\Documents\Arduino\hardware\Arduino-STM32F1-corelibs Geen geldige hardware-definities gevonden in map Arduino-STM32F1-corelibs. C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\Rik\AppData\Local\Arduino15\packages -hardware C:\Users\Rik\Documents\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\Rik\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\Rik\Documents\Arduino\libraries -fqbn=STM32:stm32:GenF103:pnum=BLUEPILL_F103C8,flash=C8,upload_method=STLinkMethod,xserial=generic,opt=osstd -ide-version=10805 -build-path C:\Users\Rik\AppData\Local\Temp\arduino_build_586420 -warnings=default -build-cache C:\Users\Rik\AppData\Local\Temp\arduino_cache_32617 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.CMSIS.path=C:\Users\Rik\AppData\Local\Arduino15\packages\STM32\tools\CMSIS\5.3.0 -prefs=runtime.tools.arm-none-eabi-gcc.path=C:\Users\Rik\AppData\Local\Arduino15\packages\STM32\tools\arm-none-eabi-gcc\6-2017-q2-update -prefs=runtime.tools.STM32Tools.path=C:\Users\Rik\AppData\Local\Arduino15\packages\STM32\tools\STM32Tools\1.1.0 -verbose D:\Jdown\_Arduino\__Schetsen\graphicstest\graphicstest.ino Using board 'GenF103' from platform in folder: C:\Users\Rik\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.3.0 Using core 'arduino' from platform in folder: C:\Users\Rik\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.3.0 cmd /c if not exist "D:\Jdown\_Arduino\__Schetsen\graphicstest/build_opt.h" mkdir "C:\Users\Rik\AppData\Local\Temp\arduino_build_586420\sketch" & type NUL > "C:\Users\Rik\AppData\Local\Temp\arduino_build_586420/sketch/build_opt.h" Detecting libraries used...

Стивестронг
Ср. 07 ноября 2018 г. 8:40
Какое ядро ​​вы используете? Эта LIB должна работать только на ядре Libmaple.