Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

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

 
Опции темы

stm32 + xpt2046 (аналог ads7846)

Непрочитано 21.08.2011, 18:04  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Принял проект.
Вот же совпадение - у меня тоже HY32D дисплейчик =)

После беглого просмотра:
1. В настройках SPI Вы устанавливаете 16тибитный режим передачи, коего ни ads78**, ни даже наш китаец xpt2046 не поддерживал никогда в жизни.
2. Отправку данных в контроллер и приём лучше разделить на 2 отдельных функции.
3. Зачем в TP_SPI_RW() производить сдвиг LSB вправо аж на 12?

Всё же попробуйте моё чтение - всего то и нужно три функции в проект скопировать (SPI_WR(), SPI_RD() и ReadADS7846(), последнюю немного подправить)


ОФФТОП:
1. Если у вас 100ногий stm32, то лучше для управления дисплеем заюзать FSMC - он быстрее. Могу дать код если надо
2. Чем делали шрифты для LCD? =)
Реклама:

Последний раз редактировалось DarkEN_ANGEL; 21.08.2011 в 20:06.
DarkEN_ANGEL вне форума  
Непрочитано 21.08.2011, 20:34  
Solomiichuk
Временная регистрация
 
Регистрация: 29.01.2011
Адрес: Украина, Киев-Ялта
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Solomiichuk на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Опробовал Ваш код: все заработало. Обе координаты читаются, хотя и с большим разбросом. Дальше дело за написанием процедуры калибровки.
Для начала буду курить вот этот мануал :ТЫЦ
Solomiichuk вне форума  
Непрочитано 21.08.2011, 21:05  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Сообщение от Solomiichuk Посмотреть сообщение
Опробовал Ваш код: все заработало. Обе координаты читаются, хотя и с большим разбросом.
В каком смысле с большим разбросом?
У меня при такой расстановке задержек читается нормально только первая ось, вторая - всегда 256... Настройки SPI не меняли?
Скиньте мне на мыло ваш проект ещё раз...
DarkEN_ANGEL вне форума  
Непрочитано 21.08.2011, 21:33  
Solomiichuk
Временная регистрация
 
Регистрация: 29.01.2011
Адрес: Украина, Киев-Ялта
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Solomiichuk на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Цитата:
В каком смысле с большим разбросом?
Даже закономерность поймать не могу. Попробуйте запустить мой проект - все увидите. Сам проект ушел в мыло.

Цитата:
Если у вас 100ногий stm32, то лучше для управления дисплеем заюзать FSMC - он быстрее.
Мое устройство на основе контроллера STM32F107VCT6. У него нет FSMC.

Цитата:
Чем делали шрифты для LCD? =)
Шрифт 5х7 делал вручную, 8х16 стянул с сайта ST.
Solomiichuk вне форума  
Непрочитано 21.08.2011, 22:58  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Сообщение от Solomiichuk Посмотреть сообщение
Даже закономерность поймать не могу.
Закономерность, как мне кажется, в задержках.
Попробуйте поменять задержку в функции SPI_RD с одной микросекунды на 2 и посмотреть как его заколбасит что будет.

Кстати на изиэлектроникс человек посоветовал делать по 10 замеров обоих координат за раз, затем отбрасывать 2 максимальных и 2 минимальных значения, а из оставшихся шести подсчитывать среднее арифметическое.

Последний раз редактировалось DarkEN_ANGEL; 21.08.2011 в 23:03.
DarkEN_ANGEL вне форума  
Непрочитано 22.08.2011, 20:56  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Solomiichuk, ну как успехи? Не пробовали с задержками играться?

Кстати, вот кое как набросал сортировку координат, но проверить не имею возможности пока. Не могли бы Вы проверить?

Код:
void Sort (uint16_t *mas)
{
  unsigned char i,j;
  unsigned k;
  for(i=1; i‹10; i++) 
    for(j=0; j‹9; j++) 
      if(mas[i] › mas[j]) 
      {
        k=mas[i];
        mas[i]=mas[j];
        mas[j]=k;
      }
}

void ReadADS7846(uint16_t *X, uint16_t *Y)
{
  uint8_t a, b, i;
  uint16_t dataX[10], dataY[10], pressure;
  uint16_t kX, kY;
  
  // ïîëó÷åíèå äàâëåíèÿÿ íà ýêðàí
  cpin_m(TP_SPIPORT, TP_CS_MASK);
  DelayUS(5);
  SPI_WR(CMD_START | CMD_8BIT | CMD_DIFF | CMD_Z1_POS);
  //while (GetBUSY() != DISABLE)
  { }
  a = SPI_RD(0x00);
  SPI_WR(CMD_START | CMD_8BIT | CMD_DIFF | CMD_Z2_POS);
  //while (GetBUSY() != DISABLE)
  { }
  b = SPI_RD(0x00);
  spin_m(TP_SPIPORT, TP_CS_MASK);
  pressure = a + b;
  
  // åñëè ñèëà íàæàòèÿ äîñòàòî÷íà òî íà÷èíàåì èçìåðÿòü êîîðäèíàòû íàæàòèÿ
  if(pressure ›= MIN_PRESSURE)
  {
    for(i = 0; i != 10; i++)
    {
      cpin_m(TP_SPIPORT, TP_CS_MASK);
      // ÷òåíèå X
      SPI_WR(CMD_START | CMD_12BIT | CMD_DIFF | CMD_X_POS);
      //while (GetBUSY() != DISABLE)
      { }
      a = SPI_RD(0x00);
      //DelayUS(1);
      b = SPI_RD(0x00);
      dataX[i] = (((a‹‹4)|(b››4)) ›› 4);
      // ÷òåíèå Y
      DelayUS(1);
      SPI_WR(CMD_START | CMD_12BIT | CMD_DIFF | CMD_Y_POS);
      //while (GetBUSY() != DISABLE)
      { }
      a = SPI_RD(0x00);
      //DelayUS(1);
      b = SPI_RD(0x00);
      dataY[i] = (((a‹‹4)|(b››4)) ›› 4);
      spin_m(TP_SPIPORT, TP_CS_MASK);
    }
    // ñîðòèðîâêà
    Sort(dataX);
    Sort(dataY);

    for (i=2; i!=8; i++)
    {
      kX += dataX[i];
      kY += dataY[i];
    }
    kX /= 6;
    kY /= 6;
    *X = kX;
    *Y = kY;
  }
#ifdef debug
  char str[64];
  sprintf(str, "PRESSURE = %i    ", pressure);
  GUI_Text(10, 32, str, Yellow, Black);
  sprintf(str, "X = %i           ", kX);
  GUI_Text(10, 50, str, Yellow, Black);
  sprintf(str, "Y = %i           ", kY);
  GUI_Text(10, 66, str, Yellow, Black);
  //sprintf(str, "aY = %i, bY = %i      ", a, b);
  //GUI_Text(10, 82, str, Red, Black);
#endif
}

Последний раз редактировалось DarkEN_ANGEL; 22.08.2011 в 20:59.
DarkEN_ANGEL вне форума  
Непрочитано 23.08.2011, 18:19  
Solomiichuk
Временная регистрация
 
Регистрация: 29.01.2011
Адрес: Украина, Киев-Ялта
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Solomiichuk на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Попробовал Ваш код с сортировкой: тоже сшибка нервных процессов.
Заметил, что ось Y дает постоянно 2 одинаковых значения, где бы не тыкалось в экран, и использую ли я код с сортировкой, или без нее.
Ось Х бредит без закономерности...
Solomiichuk вне форума  
Непрочитано 26.08.2011, 20:21  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Ну что, изменений нет?
Я пока не занимался этим - работа... Завтра уже займусь.

Планирую попробовать сделать софтварный SPI, который работал бы на частоте где-то 10-20 кГц (в отличии от hardware SPI, 281 кГц минимум) - вот тогда по идее будет гуд...

Последний раз редактировалось DarkEN_ANGEL; 27.08.2011 в 12:37.
DarkEN_ANGEL вне форума  
Непрочитано 01.09.2011, 17:16  
Solomiichuk
Временная регистрация
 
Регистрация: 29.01.2011
Адрес: Украина, Киев-Ялта
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
Solomiichuk на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Я тоже был занят другими делами. Завтра -послезавтра планирую вернуться к этой теме.
Как успехи у Вас?
Solomiichuk вне форума  
Непрочитано 02.09.2011, 13:04  
DarkEN_ANGEL
Частый гость
 
Регистрация: 01.08.2011
Адрес: Украина, Киев
Сообщений: 24
Сказал спасибо: 4
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
DarkEN_ANGEL на пути к лучшему
По умолчанию Re: stm32 + xpt2046 (аналог ads7846)

Сообщение от Solomiichuk Посмотреть сообщение
Я тоже был занят другими делами. Завтра -послезавтра планирую вернуться к этой теме.
Как успехи у Вас?
У меня практически полная переделка прошивки устройства, плюс начал делать софтвэрный SPI для тача. Попробую рассчитать задержки так, чтобы DCLK дёргался с частотой где-то 15-20 кГц (при хардварном - 281 кГц минимум)
DarkEN_ANGEL вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучаем STM32 Cortex M3 EugVor ARM 6171 20.05.2025 20:16
smd аналог 580вв55а execute Информация по радиокомпонентам 11 07.08.2009 16:14
Есть ли более дешевый аналог MAX312? или аналог КР590КН5 phoenix_87 Информация по радиокомпонентам 0 11.03.2009 10:10


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


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