Пятница, 22.11.2024, 15:31
СТЭМ: МИИЗ - Прошлый век
Приветствую Вас Гость | RSS
Навигация
Категории раздела
Caterpillars Blog [312]
Личный блог С.Белазова
Бред Профессора [208]
Мысли вслух от Мирона
Дневник Степкина [220]
Элеоновы письма [118]
Личный блог Элеон
Яйца Динозавра [146]
Отложенное в нашу корзинку Dinozavr'ом
Записки Сэра Ваха [6]
персональный раздел servax'а
Майдан [79]
Блог для всех (общий)
Академия мастерства [1]
Полезные статьи из различных источников
Мемориал [74]
Об ушедших от нас...
Новые публикации
[04.12.2022][СТЭМ]
Переломный момент (3)
[20.04.2022][Эксклюзив]
Факирское-чудесное (0)
[18.05.2021][Эксклюзив]
По следу Кастанеды (0)
[15.05.2021][Эксклюзив]
Сарафанное радио (0)
[11.12.2019][Эксклюзив]
Синдром ЧуковскАго (0)
Новые сайты
[18.11.2021][Музыка]
Рок-посевы (0)
[26.02.2020][Культура и искусство]
Булат Окуджава, биография, стихи и песни (0)
[07.02.2019][Блоги]
Один Высоцкий (3)

23:37
Развлекаюсь
Нельзя объять необъятное
(с) Козьма Прутков

Обдумывая тут одну свою мелкую хоббийную проблему, посожалел немного, что не разбираюсь в программировании микроконтроллеров, но решил попробовать.
Немного поизучал теорию, а потом два вечера бился с суровой реальностью.
Вообще надо было сделать динамическое управление семисегментным индикатором, то есть это когда цифры на нем горят не все сразу, а зажигаются поочередно быстро-быстро. Глаза не замечают мерцания, и кажется, что все цифры горят одновременно.
Наковырял я таки к сегодняшнему вечеру некую тестовую программку, цитировать не буду, вряд ли кому интересно, да и нечего там особенно цитировать. А вот видео с экрана работы эмулятора хочу выложить:

Бледное подобие быстрого-быстрого зажигания. Все-таки эмулятор.

PS. Язык программирования - Ассемблер. Тянет меня к ассемблеру smile

Категория: Caterpillars Blog | Просмотров: 841 | Добавил: caterpillar
Всего комментариев: 5
1 caterpillar  
0
А, не удержусь, процитирую biggrin

Code

;.include "d:\documents\AVR\ASM\APPNOTEs\2313def.inc"
.include "c:\program files\atmel\avr tools\avrassembler2\APPNOTEs\tn2313def.inc"

.def temp = r16
.def param0 = r17
.def param1 = r18
.def counter = r19
.def delay0 = r20
.def delay1 = r21
.def dig5 = r22
.def digit = r23

.dseg
digits: .byte 6

.cseg
.org 0
RESET:  ;External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
  rjmp start
  rjmp INT_0
  rjmp INT_1
  rjmp TIMER1_CAPT
  rjmp TIMER1_COMPA
  rjmp TIMER1_OVF
  rjmp TIMER0_OVF
  rjmp USART0_RX
  rjmp USART0_UDRE
  rjmp USART0_TX
  rjmp ANALOG_COMP
  rjmp PCINT
  rjmp TIMER1_COMPB
  rjmp TIMER0_COMPA
  rjmp TIMER0_COMPB
  rjmp USI_START
  rjmp USI_OVERFLOW
  rjmp EE_READY
  rjmp WDT_OVERFLOW
  
INT_0:  ;External Interrupt Request 0
INT_1:  ;External Interrupt Request 1
TIMER1_CAPT:  ;Timer/Counter1 Capture Event
TIMER1_COMPA:  ;Timer/Counter1 Compare Match A
TIMER1_OVF:  ;Timer/Counter1 Overflow
TIMER0_OVF:  ;Timer/Counter0 Overflow
USART0_RX:  ;USART0, Rx Complete
USART0_UDRE:  ;USART0 Data Register Empty
USART0_TX:  ;USART0, Tx Complete
ANALOG_COMP:  ;Analog Comparator
PCINT:  ;Pin Change Interrupt
TIMER1_COMPB:  ;Timer/Counter1 Compare Match B
TIMER0_COMPA:  ;Timer/Counter0 Compare Match A
TIMER0_COMPB:  ;Timer/Counter0 Compare Match B
USI_START:  ;USI Start Condition
USI_OVERFLOW:  ;USI Overflow
EE_READY:  ;EEPROM Ready
WDT_OVERFLOW:  ;Watchdog Timer Overflow
  reti
seg7table:
  .dw 0b00000001, 0b01001111 ;0 1
  .dw 0b00010010, 0b00000110 ;2 3
  .dw 0b01001100, 0b00100100 ;4 5
  .dw 0b00100000, 0b00001111 ;6 7
  .dw 0b00000000, 0b00000100 ;8 9
start:

; стек
  ldi temp, RamEnd
  out spl, temp

; Порты
; pd0 - pd6 выход
; pb0 - pb5 выход
  ldi temp, 0b01111111
  out ddrd, temp
  ldi temp, 0b00111111
  out ddrb, temp

  

  ; test
g0:  ldi counter, 0

g1:  
  mov param0, counter
  mov param1, counter

  rcall hidedigit

  rcall digitout
  
  rcall delay

  inc counter

  cpi counter, 6
  brne g1
  rjmp g0

;test: rjmp test

; Гашение цифр на индикаторе
hidedigit:
  ldi temp, 0
  out portb, temp
  ldi temp, 255
  out portd, temp
  ret

; Вывод цифры на индикатор
; param0 - цифра
; param1 - позиция, начиная с 0
digitout:
  push param0
  push param1

  ldi temp, 1
l0:  cpi param1, 0
  breq l1
  lsl temp
  dec param1
  rjmp l0
; в temp маска бита порта позиции цифры индикатора
l1:  out portb, temp

  ldi temp, 0
  lsl param0

  ; В Y адрес таблицы индикатора
  ldi zl, low(seg7table*2)
  ldi zh, high(seg7table*2)
  add zl, param0
  adc zh, temp

  lpm temp, z
  out portd, temp
  pop param1
  pop param0
  ret

delay:
  ldi delay1, 10
  ldi delay0, 0
m1:  dec delay0
  brne m1
  dec delay1
  brne m1
  ret

2 miron  
0
Вот тут наша общественность интересуется: а какова практическая польза от семисегментного индикатора?
Понимая, что хоббийность, всё-таки хотелось бы получить ответ cool

3 caterpillar  
0
Ну эта, любая индикация каких либо циферек.. Градусы там на улице, скорость/громкость разговора супруги..
Здесь опробован сам принцип вывода ЛЮБЫХ в общем случае циферек на ПОЧТИ ЛЮБОЙ разрядности экран. Ну а там - вешай датчик, обрабатывай и выводи..

Шутка, конечно! biggrin

Это я мозги усохшие разминал.


4 miron  
0
Дык, это понятно smile Ты лучше скажи, где деньги получать? cool

5 caterpillar  
0
Ну если black jack со шлюхами на ем построить, то прямо в ем и получать smile

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Привет
Календарь
«  Январь 2011  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31
Поиск
Случайное фото
Тэги
актёры текущее графоманьяк Сайт интересно интернет Работа Высоцкий праздники ремонт день рождения день рожденья песни праздник актер мемориал актёр память мысли вслух масленица Природа Бедненко вышивка искусство Фотография зелёная выставка дизайн работы студентов ОГИС театр Ермолаевой Весна встреча рыбалка Ночь Музеев литература поэзия день города Омска Авторская песня цветы УНЧ для наушников мимоходом православная вера Омская ярмарка памятное вера пейзаж Клёвое озеро СССР НАШИ свои рисунки барды
Статистика

Онлайн всего: 4
Заглянувших: 4
Пользователей: 0
Сегодня отметились
Друзья сайта
Copyright СТЭМ © 2024-2009