Jump to content

    

hd44780

Свой
  • Content Count

    1231
  • Joined

  • Last visited

Everything posted by hd44780


  1. см. вложение. Для Вашего диспа реализуете те же функции, которые вызываются в LCDConf.c Но!! если будете использовать SSD1963, используйте свою инициализацию дисплея. Т.к. она всегда разная. Моя может не подойти. это зависит от матрицы и способа её подключения к SSD1963. Разные тайминги плюс перевороты/зеркалирования изображения бывают по-разному сделаны. STemWinLibrary_drv.7z
  2. стек 0x2000 - вполне достаточно. Прочитайте мой предыдущий пост. Я его обновил.
  3. Нет, не там. Это размер стека. У меня оно в файле startup_stm32f439xx.c Но в разных компиляторах/средах это выглядеть по-разному. Я привёл пример для Coocox. Но и в нём стартовый код бывает или на Си, или на асме. У меня на Си. Поэтому ориентируйтесь на месте. Свои функции - я имел в виду полностью Ваш драйвер дисплея. Не flexColor. если хотите - выложу полный пример STemWinDemo с полностью моим драйвером SSD1969. Драйвер сами подмените на ваш. Там требуются только функции типа записать/считать пиксель. Ну и инициализация дисплея конечно.
  4. Да, я об этом. Осмелюсь предположить, что вы используете дисплей 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. Проблем не было.
  5. А какой у Вас размер буфера STemWin? Драйверу FlexColor нужно задавать указатели на функции доступа к FSMC. Вы их задали?
  6. Нашёл я, как это отловить, добавил туда свой флажок. В итоге курсор мыши при отвале лишь замирает менее чем на полсекунды (пока реинит хост не пройдёт), после чего нормальная работа возобновляется. Самое интересное, что USB ядро такие случаи отрабатывает абсолютно корректно, а в USB HID драйвер просто забыли добавить обработку этого случая. Хотя может забыли вполне сознательно, т.к. у них даже при простом выдёргивании девайса хост тупо виснет и не перезапускается. Пока проблема решена, понаблюдаю за стабильностью. mantech , спасибо за наводку.
  7. угу. спасибо.
  8. Ну реенумерацию (реинит хоста) я запущу, эти механизмы у меня уже есть, запускается автоматически по спец флажку, но как отловить отваливание? Вставить в тот 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 (устройство отключилось от хоста). Иначе бы хост реинитился бы. Он вызывается только если я мышу вообще выдёргиваю.
  9. Прочитал конфиг-регистр: 3Ah = 00111010 - бит 2 = 0 - грелка выключена.
  10. Ну я его не включал, он мне 300 лет не нужен :D . Гляну. выключу на всякий случай.
  11. ну я ж не первый раз делаю такие схемы :) Китайская платка с датчиком в воздухе, где-то в 1-1.5 см от платы. Воткнута в разъём, который собственно и задаёт эту высоту. Сам проц вообще в стороне от него. Могу фотку скинуть :) ЗЫ А ноута у меня вообще нет
  12. ну ДШ я читал :) Но там тоже, извините, лажа. В разделе 6, в формулах (!) указано 16 бит, в разделе 5.6 - 12 и 14 бит, в разделе 9, самая последняя страница - вообще 2^RES Я пытался писать формулы из расчёта RES=16, получил температуру типа -86 градусов в комнате, и такую же ахинейскую влажность. Кстати RES=16 -- брал из ардуины. интересно, как оно там работает? Когда вписал 12 и 14 -значения стали более-менее правдоподобные. А из датчика я всегда 2 байта забираю. M_Andrey, а как же рассказы про заводскую калибровку? Все врут, все врут ...
  13. Апну древнюю тему. Сейчас осталась только одна проблема - мышь спустя какое-то время перестаёт отдавать координаты. Копание в коде вывело на уже упоминавшееся мною выше условие в файле 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 мышь у кого-нибудь?
  14. Дико извиняюсь, датчик SHT21 - http://www.ebay.com/itm/112053626741?_trks...K%3AMEBIDX%3AIT Дизайн платы - китайский и пуллапы 10 кил там уже есть. Поэтому этот вопрос отпадает. Про ограничения на частоту опроса я в курсе, делаю раз секунду (или 2 ) - и так и так делал.
  15. Да, спасибо. я видел кое-где упоминания этой доки, но все ссылки были битые :( Резюки припаяю ... хз. У меня расстояние между датчиком и процом максимум 5 см (если мерять по длине проводка).
  16. Привет всем. Вот обзавёлся этим датчиком и решил заменить им старый добрый проверенный 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
  17. Есть для Coocox :) и много. В т.ч. STemWin. Если интересно - оглашу весь список. Кейлом не пользуюсь, сорри.
  18. Купили дисп - http://www.buydisplay.com/default/7-tft-lc...4-gps-tablet-pc пашет нормально :) Траблы только из-за того, что пришлось паять переходник - на плате разъём по этот AT070TN90 - искажённые цвета. Но ведёт себя абсолютно адекватно. С самим AT070TN90 ещё не возился - накупил стабилизаторов типа LM317, собираюсь паять.
  19. Подскажите плиз, АКИП-4127/1А - нормальный прибор? Добавление в него анализатора протоколов (опция DC по терминологии приста) его не портит?
  20. В общем-то из спортивного интереса. Ф439 SDIO из-за фиговой разводки считай не пашет (карта опознаётся с 10-го раза, та и то потом глохнет, когда читать начинает), но на плате есть Ф105 с SD картой на SPI. Между процами есть и уарт и SPI. Вот и сделал :rolleyes: .
  21. Для USB FatFs ровно такой же как и для SD карт. Хоть винчестер к своему процу подключите, на FatFs это никак не скажется. Там есть файлик diskio.c, там кучка низкоуровневых функций для FatFs типа считать/записать сектор. Там вы и вызываете нужные функции для нужного накопителя. У меня, например, в проекте вообще есть SD карта, подключенная к другому процу, а FatFs читает/пишет её через уарт. Наравне с USB флэшками. Никакой разницы в итоге нет вообще. Многие также организовывают Fat во флэше проца или отдельных чипах памяти. Какая разница?
  22. STM32F407VG+NAND+FSFAT

    А Вы саму память проверяли? Типа записали куда-то 512 байт случайного мусора, считали, сравнили. И к чему относится либа? Это работа с Вашим чипом памяти?
  23. Стандартный пример из USB-Host-Device_Lib смотрели?
  24. Проверил - всё работает. Но осталась одна какая-то странность - эту разлочку надо делать каждый раз после выкл/вкл питания. Такое ощущение, что эти биты надо как-то сохранить.