Официальный сайт компании Arduino по адресу arduino.cc
Контроллер LED и Клавиатуры FD650В - Как им управлять?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 08/07/2015 - 11:06
Есть вот такой девайс :
Внутри контроллер FD650B. DATASHEET здесь: http://www.fdhisi.com/down/upload/20141212/1418349595.rar
Инфа на китайском, но там есть пример кода на си. Подскажите как сделать скетч для работы с ним?
Так и не подключил.
Вопросы такие: Что за интерфейс в ней использован? Судя по описанию TWI?
Сканер I2C находит 128 устройств!
Пример кода у китайцев:
tretyakov, шина обычная последовательная, SPI с односторонней передачей. В примере не хватает главного - самой функции FD650_Write().
tretyakov, шина обычная последовательная, SPI с односторонней передачей. В примере не хватает главного - самой функции FD650_Write().
Там шина с двухсторонней передачей по линии DAT. Так как можно и клавиатуру подключить к микрухе.
Не понятно слать 8 бит и 8 бит или 16 бит сразу. Описания регистров нет только пример кода.
Все, разобрался!! Это аналог TM1650! Библиотека здесь: https://github.com/arkhipenko/TM1650
Впервые пишу на этом форуме , если что не так, поправьте.
Мне случайно перепали пара десятков битых спутниковых ресиверов. Индикатор ваполнен ра TM1650. Просто выбросить рука не поднялась. Тем более, что китайские приставки начали сыпаться и количество микросхем растет. Начал разбираться. За месяц немного разобрался с Ардуино (последний раз прогаммировал лет 5 назад на VB и лет 20 назад на ASMe). Некоторые навыки еще остались, с железом проще, с паяльником дружу более 50 лет. Сначала мспользовал, найденые в сети библиотеки, вдохновили не очень. Решил работать напрямую с портами микросхемы. Т.к. был необходим генератор начал с него. За основу был взят http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-arduino?page=3 изменен только способ ввода частоты. ТМ1650 кроме индикации позволяет опрашивать клавиатуру 7х4. Поэтому требуемое значение частоты вводится с цифровой клавиатуры, отображается на дисплее и передается генератору. В принципе это первый почти рабочий скетч, позтому сильно тапками не кидайте. Осталось прикрутить еще один дисплей т.к. 4 разряда маловато, хотя работать уже можно, несмотря на то что старшие разряды уползают за пределы индикатора. Скетч работает на Nano v3.0 (CH340G). Раэобраться с работой микросхемы по тексту скетча, я думаю не очень сложно. Корявый перевод даташита сделаный мной - здесь https://yadi.sk/i/h-GKf9hMyABLL
Это я заминусовал ваш пост.
За _больше_года_пребывания_на_форуме многое повидал, но всегда (ну почти) воздерживался от неодобрительных комментариев. Тут ведь дело в чём - вы и в самом деле считаете, что по "Корявый перевод даташита" в чём-то разобрались, а "найденые в сети библиотеки, вдохновили не очень" (с чем соглашусь). Но хотя бы посмотрели и их в попытках разобраться.
Белая полярная лисичка.
Дай Б-г вам еще не менее 50 лет дружбы с паяльником (о чём вы трогательно так сообщаете, считая это чем-то значимым, а не фактом вашей биографии), всего лучшего и творческих успехов.
"Раэобраться с работой микросхемы по тексту скетча, я думаю не очень сложно". Очень сложно с т.з. здравомыслия но, впрочем, не надо.
А я поставил плюс. Разобраться с чипом по его скетчу -не просто , а очень просто. Всё откомментировано и понятно.
Я поначалу не разобрался в _назначении_ приведенного кода. Перепутал цель - управление генератором, со способом управления микросхемой. Лажанулся.
Приношу автору поста свои сожаления за некорректные формулировки и свои торопливые ошибочные предположения.
Благодарю, использовал Ваш код как основу. Завести FD650B (аналог TM1650) в плане получения информации с клавиатуры удалось, закомментив Wire.BeginTransmission(0x25); и оставив только Wire.requestFrom(0x27, 1); [Адрес заработал только 0x27]. Единственный момент - при опросе клавиатуры выдаёт последнюю нажатую клавишу, даже если я её уже считал. Обнуляется только отключением от питания ардуины, повторение инициализационной процедуры не помогают. Код такой:
Wire.requestFrom(0x27, 1);
if (Wire.available())scan_code = Wire.read();
Serial.println(scan_code);
delay(500);
Wire.endTransmission();
При этом выводится постоянно скан-код последней нажатой клавиши, то есть если мы нажмаем одну - идёт бесконечно её скан-код, нажимвем за ней другую, будет бесконечно идти скан-код другой клавиши. Задача - чтобы как только получен скан-код, буфер очищался до следующей нажатой клавиши. Иначе невозможно определить, нажата клавишат раз или нажимается раз за разом или постоянно зажата.
Удалось накопать немного:
https://github.com/jinzhifeng/SourceCode_old/blob/master/fd650.c
https://github.com/jinzhifeng/SourceCode_old/blob/master/fd650.h
в т.ч. функцию FD650_Write, но нет заголовочных файлов:
https://www.wendangwang.com/doc/94470484f96814787f300e07
При этом выводится постоянно скан-код последней нажатой клавиши, то есть если мы нажмаем одну - идёт бесконечно её скан-код, нажимвем за ней другую, будет бесконечно идти скан-код другой клавиши. Задача - чтобы как только получен скан-код, буфер очищался до следующей нажатой клавиши. Иначе невозможно определить, нажата клавишат раз или нажимается раз за разом или постоянно зажата.
Если клавиша нажата, выдается ее скан код, если отпустили, то ее скан код отпускания. Он изменится только при следующем нажатии на клавиши. Скан коды нажатия и отпускания различны, поэтому можно отслеживать нажата-ли клавиша, или нажималась между опросами. Обратите внимание на строку 69. Там проверяется, что пришло - код нажатия или отпускания. Код минималистичен и не использует никаких библиотек для микросхемы. Теоретически должны работать все адреса, эти микросхемы идентичны. А вывод на дисплей тоже не совпадает?
И еще непонятно как Вы обращаетесь к микросхеме, закомментировав начало сессии обмена? Выложите полный код. И еще, в приведенном вами кусочке кода, нет смысла проверять наличие данных, оно всегда у этой микросхемы есть. Или код нажатой в данный момент клавиши, или код отпускания последней нажатой клавиши.
Помогите куда подключать эту лабуду?
На примере ардуино уно
Помогите куда подключать эту лабуду?
На примере ардуино уно
Это Вы о чем?
ПодскажИте, плиз: в даташите одни адреса прописаны, а в этом скетче - другие?
ПодскажИте, плиз: в даташите одни адреса прописаны, а в этом скетче - другие?
Нет, здесь больше похоже на сдвиг на один бит...
ПодскажИте, плиз: в даташите одни адреса прописаны, а в этом скетче - другие?
В ТМ1650 второй байт не используется, поэтому ей безразлично что Вы пошлете. Во всяком случае в моем даташите https://yadi.sk/i/h-GKf9hMyABLL, там стояло Х т.е. безразлично. Возможно я не совсем разобрался и для чего то этот байт нужен.
Про какой ВТОРОЙ байт Вы говорите? В даташите про него не нашёл. Про адреса - вот:
Но они здесь однобайтные.
Про какой ВТОРОЙ байт Вы говорите? В даташите про него не нашёл. Про адреса - вот:
Но они здесь однобайтные.
Извиняюсь, это я с другой МС перепутал. Там засылаются два байта. Один безразлично какой. Код из #5, полностью рабочий. Хотя я его писал сам, как и перевод даташита, но уже не помню откуда брал эти адреса. Давно было, возможно где-то еще информацию находил. Или сканер выдал эти адреса.
При чем здесь китайцы, если это предусмотрено стандартом i2c?