Поиск сообщества
Показаны результаты для тегов 'Touch'.
Найдено: 2 результата
-
Доброго дня всем. Такое вот дело, нужно сделать некую железку, функционал сейчас не важен. Имеется на руках плата Nucleo-F401RE и дисплей. Поскольку сделан он под Ардуину, а платы Nucleo имеют (в том числе) совместимую с ним разводку разъемов под периферию, дисплей втыкается без переделки, как есть. Все это и красиво и удобно, но вот шина данных, а в данной реализации дисплея используется 8-битная шина, не попадают пин-в-пин с портами МК. Переделка не планируется, надо исходить из то, что есть. Следовательно имеем такую картину: LCD_D7 - PA8 LCD_D6 - PB10 LCD_D5 - PB4 LCD_D4 - PB5 LCD_D3 - PB3 LCD_D2 - PA10 LCD_D1 - PC7 LCD_D0 - PA9 Чтобы отправить байт в дисплей, нужно его раскидать побитно. Моя реализация работает, вот так она выглядит: void lcd35_setData(unsigned char lcd35_data) { // Share data between data bus pins. unsigned int d7, d6, d5, d4, d3, d2, d1, d0; // Clear data bus pins. GPIOA->BSRR = (GPIO_BSRR_BR10 | GPIO_BSRR_BR9 | GPIO_BSRR_BR8); GPIOB->BSRR = (GPIO_BSRR_BR10 | GPIO_BSRR_BR5 | GPIO_BSRR_BR4 | GPIO_BSRR_BR3); GPIOC->BSRR = GPIO_BSRR_BR7; // Split bits d7 = (unsigned int)((lcd35_data & 0x80) << 1); d6 = (unsigned int)((lcd35_data & 0x40) << 4); d5 = (unsigned int)((lcd35_data & 0x20) >> 1); d4 = (unsigned int)((lcd35_data & 0x10) << 1); d3 = (unsigned int)(lcd35_data & 0x08); d2 = (unsigned int)((lcd35_data & 0x04) << 8); d1 = (unsigned int)((lcd35_data & 0x02) << 6); d0 = (unsigned int)((lcd35_data & 0x01) << 9); // Set data GPIOA->ODR |= (d7 | d2 | d0); GPIOB->ODR |= (d6 | d5 | d4 | d3); GPIOC->ODR |= d1; } Может можно сделать оптимальнее? Это прилично замедляет вывод изображения, особенно если выводить картинку целиком (480*320 по 2 байта на пиксель). Я всегда подстраивал железо под удобство написания кода, а тут вот вынужден извращаться. Кстати, гугление по данному экрану (Renesas R61581) выводило только на ардуинистов, неужели никто не подключал его к другим железкам?! Он, говорят, почти совместим с ILI9488. Я бегло прошелся по протоколу оного, да, есть такое, но в команды не углублялся. Вроде все отличие кроется в инициализации. P.S. Сейчас вот подумал, может сперва стоило привести lcd35_data к соответствующему типу, а потом уже применять маску и сдвиг.
-
Доброго времини суток. Вобщем сломалась сенсорная панель вытяжки. Вся логика сенсора вынесена на отдельную плату (схема прилагается) Вобщих чертах раскажу принцип работы На плате есть 4 сенсора Свет (должен работать по алгоритну кнопка с фиксацией - типа нажал светит - нажал - погас) 1-я скорость вентилятора 2-я скорость вентилятора 3-я скорость вентилятора (1-2-3 - ето переключение скоростей вентилятора) Тактовая частота с ноги CLKOUT через резистор R1, R3, R5, R7 дует в конденсаторы C1, C3, C5, C7. На второй ноге конденсаторов образуется переменное напряжение. Позитивная фаза напряжения бежит через D1, D3, D5, D7 на дополнительную емкость (соотвецтвенно C2,C4,C6,C8), Негативная фаза шунтируется диодами D2, D4, D6, D8 Таким образом на практике на входах BTN_LIGHT, BTN_1, BTN_2, BTN_3 имеем 2,2В в состоянии покоя (когда сенсор не нажат). Когда к сенсору поднести палец - то организм человека будет создавать дополнительную емкость. Ето приведет к падению напряжения до 0,8В на соотвецтвующих ножках (BTN_LIGHT, BTN_1, BTN_2 или BTN_3) Все вроди норма - вот только производитель затер маркировку контроллера. Корпус SOIC20 Я (в силу малого опыта по работе с PIC) визулально по расположению ног взял за основу PIC16F628. (тот что в SOIC18...) на печатной плате 10, 11 нога SOIC20-го корпуса не задействована... Но чувствую что контроллер не угадал. Теперь собственно вопрос: Какой контроллер посоветуете. От него необходимо: 1 совпадение ног питания 2 Совпадение ног кристала 3 Возможность на входах BTN_LIGHT, BTN_1, BTN_2 или BTN_3 различить 0,8В и 2,2В