Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить

7-сегментный индикатор. Помогите!

Вс ноя 22, 2009 19:33:01

Нужно сделать чтобы на индикаторе менялись цифры от 0 до 9. Я в этом полный ноль :cry:. Читал статьи, но на практике ничего непойму. Ниже приложил мое подобие схемы, пожалуйста дополните её до работоспособного вида с кодом прошивки. Заранее спасибо!!!
Вложения
schema.JPG
(62.97 KiB) Скачиваний: 479
Последний раз редактировалось MaZaTroN Чт ноя 26, 2009 00:43:00, всего редактировалось 1 раз.

Вс ноя 22, 2009 20:33:40

если тебе надо просто цыфры от 0 до 9, то мк вовсе не нужен.
поставь счетчик, дешифратор и все....

Вс ноя 22, 2009 20:41:19

Цифры то как должны меняться? Вручную или сами бегать должны?
Если вручную, то и счетчик не нужен.

Вс ноя 22, 2009 22:16:06

Сами должны меняться. И обязательно нада с МК :?

Вс ноя 22, 2009 23:02:12

MaZaTroN писал(а):Сами должны меняться. И обязательно нада с МК :?

Да хотя бы так, для индикатора с ОК, для ОА надо будет общий провод не на землю кинуть, а на плюс. :)
Вложения
schema.JPG
ОК
(65.02 KiB) Скачиваний: 417

Вс ноя 22, 2009 23:11:13

Да, забыл сказать что с общим катодом.
Спасибо! Получаеться дело осталось за прошивкой :)

Вс ноя 22, 2009 23:22:45

MaZaTroN писал(а):Да, забыл сказать что с общим катодом.
Спасибо! Получаеться дело осталось за прошивкой :)

А хотя бы ЭТА, циферки поменяйте в массиве и все будет :))

Пн ноя 23, 2009 19:33:40

Вот, блин. :) Оказываеться мне нужно не то, что я озвучил :oops:
Всё намного проще :)) Нужно взять это и сделать так чтобы одновременно на всех зажигались нули, потом единицы и т.д до 9 :)
Попробую сам разобраться, но если что, ждите назад блудного сына :))

Пн ноя 23, 2009 19:46:36

MaZaTroN писал(а):Вот, блин. :) Оказываеться мне нужно не то, что я озвучил :oops:
Всё намного проще :)) Нужно взять это и сделать так чтобы одновременно на всех зажигались нули, потом единицы и т.д до 9 :)
Попробую сам разобраться, но если что, ждите назад блудного сына :))


Но ты в любом случае захади. :))

Вт ноя 24, 2009 22:09:42

Все-таки я непойму как вывести сразу на все разряды, например, нули. Чтобы даже не мигали.
На смену цифр вроде замысл есть, но первый шаг никак не идет :oops:
Вот вывод на 1 из 4 разрядов (переделал из статьи "Динамическая индикация" :roll: ):

Код:
.include "d:\avr\avrasm\appnotes\2313def.inc"


   .def   Temp=R16
   .def   Temp1=R17
   .def   Temp2=R18
   .def   Temp3=R19
   .def   Temp4=R20



.dseg

Digit:   .byte 4



.cseg
.org 0


reset:        ldi Temp1,RamEnd   ;инициализация стека
              out SPL,Temp1

              cli

              ldi Temp,0b11111111 ;настройка портов
              out ddrb,Temp

              ldi Temp,0b00001111
              out ddrd,Temp

              ldi Temp,0
              sts Digit ,Temp      ;загрузка начальных сначений


IndicCycle:   rcall Display        ;цикл индикации
              rjmp IndicCycle

Display:
;последовательный вывод на индикацию содержимого
;переменной Digit

              lds Temp1,Digit      ;загружаем 0-ю ячейку
              ldi Temp,0b00001110  ;активируем 0-й разряд
                                   ;индикации
              out PortD,Temp
              rcall Decoder        ;вызываем 7-сегм. декодер
              out PortB,Temp1      ;выводим значение в порт

Decoder:
;преобразование двоичного числа
;в код 7-сегментного индикатора

              ldi ZL,Low(DcMatrix*2)   ;инициализация массива
              ldi ZH,High(DcMatrix*2)

              ldi Temp2,0             ;прибавление переменной
              add ZL,Temp1            ;к 0-му адресу массива
              adc ZH,Temp2

              lpm                     ;загрузка значения
              mov Temp1,r0
              ret

DcMatrix:
;массив - таблица истинности декодера
              ;     hgfedcba   hgfedcba
              .db 0b00111111,0b00000110   ;0,1
              .db 0b01011011,0b01001111   ;2,3
              .db 0b01100110,0b01101101   ;4,5
              .db 0b01111101,0b00000111   ;6,7
              .db 0b01111111,0b01101111   ;8,9

;*********************************************************


              rcall display

Когда добавляю ещё по такому методу цифру в другой разряд, то она мигает. Подозреваю что там чтото с переменной Temp (ибо использую в обоих разрядах индикатора), но ничего придумать немогу подругому :(
Ответить