Страница 1 из 1

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

Добавлено: Чт май 14, 2015 10:12:29
nozyl
Доброго времени суток

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

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

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

Изображение

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

Добавлено: Чт май 14, 2015 11:47:01
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 проинвертировать.
Код довольно длинный, и вроде не все используется (для некоторых подпрограмм нет прямых вызовов), возможно что-то упустил.

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

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

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

Что касается подпрограмм, Я удалял не нужные мне функции видимо не все почистил.

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

Добавлено: Чт май 14, 2015 12:31:23
Z_h_e
Позвольте с Вами не согласится, Engineer_Keen. В базы транзисторов действительно надо будет поставить сопротивления, но проводимость транзисторов менять не надо, надо их перевернуть. Коллектор к ОК индикатора, а эмиттер на землю. И тогда инвертировать PORTC не надо, надо инвертировать PORTD.

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

COM REG
OUT PORT,REG
COM REG

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

Добавлено: Чт май 14, 2015 12:45:05
Engineer_Keen
Это верно, да и нагрузка логичнее смотрится именно в коллекторе, просто если есть готовая плата, то там переделок чуть меньше. Но раз ТС сказал что схема для наглядности, то это неактуально...

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

Добавлено: Чт май 14, 2015 12:59:07
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

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

Добавлено: Чт май 14, 2015 17:18:34
nozyl
akl
akl писал(а):

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

	SER	R16
	OUT	DDRD,R16
	OUT	DDRC,R16

А что это за часть кода? Куда его вставить или где редактировать? R16 по схеме это светодиод.

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

Добавлено: Чт май 14, 2015 20:43:08
nozyl
А понял, это в START:

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

Добавлено: Вт май 19, 2015 17:18:52
nozyl
Еще вопрос: как регулировать яркость сегментов ?

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

Добавлено: Вт май 19, 2015 18:46:16
Z_h_e
ШИМ

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

Добавлено: Ср май 20, 2015 07:15:58
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)