Перейти к содержанию
    

hd44780

Свой
  • Постов

    1 236
  • Зарегистрирован

  • Посещение

Весь контент hd44780


  1. Попробуйте переписать функции в LCDConf.c. Я этого не делал, меня и так всё устаивало А сейчас вообще переехал на LTDC..
  2. Сорри, долго не заглядывал сюда. Сравнивать любой FSMC дисп с LTDC (а именно он стоит на 429 дискавери) по определению неверно. совершенно разные технологии. Запись точки в SSD1963 - это 6 команд (запись x1, y1; x2, y2, потом команда засылки данных). Если брать в циклах обмена по FSMC - минимум в 2 раза больше. А для LTDC - просто запись 2-3 байтов в память по прямому адресу .... Хотите скорости - выкиньте FSMC и пользуйтесь LTDC. Но он есть только в F4x9 и выше. 407 такого не умеет. другие либы есть, но в плане окошек они и рядом с emWin не стояли ...
  3. а покажите ошибки, может подскажу чего ...
  4. Ничего переписывать не надо. Находящиеся там функции вызываются из недр библиотеки. Имя файла роли вообще не играет.
  5. Сорри. Там просто функция задержки на указанное кол-во мс. В инициализации SSD надо. Приложил. Можете свою использовать, если такая у Вас есть. System.7z
  6. см. вложение. Для Вашего диспа реализуете те же функции, которые вызываются в LCDConf.c Но!! если будете использовать SSD1963, используйте свою инициализацию дисплея. Т.к. она всегда разная. Моя может не подойти. это зависит от матрицы и способа её подключения к SSD1963. Разные тайминги плюс перевороты/зеркалирования изображения бывают по-разному сделаны. STemWinLibrary_drv.7z
  7. стек 0x2000 - вполне достаточно. Прочитайте мой предыдущий пост. Я его обновил.
  8. Нет, не там. Это размер стека. У меня оно в файле startup_stm32f439xx.c Но в разных компиляторах/средах это выглядеть по-разному. Я привёл пример для Coocox. Но и в нём стартовый код бывает или на Си, или на асме. У меня на Си. Поэтому ориентируйтесь на месте. Свои функции - я имел в виду полностью Ваш драйвер дисплея. Не flexColor. если хотите - выложу полный пример STemWinDemo с полностью моим драйвером SSD1969. Драйвер сами подмените на ваш. Там требуются только функции типа записать/считать пиксель. Ну и инициализация дисплея конечно.
  9. Да, я об этом. Осмелюсь предположить, что вы используете дисплей 320x240 :) . Но размер буфера никак не связан с размером дисплея. 320*240*2 = 150 кил -- ну нет в F407 такого объёма памяти одним куском. На Ф407 (дискавери) я использовал #define GUI_NUMBYTES 64 *1024 64кила должно хватить для большинства задач. Стек брал #define STACK_SIZE 0x00000300 /*!< The Stack size suggest using even number */ __attribute__ ((section(".co_stack"))) unsigned long pulStack[STACK_SIZE]; От адреса не зависит, т.к. ему пофиг на какие-то адреса. Там просто функции типа записать команду/данные и пр. А по каким адресам и как Вы это делаете - Ваше личное дело. Хоть через уарт :rolleyes: Вот как я делал: void LCD_X_Config ( void ) { GUI_DEVICE *pDevice; CONFIG_FLEXCOLOR Config = {0}; GUI_PORT_API PortAPI = {0}; // Set display driver and color conversion pDevice = GUI_DEVICE_CreateAndLink ( GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0 ); // Display driver configuration, required for Lin-driver LCD_SetSizeEx ( 0, XSIZE_PHYS , YSIZE_PHYS ); LCD_SetVSizeEx ( 0, VXSIZE_PHYS, VYSIZE_PHYS ); // Orientation Config.Orientation = 0; // (GUI_MIRROR_X | GUI_MIRROR_Y); Config.FirstCOM = 0x01; Config.FirstSEG = 0x02; GUIDRV_FlexColor_Config ( pDevice, &Config ); /* + void (* pfWrite16_A0) (U16 Data); // Запись в регистр команд + void (* pfWrite16_A1) (U16 Data); // Запись в регистр данных + void (* pfWriteM16_A1)(U16 * pData, int NumItems); // Запись блока в регистр данных + void (* pfReadM16_A1) (U16 * pData, int NumItems); // Чтение блока из регистр данных + U16 (* pfRead16_A1) (void); // Чтение регистра данных void (* pfWriteM16_A0)(U16 * pData, int NumItems); U16 (* pfRead16_A0) (void); void (* pfReadM16_A0) (U16 * pData, int NumItems); */ // Set controller and operation mode PortAPI.pfWrite16_A0 = SSD1963_WriteCmd; // Функция посылки команды в SSD1963 PortAPI.pfWrite16_A1 = SSD1963_WriteData; // Функция посылки данных в SSD1963 PortAPI.pfWriteM16_A1 = SSD1963_WriteBlock; // Функция записи блока в SSD1963 PortAPI.pfReadM16_A1 = SSD1963_ReadBlock; // Функция чтения блока из SSD1963 PortAPI.pfRead16_A1 = SSD1963_ReadData; // Функция чтения данных из SSD1963 GUIDRV_FlexColor_SetFunc ( pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66720, GUIDRV_FLEXCOLOR_M16C0B16 ); GUIDRV_FlexColor_SetReadFunc66720_B16 ( pDevice, GUIDRV_FLEXCOLOR_IF_TYPE_II ); } // LCD_X_Config ..................... //////////////////////////////////////////////////// // Функции для драйвера FlexColor // Запись команды в SSD1963 void SSD1963_WriteCmd ( uint16_t cmd ) { FSMC_LcdWriteCmd ( cmd ); } // SSD1963_WriteCmd // Запись данных в SSD1963 void SSD1963_WriteData ( uint16_t data ) { FSMC_LcdWriteData ( data ); } // SSD1963_WriteCmd // Чтение данных из SSD1963 uint16_t SSD1963_ReadData ( void ) { return FSMC_LcdReadData ( ); } // SSD1963_ReadData // Запись блока в SSD1963 void SSD1963_WriteBlock ( uint16_t *pData, int NumItems ) { // FSMC_TransferDataDMAToLCD ( pData, NumItems * 2, true ); for ( ; NumItems; NumItems -- ) FSMC_LcdWriteData ( *pData++ ); } // SSD1963_WriteCmd // Чтение блока из SSD1963 void SSD1963_ReadBlock ( uint16_t *pData, int NumItems ) { // FSMC_TransferDataDMAFromLCD ( pData, NumItems * 2 ); for ( ; NumItems; NumItems -- ) *pData++ = FSMC_LcdReadData ( ); } // SSD1963_ReadBlock //////////////////////////////////////////////////// Ну и ещё ложка дёгтя про FlexColor. В нём есть какой-то древнющий баг - не работает чтение пикселей с дисплея. Проявляется это в виде чёрного следа, тянущегося за любым спрайтом (курсор мыши тоже спрайт). Я знаю 2 лекарства этой беды: 1. Не использовать Flexcolor. Использовать свои функции для работы с дисплеем. 2. Использовать большой буфер STemWin (GUI_NUMBYTES). Сколько именно надо - не знаю, на F439+SDRAM я использовал 3 метра. В этом случае, видимо, включается некое кэширование и чтение с дисплея не используется (проверял лично). В функции Read вообще никогда не попадает. Но этот вариант на дискаверине не реализуем вообще :( . На дискавери я использовал вариант 1. Проблем не было.
  10. А какой у Вас размер буфера STemWin? Драйверу FlexColor нужно задавать указатели на функции доступа к FSMC. Вы их задали?
  11. STM32F439 + USB мышь

    Нашёл я, как это отловить, добавил туда свой флажок. В итоге курсор мыши при отвале лишь замирает менее чем на полсекунды (пока реинит хост не пройдёт), после чего нормальная работа возобновляется. Самое интересное, что USB ядро такие случаи отрабатывает абсолютно корректно, а в USB HID драйвер просто забыли добавить обработку этого случая. Хотя может забыли вполне сознательно, т.к. у них даже при простом выдёргивании девайса хост тупо виснет и не перезапускается. Пока проблема решена, понаблюдаю за стабильностью. mantech , спасибо за наводку.
  12. STM32F439 + USB мышь

    угу. спасибо.
  13. STM32F439 + USB мышь

    Ну реенумерацию (реинит хоста) я запущу, эти механизмы у меня уже есть, запускается автоматически по спец флажку, но как отловить отваливание? Вставить в тот if какой-то флажок? Кусок if ( p_hid_data -> start_toggle == 1 ) /* handle data once */ { p_hid_data -> start_toggle = 0; p_hid_data -> HID_Machine.cb->Decode ( p_hid_data -> HID_Machine.buff ); } вызывается только когда мышу двигают. Я вроде не замечал, чтобы у меня про сдыхании мыши вызывался обработчик USBH_USR_DeviceDisconnected (устройство отключилось от хоста). Иначе бы хост реинитился бы. Он вызывается только если я мышу вообще выдёргиваю.
  14. Прочитал конфиг-регистр: 3Ah = 00111010 - бит 2 = 0 - грелка выключена.
  15. Ну я его не включал, он мне 300 лет не нужен :D . Гляну. выключу на всякий случай.
  16. ну я ж не первый раз делаю такие схемы :) Китайская платка с датчиком в воздухе, где-то в 1-1.5 см от платы. Воткнута в разъём, который собственно и задаёт эту высоту. Сам проц вообще в стороне от него. Могу фотку скинуть :) ЗЫ А ноута у меня вообще нет
  17. ну ДШ я читал :) Но там тоже, извините, лажа. В разделе 6, в формулах (!) указано 16 бит, в разделе 5.6 - 12 и 14 бит, в разделе 9, самая последняя страница - вообще 2^RES Я пытался писать формулы из расчёта RES=16, получил температуру типа -86 градусов в комнате, и такую же ахинейскую влажность. Кстати RES=16 -- брал из ардуины. интересно, как оно там работает? Когда вписал 12 и 14 -значения стали более-менее правдоподобные. А из датчика я всегда 2 байта забираю. M_Andrey, а как же рассказы про заводскую калибровку? Все врут, все врут ...
  18. STM32F439 + USB мышь

    Апну древнюю тему. Сейчас осталась только одна проблема - мышь спустя какое-то время перестаёт отдавать координаты. Копание в коде вывело на уже упоминавшееся мною выше условие в файле usbh_hid_core.c, функция USBH_HID_Handle: ............. case HID_POLL: if(( HCD_GetCurrentFrame(pdev) - HID_Machine.timer) >= HID_Machine.poll) { HID_Machine.state = HID_GET_DATA; } else if( HCD_GetURB_State(pdev, HID_Machine.hc_num_in) == URB_DONE ) { if(start_toggle == 1) /* handle data once */ { start_toggle = 0; HID_Machine.cb->Decode(HID_Machine.buff); } } //if .............. Ну что такое первое условие - понятно, там все проблемы удалось решить, но всё обламывается на втором условии. Когда мышь дохнет, функция возвращает URB_IDLE. Всё, что я пока понял, что эти статусы выставляются в прерывании USB. Дальнейшее я пока не расколдовал :( ... Поэтому вопрос по сути тот же - работает ли USB мышь у кого-нибудь?
  19. Дико извиняюсь, датчик SHT21 - http://www.ebay.com/itm/112053626741?_trks...K%3AMEBIDX%3AIT Дизайн платы - китайский и пуллапы 10 кил там уже есть. Поэтому этот вопрос отпадает. Про ограничения на частоту опроса я в курсе, делаю раз секунду (или 2 ) - и так и так делал.
  20. Да, спасибо. я видел кое-где упоминания этой доки, но все ссылки были битые :( Резюки припаяю ... хз. У меня расстояние между датчиком и процом максимум 5 см (если мерять по длине проводка).
  21. SHT21 (Модуль GY-21) на ATMega8

    Привет всем. Вот обзавёлся этим датчиком и решил заменить им старый добрый проверенный HIH-3610 (аналоговый датчик влажности с выходом на АЦП), но сдохший к великому сожалению :crying: . В конечный прибор пока не вставлял, в целях тестирования/отладки подключил его к отдельной меге8@16MHz. Результаты для простоты гоню на USART и далее в комп. На базе примеров из интернета написал функции для работы с этим датчиком. Использую ногодрыг, т.к. в конечном устройстве на меге8 ноги аппаратного i2C заблокированы АЦП (там ещё MPX6115A висит). Это не STM32 :rolleyes: ... Датчик запустился в общем-то без проблем, данные с него приходят исправно, но, на мой взгляд, немного странные. Например: Замеры раз в секунду. В 30 см от него лежит DS18B20, показывает ~22 градуса. Если долго держать включённым, температура медленнно но повышается. это нормально? В целом вопрос теоретический, у меня прибор сам вырубается через 10 сек после включения. А вот влажность какая-то пониженная. Эталона у меня, правда, нет, но когда HIH-3610 был в норме, он 30% даже в жару не показывал... И ещё вопрос. По стандарту I2C вначале положено передавать адрес девайса. В некоторых примерах под ардуину я видел передачу этого адреса. Но когда я это делаю, оно где-то виснет (не разбирался где). Но у меня нет доверия к ардуино-примерам, т.к. там значения из датчика везде делят на 65535, хотя по доке на SHT21 там разрешения 16 бит нигде нет, для температуры максимум 14 бит, для влажности - 12. Я также не припаял pull-up резюки к ногам. Для этого модуля они вроде не нужны. Или я ошибаюсь? Кто-то может помочь? Код для CvAVR приложил. Сам датчик полностью адекватный - кладу палец - температура повышается (кстати и влажность тоже :) ), открываю окно (идёт холодный воздух) - понижается. подышу на него - влажность увеличивается. Снимаю эти воздействия - показания возвращаются обратно. Спасибо. Mega8_SHT11.7z
  22. Есть для Coocox :) и много. В т.ч. STemWin. Если интересно - оглашу весь список. Кейлом не пользуюсь, сорри.
  23. Купили дисп - http://www.buydisplay.com/default/7-tft-lc...4-gps-tablet-pc пашет нормально :) Траблы только из-за того, что пришлось паять переходник - на плате разъём по этот AT070TN90 - искажённые цвета. Но ведёт себя абсолютно адекватно. С самим AT070TN90 ещё не возился - накупил стабилизаторов типа LM317, собираюсь паять.
  24. Подскажите плиз, АКИП-4127/1А - нормальный прибор? Добавление в него анализатора протоколов (опция DC по терминологии приста) его не портит?
×
×
  • Создать...