TM 1638
- Войдите на сайт для отправки комментариев
Вс, 22/04/2012 - 12:38
Доброго времени суток. Помогите пожалуйста набросать простейший Hello World с использованием Arduino Nano и сегментного LCD(контроллер TM1638). Вот ссылка на библиотеку http://code.google.com/p/tm1638-library/
Ни один пример из библиотеки(ссылка выше) не работает. Последовательность действий для примера ниже следующая:
1. Соединяю GND ардуины и GND модуля.
2. Соединяю выход +5v ардуины и VCC пин модуля
3. Соединяю 2 digital pin с CLK пином модуля
4. Соединяю 3 digital pin с DIO пином модуля.
5. Цепляю ардуину к компу заливаю скетч.
6. ?????
7. PROFIT'a не наблюдаю=(
Первое что бросается в глаза - нессотвествие между "сегментного LCD(контроллер TM1638)" и "TM1640 module(3, 2);"
Может они и совместимы, но...
Тем более что в http://code.google.com/p/tm1638-library/wiki/Reference
видим
Basic usage is (after including "TM1638.h"):
TM1638 module(8, 9, 7);
Мало того, что "другой класс" используется, так еще и три пина для конфигурации.
Вообщем похоже, как миимум, вам нужно еще strobePin модуля подключить.
Возможно, что-бы съекономить ногу, заработает и если его просто, подтянуть к питанию. Но, вначале, все-таки поробуйте подключить его к арудуине и рулить им библиотекой (как задуманно автором), а уж потом "выкаблучиватся".
Если я правильно догадался (но не уверен), то назначение этого пина такое: на линии может висеть несколько модулей. И вот тому модулю который должны сейчас слушать команды - он устанавливается в HIGH, остальным в LOW (и они игнорируют команды). Если модуль "один", то можно попробовать навсегда притянуть его к питанию и съекономить ногу ардуины.
у самого такой дисплейчик.уже удачно показывал на нем счетчик и посылал строчку через blutooth с андроида.
во первых char text[17] я бы обьявил как глобальную переменную.
во вторых в функции module.setDisplayToString(text); тоже обязателен параметр с какого места начинать отоброжать срочку.
void setDisplayToString(String string, const byte dots, const byte pos, const byte font[]);
проверил в reference,обязателен его значение (0-7) или (1-8)
Всем спасибо. Разобрался с библиотекой. Следующая задача наваять часики с использованием все того же дисплея. Нашел пример на форуме с использованием библотеки LiquidCrystal. Вот тут. Возможно ли заточить этот пример под TM1638?
Да кстати кажется наткнулся на ваше видео на ютубе. Здорово!
Да кстати кажется наткнулся на ваше видео на ютубе. Здорово!
та нет,я никакие видо на ютуб не выкладывал.это скорее всего автор библиотеки выложил.
Всем спасибо. Разобрался с библиотекой. Следующая задача наваять часики с использованием все того же дисплея. Нашел пример на форуме с использованием библотеки LiquidCrystal. Вот тут. Возможно ли заточить этот пример под TM1638?
вот код :самых примитивных часов,сам писал,все работало :
как видно из кода,для продвижения часов используеться delay,а еще потому что этот код можно написать минимум раза в 2 короче и эффективней,поэтому часы просты и примитивны
спасибо, уже набыдлокодил нечто похожее)) тоже работает но жутко отстает) попробую ваш пример
А не подскажите как можно их настроить с помощь getButtons? А то не пойму куда проверку засунуть, выношу в отдельную функцию типа:
не работает, ставлю этот цикл в loop тоже не работает. Подскажите куда копать?
Чтонибудь вроде
------------------------------------
void settime () {
uint_8t c;
//тут вывести чтонибудь на сегменты нестандартное чтобы было ясно что ты устанавливаешь время
while (c!=0b10000000) { /типа кнопки ESC
c=module.getButtons();
switch (c) {
case 0b01000000:
time[1]++;
break;
case 0b02000000:
time[2]++;
break;
case: // ну и тд
}
}
}
loop {
.......
if (module.getButtons()==0b00000001) {
settime();
}
.........
}
------------------------------------------
тут с листа написалнаверное с ошибками, смысл что надо прервать выполнение кнопкой выставить часы минуты секунды
выйти и продолжить ваш цикл
а вообще если не для баловства а точные часы, то нужно на прерывание от таймера повесить короткую функцию которая будет считать тики
а уже в loop обрабатывать эти тики не спеша,
ну а еще проще ds1307 с кварцем
ds1307 у нас как то не завалялось) А про прерываени можно попоробнее?
http://arduino.ru/Tutorial/Arduino_Interrupts
ну собственно millis() уже берет тики с 0-го таймера ардуины
часы будут работать 50 дней
дальше надо будет наращивать какуюто переменную
при выключении питания или ресет, все умирает
часами я бы это не назвал
>часы будут работать 50 дней
49-ть дней с копейкой. И не шибко точно. Без внешней микрухи часовой - не обойтись. Да еще желательно термостабилизированной.
В общем как то странно получается. Вот пример:
Если закоментировать в loop строки которые отвечают за отсчет времени, то проверка этого условия if (module.getButtons()==0b00000001) выполняется. Если оставляем как есть то проверки нет. То есть жмем кнопку и ничего не происходит. Не подскажите в чем может быть проблема? Прошу простить за назойливость и уродливый код)
Эти строки :?
Могу только предположить , что во первых
кнопку или что там, надо держать. поскольку удет непрерывный опрос
во - вторых при проваливании в функцию установки времени
надо это както трассировать на дисплее или в Serial.print;
возможно по значению нажатой кнопки
module.getButtons()==0b00000001 , она вылетает из функции
Хотя скорее , если это весь текст программы при получении module.getButtons()==0b00000001 из loop
управление идет в функцию и крутится там тихо с этим значением, и чтобы выпасть оттуда надо получить (0b10000000)
либо значениями из case-ов (которые не обеспечивают выход из цикла , но хоть меняют переменные)
В общем нет никакой трассировки выполнения программы
Наставте там Serial.print разных, и увидите где крутица программа .
Блин 14 числа уже защита а я даже элементарного сделать не могу.. ошибся я в выборе темы...
Ну до 14-надцатого еще далеко :) Настоящий студенты все делают в последнюю ночь :)
Я бы все делал по другому:
1. Отказался от функции delay()
2. Завел отдельные переменные h,m,s
3. Сделал функцию которая отображает их значение на экран
4. Сделал функцию которая меняет их значение с помощью кнопок модуля
5. В loop смотрет бы на функцию millis(), и раз в секунду вызывал-бы функцию из пункта 3
6. Проапдейтил-бы функцию из пункта 3, что-бы она выводила h+mh,m+mm,s+ms, где mh, mm, ms - часы, минуты и секунды - пересчитаныне из текущего значения millis()
-----------
Ну или, если совсем руки опустились, и хочется что-бы "кто-то сделал за меня". Заявляем, тут, о своей готовности обсудить оплату и предоставляем какие-то контакты. Может и найдутся желающие на подработку ;)
Подскажите как организовать вход/выход из функции по нажатию кнопки?
Например есть у меня функция set().
Пишем в loop то нибудь типа:
Со входом более менее ясно.
Соответственно в set() что то подобное.
А как быть с выходом?
А что с выходом? Как закончится фунция, отработает все что вы в ней написали - так и выйдет. Ну или, если где-то посреди тела функции хотите выйти - return.
Накорябал какую то жесть))
Прошу сильно не ругаться)
Как бы теперь сюда еще и датчик температуры прикрутить))
Ни один пример из библиотеки(ссылка выше) не работает. Последовательность действий для примера ниже
3. Соединяю 2 digital pin с CLK пином модуля
4. Соединяю 3 digital pin с DIO пином модуля.
я позволил себе наглость немного допилить скетч tatarin'а
теперь нажатия кнопки обрабатываются))
А вот таймер в обратную сторону. Библиотеку брал у гуглакода.
Всем привет.
У меня такой вопрос: можно ли, используя микросхему TM1638, управлять светодиодной матрицей для того чтобы выводить бегущую строку?
Подскажите как!
Ребята подскажите пожалуйста собираю термометр на TM1638 LED&KEY температуру получилось вывести на индикаторы а точку не могу вытащить из массива работаю на ардуино мега 2560.
Не судите строга новичёк
А можно и мне вопрос есть у меня куча дисплеев на похожей микросхема сделанные косоглазыми братьями так вот они раскидали ножки по-другому не по стандартной схеме включения в датащите
так вот сам вопрос как включит данную микросхему без библиотек
По графику её работы перед передачей данных дергается stb идёт передача по dio и тактируется по clk мог перепутать буквы в у последнего.
Вот и сам вопрос : Как подати сигнал передовая данные так тировать ? Как реализовать это без lib
Микросхема tl1628
откройте либу - и посмотрите код - она фактически и выполняет все нужные вам действия - просто выберите что вам надо без остальной кучи дополнительных функций )
откройте либу - и посмотрите код - она фактически и выполняет все нужные вам действия - просто выберите что вам надо без остальной кучи дополнительных функций )
Ответ хорош об этом думал но не понимаю как работает библиотека :-( буду благодарен если кто-нибудь поможет понять ?
библиотека - это просто часть кода, которая вынесена в отдельный файл
по сути - это набор функций
вам нужна функция отправки на дисплей - там будет какраз отправка тактирования и данных, всего строк 5-7 кода
Посмотрите, как я это делаю. Микросхема на самом деле такая же - программа подойдёт.
Поздновато конечно для ответа скорее всего но.. В общем попался мне модуль индикации из DVD плеера дешевого, он был выполнен на микросхеме CS1694 и светодиодном индикаторе. Кое как найдя даташит на нее (разумеется он на китайском), понял что микруха по функционалу практически та же ТМ1638, с некоторыми отличаями в количестве разрядов и кнопок. Пробовал запустить с библиотекой для ТМ1638, долго колдовал и в итоге получил от нее признаки жизни. В общем оказалось что к ней был подключен индикатор не по даташиту. Разряды на нем не по порядку распологаются и вместо индикатора с ОК, как указано в даташите, к ней был подключен индикатор с ОА, сегменты к выходам разрядов, а разряды к выходам сегментов. Собрал 6-ти разрядный индикатор из завалявшихся АЛС324А на макетке и подключил в соответствии с даташитом. В плане индикации прекрасно работает с библиотекой от ТМ1638, просто нужно учитывать что у ТМ1638 на два разряда больше и все.