Atmega32 + 74Hc164 + 3Seg Led

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Вс июн 23, 2013 16:21:49

Сообщение mishadesh »

Добрый день, уважаемые форумчане. Неделю назад основательно засел за изучение МК.
Вообщем спаял схему подключения семисегментного индикатора через сдвиговый регистр к МК.
Индикация динамическая.
PORTB.1 - DATA
PORTB.4 - CLK.
Пишу на С в CVAVR

Нашел код на ASM, подогнал его для моего МК, но теперь не знаю как вызвать этот код в виде функции и передать ему значение для отображения.
Спойлер.DEF TMP = R17
.DEF SYM = R18
.DEF CNT = R19
; OUTP порт, значение
.MACRO OUTP
LDI R16,@1
OUT @0,R16
.ENDM
.CSEG
.ORG 0x0000
RJMP init
sym_table:
; Таблица символов 7SEG дисплея
; для платы ATtiny13 xBoard v2
; Q0 = C, Q1 = D, Q2 = dot, Q3 = E,
; Q4 = F, Q5 = A, Q6 = B, Q7 = G
; Для ОБЩЕГО АНОДА:
; 0 = сегмент горит, 1 = сегмент погашен
; (для ОБЩЕГО КАТОДА инвертировать значения)
; qqqqqqqq
; 01234567
.DB 0b00000011, 0b10011111 ; 0, 1
.DB 0b00100101, 0b00001101 ; 2, 3
.DB 0b10011001, 0b01001001 ; 4, 5
.DB 0b01000001, 0b00011111 ; 6, 7
.DB 0b00000001, 0b00001001 ; 8, 9
.DB 0b00010001, 0b11000001 ; A, B
.DB 0b01101001, 0b10000101 ; C, D
.DB 0b01100001, 0b11110001 ; E, F
.DB 0b11111111, 0b00000000 ; all_clr, all_set
; setdisplay рисует указанный символ
; SYM на 7-мисегментном дисплее
; NB! До вызова нужно указать SYM
setdisplay:
; Установить контрольные биты порта
OUTP DDRB, (1<<PB4) | (1<<PB1)
; Загрузить адрес таблицы символов
LDI ZL, LOW (2*sym_table)
LDI ZH, HIGH(2*sym_table)
; Найти нужный символ
ADD ZL, SYM
; Загрузить данные символа в R0
LPM
; Начало итерации
LDI TMP, 8
back1:
SBRC R0, 0
RJMP bitset
; Установить сегмент в 0 (горит)
OUTP PORTB,(0<<PB4)|(0<<PB1)
OUTP PORTB,(1<<PB4)|(0<<PB1)
RJMP bitunset
bitset:
; Установить сегмент в 1 (погашен)
OUTP PORTB,(0<<PB4)|(1<<PB1)
OUTP PORTB,(1<<PB4)|(1<<PB1)
bitunset:
LSR R0
DEC TMP
BRNE back1
; Выход из процедуры
RET
; Инициализация
init:
OUTP DDRB, 0x12
OUTP DDRA, 0x38
prog:
MOV CNT, R19
MOV SYM, CNT
RCALL setdisplay
RJMP prog
Хотелось бы делать так
Спойлерvoid writedigit(int x)
{
код на ассемблере
.
MOV CNT, x
MOV SYM, CNT
RCALL setdisplay
RJMP prog
}
Подскажите как можно решить данную проблему?? Пытаюсь написать библиотеку для CVAVR.

Заранее спасибо.
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1663
Зарегистрирован: Вт апр 03, 2012 20:36:41
Откуда: Сочи

Сообщение Enigm »

Для индикаторов предпочтительнее 74HC595.
Реклама
Родился
Сообщения: 3
Зарегистрирован: Вс июн 23, 2013 16:21:49

Сообщение mishadesh »

Enigm писал(а):Для индикаторов предпочтительнее 74HC595.
ну то без разницы, могу и 595 поставить. А по коду кто помочь может??
Или подскажите как реализовать динамическую индикацию через сдвиговый регистр на 3х разрядном индикаторе с ОА?
желательно если можно на CVAVR или Amel Studio.
Заранее спасибо.
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Принцип такой же как и без сдвигового регистра. В чём проблема то?
дынц
дынц
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Enigm писал(а):Для индикаторов предпочтительнее 74HC595.
Прекрасно 164 работают.
СпойлерИзображение
Можно только одну ногу микроконтроллера задействовать.
СпойлерИзображение
https://www.youtube.com/watch?v=ZITgHr-GfNk
Реклама
Родился
Сообщения: 3
Зарегистрирован: Вс июн 23, 2013 16:21:49

Сообщение mishadesh »

oleg110592 писал(а):
Enigm писал(а):Для индикаторов предпочтительнее 74HC595.
Прекрасно 164 работают.
СпойлерИзображение
А можно пример кода для codevision или atmel studio? у меня 3 разряда с ОА.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

У меня под пик на HITECH PICC, для тини13 на АБ. Индикация посегментная. Вам может не подойти. Там по ссылке под видео есть еще ссылка на исходник для CV. Особо там ничего страшного нет. Перед тем как загнать симисегментный код в регистр выключаете аноды, загоняете код и затем включаете нужный анод и т.д.. Лучше делать в прерывании.
Ответить

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