Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

TFT матрицы и микроконтроллер

Непрочитано 18.02.2011, 01:55  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Сообщение от aramiha Посмотреть сообщение
Есть у кого-нибудь пример опроса 4-проводного резистивного тачскрина для PIC24? Может даже для RTOS?
не предлагайте только из библиотеки Microchip, опрос тачскрина тормозит из этой библиотеки.
Кому не жалко, поделитесь, пожалуйста...
А что значит тормозит? Поясните. Дело в том, что там быстро и не надо. А то проблемы начинаются.
Реклама:
SasaVitebsk вне форума  
Непрочитано 18.02.2011, 09:58  
aramiha
Частый гость
 
Регистрация: 02.08.2008
Сообщений: 35
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
aramiha на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Тормозит, это значит, что не на любое касание откликается дисплей (бывает что пропускает, даже если все время касаешься одной точки), бывает так, что при событии отпускания пальца он это событие секунду формирует...
долго и ненадежно ((
SasaVitebsk, а у вас есть пример? И о каких проблемах Вы говорите?

вот код, может кто подскажет как сделать правильно?

файл main.c:
.....

int main (void)
{
....
InitTouch();
while (1)
{

TouchMenu();
......
}
return 1;
}

файл TouchScreen.c:

#ifndef _TOUCHSCREEN_H
#define _TOUCHSCREEN_H

#include "TouchScreen.h"
#include "pictures.h"
#include ‹p24Fxxxx.h›

// ADC Status
#define TOUCH_ADC_DONE AD1CON1bits.DONE
#define ADC_XPOS 3 // 3 канал АЦП
#define ADC_YPOS 4 // 4 канал АЦП

// Y port definitions
#define ADPCFG_XPOS AD1PCFGbits.PCFG3
#define LAT_XPOS LATBbits.LATB3
#define LAT_XNEG LATBbits.LATB5
#define TRIS_XPOS TRISBbits.TRISB3
#define TRIS_XNEG TRISBbits.TRISB5

// X port definitions
#define ADPCFG_YPOS AD1PCFGbits.PCFG4
#define LAT_YPOS LATBbits.LATB4
#define LAT_YNEG LATBbits.LATB2
#define TRIS_YPOS TRISBbits.TRISB4
#define TRIS_YNEG TRISBbits.TRISB2

// Default calibration values
#define YMINCAL 0x0070
#define YMAXCAL 0x0370
#define XMINCAL 0x007A
#define XMAXCAL 0x0350


//////////////////////// GLOBAL VARIABLES ////////////////////////////
#define PRESS_THRESHOULD 256 // between 0-0x03ff the lesser this value the lighter the screen must be pressed

// Max/Min ADC values for each derection
volatile unsigned short _calXMin = XMINCAL;
volatile unsigned short _calXMax = XMAXCAL;
volatile unsigned short _calYMin = YMINCAL;
volatile unsigned short _calYMax = YMAXCAL;

// Current ADC values for X and Y channels
volatile short adcX = 0;
volatile short adcY = 0;

extern volatile char run;

typedef enum
{
SET_X,
RUN_X,
GET_X,
CHECK_X,
SET_Y,
RUN_Y,
GET_Y,
CHECK_Y,
SET_VALUES
} TOUCH_STATES;

typedef enum
{
EVENT_INVALID = 0, // An invalid event.
EVENT_MOVE, // A move event.
EVENT_PRESS, // A press event.
EVENT_STILLPRESS, // A continuous press event.
EVENT_RELEASE, // A release event.
} INPUT_DEVICE_EVENT;


typedef struct
{
unsigned uiEvent; // The generic events for input device.
short param1; // Parameter 1 meaning is dependent on the type of input device.
short param2; // Parameter 2 meaning is dependent on the type of input device.
} GOL_MSG;

volatile TOUCH_STATES state = SET_X;

/************************************************** *******************
* Macros: ADCGetX()
* Overview: returns ADC value for x direction if touch screen is pressed
* and 0 if not
************************************************** ******************/
#define ADCGetX() adcX
#define ADCGetY() adcY


#define GetMaxX() 127
#define GetMaxY() 159

void TouchProcessTouch(void);

extern void DisplayPicture (unsigned short PictureAddress, unsigned char width, unsigned char height, unsigned char x_offset, unsigned char y_offset, int frames_count);

// Touch Screen timer ISR
void __attribute__((interrupt, shadow, auto_psv)) _T4Interrupt(void)
{
TouchProcessTouch();
IFS1bits.T4IF = 0; // Clear flag
}

void TouchProcessTouch(void)
{
static short tempX, tempY;
short temp;

switch (state)
{

case SET_VALUES:
if (!TOUCH_ADC_DONE)
break;

if ((unsigned short) PRESS_THRESHOULD ‹ (unsigned short) ADC1BUF0)
{
adcX = 0;
adcY = 0;
}
else
{
adcX = tempX;
adcY = tempY;
}
state = SET_X;

case SET_X:
AD1CHS = ADC_XPOS; // switch ADC channel

TRIS_XPOS = 1;
TRIS_YPOS = 1;
TRIS_XNEG = 1;
LAT_YNEG = 0;
TRIS_YNEG = 0;

AD1CON1bits.SAMP = 1; // run conversion
state = CHECK_X;
break;

case CHECK_X:
case CHECK_Y:
if (!TOUCH_ADC_DONE)
break;

if ((unsigned short) PRESS_THRESHOULD › (unsigned short) ADC1BUF0)
{
if (state == CHECK_X)
{
LAT_YPOS = 1;
TRIS_YPOS = 0;
tempX = 0;
state = RUN_X;
}
else
{
LAT_XPOS = 1;
TRIS_XPOS = 0;
tempY = 0;
state = RUN_Y;
}
}
else
{
adcX = 0;
adcY = 0;
state = SET_X;
break;
}

case RUN_X:
case RUN_Y:
AD1CON1bits.SAMP = 1;
state = (state == RUN_X) ? GET_X : GET_Y;
// no break needed here since the next state is either GET_X or GET_Y

case GET_X:
case GET_Y:
if (!TOUCH_ADC_DONE)
break;

temp = ADC1BUF0;
if (state == GET_X)
{
if (temp != tempX)
{
tempX = temp;
state = RUN_X;
break;
}
}
else
{
if (temp != tempY)
{
tempY = temp;
state = RUN_Y;
break;
}
}

if (state == GET_X)
TRIS_YPOS = 1;
else
TRIS_XPOS = 1;
AD1CON1bits.SAMP = 1;
state = (state == GET_X) ? SET_Y : SET_VALUES;
break;

case SET_Y:
if (!TOUCH_ADC_DONE)
break;

if ((unsigned short) PRESS_THRESHOULD ‹ (unsigned short) ADC1BUF0)
{
adcX = 0;
adcY = 0;
state = SET_X;
break;
}

AD1CHS = ADC_YPOS; // switch ADC channel

TRIS_XPOS = 1;
TRIS_YPOS = 1;
LAT_XNEG = 0;
TRIS_XNEG = 0;
TRIS_YNEG = 1;

AD1CON1bits.SAMP = 1; // run conversion
state = CHECK_Y;
break;

default:
state = SET_X;
}
}

void InitTouch()
{
// Initialize ADC
AD1CON3 = 0x1FFF; // 31 Tad auto-sample, Tad = 256*Tcy

// inputs are analog
ADPCFG_XPOS = 0;
ADPCFG_YPOS = 0;

T4CON = 0; // Timer reset
IFS1bits.T4IF = 0; // Reset Timer4 interrupt flag
IPC6bits.T4IP = 4; // Timer4 Interrupt priority level=4
T4CONbits.TCKPS = 0; // Timer1 Input Clock Prescale Select bits = 1:8
T4CONbits.TCS = 0;
TMR4 = 0x0000;
PR4 = 0x0a1f; // Чем меньше, тем быстрее опрос
AD1CON1bits.ADON = 1;

}

// x coordinate
short TouchGetX(void)
{
unsigned long result, p1,p2,p3;

result = ADCGetX();
if (result › _calXMin)
{
p1 = adcX;
p2 = _calXMin;
p3 = _calXMax;
result = GetMaxX() * (p1 - p2) / (p3 - p2);
result = GetMaxX() - result; // FLAP
return (result);
}
else
{
return (0);
}
}

// y coordinate
short TouchGetY(void)
{
unsigned long result, p1,p2,p3;

result = ADCGetY();
if (result › _calYMin)
{
p1 = adcY;
p2 = _calYMin;
p3 = _calYMax;
result = GetMaxY() * (p1 - p2) / (p3 - p2);
return (result);
}
else
{
return (0);
}

}

void TouchGetMsg(GOL_MSG *pMsg)
{
static short prevX = 0;
static short prevY = 0;
short touch_x, touch_y;

touch_x = TouchGetX();
touch_y = TouchGetY();

pMsg-›uiEvent = EVENT_INVALID;

if (touch_x == 0)
{
touch_y = 0;
}
else
{
if (touch_y == 0)
touch_x = 0;
}
// удерживается нажатой область
if ((prevX == touch_x) && (prevY == touch_y) && (touch_x != 0) && (touch_y != 0))
{
pMsg-›uiEvent = EVENT_STILLPRESS;
pMsg-›param1 = touch_x;
pMsg-›param2 = touch_y;
return;
}

if ((prevX != 0) || (prevY != 0))
{
if ((touch_x != 0) && (touch_y != 0))
{
// Move - перемещается палец, сюда можно добавить в какую сторону и на сколько перемещается
pMsg-›uiEvent = EVENT_MOVE;
}
else
{
// Released - палец отпущен
pMsg-›uiEvent = EVENT_RELEASE;
pMsg-›param1 = prevX;
pMsg-›param2 = prevY;
prevX = touch_x;
prevY = touch_y;
return;
}
}
else
{
if ((touch_x != 0) && (touch_y != 0))
{
// Pressed - палец нажат после "молчания" (были нули) тачскрина
pMsg-›uiEvent = EVENT_PRESS;
}
else
{
// No message - нет нажатия
pMsg-›uiEvent = EVENT_INVALID;
}
}

pMsg-›param1 = touch_x;
pMsg-›param2 = touch_y;
prevX = touch_x;
prevY = touch_y;
}

// обработка тачскрина
void GOLMsg(GOL_MSG *pMsg)
{

if(pMsg-›uiEvent == EVENT_RELEASE)
{
//return;
DisplayPicture(0x54,1); // кнопка отжата

}

else if(pMsg-›uiEvent == EVENT_PRESS)
{
if (((2 ‹ pMsg-›param1) && (pMsg-›param1 ‹ 126)) && (pMsg-›param2 ‹ 143) && (114 ‹ pMsg-›param2))
{
DisplayPicture(0x40,1); // кнопка нажата
}
}
}

void TouchMenu(void)
{
GOL_MSG msg; // GOL message structure to interact with GOL (тачскрин)
TouchGetMsg(&msg); // Get message from touch screen
GOLMsg(&msg); // обработка тачскрина
}

// включить тачскрин
void TouchON(void)
{
IEC1bits.T4IE = 1; // Enable Timer4 interrupt
T4CONbits.TON = 1;
}
// выключить тачскрин
void TouchOFF(void)
{
IEC1bits.T4IE = 0; // Enable Timer4 interrupt
T4CONbits.TON = 0;
}
#endif // #if defined (USE_RESISTIVE_TOUCH)

Последний раз редактировалось aramiha; 18.02.2011 в 10:15.
aramiha вне форума  
Непрочитано 18.02.2011, 14:21  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Я использовал для считывания координат ADS7843 в связке с 51-м контроллером, программу для 51-го писал в ассемблере, в Си я пока слабоват. Может стоит посмотреть принцип работы ADS7843 и сделать на его подобии...
Вложения:
Тип файла: pdf ADS7843.pdf (166.3 Кб, 76 просмотров)
roma9112 вне форума  
Непрочитано 22.02.2011, 15:59  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

А никто не подскажет, вот эту плату http://www.terraelectronica.ru/catal...ss_19_2_37_5_4 реально использовать в качестве дисплея для осциллографа? Смущает, что инфу в нее вводят по SPI, не слишком ли медленно получится? Может есть варианты попроще и по скоростней?
Скачал немножко инфы...
Вложения:
Тип файла: pdf manual_56.pdf (870.8 Кб, 269 просмотров)
Тип файла: pdf manual_operator_v5.pdf (2.26 Мб, 100 просмотров)
Тип файла: pdf manual_terminal_v2.pdf (657.7 Кб, 136 просмотров)
roma9112 вне форума  
Непрочитано 22.02.2011, 16:31  
aramiha
Частый гость
 
Регистрация: 02.08.2008
Сообщений: 35
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
aramiha на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Сообщение от roma9112 Посмотреть сообщение
Я использовал для считывания координат ADS7843 в связке с 51-м контроллером, программу для 51-го писал в ассемблере, в Си я пока слабоват. Может стоит посмотреть принцип работы ADS7843 и сделать на его подобии...
ADS7843 не подойдет, ибо схема утверждена, где 4-х проводной тачскрин подключен напрямую к АЦП PIC24FJ96GA006
aramiha вне форума  
Непрочитано 22.02.2011, 17:46  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,801
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Сообщение от aramiha Посмотреть сообщение
ADS7843 не подойдет, ибо схема утверждена, где 4-х проводной тачскрин подключен напрямую к АЦП PIC24FJ96GA006
Сочувствую. Отдельные схемы для работы с тачскрином расчитаны на статику амплитудой 4-8 kV.
Если сажать тачскрин напрямую на АЦП PIC - до первой девушки с нейлоновым нижнем бельем. Ткнет пальчиком - и меняем ПИК.
DanilinSA вне форума  
Сказали "Спасибо" DanilinSA
SasaVitebsk (23.02.2011)
Непрочитано 22.02.2011, 17:56  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Сообщение от DanilinSA Посмотреть сообщение
Если сажать тачскрин напрямую на АЦП PIC - до первой девушки с нейлоновым нижнем бельем. Ткнет пальчиком - и меняем ПИК.
А нечего просто так пальчиком тыкать... пусть сначала бельё снимет, "для жизнеобеспечения ПИКа"
st_1 вне форума  
Непрочитано 23.02.2011, 02:26  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Сообщение от DanilinSA Посмотреть сообщение
Сочувствую. Отдельные схемы для работы с тачскрином расчитаны на статику амплитудой 4-8 kV.
Если сажать тачскрин напрямую на АЦП PIC - до первой девушки с нейлоновым нижнем бельем. Ткнет пальчиком - и меняем ПИК.
Это не просто трёп? Не голословное утверждение? А то я сдуру хотел выкинуть и непосредственно на АЦП посадить. Принципиально точность этих 7843 - гуано. Работать не удобнее чем с АЦП. То есть принципиально она не нужна. А вот о защите от пробоя я даже как-то и не подумал.
В одном случае у меня тачпад в сименовском дисплее вылетел, правда там сваркой варили рядом. Ну и накрылся дисплей. ))
SasaVitebsk вне форума  
Непрочитано 23.02.2011, 12:12  
roma9112
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
roma9112 на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Так ADS7843 тоже боится статики, в самом начале даташита прописано, а в типовых схемах включения тача обычно есть вариант с защитой на ограничителях перенапряжения, а там где для подсветки используется люминисцент - это обязательно. Вот только от темы начали отходить...
roma9112 вне форума  
Непрочитано 23.02.2011, 13:45  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,801
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: TFT матрицы и микроконтроллер

Если не изменяет память - ADS7843 держит 8 kV импульс воздушного разряда и 4 kV контактного (правда я сейчас не смог найти документ, это подтверждающий). В любом случае для таких вещей есть рекомендаций стандарта IEC 61000-4-2. Более новые чипы (например TSC2046е) имеют характеристики, содержит элементы защиты входных цепей от статического электричества с превышением рекомендаций стандарта IEC 61000-4-2.
"Принципиально точность этих 7843 - гуано"- 12-битный АЦП уже не устраивает? Экран какой по размеру? В половину стены?
А насчет статики: у меня лестница 5 этаж - деревянные перила на металическом основании. Дерево покрыто лаком. Если идти по лестнице придерживая перила - получишь заряд статики.
Висящие выводы (с подтяжкой с сотни килоом на землю или питание) сжигает почти со 100 %.
Выводы с защитой (33 ома + подтяжка+ BAV99) выгорают с некоторой вероятность. Невысокой, но вполне заметной.
С недавних пор очень тщательно стал прорабатывать входные цепи. Считаю, что пользователь никогда не должен тыкать рукой в цепи, напрямую подключенные к МП.
Даже если не сгорит вывод,то в резет или зависание МП отправляется легко.

Тем более при работе с тачскрином есть куча подводных камней:
1) Контакт между пленками тачскрина нестабильный и "плавающий". С этим приходится бороться. Иначе фигню намереем. Т.е. в процессе измерения может пропадать и появятся совершенно непредсказуемо.
2) Сила нажатия может меняется. И потому может меняется сопротивление в месте контакта пленок.
3) Необходимо делать коррекцию по температуре среды, напряжению питания. От температуры тачскрин может плыть достаточно сильно. А линейность дешевых китайских тачскринов такова, что иногда приходится пересчитывать координаты через "трехэтажную" формулу. Особенно ближе к углам.
4) Тачскрин - прекрасная антенна для наводок. А если люминесцентная подсветка - такая радость наступает. Да и светодиодная подсветка на импульсном преобразователе то-же не сахар.

Если есть желание на АЦП гнать + ключами коммутировать входы+ куча обработки - ради бога.

Если нет желания использовать 7843 - самый простой,дешевый и доступный - найди что либо поновее.
DanilinSA вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение LCD матрицы от ноута StarPilgrim Делимся опытом 3 07.11.2009 21:18
Глюки в работе светодиодной матрицы firehacker Источники питания и свет 15 29.12.2008 11:55
Интерфейсы TFT-панелей lankai Информация по радиокомпонентам 2 18.01.2008 00:24
TFT индикаторы mikle2000 Микроконтроллеры, АЦП, память и т.д 12 23.07.2007 00:47
TFT 7" оформление 011119xx Микроконтроллеры, АЦП, память и т.д 1 06.07.2007 10:37


Часовой пояс GMT +4, время: 02:34.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.