OOS
|
|
1 | |
Работа с семисегментным индикатором, asm11.12.2011, 18:25. Показов 21934. Ответов 11
Метки нет (Все метки)
Разбираюсь по-маленьку с программированием. Светодиодами мигать уже не интересно, хочется что нибудь полезное сделать.
Хочу сделать вольтметр, для начала самый простой, самое главное разобраться. С АЦП разобрался, там все просто. Как на индикатор вывести какое нибудь одно число представляю, но как выводить значения соответствующие каждому из уровней АЦП на индикатор? Для простоты планирую использовать 8 старших разрядов АЦП. Товарищи, помогите разобраться. Интересует сам алгоритм, если можно примеры на ассемблере. Или что почитать на эту тему? |
11.12.2011, 18:25 | |
Ответы с готовыми решениями:
11
Микропрограмма для устройства управления семисегментным индикатором Учусь. Оцените программу для работы с семисегментным индикатором Задача с семисегментным индикатором Дешифратор с семисегментным индикатором VHDL |
Ztot
|
|
16.12.2011, 00:09 | 3 |
Тоже есть вопрос. Делал динамическую индикацию (atmega16, rec-s5461asr, sn74hc164). Использовал прерывания по таймеру в режиме normal. Во время отладки стал подбирать частоту индикации - выбором предделителя (clk/1024, clk/256, clk/64 и clk/8). Ни одно значение не устроило, решил перейти в режим СТС и установить частоту где-то около 50 кГц (OCR0=160). Тут-то бобик и сдох - индикатор вообще потух (в proteus все работает). Как оказалось, при OCR0=255 в режиме СТС он светит, а уже при OCR0=254 - нет. В чем могут быть грабли? Спасибо.
|
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
|
|
16.12.2011, 00:28 | 4 |
Сообщение от Ztot
0
|
Ztot
|
|
16.12.2011, 01:07 | 5 |
приложил схему (без транзисторов, резисторов) и хекс. Нажимая на кнопочки Freq, можно менять TCCR0 от 0b0001010 до 0b0001101. 0 на lcd - это clk/1024, а 3 - clk/8. Макетка ведет себя также.
[20.97 Кб] |
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
|
|
16.12.2011, 02:28 | 6 |
Сообщение от tyzord66
Стало интересно, если обновлять светодиодный индикатор с частотой 50 кгц, сегменты будут успевать гаситься или визуально будут все гореть? )
0
|
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
|
|
16.12.2011, 12:25 | 7 |
Сообщение от Ztot
0
|
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
|
|
16.12.2011, 12:42 | 8 |
Затем - каждую цифру в "рисунок" согласно сегментам индикатора. Потом только выводить. Пример преобразования Код
;------------------------------------------------------------------------------- ; Декодирование 16-битного числа в десятичные цифры ; Число должно быть в X, в Y - указатель на память, куда сложить результат ; Число записывается в память справа налево, Y должен быть со смещением ; (он декрементируется), максимум 5 знаков. ;------------------------------------------------------------------------------- word2dec: clr r24 ; младшее число десятков clr r25 ; старшее число десятков w2d0: sbiw XL,10 ; считаем количество десятков brcs w2d1 odyw r24,1 rjmp w2d0 w2d1: ; Десятки посчитали. Забираем остаток odyw XL,10 st -Y,XL ; Сохраняем его movw XL,r24 or r24,r25 ; Если десятки остались, breq w2d3 ; отправляем заново на переработку rjmp word2dec w2d3: ret
0
|
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
|
|
16.12.2011, 19:59 | 9 |
Сообщение от ptoop
Код
;******************************************************** ; bin2BCD16 ;******************************************************** c2to10: ldi count1, $10 clr byte_0 clr byte_1 clr byte_2 clr ZH loop_b: lsl bin_l rol bin_h rol byte_0 rol byte_1 rol byte_2 dec count1 brne nm1 ret nm1: ldi ZL, $5 nm2: ld sector, -Z ldi temp, $03 add sector, temp sbrc sector, 3 st Z, sector ld sector, Z ldi temp, $30 add sector, temp sbrc sector, 7 st Z, sector cpi ZL, $2 brne nm2 rjmp loop_b ./styles/iosyitistromyss/imageset/icon_topys_attach.gif" width="14" height="18 [94.37 Кб]
0
|
Ztot
|
|
17.12.2011, 23:18 | 10 |
tyzord66, подправил алгоритм в соответствии с вашим описанием - удалось избавиться от засветок, да и работа стала ровнее - возможно эксперименты с СТС и не пригодятся ) |
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
|
|
18.12.2011, 01:37 | 11 |
Выбери частоту переключений светодиодов.
Например, 200Гц - это хорошая частота. Стало быть, каждое переключение должно срабатывать раз в 5мс (миллисекунд). Значит, нужно подобрать таймер так, чтобы он переполнялся раз в ... чуть больше, чем 5мс. Примем тактовую частоту МК = 1Мгц. Сначала делим тактовую частоту на 256 (максимум тиков до переполнения). 1000000/256 = 3906 раз в секунду будет переполняться таймер = одно переполнение в 256мкс. Маловато, верней - быстровато. Начинаем подбирать прескалер. Если взять самый большой прескалер 1024, то таймер будет тикать раз в 256*1024 = 262мс - многовато. Нам надо немного больше 5мс. Подходит прескалер 64, ибо 8 - мало. При прескалере 8 тйамер переполяется каждые 256*64 = 16384мкс = 16мс. Ок. теперь нам нужно приблизиться к 5мс, то есть к 5000мкс. 5000/256 = 19.5. Примем 20. Значит, наше волшебное число 20 - столько раз должен переполниться таймер при частоте 1МГц и прескалере 64. В обработчике прерывания мы используем глобальную переменную DyspTimer. Я не помню(мне не хочется) ASM, буду писать на Си-подобном псевдокоде Код
------------------- #define DISPLAY_TIME 20 uint8_t DyspTimer; uint8_t Digit; ..... ISR(Timer0_Over) { DyspTimer++; } .... main() { .... TIMER_INIT; // настройка таймера .... while(1) { if ( DyspTimer >= DISPLAY_TIME ) { DyspTimer = 0; DysplayDigit(); } } } .... DysplayDigit() { Digit++; if ( Digit >=4 ) // при 4-разрядном индикаторе Digit=0; DN_ALL_DIGITS; // гасим все цифры OUT_DIGIT(Digit); // выводим на индикатор нужную цифру UP_DIGIT(Digit); // зажигаем нужный разряд }
0
|
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
|
|
18.12.2011, 21:22 | 12 |
Сообщение от OOS
[108.61 Кб]
0
|
18.12.2011, 21:22 | |
18.12.2011, 21:22 | |
Помогаю со студенческими работами здесь
12
Изобразить на экране работающие электронные часы с цифровым индикатором семисегментным Работа с индикатором WS0010 ATMega16. Работа с индикатором HD4478 Работа с индикатором на базе ТМ1638 Работа с 7 сегментным индикатором на ATmega 328P Работа с индикатором (Code Vision AVR) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |