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

 
 
> Управляем 7 сегментным индикатором, AVR + сдвиговый регистр + 7-индикатор
Rom20
сообщение Aug 13 2011, 15:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 10-10-08
Пользователь №: 40 823



Доброго времени суток! Вот тут такая задачка написать управляющую программу на ATmega8 для схемы (см схему). Вот только возникает проблема что бы допустим выставить данные на последнем индикаторе необходимо их прогнать через все сдвиговые регистры следовательно данные которые будут в этих регистрах будут потеряны, думал какой алгоритм лучше всего здесь применить, но так ни чего не придумал путнего, кроме здоровой таблицы в которой будут записаны все возможные комбинации цифр, ну это получиться очень большая таблица, чувствую что есть решение проще ну что то пока до него не дошел. Подскажите пожалуйста алгоритм по которому будет удобно зажигать нужную цифру при это сильно не трогая предыдущие.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Aug 13 2011, 15:54
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



595-е обновляют выход после соотвествующего строба записи, Ваши опасения беспочвенны. Так и делается - прогон всех символов, только желательно для контроля правильности введенных данных еще добавить такой же парафазный выход с Q8'
Кстати, дифф. приемопередатчики не обязательно драйверы RS-485 - в ТТЛ их некоторое количество давным-давно есть.
Go to the top of the page
 
+Quote Post
Rom20
сообщение Aug 14 2011, 03:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 10-10-08
Пользователь №: 40 823



Цитата(_Pasha @ Aug 13 2011, 19:54) *
595-е обновляют выход после соотвествующего строба записи, Ваши опасения беспочвенны. Так и делается - прогон всех символов, только желательно для контроля правильности введенных данных еще добавить такой же парафазный выход с Q8'
Кстати, дифф. приемопередатчики не обязательно драйверы RS-485 - в ТТЛ их некоторое количество давным-давно есть.

как работает 595-ы регистр я разобрался, и если посмотреть на схему то видно что строб данных приходит на все регистры одновременно следовательно когда я выставлю нужные мне данные на последнем регистре в цепи и обновлю их то данные обосноваться и на других регистрах и там вылезет всякая ахинея, вот и я задаю вопрос как сделать программно что бы этого не было? просто единственное что пришло на ум это просчитать комбинации всех цифр которые необходимы ну это получится очень большая таблица.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 14 2011, 07:32
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Rom20 @ Aug 14 2011, 06:51) *
вот и я задаю вопрос как сделать программно что бы этого не было?
Каждый ваш регистр хранит ровно байт. Вот и храните в ОЗУ 4 байта и выталкивайте их каждый раз при обновлении. Никаких таблиц тут не нужно, разве что таблица знакогенератора для одного знакоместа, которая используется для заполнения каждого из этих четырех байтов. А в качестве регистров посмотрите на TPIC6D595 - это та же пара 595+выходные транзисторы, но греется меньше чем 2804 и один корпус занимает меньше места чем два.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Rom20
сообщение Aug 14 2011, 13:31
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 10-10-08
Пользователь №: 40 823



Цитата(Сергей Борщ @ Aug 14 2011, 11:32) *
Каждый ваш регистр хранит ровно байт. Вот и храните в ОЗУ 4 байта и выталкивайте их каждый раз при обновлении. Никаких таблиц тут не нужно, разве что таблица знакогенератора для одного знакоместа, которая используется для заполнения каждого из этих четырех байтов. А в качестве регистров посмотрите на TPIC6D595 - это та же пара 595+выходные транзисторы, но греется меньше чем 2804 и один корпус занимает меньше места чем два.

C этим делом разобрался что необходимо выставлять на линию сразу 4 байта, а вот как быть если мне нужно изменить только одно значение маску накладывать? а то схема у меня собрана так что один байт несет информацию сразу для двух индикаторов, пока пробую написать программу в виде наложения маски на данные которые выставляю на линии, или может есть способ проще?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 14 2011, 13:47
Сообщение #6


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (Rom20 @ Aug 14 2011, 22:31) *
может есть способ проще?

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 01:22
Рейтинг@Mail.ru


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