Vlad_RK, при последовательной передаче цифр нельзя применять команду 0x44 - фиксированного адреса. всё будет записываться в стартовый адрес. нужно применять команду 0x40 - автоматический инкремент адреса. я в самом начале передаю команду 0x88+плюс код яркости - управление дисплеем. поэтому у меня есть определения: .equ command_auto = 0x40 .equ start_address = 0xc0 .equ control_display= 0x88 ; плюс код яркости
после передачи стартового адреса команда стоп дается только один раз - после передачи всех символов. а ты передаешь стоп сразу же после первого символа, поэтому следующий символ просто не воспринимается.
digits_for_out - у меня адрес в ОЗУ (буфер), откуда брать символы. но ты для проверки можешь сам каждый раз загружать в R26 нужный проверочный код символа.
ещё. тут в теме писали, что в модули на входы TM1637 ставят конденсаторы большой емкости (до 10 нФ), вместо 100 пФ, как указано в даташите. поэтому модули оказываются очень медленные. я на своих модулях эти конденсаторы вообще убрал с платы.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK, при последовательной передаче цифр нельзя применять команду 0x44 - фиксированного адреса. всё будет записываться в стартовый адрес.
А если мне надо поменять только одну цифру в третьем разряде? Или точку куда-нибудь поставить?
Цитата:
я в самом начале передаю команду 0x88+плюс код яркости - управление дисплеем.
Где это в коде? Можно вас попросить написать простейший код для вывода конкретной цифры в конкретный разряд? Без использования буферов в ОЗУ и пр. Про задержки я читал, про конденсаторы тоже, но реальных модулей у меня пока нет, только заказал, потому проверить могу только в Протеусе. Я выкладывал все это в предыдущем посте, если вам не сложно, можете написать код и проверить его в Протеусе?
если надо поменять только одну цифру в третьем разряде, тогда можно применить команду фиксированного адреса 0x44, а адрес третьего разряда 0xC2.
контроль дисплея я подаю один раз в самом начале программы: rcall start ldi R26, control_display ori R26, 2 ; 4/16 rcall write_byte rcall stop к управляющему байту добавляю код яркости 2 == 4/16 яркости.
зачем мне проверять свой код в Протеусе, если он уже работает в "железе"? сам создай проект в Протеусе с исходником, и набей туда свой код. потом проверяй.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK, у меня Протеус 8.6 SP2, модель ТМ1637 в нем есть, но эта модель в нем не работает. я не знаю, какая версия у тебя Протеуса, могу дать сделанный проект. может, в твоем Протеусе заработает. там еще в исходнике есть закомментированный блок чтения клавиатуры. реализована для теста "бегущая строка"цифр - от 0 до F и плюс между F и 0 идет 4 "минуса".
Добавлено after 55 minutes 14 seconds: я там в проекте забыл нарисовать резисторы подтяжки на входах. нарисовал, но модель ТМ1637 все равно не работает. наверно, нужно установить другую версию Протеуса.
Вот теперь работает. У меня Протеус 8.15 SP1. Я отключил TM1637 от батарейки и подключил элемент POWER (иначе возникает ошибка Internal Exception: access violation in module 'TM1637.DLL' [00000965]). Ну и резисторы добавил.
контроль дисплея я подаю один раз в самом начале программы:
Вот это на мой взгляд не совсем правильно: Если случайно прилетает помеха, иногда регистры ТМки имеют свойство сбрасываться, особенно в случае присутствия рядом источника ЭМ помех высокого напряжения. У меня такое было - коронный разрядник недалеко от платы с ТМкой иногда вызывал сбой в ее работе и она тушила дисплей, поэтому я при каждом обновлении данных обновляю и содержимое управляющих регистров. Само обновление данных в регистрах ТМки происходит не по таймингу, а по событию, когда в выходном буфере есть новые данные на вывод.
_________________ Не важно чем все начнется. Важно чем кончится!
Я отключил TM1637 от батарейки и подключил элемент POWER (иначе возникает ошибка Internal Exception: access violation in module 'TM1637.DLL' [00000965]).
у меня то же самое показывало. я решил, что модель не работает. а про элемент POWER я не знал.
Добавлено after 9 hours 52 minutes 45 seconds: что-то я не могу найти, как подключить элемент POWER.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
спасибо за подсказку. поставил на питание микры этот терминал, и у меня начало работать. можно твой проект не скачивать.
как я уже ранее сказал, на время передачи байта у меня оба выхода (клок и данные) активные. можно попробовать сделать также, как это сделано в интерфейсе I2C - для передачи "1" порт переключается на вход, а подтяжка обеспечивает единичный уровень. а для передачи "0" порт включается на выход и устанавливает ноль. но в "железе" меня нужно было "убить" влияние входных конденсаторов, а это можно сделать только активными выходами. а без конденсаторов на входах подтяжка будет быстро устанавливать "1", и можно для передачи "1" не использовать активный выход.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Как по мне, логичнее и понятнее для передачи "1" не переключать порт на вход, а выдавать на него "1". А вот насчет ACK - нужно ли вообще обращать на него внимание? Дожидаться его и, если он не пришел, отправлять данные заново?
обращать внимание на ответ нужно. сейчас посмотрел свой код - по данным у меня уже сделан не активный выход при передаче "1". сначала я его сделал активным, но если последний бит был "1", то ответ своим нулем делает кз выходу данных, а это очень плохо. пришлось исправлять программу. как только кончается восьмой клок, тут же начинается ответ (судя по диаграмме в даташите), и нужно сразу освободить линию данных. и если выход активный, то ответ тут же сделает кз выходу. а у меня для передачи "1"порт переключается на вход, а "1" создается подтяжкой. а если восьмой бит "0", то ответ своим нулем ничего не испортит. для клока можно сделать, и у меня сделан, выход активным.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
я в "железе" в натуре осциллом видел это кз. когда последний бит "1", там получалась ступенька примерно в половину питания. пришлось срочно отказываться от активной "1" на выходе данных.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Некоторое время назад столкнулся с той же проблемой. Ток у микросхемы в АСК не большой (4 mA?), но потребление есть. А сколько общих кодов в инeте с активным сигналом HIGH в DATA... Даже симулятор дает уровень половинного . Проблема решена с помощью I2c (и rev_data) или просто 1 в "открытого стока".
достаточно одного кода стартового адреса 0xC0 с восьмым последним битом, чтобы получить кз. а так только код с десятичной точкой для ТМ1637 имеет старший бит "1". аппаратный модуль I2C у меня не получилось применить - не заработало. даже в даташите на ТМ1637 сказано, что метод связи не полностью соответствует протоколу шины I2C, поскольку в нем отсутствует адрес подчиненного устройства.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK, при последовательной передаче цифр нельзя применять команду 0x44 - фиксированного адреса. всё будет записываться в стартовый адрес.
А если каждый раз указывать адрес разряда, потом цифру, которую туда надо вывести? Каждый раз перезаписывать все цифры как-то не очень удобно. Можно, конечно, использовать буфер, менять в нем, что там изменилось, и потом выводить все цифры на дисплей, но мне так не нравится.
да, при использовании команды фиксированного адреса нужно каждый раз указывать адрес. то есть, ты можешь переписывать только один разряд, который тебе нужен. но и при автоматическом увеличении адреса тоже можно задать стартовый адрес и передать только один байт для этого разряда.
Добавлено after 2 minutes 48 seconds: Vlad_RK, я сделал версию проекта для работы с кнопками. добавил в схему кнопки и снял комментарий с "кнопочного" блока текста и поставил комментарий на блок текста с бегущей строкой.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения