Светодиодный индикатор на базе ТМ1637

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе TM1637

Сообщение Starichok51 »

Vlad_RK, при последовательной передаче цифр нельзя применять команду 0x44 - фиксированного адреса. всё будет записываться в стартовый адрес.
нужно применять команду 0x40 - автоматический инкремент адреса.
я в самом начале передаю команду 0x88+плюс код яркости - управление дисплеем.
поэтому у меня есть определения:
.equ command_auto = 0x40
.equ start_address = 0xc0
.equ control_display= 0x88 ; плюс код яркости

после передачи стартового адреса команда стоп дается только один раз - после передачи всех символов.
а ты передаешь стоп сразу же после первого символа, поэтому следующий символ просто не воспринимается.

вот мой код вывода 4-х символов:
ldi ZL, digits_for_out
rcall start
ldi R26, command_auto
rcall write_byte
rcall stop
rcall start
ldi R26, start_address
rcall write_byte
ld R26, Z+
rcall write_byte
ld R26, Z+
rcall write_byte
ld R26, Z+
rcall write_byte
ld R26, Z+
rcall write_byte
rcall stop

digits_for_out - у меня адрес в ОЗУ (буфер), откуда брать символы.
но ты для проверки можешь сам каждый раз загружать в R26 нужный проверочный код символа.

ещё.
тут в теме писали, что в модули на входы TM1637 ставят конденсаторы большой емкости (до 10 нФ), вместо 100 пФ, как указано в даташите. поэтому модули оказываются очень медленные. я на своих модулях эти конденсаторы вообще убрал с платы.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе TM1637

Сообщение Vlad_RK »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4486251#p4486251"]Vlad_RK, при последовательной передаче цифр нельзя применять команду 0x44 - фиксированного адреса. всё будет записываться в стартовый адрес.[/uquote]А если мне надо поменять только одну цифру в третьем разряде? Или точку куда-нибудь поставить?
я в самом начале передаю команду 0x88+плюс код яркости - управление дисплеем.
Где это в коде?
Можно вас попросить написать простейший код для вывода конкретной цифры в конкретный разряд? Без использования буферов в ОЗУ и пр.
Про задержки я читал, про конденсаторы тоже, но реальных модулей у меня пока нет, только заказал, потому проверить могу только в Протеусе. Я выкладывал все это в предыдущем посте, если вам не сложно, можете написать код и проверить его в Протеусе?
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

если надо поменять только одну цифру в третьем разряде, тогда можно применить команду фиксированного адреса 0x44, а адрес третьего разряда 0xC2.

контроль дисплея я подаю один раз в самом начале программы:
rcall start
ldi R26, control_display
ori R26, 2 ; 4/16
rcall write_byte
rcall stop
к управляющему байту добавляю код яркости 2 == 4/16 яркости.

зачем мне проверять свой код в Протеусе, если он уже работает в "железе"?
сам создай проект в Протеусе с исходником, и набей туда свой код. потом проверяй.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4486395#p4486395"]зачем мне проверять свой код в Протеусе...[/uquote]
Потому что у меня в Протеусе он не работает.
Мне нужен пример рабочего кода, дальше я сам уже для своих задач все сделаю.
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Светодиодный индикатор на базе ТМ1637

Сообщение OKF »

Ошибся(.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

Vlad_RK, у меня Протеус 8.6 SP2, модель ТМ1637 в нем есть, но эта модель в нем не работает.
я не знаю, какая версия у тебя Протеуса, могу дать сделанный проект. может, в твоем Протеусе заработает.
там еще в исходнике есть закомментированный блок чтения клавиатуры.
реализована для теста "бегущая строка"цифр - от 0 до F и плюс между F и 0 идет 4 "минуса".

Добавлено after 55 minutes 14 seconds:
я там в проекте забыл нарисовать резисторы подтяжки на входах. нарисовал, но модель ТМ1637 все равно не работает.
наверно, нужно установить другую версию Протеуса.
Вложения
TM1637 sourse 4x7s.zip
(20.32 КБ) 164 скачивания
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

Вот теперь работает.
У меня Протеус 8.15 SP1. Я отключил TM1637 от батарейки и подключил элемент POWER (иначе возникает ошибка Internal Exception: access violation in module 'TM1637.DLL' [00000965]). Ну и резисторы добавил.

Изображение
Аватара пользователя
Viper_Snake
Электрический кот
Сообщения: 1046
Зарегистрирован: Вс мар 01, 2009 19:47:16
Откуда: Ростов-на-Дону

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Viper_Snake »

контроль дисплея я подаю один раз в самом начале программы:
Вот это на мой взгляд не совсем правильно: Если случайно прилетает помеха, иногда регистры ТМки имеют свойство сбрасываться, особенно в случае присутствия рядом источника ЭМ помех высокого напряжения. У меня такое было - коронный разрядник недалеко от платы с ТМкой иногда вызывал сбой в ее работе и она тушила дисплей, поэтому я при каждом обновлении данных обновляю и содержимое управляющих регистров. Само обновление данных в регистрах ТМки происходит не по таймингу, а по событию, когда в выходном буфере есть новые данные на вывод.
Не важно чем все начнется. Важно чем кончится!
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

Vlad_RK писал(а):Я отключил TM1637 от батарейки и подключил элемент POWER (иначе возникает ошибка Internal Exception: access violation in module 'TM1637.DLL' [00000965]).
у меня то же самое показывало. я решил, что модель не работает. а про элемент POWER я не знал.

Добавлено after 9 hours 52 minutes 45 seconds:
что-то я не могу найти, как подключить элемент POWER.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

Левая панель - Terminals Mode.

Изображение

В архиве проект, который у меня работает.
Вложения
TM1637 sourse 4x7s.rar
(21.11 КБ) 161 скачивание
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

спасибо за подсказку.
поставил на питание микры этот терминал, и у меня начало работать.
можно твой проект не скачивать.

как я уже ранее сказал, на время передачи байта у меня оба выхода (клок и данные) активные.
можно попробовать сделать также, как это сделано в интерфейсе I2C - для передачи "1" порт переключается на вход, а подтяжка обеспечивает единичный уровень.
а для передачи "0" порт включается на выход и устанавливает ноль.
но в "железе" меня нужно было "убить" влияние входных конденсаторов, а это можно сделать только активными выходами.
а без конденсаторов на входах подтяжка будет быстро устанавливать "1", и можно для передачи "1" не использовать активный выход.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

Как по мне, логичнее и понятнее для передачи "1" не переключать порт на вход, а выдавать на него "1".
А вот насчет ACK - нужно ли вообще обращать на него внимание? Дожидаться его и, если он не пришел, отправлять данные заново?
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

обращать внимание на ответ нужно.
сейчас посмотрел свой код - по данным у меня уже сделан не активный выход при передаче "1".
сначала я его сделал активным, но если последний бит был "1", то ответ своим нулем делает кз выходу данных, а это очень плохо. пришлось исправлять программу.
как только кончается восьмой клок, тут же начинается ответ (судя по диаграмме в даташите), и нужно сразу освободить линию данных.
и если выход активный, то ответ тут же сделает кз выходу.
а у меня для передачи "1"порт переключается на вход, а "1" создается подтяжкой.
а если восьмой бит "0", то ответ своим нулем ничего не испортит.
для клока можно сделать, и у меня сделан, выход активным.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

Буду разбираться, спасибо.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

я в "железе" в натуре осциллом видел это кз.
когда последний бит "1", там получалась ступенька примерно в половину питания. пришлось срочно отказываться от активной "1" на выходе данных.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

Некоторое время назад столкнулся с той же проблемой. Ток у микросхемы в АСК не большой (4 mA?), но потребление есть. А сколько общих кодов в инeте с активным сигналом HIGH в DATA... Даже симулятор дает уровень половинного :). Проблема решена с помощью I2c (и rev_data) или просто 1 в "открытого стока".

Изображение
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

достаточно одного кода стартового адреса 0xC0 с восьмым последним битом, чтобы получить кз.
а так только код с десятичной точкой для ТМ1637 имеет старший бит "1".
аппаратный модуль I2C у меня не получилось применить - не заработало.
даже в даташите на ТМ1637 сказано, что метод связи не полностью соответствует протоколу шины I2C, поскольку в нем отсутствует адрес подчиненного устройства.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

Да, по I2c отправляю без адреса. И с реверсными данными. На AVR и на PIC работает (C).
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе TM1637

Сообщение Vlad_RK »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4486251#p4486251"]Vlad_RK, при последовательной передаче цифр нельзя применять команду 0x44 - фиксированного адреса. всё будет записываться в стартовый адрес.[/uquote]
А если каждый раз указывать адрес разряда, потом цифру, которую туда надо вывести? Каждый раз перезаписывать все цифры как-то не очень удобно.
Можно, конечно, использовать буфер, менять в нем, что там изменилось, и потом выводить все цифры на дисплей, но мне так не нравится.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

да, при использовании команды фиксированного адреса нужно каждый раз указывать адрес.
то есть, ты можешь переписывать только один разряд, который тебе нужен.
но и при автоматическом увеличении адреса тоже можно задать стартовый адрес и передать только один байт для этого разряда.

Добавлено after 2 minutes 48 seconds:
Vlad_RK, я сделал версию проекта для работы с кнопками.
добавил в схему кнопки и снял комментарий с "кнопочного" блока текста и поставил комментарий на блок текста с бегущей строкой.
Вложения
TM1637 sourse 4x7s работа клавиатуры.zip
(22.67 КБ) 150 скачиваний
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «Периферия»