реклама на сайте
подробности

 
 
> I2C, HAL, запись и чтение GT811
truppik
сообщение Jan 23 2017, 20:53
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 24-07-14
Из: NA
Пользователь №: 82 352



Привет!
Столкнулся с такой вот досадной проблемой, предполагаю, что она решается довольно легко, просто я не вижу или не так понимаю чего то "в-лоб"...
Есть контроллер тач - GT811. Использую STM32F1 и осваиваю HAL, так вот простые датчики на i2c, такие как MPU-6050 или HMC5883L запустились с пол пинка и работают стабильно. В них адреса регистров 8-битные и данные тоже - потому вопросов не возникло что и как делать. К примеру запись на HMC5883L выглядит так:
Код:
Код
void HMC5883L_I2C_ByteWrite(uint8_t slaveAddr, uint8_t *pBuffer, uint8_t WriteAddr)
{
   HAL_StatusTypeDef status;
   status = HAL_I2C_Mem_Write(&hi2c2, slaveAddr << 1, WriteAddr, I2C_MEMADD_SIZE_8BIT, pBuffer, 1, 1000);
}

А чтение горсти регистров на нем же выглядит так (If можно выкинуть, в нем кода никакого не вставлял):
Код:
Код
void HMC5883L_I2C_BufferRead(uint8_t slaveAddr, uint8_t *pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead)
{
   HAL_I2C_Master_Transmit(&hi2c2, slaveAddr << 1, &ReadAddr, 1, HMC5883L_I2C_TIMEOUT);
   if (HAL_I2C_Master_Receive(&hi2c2, slaveAddr << 1, pBuffer, NumByteToRead, HMC5883L_I2C_TIMEOUT) == HAL_OK)
   {
   }
}


А вот с GT811 трудности..
Нашел пример для контроллера GD32F103C8T6 - https://github.com/pysco68/waveshare-hid/bl...ter/src/gt811.c но там понятное дело HAL не используется.
Попробовал сделать вот так - запись:
Код:
Код
void GT811_RegWrite(uint16_t reg, uint8_t size, uint8_t *data)
{
   HAL_StatusTypeDef status;
   status = HAL_I2C_Mem_Write(&hi2c2, GT811_ADDR << 1, reg, I2C_MEMADD_SIZE_16BIT, data, size, GT811_I2C_TIMEOUT);
}

и чтение:
Код:
Код
void GT811_RegRead(uint16_t reg, uint8_t size, uint8_t *data)
{
     HAL_StatusTypeDef status;
     status = HAL_I2C_Mem_Read(&hi2c2, GT811_ADDR << 1, reg, I2C_MEMADD_SIZE_16BIT, data, size, GT811_I2C_TIMEOUT);  
}

но что то меня терзают смутные сомнения что это правильно работает... оно то нули считывает, то вроде бы что то (но никак не повторяющееся, для одного и того же касания пальца)...
+ смущает несколько моментов:
* что у GT811 вроде как есть адреса 0xBA \ 0xBВ - разные для записи\чтения.
* если я проверяю кто на линии - то получаю ответ с адреса 0x5d, а в коде примера адрес - GT811_ADDRESS 0xBA ...
* контроллер GT811 дергает линию INT с частотой 0,5-0,8Гц постоянно, вне зависимости от того, есть ли касание или нет - не понятное поведение, такое чувство, что он просто не инициализирован (т.к. не работает запись).

Может у кого есть мысли что не так или может даже кто работал с таким тачем?


Зы. нашел еще исходники с какой то отладочной платы на stm32, но тут вообще треш - софтварный i2c и не очень хорошо написан сам драйвер GT811. Все комментарии на Китайском так же особо не помогают...
Прикрепленный файл  CTOUCH.rar ( 5.36 килобайт ) Кол-во скачиваний: 43



--------------------
never know best.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016