Управление семисегментным индикатором ассемблер

Обсуждаем контроллеры компании Atmel.
Ответить
nozyl
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн дек 24, 2012 18:32:07
Откуда: Беларусь, Гомель

Управление семисегментным индикатором ассемблер

Сообщение nozyl »

Доброго времени суток

Помогите пожалуйста разобраться в прошивкой управление семисегментным индикатором (ассемблер).
Я не понимаю каким образам реализовано управление индикатором.

Нужно изменить ОА на ОК, объясните как это сделать или дайте ссылки.

Заранее спасибо.

Изображение
Вложения
avr_hod2.asm
(26.33 КБ) 243 скачивания
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Управление семисегментным индикатором ассемблер

Сообщение Engineer_Keen »

Во-первых в базовые цепи нужны резисторы хотябы килоом. Первую ногу меги подтянуть через 10к к +5В.
Транзисторы взять другой проводимости (например bc847), коммутировать естественно на землю, а не на +5В.
Во всех кусках:

Код: Выделить всё

LDI REG,0bXXXXXXXX
OUT PORT2,REG

Инвертировать ХХХХХХХХ, т.е. 0b00000001 поменять на 0b11111110, 0b00000010 поменять на 0b11111101 и т.д.
То же самое во всех

Код: Выделить всё

LDI REG,0bYYYYYYYY
OUT PORT,REG

В подпрограмме ZOBRAZ похоже происходит перевод цифры в код, там тоже нужно все LDI REG,0bXXXXXXXX проинвертировать.
Код довольно длинный, и вроде не все используется (для некоторых подпрограмм нет прямых вызовов), возможно что-то упустил.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
nozyl
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн дек 24, 2012 18:32:07
Откуда: Беларусь, Гомель

Re: Управление семисегментным индикатором ассемблер

Сообщение nozyl »

Схему я привел для наглядности использование портов. У меня 12V семисегментники (из светодиодной ленты). Подключаю я их вот так:
Изображение
( Синим обозначены порты мк, красным светодиоды)

И исходя из схемы происходит инверсия. Когда сегмент не используется он светится а когда используется гаснет.
(Не до конца гаснет, транзистор закрывается не полностью, думаю нужно пересчитать резисторы)

Что касается подпрограмм, Я удалял не нужные мне функции видимо не все почистил.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Управление семисегментным индикатором ассемблер

Сообщение Z_h_e »

Позвольте с Вами не согласится, Engineer_Keen. В базы транзисторов действительно надо будет поставить сопротивления, но проводимость транзисторов менять не надо, надо их перевернуть. Коллектор к ОК индикатора, а эмиттер на землю. И тогда инвертировать PORTC не надо, надо инвертировать PORTD.

Код: Выделить всё

COM REG
OUT PORT,REG
COM REG
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Управление семисегментным индикатором ассемблер

Сообщение Engineer_Keen »

Это верно, да и нагрузка логичнее смотрится именно в коллекторе, просто если есть готовая плата, то там переделок чуть меньше. Но раз ТС сказал что схема для наглядности, то это неактуально...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Управление семисегментным индикатором ассемблер

Сообщение akl »

nozyl писал(а):Схему я привел для наглядности использование портов.
Тогда, по Вашей схеме, порты проще настроить так.

Код: Выделить всё

   SER   R16
   OUT   DDRD,R16
   OUT   DDRC,R16

   
;nastavн port jako vэstup
;LDI REG,0xFF
;OUT SMER,REG
;LDI REG,0xFF
;OUT PORT,REG

;nastavн port jako vэstup
;LDI REG,0xFF
;OUT SMER2,REG
;LDI REG,0xFF
;OUT PORT2,REG


И проинвертировать значения

Код: Выделить всё

LDI REG,0b10111111  ;odchytн инslo mimo 0-9 a zobrazн jako "-"
RET

ZOBRAZ0:
LDI REG,0b11000000
RET

ZOBRAZ1:
LDI REG,0b11111001
RET

ZOBRAZ2:
LDI REG,0b10100100
RET

ZOBRAZ3:
LDI REG,0b10110000
RET

ZOBRAZ4:
LDI REG,0b10011001
RET

ZOBRAZ5:
LDI REG,0b10010010
RET

ZOBRAZ6:
LDI REG,0b10000010
RET

ZOBRAZ7:
LDI REG,0b11111000
RET

ZOBRAZ8:
LDI REG,0b10000000
RET

ZOBRAZ9:
LDI REG,0b10010000
RET
nozyl
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн дек 24, 2012 18:32:07
Откуда: Беларусь, Гомель

Re: Управление семисегментным индикатором ассемблер

Сообщение nozyl »

akl
akl писал(а):

Код: Выделить всё

   SER   R16
   OUT   DDRD,R16
   OUT   DDRC,R16




А что это за часть кода? Куда его вставить или где редактировать? R16 по схеме это светодиод.
nozyl
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн дек 24, 2012 18:32:07
Откуда: Беларусь, Гомель

Re: Управление семисегментным индикатором ассемблер

Сообщение nozyl »

А понял, это в START:
nozyl
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Пн дек 24, 2012 18:32:07
Откуда: Беларусь, Гомель

Re: Управление семисегментным индикатором ассемблер

Сообщение nozyl »

Еще вопрос: как регулировать яркость сегментов ?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Управление семисегментным индикатором ассемблер

Сообщение Z_h_e »

ШИМ
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Управление семисегментным индикатором ассемблер

Сообщение Engineer_Keen »

Там кстати было.
Вот это место:
Спойлер

Код: Выделить всё

MULTIPLEX:

LDS REG,SVITI   ;stav PWM displeje
LDS REG2,JAS      ;regulace jasu

CPI REG2,0
BREQ JAS0
CPI REG2,1
BREQ JAS1
CPI REG2,2
BREQ JAS2
CPI REG2,3
BREQ JAS3
CPI REG2,4
BREQ JAS4
CPI REG2,5
BREQ JAS5

А дальше, насколько я понял, уровень яркости преобразуется в длину импульса (в метках JAS0-JAS5)
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Ответить

Вернуться в «AVR»