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

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

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

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

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

Категория: Caterpillars Blog | Просмотров: 829 | Добавил: caterpillar | Рейтинг: 0.0/0
Всего комментариев: 5
avatar
0
1 caterpillar • 19:48, 13.01.2011
А, не удержусь, процитирую 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
avatar
0
2 miron • 20:18, 13.01.2011
Вот тут наша общественность интересуется: а какова практическая польза от семисегментного индикатора?
Понимая, что хоббийность, всё-таки хотелось бы получить ответ cool
avatar
0
3 caterpillar • 21:07, 13.01.2011
Ну эта, любая индикация каких либо циферек.. Градусы там на улице, скорость/громкость разговора супруги..
Здесь опробован сам принцип вывода ЛЮБЫХ в общем случае циферек на ПОЧТИ ЛЮБОЙ разрядности экран. Ну а там - вешай датчик, обрабатывай и выводи..

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

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

avatar
0
4 miron • 21:13, 13.01.2011
Дык, это понятно smile Ты лучше скажи, где деньги получать? cool
avatar
0
5 caterpillar • 21:20, 13.01.2011
Ну если black jack со шлюхами на ем построить, то прямо в ем и получать smile
avatar
Вход на сайт
Календарь
«  Январь 2011  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31
Поиск
Случайное фото
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0
Друзья сайта
Полезное
Copyright MyCorp © 2025