Возьмусь за любой проектик на МК, мое хобби.
Возьмусь за любой проектик на МК, мое хобби.
Деньги интересуют не существенно(скорее как стимул, обязательство довести до конца), хочется интересных проектов.
Пишу на ассемблере, для AVR, практически с детства(уже лет 15!)..
Создавал просто ЧУМОВЫЕ алгоритмы, что собственно меня и увлекает, не просто сделать чтоб работало, а чтоб потом смотреть и радаваться! (поэтому и ассемблер, там я вижу ВСЁ!).
..за простые и тривиальные проектики тоже возьмусь, делаются они легко и быстро, но особенно хочется с изысками. Силён в ситуациях когда требуется максимальное быстродействие, и абсолютная безотказность по программной части. Очень хорошо понимаю аппаратное устройство МК(т.е. как он работает, а не только знание команд). Сейчас взялся за язык "Python", так-что в скором может и более разумное сопряжение с компом/мобилкой, чем просто отправка цифер в программу-терминал.
...Выкладывал свои проекты мало, но кое-что есть. https://radiokot.ru/circuit/digital/home/59/
Пишу на ассемблере, для AVR, практически с детства(уже лет 15!)..
Создавал просто ЧУМОВЫЕ алгоритмы, что собственно меня и увлекает, не просто сделать чтоб работало, а чтоб потом смотреть и радаваться! (поэтому и ассемблер, там я вижу ВСЁ!).
..за простые и тривиальные проектики тоже возьмусь, делаются они легко и быстро, но особенно хочется с изысками. Силён в ситуациях когда требуется максимальное быстродействие, и абсолютная безотказность по программной части. Очень хорошо понимаю аппаратное устройство МК(т.е. как он работает, а не только знание команд). Сейчас взялся за язык "Python", так-что в скором может и более разумное сопряжение с компом/мобилкой, чем просто отправка цифер в программу-терминал.
...Выкладывал свои проекты мало, но кое-что есть. https://radiokot.ru/circuit/digital/home/59/
Последний раз редактировалось Faun Пн авг 27, 2018 11:59:47, всего редактировалось 1 раз.
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18648
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Возьмусь за любой проектик на МК, мое хобби.
а нельзя ли как-то ознакомиться с чумовыми алгоритмами? ну, точнее, с проектами, где оные были реализованы?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Возьмусь за любой проектик на МК, мое хобби.
Все лежит на компе, в горах исходников (в основном недописанных)
.
если-б цель, заработать денег была-б в приоритете, взялся-б портфолио собирать,. А так лень.
По ссылочке один из них. т.с. подтверждение что это не сказки.
если-б цель, заработать денег была-б в приоритете, взялся-б портфолио собирать,. А так лень.
По ссылочке один из них. т.с. подтверждение что это не сказки.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18648
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Возьмусь за любой проектик на МК, мое хобби.
ну по ссылке, как бы, особой чумы не наблюдается... вот я и подумал, мож где-то в другом месте...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Возьмусь за любой проектик на МК, мое хобби.
Это снаружи он прост(такова была задумка), внутри доволе наворочен.. Но это далеко не самое чумовое, просто доделано и выложено..
;===
.equ OCR1BL = 0x28
.equ OCR1BH = 0x29 ;В инклуднике их пачемуто небыло
.equ TCCR0B = 0x33 ; Позже люди ругались, что это устаревший инклудник, увы, другова у меня нет
;===
; Недоделки
; -Выключать при простое (по идее неплохо-б, если-б он сам отключался
;через некоторое время, если его включили, и не пользуют)
; -глюк прокрутки (Пака колёсико не провернётся на один шаг(т.е. зависло на пол шага),
;отсчёт времени не начинается, впринципи не существенно, но у каво-нить вал-кодер может
;оказаться без фиксации на полном шаге,..)
;
;
;
;
.def reg=R16 .def Temp1=R16
.def reg_1=R17 .def Temp2=R17
.def reg_2=R18 .def Temp3=R18
.def slot_L=R19
.def slot_H=R20
.def flajki=R21
.def Nolik=R22
.def obraz_L=R23
.def obraz_H=R24
.def Temp=R25
.def Temp4=R26
.CSEG
.org 0
rjmp RESET ; Reset Handler
rjmp intt_0 ; External Interrupt0 Handler
rjmp intt_1 ; External Interrupt1 Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp USART0_RXC ; USART0 RX Complete Handler
rjmp USART0_DRE ; USART0,UDR Empty Handler
rjmp USART0_TXC ; USART0 TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp PCINT ; Pin Change Interrupt
rjmp TIMER1_COMPB ; Timer1 Compare B Handler
rjmp TIMER0_COMPA ; Timer0 Compare A Handler
rjmp TIMER0_COMPB ; Timer0 Compare B Handler
rjmp USI_START ; USI Start Handler
rjmp USI_OVERFLOW ; USI Overflow Handler
rjmp EE_READY ; EEPROM Ready Handler
rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
; RESET: ; Reset Handler
; intt_0: ; External Interrupt0 Handler
; intt_1: ; External Interrupt1 Handler
TIM1_CAPT: ; Timer1 Capture Handler
; TIM1_COMPA: ; Timer1 CompareA Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_OVF: ; Timer0 Overflow Handler
USART0_RXC: ; USART0 RX Complete Handler
USART0_DRE: ; USART0,UDR Empty Handler
USART0_TXC: ; USART0 TX Complete Handler
ANA_COMP: ; Analog Comparator Handler
PCINT: ; Pin Change Interrupt
; TIMER1_COMPB: ; Timer1 Compare B Handler
; TIMER0_COMPA: ; Timer0 Compare A Handler
TIMER0_COMPB: ; Timer0 Compare B Handler
USI_START: ; USI Start Handler
USI_OVERFLOW: ; USI Overflow Handler
EE_READY: ; EEPROM Ready Handler
WDT_OVERFLOW: ; Watchdog Overflow Handler
reti
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
; -настройка-
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
RESET: cli
clr reg pauzaee: dec reg brne pauzaee ;Пауза от дребезга.
;-------- СТЁК
ldi reg,RamEnd ;установка указателя стека
out SPL,reg
;-------- ЛАПКИ
ldi reg,0b11111111 ;Индикатор (Бит 7-Розетка. )
out ddrB,reg
ldi reg,0b01110010 ;(0 колесо_вх)
out ddrD,reg ;(1 свет_в_Фотопару) (2 ONN-OFF(INT_подтянут))
;(3 колесо(INT)
;((4 6 Цифры Ш и Л.) (5 пищелка)
ldi reg,0b01010110 ;-----Кажись 4 и 6 нафик нинада (но пусть, раз работает)
out portD,reg ;подтянул он/офф(при киданьи на минус сработает)
;... (включил напругу ИК-светику)(и цифры, чтоб кра)
;-------- ПЕРЕМЕННЫЕ
ldi Nolik,0
cbr flajki,0b11111011 ;7- (СОН) ;6- (визг серены) ;5- (Щелчёк) ;4- (Секундомер) ;3- (мелодия)
;2- (0 или 99) ;1-(звон гимна)
;-------- СОН в режиме @повер довн@.
ldi reg,0b00110000
out MCUCR,reg
;-------- индикатор
rcall TIM_0A_INDICAT
sei;=====================
;-------- Два минусика на экран
ldi obraz_H,0b00111111 ldi obraz_L,0b00111111
ldi reg,255 rcall PAUZA_65536 ;пауза
;-------- Загрузить текушее НУЛЕВОЕ время
ldi slot_L,0 rcall load_cifer_L
ldi slot_H,10 rcall load_cifer_H
;-------- а патом уж можна считать что включенО(калесо и кнопка)
ldi reg,0b11100000
out GIMSK,reg
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
; -прога-
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
CIKL:
;rjmp muzz_on
sbrc flajki,6
rcall VIZG_SERENI ;визг серены
sbrc flajki,5
rcall s4el4ek ;
sbrc flajki,3
rcall muzz_on
rjmp CIKL
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;|||||||||||||||||||||||||||| ЗВУК |||||||||||||||||||||||||||||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;--- Пермонентный визг серены
VIZG_SERENI: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ тон ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
sbi portD,5
ldi reg,30 pauza_cikl_1: dec reg brne pauza_cikl_1 ;
cbi portD,5
ldi reg,30 pauza_cikl_11: dec reg brne pauza_cikl_11 ;
ret ;===================
;--- Счелчек
s4el4ek: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
cbr flajki,0b00100000
ldi reg_1,24 ;-каличество колебаний
p_2:
ldi reg,15 ;продолжительность off
p_1: dec reg brne p_1 ;пауза полупериуда одного колебания динамика
sbi portD,5
ldi reg,2 ;продолжительность onn
p_1_: dec reg brne p_1_ ;пауза полупериуда одного колебания динамика
cbi portD,5
dec reg_1
brne p_2 ;Цикл для 256-ти колебаний
ret ;===================
muzz_on: ;шшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
rcall SHIM
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
Partiture:
clr YL clr YH ;YX, счётчик.. последовательный адрес в мелодии
Play:
rcall HymnUSS ;Загрузка ноты в Temp3
cpi Temp3,0xff
brne PartitureEnd_ ;Проверка на конец пестни
rjmp PartitureEnd ;!!??? Чёта ругалось, паэтаму тут перепрыгиваю... какая-то страшная карявость
PartitureEnd_:
rcall Note ;Загрузить чтота в Temp2 и Temp1 последовательно (адрес в "нотеплее" соответствующи Temp3)
;и далее погнать в функцию плея(каторая на 3 перемножает и в первы кампаратор загоняет)...
rcall HymnUSS_1
rcall Wait
rjmp Play
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
HymnUSS: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZH,High(HymnUSSR*2)
ldi ZL,Low(HymnUSSR*2)
add ZL,YL
adc ZH,YH ;в Z паследовательно загружается весь гимн
lpm
mov Temp3,r0
adiw YL,1 ;штоб не матлялась внутри проги, серавно кажды раз увеличивать
ret ;===================
HymnUSS_1: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZH,High(HymnUSSR*2)
ldi ZL,Low(HymnUSSR*2)
add ZL,YL
adc ZH,YH ;в Z паследовательно загружается весь гимн
lpm mov Temp3,r0
adiw YL,1 ;штоб не матлялась внутри проги, серавно кажды раз увеличивать
ret ;===================
Note: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZH,High(Notelist*2) ldi ZL,Low(Notelist*2)
clr Temp1
lsl Temp3 rol Temp1 ;эта умножелось на два, так понимаю...
add ZL,Temp3 adc ZH,Temp1
lpm mov Temp2,r0
ldi reg,0b00010010 out 0x30,reg
cpi Temp2,0xFF
brne hffhhfhf
out 0x30,Nolik ; tccr0a
hffhhfhf:
adiw ZL,1
lpm mov Temp1,r0
mov r0,Temp2 mov r1,Temp1
lsr Temp2 ror Temp1 ;Поделить на два (или умножить на 0.5)
lsr Temp2 ror Temp1 ;Поделить на два (или умножить на 0.5)
add Temp1,r1 adc Temp2,r0
lsr Temp2 ror Temp1
out 0x36,Temp1
ret ;===================
Wait: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
dddd1:
ldi reg,12
rcall PAUZA_65536
dec Temp3 brne dddd1
sbrs flajki,3
rcall CIKL
ret ;===================
PartitureEnd:
cbr flajki,0b00001000 ;Перестать "мелодировать", Вкл. звук серены 1Б..
rcall TIM_0A_INDICAT ; вернуть Индикатор
ret ;===================
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;|||||||||||||||||||||||||||| ВРЕМЯ |||||||||||||||||||||||||||||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;--- 65536-пауза
PAUZA_65536: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
clr reg_1
EXT_PAUZA: dec reg_1
brne EXT_PAUZA
dec reg
brne EXT_PAUZA
ret ;===================
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;|||||||||||||||||||||||||||| Cекундомер ||||||||||||||||||||||||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ZAPUSK_OTS4ETA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
rcall TIM_1A_TIME ;ВКЛ и настройка таймера
;--- вЫкл музыку, сирену и т.п.
cbr flajki,0b01001000
sbr flajki,0b00100000 ;выйдя из прерывания красиво счЁлкнет.
sbi portB,7 ; РОЗЕТКА!
ret ;===================
STOP_OTS4ETA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- вЫключение счета времени. 1A (на всякий и Б тоже)
in reg,TIMSK cbr reg,0b01100000 out TIMSK,reg
cbi portB,7 ; РОЗЕТКА-выкл!
ret ;===================
;-------- Отсчёт 240-> 0 (цифры "-" )
TIMER: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Отсчёт 240-ка
;Есть адна загвоздина, когда я накрутил калёсиком 1, то отсчитав 240 отсчёт устанавливается
;в ноль, и срабатывает серена...
;Но если я нажал секундомер, то до еденицы ано просчитает 240, А в обратную сторану получается ТУТ-ЖЕ
;и обнулится(минута пропадёт безвозвратно, а если ее не набежало, то счёт провалится в 99).
;ПосемуЮ задействую флаг, обозначающий, до 99, или до нуля считать!
;------------------------------------------------------------------------
lds reg,TIK_TAK
dec reg
brne TIK_TAK_NOTzero;(флаги НОНЕ)
ldi reg,240;(флаги НОНЕ) ;крутить по кругу 240
TIK_TAK_NOTzero:;(флаги НОНЕ)
sts TIK_TAK,reg;(флаги НОНЕ)
brne Ne_vremia_dikrimenta ;(!!!!ФЛАГИ ПРЕЖНИЕ!!!!) ;пара-ли декремировать..
rcall V_MINUS ;отсчетнуть в обратную,.. МИНУТА!
;----------------------- Проверка на ноль таймера
;--- Из таймера пошли на РЕ.? (тогда отсчёт до 99)
sbrc flajki,2
rjmp PROVERKA_NA_99 ;Ага, до 99
cpi slot_H,10
brne PRODOLJ_OTS4ET
cpi slot_L,0
brne PRODOLJ_OTS4ET
rjmp SERENU
PROVERKA_NA_99:
cpi slot_H,9
brne PRODOLJ_OTS4ET
cpi slot_L,9
brne PRODOLJ_OTS4ET
;----------------------- Запуск сирены
SERENU:
;--- Картинку *00 на экран!
ldi obraz_H,0b01000000 ldi obraz_L,0b01000000
rcall TIM_1B_SERENU
sbr flajki,0b00001000 ;Включить "плей" музыки(уйдёт туда из основного цыкла)
cbi portB,7 ; вЫключить розетку
Ne_vremia_dikrimenta:
PRODOLJ_OTS4ET:
ret ;===================
;-------- Отсчёт 0-> 240 (цифры "+" )
SEKUNDOMER: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
lds reg,TIK_TAK
inc reg cpi reg,240
brne TIK_TAK_NOT_240;(флаги НОНЕ)
clr reg;(флаги НОНЕ) ;крутить по кругу, с нуля до 240
TIK_TAK_NOT_240:;(флаги НОНЕ)
sts TIK_TAK,reg sts POSLEDNIY_TIK_TAK,reg;(флаги НОНЕ) ;Сохраняю патомкам(...для RE)
brne Ne_vremia_INkrimenta;(!!!!ФЛАГИ ПРЕЖНИЕ!!!!) ;пара-ли декремировать..
;---------------------------Инкримент!
rcall V_PLIUS ;Прибавить,.. МИНУТА!
;------------Запомнить минуты!
sts POSLEDNIY_slot_L,slot_L
sts POSLEDNIY_slot_H,slot_H ; Сейвить значение таймера для перезапуска
;----------------------- Проверка на 99
cpi slot_H,9
brne PRODOLJ_OTS4ET_SEK
cpi slot_L,9
brne PRODOLJ_OTS4ET_SEK
;----------------------- (ПЕРЕПОЛНЕНИЕ!!!)Запуск сирены
;--- Картинку *00 на экран!
ldi obraz_H,0b01000000 ldi obraz_L,0b01000000
rcall TIM_1B_SERENU
sbr flajki,0b00001000 ;Включить "плей" музыки(уйдёт туда из основного цыкла)
cbi portB,7 ; вЫключить розетку
Ne_vremia_INkrimenta:
PRODOLJ_OTS4ET_SEK:
ret ;===================
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;||||||||||||||||||||||||| ИНДИКАТОР ||||||||||||||||||||||||||||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;---Загрузка 7-мисегментного образа цифры.
load_cifer_L: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZL,Low(CIFRKA*2)
ldi ZH,High(CIFRKA*2)
add ZL,slot_L
adc ZH,Nolik
lpm mov obraz_L,R0
ret ;===================
load_cifer_H: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZL,Low(CIFRKA*2)
ldi ZH,High(CIFRKA*2)
add ZL,slot_H
adc ZH,Nolik
lpm mov obraz_H,R0
ret ;===================
;---<<<--обратный отсчёт
V_MINUS: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
dec slot_L
cpi slot_L,0b11111111
brne END_MINUS
ldi slot_L,9
;-----------------
cpi slot_H,10
brne X_dsddfadfasax
ldi slot_H,0
X_dsddfadfasax:
dec slot_H
cpi slot_H,0b11111111
brne END_MINUS
ldi slot_H,9
;-----------------
END_MINUS:
cpi slot_H,0
brne END_MINUS_
ldi slot_H,10
END_MINUS_:
rcall load_cifer_H
rcall load_cifer_L
ret;===================
;--->>>--прямой отсчёт
V_PLIUS: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
inc slot_L
cpi slot_L,10
brne END_PLUS
clr slot_L
;----------------------
cpi slot_H,10
brne X_dsddfadfad
clr slot_H
X_dsddfadfad:
inc slot_H
cpi slot_H,10
brne END_PLUS
END_PLUS:
rcall load_cifer_H
rcall load_cifer_L
ret;===================
;--- Cчёт времени.
TIM_1A_TIME: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- СК/8
ldi reg,0b00000010 out tccr1B,reg
;--- Компоратор (по четверть секунды(это чтоб красиво тикать!!!))
ldi reg,0b00111101 out OCR1aH,reg ;H-00111101 L-00001001
ldi reg,0b00001001 out OCR1aL,reg ;Четверть_секунд (в минуте 240) (500.000*60)/240/8=15625 (в итоге минута! %).)
;--- ВКЛ прерыв
in reg,TIMSK sbr reg,0b01000000 cbr reg,0b00100000 out TIMSK,reg
out TCNT1H,Nolik out TCNT1L,Nolik
ret;===================
;--- Сирену.
TIM_1B_SERENU: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- вЫключить 1A, В_ключить 1B
in reg,TIMSK cbr reg,0b01000000 sbr reg,0b00100000 out TIMSK,reg
;--- Компоратор (Как и А, но вдвое больше)
ldi reg,0b01111010 out OCR1bH,reg
ldi reg,0b00010010 out OCR1bL,reg ;
ret;===================
;--- Динамическая индикация.
TIM_0A_INDICAT: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- Обрубить ШИМ
out 0x30,Nolik ; tccr0a
;--- CK/8
ldi reg,0b00000010 out TCCR0b,reg
;--- ВКЛ прерыв
in reg,TIMSK sbr reg,0b00000001 out TIMSK,reg ;включить динамическую индикацию
ret;===================
;--- ШИМ.
SHIM: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- вЫключить свет экрана
in reg,TIMSK cbr reg,0b00000001 out TIMSK,reg ;прерывание вырубить
cbi portD,4 cbi portD,6 ;Свет...
;--- CK/0
ldi reg,0b00000010 out TCCR0b,reg
;--- ;грЁбаная комбинация СОМ-а и ВГМ-а, над каторой я ДЕНЬ парился! :-/ (в даташите-ж написали "резерв", а ано исправна работае!)
ldi reg,0b00010010 out 0x30,reg ; tccr0a
ret;===================
;-- Выведение цифры на экран, динамическое!
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
TIMER0_COMPA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Динамич. индикац. ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
push reg ;I
in reg,SREG;I
push reg ;I
;============+
in reg,portB
bst reg,7 ; !Бит розетки сбереч!
sbic portD,4
rjmp PIATIY
rjmp CHETVERTIY
CHETVERTIY: sbi portD,4 cbi portD,6 bld obraz_L,7 out portB,obraz_L rjmp END_PEREKID_
PIATIY: cbi portD,4 sbi portD,6 bld obraz_H,7 out portB,obraz_H
END_PEREKID_:
;============+
pop reg ;I
out SREG,reg;I
pop reg ;I
reti;----------------------------------------------------
;-- Выявляет в которую сторану его крутнули(цифру крутит), запускает
;обратны отсчёт ВСЕГДА, а патом красиво счёлкнуть
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
intt_1: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ колёсеко ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
push reg ;I
in reg,SREG;I
push reg ;I
push reg_1 ;I
push reg_2 ;I
;============+
rcall TIM_0A_INDICAT
cbr flajki,0b01001000 ;--- прервать визжание(и гимн)
;--- Проверка состояния бита направления колеса
sbic pinD,0 ;
rjmp X_V_PLIUS
rjmp X_V_MINUS
X_V_PLIUS: rcall V_PLIUS rjmp X_V_end
X_V_MINUS: rcall V_MINUS
X_V_end:
;--- Флажок штоб считало до 0 при тайминге
cbr flajki,0b00000100
;--- Фитча с проверкой на ноль(ато не нравится что считает когда накрутил зеро)
cpi slot_H,10
brne NE_V_NULE
cpi slot_L,0
brne NE_V_NULE
rcall STOP_OTS4ETA
;--- Чтоб при попытке RE не считало от 99, а скручивало дулю, и серенило!
sts POSLEDNIY_slot_L,slot_L sts POSLEDNIY_slot_H,slot_H ldi reg,1 sts POSLEDNIY_TIK_TAK,reg
rjmp NE_PROKRUTILI
NE_V_NULE:
;--- Сейвить последнее значение таймера для перезапуска (вроде это здесь от глюков, при отсчёте обратном тоже сейвит-же)
sts POSLEDNIY_slot_L,slot_L sts POSLEDNIY_slot_H,slot_H
ldi reg,240 sts POSLEDNIY_TIK_TAK,reg sts TIK_TAK,reg ;Сохранить для (на случай RE)
rcall ZAPUSK_OTS4ETA
;--- удерживать от самонакручивания(ато выскочит из прерывания, и пайдёт кружить ...)
NE_PROKRUTILI: sbis pinD,3
rjmp NE_PROKRUTILI ; Тут нада какта по другому(ато стапарится если калесо астановится на тени)
;============+
pop reg_2 ;I
pop reg_1 ;I
pop reg ;I
out SREG,reg;I
pop reg ;I
reti;----------------------------------------------------
;-- Сам механизм тайминга(по четвертьсекунды)
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
TIM1_COMPA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Отсчёт ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
out TCNT1L,Nolik out TCNT1H,Nolik ; не влияет на флаги, патаму и вынес вперёд
;---------------------------------------------------------
push reg ;I
in reg,SREG;I
push reg ;I
push reg_1 ;I
push reg_2 ;I
;============+
;--- Направление отсчёта определить
sbrc flajki,4
rcall SEKUNDOMER ;Когда еденичка, тогда секундомер считает
sbrs flajki,4
rcall TIMER ;Если нолик, таймер
sbr flajki,0b00100000 ;выйдя из прерывания красиво счЁлкнет
;============+
pop reg_2 ;I
pop reg_1 ;I
pop reg ;I
out SREG,reg;I
pop reg ;I
reti;----------------------------------------------------
;-- Визг из серены должен быть пи-п, пи-п, пи-п, пи-п, (его продолжительность здесь(пепрекидывая флажком))
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
TIMER1_COMPB: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Серена ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
out TCNT1L,Nolik out TCNT1H,Nolik
;------Пака мелодия не отзвучит, не серенить!
sbrc flajki,3
rjmp PI__end
;-------- инвертация флажка ВКЛ-непрерывного визка
sbrc flajki,6
rjmp PIS4IT
rjmp MOL4IT
PIS4IT: cbr flajki,0b01000000 ldi obraz_H,0b01000000 ldi obraz_L,0b01000000 rjmp PI__end ;*00 на экран вывести*
MOL4IT: sbr flajki,0b01000000 ldi obraz_H,0b01111111 ldi obraz_L,0b01111111 PI__end: ;* на экран вывести*
reti;----------------------------------------------------
;-- Перед уходом в сон выключает перефирию а с выходом, перебрасывает на ресет
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
intt_0: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ sleep (И ПРОЧИЕ РЕЖИМЫ) ЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
push reg ;I
in reg,SREG;I
push reg ;I
push reg_1 ;I
push reg_2 ;I
;============+
;>>>>>>>>---------- ;включить динамическую индикацию
rcall TIM_0A_INDICAT
cbr flajki,0b01001000 ;--- прервать визжание(и гимн)
;--------------- Выключить прерывание кнопки (чтоб sei-индикация продолжалась)
in reg,GIMSK cbr reg,0b01000000 out GIMSK,reg
sei
;>>>>>>>>-----------------------------Выход из сна методом ресета!
sbrs flajki,7 ;ПЕРЕЗАПУСК?(по флагу)
rjmp NE_IZ_ZSNA
rjmp RESET
NE_IZ_ZSNA:
;>>>>>>>>-----------------------;определение нужды продцедуры останова секундомера
sbrs flajki,4 ;определение нужды продцедуры останова секундомера (по флагу)
rjmp NE_PAUZA
;--- иначе останавить/запустить секундомер
in reg,TIMSK sbrs reg,6 ;Прям по состоянию бита TIM1_COMPA определяю, вкл. или выкл. секундомера.
rjmp START
rjmp STOP
START: rcall ZAPUSK_OTS4ETA rjmp ST__end
STOP: rcall STOP_OTS4ETA
ST__end:
;------------пауза, просто затем, чтоб не пащло перебирать режимы что далее по списку
ldi reg_2,4 ;каличество пееропрашиваний
X_STSTOP_PAUZA_1: ldi reg,64 rcall PAUZA_65536
sbic pinD,2
rjmp NU_VSIO_UJE
dec reg_2 brne X_STSTOP_PAUZA_1 ;
;>>>>>>>>----- ---------;------------------------------------------------------------
NE_PAUZA:
in reg,TIMSK cbr reg,0b01100000 out TIMSK,reg ;Вырубить таймер 1А-1В. дальше установятся, а тут нахер ненада
rcall STOP_OTS4ETA ;это на всякий случай(дп и палюбому, начнётся чтота новае)
PO_KRUGU:
;===================Пауза "ОФФ".
rcall s4el4ek ;Щёлкнуть для наглядности
ldi obraz_H,0b01000000 ldi obraz_L,0b00001110 ;"ОФФ"
ldi reg_2,7 ;каличество пееропрашиваний
X_SON_PAUZA_1: ldi reg,64 rcall PAUZA_65536
sbic pinD,2
rjmp V_SON
;-----------
dec reg_2 brne X_SON_PAUZA_1 ;Х5 Палучится ВДВЕ секунды!
;===================Пауза в 2сек, ***РЕ***
rcall s4el4ek ;Щёлкнуть для наглядности
ldi obraz_H,0b00001100 ldi obraz_L,0b00000110 ;*РЕ*
ldi reg_2,7 ;каличество пееропрашиваний
X_RE_PAUZA_1: ldi reg,64 rcall PAUZA_65536
sbic pinD,2
rjmp V_RE
;-----------
dec reg_2 brne X_RE_PAUZA_1 ;Х5 Палучится ВДВЕ секунды!
;===================Пауза в 2сек, ***СЕкундамер***
rcall s4el4ek ;Щёлкнуть для наглядности
ldi obraz_H,0b01000110 ldi obraz_L,0b00000110 ;СЕ
ldi reg_2,7 ;каличество пееропрашиваний
X_CE_PAUZA_1: ldi reg,64 rcall PAUZA_65536
sbic pinD,2
rjmp V_CE
;-----------
dec reg_2 brne X_CE_PAUZA_1 ;Х5 Палучится ВДВЕ секунды!
rjmp PO_KRUGU ;================
V_CE: cli ;========Секундомер
sbr flajki,0b00010100 ;СЕККУНДОМЕР,.. Задать направление отсчёта (флагом)
;Флажок штоб считало 2-1-0-99-стоп!! при тайминге
;--- обнуление для РЕ с нуля
ldi slot_L,0 sts POSLEDNIY_slot_L,slot_L rcall load_cifer_L
ldi slot_H,10 sts POSLEDNIY_slot_H,slot_H rcall load_cifer_H
ldi reg,1 sts TIK_TAK,reg sts POSLEDNIY_TIK_TAK,reg ;обнулить секунды(точнее обьеденичивание, от греха..)
;--- вЫключить калёсика(ано тепер незачем)
in reg,GIMSK cbr reg,0b10000000 out GIMSK,reg
rjmp NU_VSIO_UJE ;-;-;-;-;-;-
V_RE: cli ;========ПЕРЕЗАПУСК ТАЙМЕРА
cbr flajki,0b00010000 ; поменял направление отсчёта на ТАЙМЕРное (бит 2 трогать нельзя!, ато вдруг после секундамера???)
;--- Загрузить,.. и на экран последнее значение..
lds slot_L,POSLEDNIY_slot_L lds slot_H,POSLEDNIY_slot_H
rcall load_cifer_L rcall load_cifer_H
;--- Загрузить последнее значение секунд в секундосчётчик
lds reg,POSLEDNIY_TIK_TAK sts TIK_TAK,reg ;(востановить минутные доли)
rcall ZAPUSK_OTS4ETA
rjmp NU_VSIO_UJE ;-;-;-;-;-;-
V_SON: cli ;========СОН(подготовка)
out ddrB,Nolik out portB,Nolik ;(погасить) Индикатор, розетка,
out ddrD,Nolik ;-вся перефирия
ldi reg,0b00000100 out portD,reg ;кнопку оставить подтянутой(ей-же включать!!)
;--- ;Изалировать прерывание колёсика(чтоб не глюкноло ва сне(мот и нинада)) ((((кнопку включить, я-ж ее отрубал уходя в прерывание!))))
in reg,GIMSK sbr reg,0b01000000 cbr reg,0b10000000 out GIMSK,reg
sbr flajki,0b10000000 ;Уйдёт в сон зная что следующее нажатие кнопы, вызавит RESET!(он праписан в самам верху прерывания)
sei ;-ато ведь и не сможет выйти из сна!
sleep ;-;-;-;-;-;-;-;-
NU_VSIO_UJE: sei
ldi reg,125 rcall PAUZA_65536 ;Пауза от дребезга.
cli ;В прерывании ведь дефолтам стаит запрет прерываний
(паэтаму нада вернуть как и було, чтоб ано благапалучно завершило сваи дела)
in reg,GIMSK sbr reg,0b01000000 out GIMSK,reg ;В_ключить прерывание кнопки
;============+
pop reg_2 ;I
pop reg_1 ;I
pop reg ;I
out SREG,reg;I
pop reg ;I
reti;----------------------------------------------------
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
; -данные(в ОПЕРАТИВКЕ)-
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
CIFRKA:
.db 0b01000000,0b01111001 ;0 1
.db 0b00100100,0b00110000 ;2 3
.db 0b00011001,0b00010010 ;4 5
.db 0b00000010,0b01111000 ;6 7
.db 0b00000000,0b00010000 ;8 9
.db 0b01111111,0b01111111 ; zero
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
HymnUSSR: .db 19,24,24,32 ;союз
.db 19,24,21,8,23,32 ;неруши
.db 16,12,254,4,16,16,21,32 ;мый респу
.db 19,24,17,8,19,32 ;блик свобо
.db 12,12,254,4,12,16,14,32 ;дных сплоти
.db 14,16,16,16,17,32 ;ла наве
.db 17,16,19,16,21,32 ;ки вели
.db 23,24,24,8,26,16 ;кая Русь
.db 19,4,254,2,19,4,254,2,16,16,254,2 ;та-та-тааа
.db 19,16,28,32 ;да здра
.db 26,24,24,8,26,32 ;вствует со
.db 23,16,19,16,24,32 ;зданный во
.db 23,24,21,8,23,32 ;лей наро
.db 19,16,16,16,21,32 ;да вели
.db 19,16,17,16,19,32 ;кий могу
.db 14,16,12,16,24,32 ;чий Сове
.db 23,16,21,16,19,16 ;тский Союз
.db 19,4,254,2,19,4,254,2,21,16,23,16 ;та-та-тааа
.db 28,64,26,16,24,16,23,16,24,16,26,16 ;Сла-а-а-а вься-а-а-а-те
.db 254,2,19,4,254,2,19,4,254,2,19,12 ;та-та-та че
.db 254,4,18,12,254,4,19,12,254,4 ;ство тата
.db 19,16,21,16,23,16 ;ти-та
.db 24,64,23,16,21,16,19,16,21,16,23,16 ;На-а-а-а ше-е сва-а-бо
.db 254,2,16,4,254,2,16,4,254,2,16,12 ;та-та-та дно
.db 254,4,16,12,254,4,16,12,254,4 ;е-е-е тата
.db 16,16,17,16,19,16 ;ти-та
.db 21,32,17,16,19,16,21,32 ;дружбы наро
.db 17,24,19,8,21,32 ;дов надё
.db 17,16,21,16,26,64 ;жный оплот
.db 29,64,28,16,26,16,24,16,26,16,28,48 ;Па-а-а-а рти-и-я-а Ле
.db 24,12,254,4,24,64 ;нина-а-а-а
.db 26,64,24,16,23,16,21,16,23,16,24,48 ;Си-и-и-и ла-а на-а-ро
.db 21,12,254,4,21,16,19,16,21,16,23,16 ;дная-а-а-а
.db 24,32,23,24,21,8,19,32 ;нас к торжеству
.db 14,8,254,8,12,16,24,32 ;коммуни-и
.db 23,16,21,16,19,12,254,4,17,8,254,4,255,0 ;зма ведёт!
; до(263) до#(285) ре(297) ре#(316) ми(330) фа(351) фа#(375) соль(395) соль#(422)ля(440) ля#(474) си(494)
; 0 1 2 3 4 5 6 7 8 9 10 11
; 12 13 14 15 16 17 18 19 20 21 22 23
; 24 25 26 27 28 29 30 31 32 33 34 35
; до(263) до#(285) ре(297) ре#(316) ми(330) фа(351) фа#(375) соль(395) соль#(422)ля(440) ля#(474) си(494)
; 0 1 2 3 4 5 6 7 8 9 10 11
Notelist: .db 0x02,0x50,0x02,0x24,0x02,0x0e,0x01,0xed,0x01,0xd9,0x01,0xbc,0x01,0xa0,0x01,0x8b,0x01,0x72,0x01,0x63,0x01,0x49,0x01,0x3c;сред. октава
; 12 13 14 15 16 17 18 19 20 21 22 23
.db 0x01,0x28,0x01,0x12,0x01,0x07,0x00,0xf6,0x00,0xec,0x00,0xde,0x00,0xd0,0x00,0xc5,0x00,0xb9,0x00,0xb1,0x00,0xa4,0x00,0x9e;бол. октава
; 24 25 26 27 28 29 30 31 32 33 34 35
.db 0x00,0x94,0x00,0x89,0x00,0x83,0x00,0x7b,0x00,0x76,0x00,0x6f,0x00,0x68,0x00,0x62,0x00,0x5c,0x00,0x58,0x00,0x52,0x00,0x4f;1 октава
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
.DSEG
TIK_TAK: .BYTE 1 ; здесь 240 четвертьсекунд на декреминацию
POSLEDNIY_slot_L: .BYTE 1 ;
POSLEDNIY_slot_H: .BYTE 1 ;Память последнего значения
POSLEDNIY_TIK_TAK: .BYTE 1 ; четвертьсекунды
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
MelAddL: .byte 1
MelAddH: .byte 1
MemTemp1: .byte 1
MemTemp2: .byte 1 ; Память затем чтоб на 3 перемножить(там где несходится изза разных мегагерцОв)
;portD: .byte 1
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
Наверное самым чумовым был проект с GPS-компасом для грибников... Там пришлось городить двоичную тригонометрию, учитывать разные там склонения и прочую муть, короче описать как я там изгалялся, сложно..
А логика работы должна была быть такой, ставишь точку, и идешь собирать грибы.. МК будит GPS по своему алгоритму, чем дальше ты от точки, тем реже, а когда приближаешся, чаще, вплоть до непрерывной работы..
Магнитометр дает такое преимущество, не нужно включать GPS и ждать поиск спутников(или носить с собой горсть батареек, и держать его всегда включенным), не нужно быстро двигаться, чтобы понять, где какое направление(сейчас в телефоны магнитометр встроен, но кто помнит прежние времена,. нужно было пройтись метров 10, чтобы по собственному движению понять направление).
Магнитометр-же практически ни чего не потребляет.. и стороны света тебе покажет, и направление к своей точке, мгновенно!.
.. Вобщем я раскурил магнитометр, ЖПС-модуль, написал программу.. Осталось все собрать, и тут как обычно пропал интерес, самое интересное и сложное уже сделано
.
Последние пол года страдаю Устройством_Опережения_Зажигания. Простое магу за день написать, но мне-ж с изысками подавай!.. Вот это и есть моя слабая сторона, со временем понимаю, что меня захватывает именно ПРОЦЕСС!, а не конечный результат.. Вот это меня и склонило к мысли, что нужно обратиться к тем, у кого конкретная задача, РЕЗУЛЬТАТ!. Тут глядишь и копейка какая появится
, все-ж радость! Надоело заниматься программированием ради самого программирования.
Спойлер
.Include "2313def.inc";===
.equ OCR1BL = 0x28
.equ OCR1BH = 0x29 ;В инклуднике их пачемуто небыло
.equ TCCR0B = 0x33 ; Позже люди ругались, что это устаревший инклудник, увы, другова у меня нет
;===
; Недоделки
; -Выключать при простое (по идее неплохо-б, если-б он сам отключался
;через некоторое время, если его включили, и не пользуют)
; -глюк прокрутки (Пака колёсико не провернётся на один шаг(т.е. зависло на пол шага),
;отсчёт времени не начинается, впринципи не существенно, но у каво-нить вал-кодер может
;оказаться без фиксации на полном шаге,..)
;
;
;
;
.def reg=R16 .def Temp1=R16
.def reg_1=R17 .def Temp2=R17
.def reg_2=R18 .def Temp3=R18
.def slot_L=R19
.def slot_H=R20
.def flajki=R21
.def Nolik=R22
.def obraz_L=R23
.def obraz_H=R24
.def Temp=R25
.def Temp4=R26
.CSEG
.org 0
rjmp RESET ; Reset Handler
rjmp intt_0 ; External Interrupt0 Handler
rjmp intt_1 ; External Interrupt1 Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp USART0_RXC ; USART0 RX Complete Handler
rjmp USART0_DRE ; USART0,UDR Empty Handler
rjmp USART0_TXC ; USART0 TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp PCINT ; Pin Change Interrupt
rjmp TIMER1_COMPB ; Timer1 Compare B Handler
rjmp TIMER0_COMPA ; Timer0 Compare A Handler
rjmp TIMER0_COMPB ; Timer0 Compare B Handler
rjmp USI_START ; USI Start Handler
rjmp USI_OVERFLOW ; USI Overflow Handler
rjmp EE_READY ; EEPROM Ready Handler
rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
; RESET: ; Reset Handler
; intt_0: ; External Interrupt0 Handler
; intt_1: ; External Interrupt1 Handler
TIM1_CAPT: ; Timer1 Capture Handler
; TIM1_COMPA: ; Timer1 CompareA Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_OVF: ; Timer0 Overflow Handler
USART0_RXC: ; USART0 RX Complete Handler
USART0_DRE: ; USART0,UDR Empty Handler
USART0_TXC: ; USART0 TX Complete Handler
ANA_COMP: ; Analog Comparator Handler
PCINT: ; Pin Change Interrupt
; TIMER1_COMPB: ; Timer1 Compare B Handler
; TIMER0_COMPA: ; Timer0 Compare A Handler
TIMER0_COMPB: ; Timer0 Compare B Handler
USI_START: ; USI Start Handler
USI_OVERFLOW: ; USI Overflow Handler
EE_READY: ; EEPROM Ready Handler
WDT_OVERFLOW: ; Watchdog Overflow Handler
reti
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
; -настройка-
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
RESET: cli
clr reg pauzaee: dec reg brne pauzaee ;Пауза от дребезга.
;-------- СТЁК
ldi reg,RamEnd ;установка указателя стека
out SPL,reg
;-------- ЛАПКИ
ldi reg,0b11111111 ;Индикатор (Бит 7-Розетка. )
out ddrB,reg
ldi reg,0b01110010 ;(0 колесо_вх)
out ddrD,reg ;(1 свет_в_Фотопару) (2 ONN-OFF(INT_подтянут))
;(3 колесо(INT)
;((4 6 Цифры Ш и Л.) (5 пищелка)
ldi reg,0b01010110 ;-----Кажись 4 и 6 нафик нинада (но пусть, раз работает)
out portD,reg ;подтянул он/офф(при киданьи на минус сработает)
;... (включил напругу ИК-светику)(и цифры, чтоб кра)
;-------- ПЕРЕМЕННЫЕ
ldi Nolik,0
cbr flajki,0b11111011 ;7- (СОН) ;6- (визг серены) ;5- (Щелчёк) ;4- (Секундомер) ;3- (мелодия)
;2- (0 или 99) ;1-(звон гимна)
;-------- СОН в режиме @повер довн@.
ldi reg,0b00110000
out MCUCR,reg
;-------- индикатор
rcall TIM_0A_INDICAT
sei;=====================
;-------- Два минусика на экран
ldi obraz_H,0b00111111 ldi obraz_L,0b00111111
ldi reg,255 rcall PAUZA_65536 ;пауза
;-------- Загрузить текушее НУЛЕВОЕ время
ldi slot_L,0 rcall load_cifer_L
ldi slot_H,10 rcall load_cifer_H
;-------- а патом уж можна считать что включенО(калесо и кнопка)
ldi reg,0b11100000
out GIMSK,reg
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
; -прога-
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
CIKL:
;rjmp muzz_on
sbrc flajki,6
rcall VIZG_SERENI ;визг серены
sbrc flajki,5
rcall s4el4ek ;
sbrc flajki,3
rcall muzz_on
rjmp CIKL
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;|||||||||||||||||||||||||||| ЗВУК |||||||||||||||||||||||||||||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;--- Пермонентный визг серены
VIZG_SERENI: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ тон ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
sbi portD,5
ldi reg,30 pauza_cikl_1: dec reg brne pauza_cikl_1 ;
cbi portD,5
ldi reg,30 pauza_cikl_11: dec reg brne pauza_cikl_11 ;
ret ;===================
;--- Счелчек
s4el4ek: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
cbr flajki,0b00100000
ldi reg_1,24 ;-каличество колебаний
p_2:
ldi reg,15 ;продолжительность off
p_1: dec reg brne p_1 ;пауза полупериуда одного колебания динамика
sbi portD,5
ldi reg,2 ;продолжительность onn
p_1_: dec reg brne p_1_ ;пауза полупериуда одного колебания динамика
cbi portD,5
dec reg_1
brne p_2 ;Цикл для 256-ти колебаний
ret ;===================
muzz_on: ;шшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
rcall SHIM
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
Partiture:
clr YL clr YH ;YX, счётчик.. последовательный адрес в мелодии
Play:
rcall HymnUSS ;Загрузка ноты в Temp3
cpi Temp3,0xff
brne PartitureEnd_ ;Проверка на конец пестни
rjmp PartitureEnd ;!!??? Чёта ругалось, паэтаму тут перепрыгиваю... какая-то страшная карявость
PartitureEnd_:
rcall Note ;Загрузить чтота в Temp2 и Temp1 последовательно (адрес в "нотеплее" соответствующи Temp3)
;и далее погнать в функцию плея(каторая на 3 перемножает и в первы кампаратор загоняет)...
rcall HymnUSS_1
rcall Wait
rjmp Play
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
HymnUSS: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZH,High(HymnUSSR*2)
ldi ZL,Low(HymnUSSR*2)
add ZL,YL
adc ZH,YH ;в Z паследовательно загружается весь гимн
lpm
mov Temp3,r0
adiw YL,1 ;штоб не матлялась внутри проги, серавно кажды раз увеличивать
ret ;===================
HymnUSS_1: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZH,High(HymnUSSR*2)
ldi ZL,Low(HymnUSSR*2)
add ZL,YL
adc ZH,YH ;в Z паследовательно загружается весь гимн
lpm mov Temp3,r0
adiw YL,1 ;штоб не матлялась внутри проги, серавно кажды раз увеличивать
ret ;===================
Note: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZH,High(Notelist*2) ldi ZL,Low(Notelist*2)
clr Temp1
lsl Temp3 rol Temp1 ;эта умножелось на два, так понимаю...
add ZL,Temp3 adc ZH,Temp1
lpm mov Temp2,r0
ldi reg,0b00010010 out 0x30,reg
cpi Temp2,0xFF
brne hffhhfhf
out 0x30,Nolik ; tccr0a
hffhhfhf:
adiw ZL,1
lpm mov Temp1,r0
mov r0,Temp2 mov r1,Temp1
lsr Temp2 ror Temp1 ;Поделить на два (или умножить на 0.5)
lsr Temp2 ror Temp1 ;Поделить на два (или умножить на 0.5)
add Temp1,r1 adc Temp2,r0
lsr Temp2 ror Temp1
out 0x36,Temp1
ret ;===================
Wait: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
dddd1:
ldi reg,12
rcall PAUZA_65536
dec Temp3 brne dddd1
sbrs flajki,3
rcall CIKL
ret ;===================
PartitureEnd:
cbr flajki,0b00001000 ;Перестать "мелодировать", Вкл. звук серены 1Б..
rcall TIM_0A_INDICAT ; вернуть Индикатор
ret ;===================
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;|||||||||||||||||||||||||||| ВРЕМЯ |||||||||||||||||||||||||||||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;--- 65536-пауза
PAUZA_65536: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
clr reg_1
EXT_PAUZA: dec reg_1
brne EXT_PAUZA
dec reg
brne EXT_PAUZA
ret ;===================
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;|||||||||||||||||||||||||||| Cекундомер ||||||||||||||||||||||||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ZAPUSK_OTS4ETA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
rcall TIM_1A_TIME ;ВКЛ и настройка таймера
;--- вЫкл музыку, сирену и т.п.
cbr flajki,0b01001000
sbr flajki,0b00100000 ;выйдя из прерывания красиво счЁлкнет.
sbi portB,7 ; РОЗЕТКА!
ret ;===================
STOP_OTS4ETA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- вЫключение счета времени. 1A (на всякий и Б тоже)
in reg,TIMSK cbr reg,0b01100000 out TIMSK,reg
cbi portB,7 ; РОЗЕТКА-выкл!
ret ;===================
;-------- Отсчёт 240-> 0 (цифры "-" )
TIMER: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Отсчёт 240-ка
;Есть адна загвоздина, когда я накрутил калёсиком 1, то отсчитав 240 отсчёт устанавливается
;в ноль, и срабатывает серена...
;Но если я нажал секундомер, то до еденицы ано просчитает 240, А в обратную сторану получается ТУТ-ЖЕ
;и обнулится(минута пропадёт безвозвратно, а если ее не набежало, то счёт провалится в 99).
;ПосемуЮ задействую флаг, обозначающий, до 99, или до нуля считать!
;------------------------------------------------------------------------
lds reg,TIK_TAK
dec reg
brne TIK_TAK_NOTzero;(флаги НОНЕ)
ldi reg,240;(флаги НОНЕ) ;крутить по кругу 240
TIK_TAK_NOTzero:;(флаги НОНЕ)
sts TIK_TAK,reg;(флаги НОНЕ)
brne Ne_vremia_dikrimenta ;(!!!!ФЛАГИ ПРЕЖНИЕ!!!!) ;пара-ли декремировать..
rcall V_MINUS ;отсчетнуть в обратную,.. МИНУТА!
;----------------------- Проверка на ноль таймера
;--- Из таймера пошли на РЕ.? (тогда отсчёт до 99)
sbrc flajki,2
rjmp PROVERKA_NA_99 ;Ага, до 99
cpi slot_H,10
brne PRODOLJ_OTS4ET
cpi slot_L,0
brne PRODOLJ_OTS4ET
rjmp SERENU
PROVERKA_NA_99:
cpi slot_H,9
brne PRODOLJ_OTS4ET
cpi slot_L,9
brne PRODOLJ_OTS4ET
;----------------------- Запуск сирены
SERENU:
;--- Картинку *00 на экран!
ldi obraz_H,0b01000000 ldi obraz_L,0b01000000
rcall TIM_1B_SERENU
sbr flajki,0b00001000 ;Включить "плей" музыки(уйдёт туда из основного цыкла)
cbi portB,7 ; вЫключить розетку
Ne_vremia_dikrimenta:
PRODOLJ_OTS4ET:
ret ;===================
;-------- Отсчёт 0-> 240 (цифры "+" )
SEKUNDOMER: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
lds reg,TIK_TAK
inc reg cpi reg,240
brne TIK_TAK_NOT_240;(флаги НОНЕ)
clr reg;(флаги НОНЕ) ;крутить по кругу, с нуля до 240
TIK_TAK_NOT_240:;(флаги НОНЕ)
sts TIK_TAK,reg sts POSLEDNIY_TIK_TAK,reg;(флаги НОНЕ) ;Сохраняю патомкам(...для RE)
brne Ne_vremia_INkrimenta;(!!!!ФЛАГИ ПРЕЖНИЕ!!!!) ;пара-ли декремировать..
;---------------------------Инкримент!
rcall V_PLIUS ;Прибавить,.. МИНУТА!
;------------Запомнить минуты!
sts POSLEDNIY_slot_L,slot_L
sts POSLEDNIY_slot_H,slot_H ; Сейвить значение таймера для перезапуска
;----------------------- Проверка на 99
cpi slot_H,9
brne PRODOLJ_OTS4ET_SEK
cpi slot_L,9
brne PRODOLJ_OTS4ET_SEK
;----------------------- (ПЕРЕПОЛНЕНИЕ!!!)Запуск сирены
;--- Картинку *00 на экран!
ldi obraz_H,0b01000000 ldi obraz_L,0b01000000
rcall TIM_1B_SERENU
sbr flajki,0b00001000 ;Включить "плей" музыки(уйдёт туда из основного цыкла)
cbi portB,7 ; вЫключить розетку
Ne_vremia_INkrimenta:
PRODOLJ_OTS4ET_SEK:
ret ;===================
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;||||||||||||||||||||||||| ИНДИКАТОР ||||||||||||||||||||||||||||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;---Загрузка 7-мисегментного образа цифры.
load_cifer_L: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZL,Low(CIFRKA*2)
ldi ZH,High(CIFRKA*2)
add ZL,slot_L
adc ZH,Nolik
lpm mov obraz_L,R0
ret ;===================
load_cifer_H: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
ldi ZL,Low(CIFRKA*2)
ldi ZH,High(CIFRKA*2)
add ZL,slot_H
adc ZH,Nolik
lpm mov obraz_H,R0
ret ;===================
;---<<<--обратный отсчёт
V_MINUS: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
dec slot_L
cpi slot_L,0b11111111
brne END_MINUS
ldi slot_L,9
;-----------------
cpi slot_H,10
brne X_dsddfadfasax
ldi slot_H,0
X_dsddfadfasax:
dec slot_H
cpi slot_H,0b11111111
brne END_MINUS
ldi slot_H,9
;-----------------
END_MINUS:
cpi slot_H,0
brne END_MINUS_
ldi slot_H,10
END_MINUS_:
rcall load_cifer_H
rcall load_cifer_L
ret;===================
;--->>>--прямой отсчёт
V_PLIUS: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
inc slot_L
cpi slot_L,10
brne END_PLUS
clr slot_L
;----------------------
cpi slot_H,10
brne X_dsddfadfad
clr slot_H
X_dsddfadfad:
inc slot_H
cpi slot_H,10
brne END_PLUS
END_PLUS:
rcall load_cifer_H
rcall load_cifer_L
ret;===================
;--- Cчёт времени.
TIM_1A_TIME: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- СК/8
ldi reg,0b00000010 out tccr1B,reg
;--- Компоратор (по четверть секунды(это чтоб красиво тикать!!!))
ldi reg,0b00111101 out OCR1aH,reg ;H-00111101 L-00001001
ldi reg,0b00001001 out OCR1aL,reg ;Четверть_секунд (в минуте 240) (500.000*60)/240/8=15625 (в итоге минута! %).)
;--- ВКЛ прерыв
in reg,TIMSK sbr reg,0b01000000 cbr reg,0b00100000 out TIMSK,reg
out TCNT1H,Nolik out TCNT1L,Nolik
ret;===================
;--- Сирену.
TIM_1B_SERENU: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- вЫключить 1A, В_ключить 1B
in reg,TIMSK cbr reg,0b01000000 sbr reg,0b00100000 out TIMSK,reg
;--- Компоратор (Как и А, но вдвое больше)
ldi reg,0b01111010 out OCR1bH,reg
ldi reg,0b00010010 out OCR1bL,reg ;
ret;===================
;--- Динамическая индикация.
TIM_0A_INDICAT: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- Обрубить ШИМ
out 0x30,Nolik ; tccr0a
;--- CK/8
ldi reg,0b00000010 out TCCR0b,reg
;--- ВКЛ прерыв
in reg,TIMSK sbr reg,0b00000001 out TIMSK,reg ;включить динамическую индикацию
ret;===================
;--- ШИМ.
SHIM: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;--- вЫключить свет экрана
in reg,TIMSK cbr reg,0b00000001 out TIMSK,reg ;прерывание вырубить
cbi portD,4 cbi portD,6 ;Свет...
;--- CK/0
ldi reg,0b00000010 out TCCR0b,reg
;--- ;грЁбаная комбинация СОМ-а и ВГМ-а, над каторой я ДЕНЬ парился! :-/ (в даташите-ж написали "резерв", а ано исправна работае!)
ldi reg,0b00010010 out 0x30,reg ; tccr0a
ret;===================
;-- Выведение цифры на экран, динамическое!
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
TIMER0_COMPA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Динамич. индикац. ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
push reg ;I
in reg,SREG;I
push reg ;I
;============+
in reg,portB
bst reg,7 ; !Бит розетки сбереч!
sbic portD,4
rjmp PIATIY
rjmp CHETVERTIY
CHETVERTIY: sbi portD,4 cbi portD,6 bld obraz_L,7 out portB,obraz_L rjmp END_PEREKID_
PIATIY: cbi portD,4 sbi portD,6 bld obraz_H,7 out portB,obraz_H
END_PEREKID_:
;============+
pop reg ;I
out SREG,reg;I
pop reg ;I
reti;----------------------------------------------------
;-- Выявляет в которую сторану его крутнули(цифру крутит), запускает
;обратны отсчёт ВСЕГДА, а патом красиво счёлкнуть
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
intt_1: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ колёсеко ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
push reg ;I
in reg,SREG;I
push reg ;I
push reg_1 ;I
push reg_2 ;I
;============+
rcall TIM_0A_INDICAT
cbr flajki,0b01001000 ;--- прервать визжание(и гимн)
;--- Проверка состояния бита направления колеса
sbic pinD,0 ;
rjmp X_V_PLIUS
rjmp X_V_MINUS
X_V_PLIUS: rcall V_PLIUS rjmp X_V_end
X_V_MINUS: rcall V_MINUS
X_V_end:
;--- Флажок штоб считало до 0 при тайминге
cbr flajki,0b00000100
;--- Фитча с проверкой на ноль(ато не нравится что считает когда накрутил зеро)
cpi slot_H,10
brne NE_V_NULE
cpi slot_L,0
brne NE_V_NULE
rcall STOP_OTS4ETA
;--- Чтоб при попытке RE не считало от 99, а скручивало дулю, и серенило!
sts POSLEDNIY_slot_L,slot_L sts POSLEDNIY_slot_H,slot_H ldi reg,1 sts POSLEDNIY_TIK_TAK,reg
rjmp NE_PROKRUTILI
NE_V_NULE:
;--- Сейвить последнее значение таймера для перезапуска (вроде это здесь от глюков, при отсчёте обратном тоже сейвит-же)
sts POSLEDNIY_slot_L,slot_L sts POSLEDNIY_slot_H,slot_H
ldi reg,240 sts POSLEDNIY_TIK_TAK,reg sts TIK_TAK,reg ;Сохранить для (на случай RE)
rcall ZAPUSK_OTS4ETA
;--- удерживать от самонакручивания(ато выскочит из прерывания, и пайдёт кружить ...)
NE_PROKRUTILI: sbis pinD,3
rjmp NE_PROKRUTILI ; Тут нада какта по другому(ато стапарится если калесо астановится на тени)
;============+
pop reg_2 ;I
pop reg_1 ;I
pop reg ;I
out SREG,reg;I
pop reg ;I
reti;----------------------------------------------------
;-- Сам механизм тайминга(по четвертьсекунды)
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
TIM1_COMPA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Отсчёт ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
out TCNT1L,Nolik out TCNT1H,Nolik ; не влияет на флаги, патаму и вынес вперёд
;---------------------------------------------------------
push reg ;I
in reg,SREG;I
push reg ;I
push reg_1 ;I
push reg_2 ;I
;============+
;--- Направление отсчёта определить
sbrc flajki,4
rcall SEKUNDOMER ;Когда еденичка, тогда секундомер считает
sbrs flajki,4
rcall TIMER ;Если нолик, таймер
sbr flajki,0b00100000 ;выйдя из прерывания красиво счЁлкнет
;============+
pop reg_2 ;I
pop reg_1 ;I
pop reg ;I
out SREG,reg;I
pop reg ;I
reti;----------------------------------------------------
;-- Визг из серены должен быть пи-п, пи-п, пи-п, пи-п, (его продолжительность здесь(пепрекидывая флажком))
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
TIMER1_COMPB: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Серена ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
out TCNT1L,Nolik out TCNT1H,Nolik
;------Пака мелодия не отзвучит, не серенить!
sbrc flajki,3
rjmp PI__end
;-------- инвертация флажка ВКЛ-непрерывного визка
sbrc flajki,6
rjmp PIS4IT
rjmp MOL4IT
PIS4IT: cbr flajki,0b01000000 ldi obraz_H,0b01000000 ldi obraz_L,0b01000000 rjmp PI__end ;*00 на экран вывести*
MOL4IT: sbr flajki,0b01000000 ldi obraz_H,0b01111111 ldi obraz_L,0b01111111 PI__end: ;* на экран вывести*
reti;----------------------------------------------------
;-- Перед уходом в сон выключает перефирию а с выходом, перебрасывает на ресет
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
intt_0: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ sleep (И ПРОЧИЕ РЕЖИМЫ) ЖЖЖЖЖЖЖЖЖЖЖЖ
;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
push reg ;I
in reg,SREG;I
push reg ;I
push reg_1 ;I
push reg_2 ;I
;============+
;>>>>>>>>---------- ;включить динамическую индикацию
rcall TIM_0A_INDICAT
cbr flajki,0b01001000 ;--- прервать визжание(и гимн)
;--------------- Выключить прерывание кнопки (чтоб sei-индикация продолжалась)
in reg,GIMSK cbr reg,0b01000000 out GIMSK,reg
sei
;>>>>>>>>-----------------------------Выход из сна методом ресета!
sbrs flajki,7 ;ПЕРЕЗАПУСК?(по флагу)
rjmp NE_IZ_ZSNA
rjmp RESET
NE_IZ_ZSNA:
;>>>>>>>>-----------------------;определение нужды продцедуры останова секундомера
sbrs flajki,4 ;определение нужды продцедуры останова секундомера (по флагу)
rjmp NE_PAUZA
;--- иначе останавить/запустить секундомер
in reg,TIMSK sbrs reg,6 ;Прям по состоянию бита TIM1_COMPA определяю, вкл. или выкл. секундомера.
rjmp START
rjmp STOP
START: rcall ZAPUSK_OTS4ETA rjmp ST__end
STOP: rcall STOP_OTS4ETA
ST__end:
;------------пауза, просто затем, чтоб не пащло перебирать режимы что далее по списку
ldi reg_2,4 ;каличество пееропрашиваний
X_STSTOP_PAUZA_1: ldi reg,64 rcall PAUZA_65536
sbic pinD,2
rjmp NU_VSIO_UJE
dec reg_2 brne X_STSTOP_PAUZA_1 ;
;>>>>>>>>----- ---------;------------------------------------------------------------
NE_PAUZA:
in reg,TIMSK cbr reg,0b01100000 out TIMSK,reg ;Вырубить таймер 1А-1В. дальше установятся, а тут нахер ненада
rcall STOP_OTS4ETA ;это на всякий случай(дп и палюбому, начнётся чтота новае)
PO_KRUGU:
;===================Пауза "ОФФ".
rcall s4el4ek ;Щёлкнуть для наглядности
ldi obraz_H,0b01000000 ldi obraz_L,0b00001110 ;"ОФФ"
ldi reg_2,7 ;каличество пееропрашиваний
X_SON_PAUZA_1: ldi reg,64 rcall PAUZA_65536
sbic pinD,2
rjmp V_SON
;-----------
dec reg_2 brne X_SON_PAUZA_1 ;Х5 Палучится ВДВЕ секунды!
;===================Пауза в 2сек, ***РЕ***
rcall s4el4ek ;Щёлкнуть для наглядности
ldi obraz_H,0b00001100 ldi obraz_L,0b00000110 ;*РЕ*
ldi reg_2,7 ;каличество пееропрашиваний
X_RE_PAUZA_1: ldi reg,64 rcall PAUZA_65536
sbic pinD,2
rjmp V_RE
;-----------
dec reg_2 brne X_RE_PAUZA_1 ;Х5 Палучится ВДВЕ секунды!
;===================Пауза в 2сек, ***СЕкундамер***
rcall s4el4ek ;Щёлкнуть для наглядности
ldi obraz_H,0b01000110 ldi obraz_L,0b00000110 ;СЕ
ldi reg_2,7 ;каличество пееропрашиваний
X_CE_PAUZA_1: ldi reg,64 rcall PAUZA_65536
sbic pinD,2
rjmp V_CE
;-----------
dec reg_2 brne X_CE_PAUZA_1 ;Х5 Палучится ВДВЕ секунды!
rjmp PO_KRUGU ;================
V_CE: cli ;========Секундомер
sbr flajki,0b00010100 ;СЕККУНДОМЕР,.. Задать направление отсчёта (флагом)
;Флажок штоб считало 2-1-0-99-стоп!! при тайминге
;--- обнуление для РЕ с нуля
ldi slot_L,0 sts POSLEDNIY_slot_L,slot_L rcall load_cifer_L
ldi slot_H,10 sts POSLEDNIY_slot_H,slot_H rcall load_cifer_H
ldi reg,1 sts TIK_TAK,reg sts POSLEDNIY_TIK_TAK,reg ;обнулить секунды(точнее обьеденичивание, от греха..)
;--- вЫключить калёсика(ано тепер незачем)
in reg,GIMSK cbr reg,0b10000000 out GIMSK,reg
rjmp NU_VSIO_UJE ;-;-;-;-;-;-
V_RE: cli ;========ПЕРЕЗАПУСК ТАЙМЕРА
cbr flajki,0b00010000 ; поменял направление отсчёта на ТАЙМЕРное (бит 2 трогать нельзя!, ато вдруг после секундамера???)
;--- Загрузить,.. и на экран последнее значение..
lds slot_L,POSLEDNIY_slot_L lds slot_H,POSLEDNIY_slot_H
rcall load_cifer_L rcall load_cifer_H
;--- Загрузить последнее значение секунд в секундосчётчик
lds reg,POSLEDNIY_TIK_TAK sts TIK_TAK,reg ;(востановить минутные доли)
rcall ZAPUSK_OTS4ETA
rjmp NU_VSIO_UJE ;-;-;-;-;-;-
V_SON: cli ;========СОН(подготовка)
out ddrB,Nolik out portB,Nolik ;(погасить) Индикатор, розетка,
out ddrD,Nolik ;-вся перефирия
ldi reg,0b00000100 out portD,reg ;кнопку оставить подтянутой(ей-же включать!!)
;--- ;Изалировать прерывание колёсика(чтоб не глюкноло ва сне(мот и нинада)) ((((кнопку включить, я-ж ее отрубал уходя в прерывание!))))
in reg,GIMSK sbr reg,0b01000000 cbr reg,0b10000000 out GIMSK,reg
sbr flajki,0b10000000 ;Уйдёт в сон зная что следующее нажатие кнопы, вызавит RESET!(он праписан в самам верху прерывания)
sei ;-ато ведь и не сможет выйти из сна!
sleep ;-;-;-;-;-;-;-;-
NU_VSIO_UJE: sei
ldi reg,125 rcall PAUZA_65536 ;Пауза от дребезга.
cli ;В прерывании ведь дефолтам стаит запрет прерываний
in reg,GIMSK sbr reg,0b01000000 out GIMSK,reg ;В_ключить прерывание кнопки
;============+
pop reg_2 ;I
pop reg_1 ;I
pop reg ;I
out SREG,reg;I
pop reg ;I
reti;----------------------------------------------------
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
; -данные(в ОПЕРАТИВКЕ)-
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
CIFRKA:
.db 0b01000000,0b01111001 ;0 1
.db 0b00100100,0b00110000 ;2 3
.db 0b00011001,0b00010010 ;4 5
.db 0b00000010,0b01111000 ;6 7
.db 0b00000000,0b00010000 ;8 9
.db 0b01111111,0b01111111 ; zero
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
HymnUSSR: .db 19,24,24,32 ;союз
.db 19,24,21,8,23,32 ;неруши
.db 16,12,254,4,16,16,21,32 ;мый респу
.db 19,24,17,8,19,32 ;блик свобо
.db 12,12,254,4,12,16,14,32 ;дных сплоти
.db 14,16,16,16,17,32 ;ла наве
.db 17,16,19,16,21,32 ;ки вели
.db 23,24,24,8,26,16 ;кая Русь
.db 19,4,254,2,19,4,254,2,16,16,254,2 ;та-та-тааа
.db 19,16,28,32 ;да здра
.db 26,24,24,8,26,32 ;вствует со
.db 23,16,19,16,24,32 ;зданный во
.db 23,24,21,8,23,32 ;лей наро
.db 19,16,16,16,21,32 ;да вели
.db 19,16,17,16,19,32 ;кий могу
.db 14,16,12,16,24,32 ;чий Сове
.db 23,16,21,16,19,16 ;тский Союз
.db 19,4,254,2,19,4,254,2,21,16,23,16 ;та-та-тааа
.db 28,64,26,16,24,16,23,16,24,16,26,16 ;Сла-а-а-а вься-а-а-а-те
.db 254,2,19,4,254,2,19,4,254,2,19,12 ;та-та-та че
.db 254,4,18,12,254,4,19,12,254,4 ;ство тата
.db 19,16,21,16,23,16 ;ти-та
.db 24,64,23,16,21,16,19,16,21,16,23,16 ;На-а-а-а ше-е сва-а-бо
.db 254,2,16,4,254,2,16,4,254,2,16,12 ;та-та-та дно
.db 254,4,16,12,254,4,16,12,254,4 ;е-е-е тата
.db 16,16,17,16,19,16 ;ти-та
.db 21,32,17,16,19,16,21,32 ;дружбы наро
.db 17,24,19,8,21,32 ;дов надё
.db 17,16,21,16,26,64 ;жный оплот
.db 29,64,28,16,26,16,24,16,26,16,28,48 ;Па-а-а-а рти-и-я-а Ле
.db 24,12,254,4,24,64 ;нина-а-а-а
.db 26,64,24,16,23,16,21,16,23,16,24,48 ;Си-и-и-и ла-а на-а-ро
.db 21,12,254,4,21,16,19,16,21,16,23,16 ;дная-а-а-а
.db 24,32,23,24,21,8,19,32 ;нас к торжеству
.db 14,8,254,8,12,16,24,32 ;коммуни-и
.db 23,16,21,16,19,12,254,4,17,8,254,4,255,0 ;зма ведёт!
; до(263) до#(285) ре(297) ре#(316) ми(330) фа(351) фа#(375) соль(395) соль#(422)ля(440) ля#(474) си(494)
; 0 1 2 3 4 5 6 7 8 9 10 11
; 12 13 14 15 16 17 18 19 20 21 22 23
; 24 25 26 27 28 29 30 31 32 33 34 35
; до(263) до#(285) ре(297) ре#(316) ми(330) фа(351) фа#(375) соль(395) соль#(422)ля(440) ля#(474) си(494)
; 0 1 2 3 4 5 6 7 8 9 10 11
Notelist: .db 0x02,0x50,0x02,0x24,0x02,0x0e,0x01,0xed,0x01,0xd9,0x01,0xbc,0x01,0xa0,0x01,0x8b,0x01,0x72,0x01,0x63,0x01,0x49,0x01,0x3c;сред. октава
; 12 13 14 15 16 17 18 19 20 21 22 23
.db 0x01,0x28,0x01,0x12,0x01,0x07,0x00,0xf6,0x00,0xec,0x00,0xde,0x00,0xd0,0x00,0xc5,0x00,0xb9,0x00,0xb1,0x00,0xa4,0x00,0x9e;бол. октава
; 24 25 26 27 28 29 30 31 32 33 34 35
.db 0x00,0x94,0x00,0x89,0x00,0x83,0x00,0x7b,0x00,0x76,0x00,0x6f,0x00,0x68,0x00,0x62,0x00,0x5c,0x00,0x58,0x00,0x52,0x00,0x4f;1 октава
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
.DSEG
TIK_TAK: .BYTE 1 ; здесь 240 четвертьсекунд на декреминацию
POSLEDNIY_slot_L: .BYTE 1 ;
POSLEDNIY_slot_H: .BYTE 1 ;Память последнего значения
POSLEDNIY_TIK_TAK: .BYTE 1 ; четвертьсекунды
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
MelAddL: .byte 1
MelAddH: .byte 1
MemTemp1: .byte 1
MemTemp2: .byte 1 ; Память затем чтоб на 3 перемножить(там где несходится изза разных мегагерцОв)
;portD: .byte 1
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/
А логика работы должна была быть такой, ставишь точку, и идешь собирать грибы.. МК будит GPS по своему алгоритму, чем дальше ты от точки, тем реже, а когда приближаешся, чаще, вплоть до непрерывной работы..
Магнитометр дает такое преимущество, не нужно включать GPS и ждать поиск спутников(или носить с собой горсть батареек, и держать его всегда включенным), не нужно быстро двигаться, чтобы понять, где какое направление(сейчас в телефоны магнитометр встроен, но кто помнит прежние времена,. нужно было пройтись метров 10, чтобы по собственному движению понять направление).
Магнитометр-же практически ни чего не потребляет.. и стороны света тебе покажет, и направление к своей точке, мгновенно!.
.. Вобщем я раскурил магнитометр, ЖПС-модуль, написал программу.. Осталось все собрать, и тут как обычно пропал интерес, самое интересное и сложное уже сделано
Последние пол года страдаю Устройством_Опережения_Зажигания. Простое магу за день написать, но мне-ж с изысками подавай!.. Вот это и есть моя слабая сторона, со временем понимаю, что меня захватывает именно ПРОЦЕСС!, а не конечный результат.. Вот это меня и склонило к мысли, что нужно обратиться к тем, у кого конкретная задача, РЕЗУЛЬТАТ!. Тут глядишь и копейка какая появится
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18648
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Возьмусь за любой проектик на МК, мое хобби.
если вам нужны проекты-головоломки, чтобы, как вы выразились, добиться чумового эффекта, могу предложить одну идею
правда, на практике не проверенную - ну так вам же это и надо?
короче: добавьте в любой свой проект с индикатором на 7-сегментных светодиодах автоматическую регулировку яркости индикатора в зависимости от освещенности. только без любых дополнительных фоточувствительных компонентов: используйте тот факт, что светодиод является одновременно и фотодиодом, хоть и плохоньким. то есть заставьте один или несколько сегментов индикатора служить датчиком освещенности в моменты, когда эти сегменты не светятся.
сумеете?
короче: добавьте в любой свой проект с индикатором на 7-сегментных светодиодах автоматическую регулировку яркости индикатора в зависимости от освещенности. только без любых дополнительных фоточувствительных компонентов: используйте тот факт, что светодиод является одновременно и фотодиодом, хоть и плохоньким. то есть заставьте один или несколько сегментов индикатора служить датчиком освещенности в моменты, когда эти сегменты не светятся.
сумеете?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Возьмусь за любой проектик на МК, мое хобби.
[uquote="Faun",url="/forum/viewtopic.php?p=3444541#p3444541"]Простое магу за день написать, но мне-ж с изысками подавай!.. Вот это и есть моя слабая сторона, со временем понимаю, что меня захватывает именно ПРОЦЕСС!, а не конечный результат.. Вот это меня и склонило к мысли, что нужно обратиться к тем, у кого конкретная задача, РЕЗУЛЬТАТ!. Тут глядишь и копейка какая появится
, все-ж радость! Надоело заниматься программированием ради самого программирования.[/uquote]Есть у меня такая задача.
Сам в написании программ для МК не силён, поэтому несколько раз обращался сюда за помощью в написании простейших программ. Обращаться со сложной программой всё не хватало смелости, а тут Вы сами просите посложнее.

Вознаграждение естественно гарантируется.
Вознаграждение естественно гарантируется.
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. 
Всегда с уважением, Александр.
Всегда с уважением, Александр.
Re: Возьмусь за любой проектик на МК, мое хобби.
ARV Да, интересненькая идейка, мне такая в голову пака не приходила, как появится ей применение, вспомню ее и поразмыслю
.. С переключением ног в разные режимы, то вовсе не задача, там скорей с электроникой..
Кстати, из того-же разряда.. Например для таймера, я его как предельно простой позиционировал, и на схемке нарисовал один резистор для всего 7-сегментника(хоть и рекомендовал ставить как положено).. Короче можно было дописать прогу, чтобы слишком яркие(например "1") светились чуть меншее время, а например "8", подольше.. Это сгладило-бы эфект разной яркости. Правда косяк в том, что этот-же таймер как-бы очень неприхотлив к батарейкам, и когда они будут просаживаться, всеравно эфект начнет вылазить, но можно подобрать что-та средне.. Жаль что я об этом подумал уже когда марально поставил точку на проекте.
------------------------------
Вспомнил свой проект, выключатель света для аквариума(растения там, им свет нужен), и он несколько лет без сбоев работал, пака аквариум не сплавил..
Там программа была не так уж сложнА, интересен алгоритм.. Всего одна кнопка, и светодиод.
Логика работы такая, включаешь его в разетку в полночь. Ближе к вечеру(когда темнееет) нажимаеш кнопку, свет зажигается,.. и нажимаеш когда нужно выключить... МК считает ровно сутки, и повторяет этот цикл день за днем..
...а если вдруг пропал свет, и время сбросилось, то смотриш на часы,.. например 17 часов.. Прижимаешь кнопку, и ждешь когда светодиод маргнет 17-ть раз.. Отпускаешь, и он настраивается как-будто 17:00, и он работает в нормальном режиме.
А вот сейчас о том, в чем оказался интересный плюс этого выключателя!.. Чтобы знать что он правильно работает(настроен верно), светодиод маргает столько раз, сколько сейчас часов, потом пауза подольше. И это оказалось ароста суперско!.. Просыпаешься ночью, и думаешь, "а сколько-это мне еще спать, и на работу вставать?", смотришь на потолок(а в темноте маргание хорошо видно), и быстро вьезжаеш, 2, 4 или 5 часов сейчас.. Это оказалось реально клево и полезно!
------------------------------
korob, пишите в личку
.
Кстати, из того-же разряда.. Например для таймера, я его как предельно простой позиционировал, и на схемке нарисовал один резистор для всего 7-сегментника(хоть и рекомендовал ставить как положено).. Короче можно было дописать прогу, чтобы слишком яркие(например "1") светились чуть меншее время, а например "8", подольше.. Это сгладило-бы эфект разной яркости. Правда косяк в том, что этот-же таймер как-бы очень неприхотлив к батарейкам, и когда они будут просаживаться, всеравно эфект начнет вылазить, но можно подобрать что-та средне.. Жаль что я об этом подумал уже когда марально поставил точку на проекте.
------------------------------
Вспомнил свой проект, выключатель света для аквариума(растения там, им свет нужен), и он несколько лет без сбоев работал, пака аквариум не сплавил..
Там программа была не так уж сложнА, интересен алгоритм.. Всего одна кнопка, и светодиод.
Логика работы такая, включаешь его в разетку в полночь. Ближе к вечеру(когда темнееет) нажимаеш кнопку, свет зажигается,.. и нажимаеш когда нужно выключить... МК считает ровно сутки, и повторяет этот цикл день за днем..
...а если вдруг пропал свет, и время сбросилось, то смотриш на часы,.. например 17 часов.. Прижимаешь кнопку, и ждешь когда светодиод маргнет 17-ть раз.. Отпускаешь, и он настраивается как-будто 17:00, и он работает в нормальном режиме.
А вот сейчас о том, в чем оказался интересный плюс этого выключателя!.. Чтобы знать что он правильно работает(настроен верно), светодиод маргает столько раз, сколько сейчас часов, потом пауза подольше. И это оказалось ароста суперско!.. Просыпаешься ночью, и думаешь, "а сколько-это мне еще спать, и на работу вставать?", смотришь на потолок(а в темноте маргание хорошо видно), и быстро вьезжаеш, 2, 4 или 5 часов сейчас.. Это оказалось реально клево и полезно!
------------------------------
korob, пишите в личку
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18648
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Возьмусь за любой проектик на МК, мое хобби.
Хм... Говорят, у дураков мысли сходятся...
Ваш вариант с одним резисторов на разряд семисегментника был мною применен на несколько лет раньше, но с яркостью проблем не было, т.к. я использовал посегментную динамическую индикацию, а не поразрядную.
Таймер по вашему принципу я тоже делал, и ещё раньше, чем посегментную индикацию. Ещё на AT89C2051...
И, признаться, впервые с тех пор встречаю человека, которому интересен нестандартный подход к простым вещам.
Ваш вариант с одним резисторов на разряд семисегментника был мною применен на несколько лет раньше, но с яркостью проблем не было, т.к. я использовал посегментную динамическую индикацию, а не поразрядную.
Таймер по вашему принципу я тоже делал, и ещё раньше, чем посегментную индикацию. Ещё на AT89C2051...
И, признаться, впервые с тех пор встречаю человека, которому интересен нестандартный подход к простым вещам.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Возьмусь за любой проектик на МК, мое хобби.
Такие люди перевелись с "потребительством", (думать не нада, просто найди что тебе наужно). Прогресс дает все решения, и цена вопроса пара копеек.
Я наверное был-бы "интрошечником", родись покаление раньше... Наверное вы видели визуально-потрясающие ролики, созданные из 256 килобайт кода?. Сейчас это не удивит ни кого, т.к. килобайты уже не имеют значения... Возьми микруху в 20! раз мощнее (а по цене в полтора дороже), и эти фокусы просто пшик
Вот и ишу свое место в жизни, когда задачу нужно решать методом баллистика, каждый такт, решение!
..Но после таких задач, тривиальные решаются на раз!
но вдруг копейку подбросят.
Я наверное был-бы "интрошечником", родись покаление раньше... Наверное вы видели визуально-потрясающие ролики, созданные из 256 килобайт кода?. Сейчас это не удивит ни кого, т.к. килобайты уже не имеют значения... Возьми микруху в 20! раз мощнее (а по цене в полтора дороже), и эти фокусы просто пшик
Вот и ишу свое место в жизни, когда задачу нужно решать методом баллистика, каждый такт, решение!
..Но после таких задач, тривиальные решаются на раз!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18648
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Возьмусь за любой проектик на МК, мое хобби.
Я видел потрясающие "ролики" всего в 64 килобайта 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Возьмусь за любой проектик на МК, мое хобби.
Раньше проводились конкурсы, и были различные номинации, для разных килобайт и под разное железо. На сайтах лежали десятки и сотни таких творений в каждой папке..(правда большинство не запускаются, или убоги(на фоне прочих), но победители в отдельных папках, хватало и без них).
Жаль что это вымерло,.. отношение к программированию как к искусству, стремление к совершенству.
Вот, сходу нашел один из них http://chaostheory.conspiracy.hu/downloads.php или если комп не тянет(у меня видюха дохлая), можно на ютубе посмотреть.. https://www.youtube.com/watch?v=ZfuierUvx1A
Вот здесь https://www.youtube.com/channel/UC96JVq ... AkIkKp1_6w лежит МНОГО видюшек, можно позалипать.. И не ленитесь читать, сколько килобайт ЭТО весит
А это кажись был моим любимым 117 кб. https://www.youtube.com/watch?v=mxfmxi- ... m0QuM1CAy3 Целый город отгрохали(а потом угрохали)!
Качнуть можно здесь,.. https://files.scene.org/view/parties/20 ... debris.zip Заодно проверите как комп тянет
. Создавалось в 2007-ом
"Хэло ворд" обычно весит больше
Жаль что это вымерло,.. отношение к программированию как к искусству, стремление к совершенству.
Вот, сходу нашел один из них http://chaostheory.conspiracy.hu/downloads.php или если комп не тянет(у меня видюха дохлая), можно на ютубе посмотреть.. https://www.youtube.com/watch?v=ZfuierUvx1A
Вот здесь https://www.youtube.com/channel/UC96JVq ... AkIkKp1_6w лежит МНОГО видюшек, можно позалипать.. И не ленитесь читать, сколько килобайт ЭТО весит
А это кажись был моим любимым 117 кб. https://www.youtube.com/watch?v=mxfmxi- ... m0QuM1CAy3 Целый город отгрохали(а потом угрохали)!
Качнуть можно здесь,.. https://files.scene.org/view/parties/20 ... debris.zip Заодно проверите как комп тянет
"Хэло ворд" обычно весит больше
Re: Возьмусь за любой проектик на МК, мое хобби.
[uquote="Faun",url="/forum/viewtopic.php?p=3445286#p3445286"]Раньше проводились конкурсы, и были различные номинации, для разных килобайт и под разное железо. На сайтах лежали десятки и сотни таких творений в каждой папке..(правда большинство не запускаются, или убоги(на фоне прочих), но победители в отдельных папках, хватало и без них).
Жаль что это вымерло,.. отношение к программированию как к искусству, стремление к совершенству.[/uquote]
Ничего никуда не делось, только на одной "Revision 2017" demoparty было 93 демки, для разных платформ, от 4К.
Жаль что это вымерло,.. отношение к программированию как к искусству, стремление к совершенству.[/uquote]
Ничего никуда не делось, только на одной "Revision 2017" demoparty было 93 демки, для разных платформ, от 4К.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18648
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Возьмусь за любой проектик на МК, мое хобби.
Ага... Было. Только в 2017 году в демке на 4к на самом деле задействован графический движок из системы, а в нем весу несколько десятков мегабайт, если не больше. Нечестное сравнение.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Возьмусь за любой проектик на МК, мое хобби.
[uquote="ARV",url="/forum/viewtopic.php?p=3445357#p3445357"]Ага... Было. Только в 2017 году в демке на 4к на самом деле задействован графический движок из системы, а в нем весу несколько десятков мегабайт, если не больше. Нечестное сравнение.[/uquote]
С таким подходом только на тиньках и остается писать, потому что вполне возможно даже для создания пустого окна уже потребуется загрузить dll-ок на мегабайты
С таким подходом только на тиньках и остается писать, потому что вполне возможно даже для создания пустого окна уже потребуется загрузить dll-ок на мегабайты
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18648
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Возьмусь за любой проектик на МК, мое хобби.
Именно так. Демки изначально затачивались под DOS, где о графике и графическом драйвере даже думать никто не мог. И тем интереснее было видеть, как из каждого байта выжимается максимум, например, как текстуры одновременно были и мелодиями и скриптами движения.
А сейчас уже совсем не то. Скоро демкой будут звать питоновскую строчку, запускающую плейер...
А сейчас уже совсем не то. Скоро демкой будут звать питоновскую строчку, запускающую плейер...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Возьмусь за любой проектик на МК, мое хобби.
[uquote="Faun",url="/forum/viewtopic.php?p=3444456#p3444456"]Все лежит на компе, в горах исходников (в основном недописанных)
.
если-б цель, заработать денег была-б в приоритете, взялся-б портфолио собирать,. А так лень.
По ссылочке один из них. т.с. подтверждение что это не сказки.[/uquote]
Выкладывайте на гитхабе. Это снимает кучу вопросов, и дает бонусные ачивки к квалификации
У меня пока не дошли руки до этой задачи https://radiokot.ru/forum/viewtopic.php?f=53&t=155360. Был бы рад если бы кто-нибудь присоединился. Правда не AVR и не ассемблер, но будет не стыдно тыкать пальцем, указывая в достижениях.
если-б цель, заработать денег была-б в приоритете, взялся-б портфолио собирать,. А так лень.
По ссылочке один из них. т.с. подтверждение что это не сказки.[/uquote]
Выкладывайте на гитхабе. Это снимает кучу вопросов, и дает бонусные ачивки к квалификации
У меня пока не дошли руки до этой задачи https://radiokot.ru/forum/viewtopic.php?f=53&t=155360. Был бы рад если бы кто-нибудь присоединился. Правда не AVR и не ассемблер, но будет не стыдно тыкать пальцем, указывая в достижениях.
Re: Возьмусь за любой проектик на МК, мое хобби.
Почитал, очень непонятно пишите(возможно для того, кого вы ищите все понятно)..pvit писал(а):У меня пока не дошли руки до этой задачи https://radiokot.ru/forum/viewtopic.php?f=53&t=155360. Был бы рад если бы кто-нибудь присоединился.
...Так-что просто поделюсь своим опытом размышлений на эту тему...
Последний мой проект. был круто-нафаршированный Устройство_Опережения_Зажигания(УОЗ). Хотелось добавить туда ВСЁ, на все случаи жизни... Например у любого зажигания по разному расположены датчики, (ориентируясь на которые УОЗ определяет время искры, могут быть доролниетельные устройства, датчики разряжения на входе в карбюратор, положения заслонки,.. датчики температуры и может что-та еще.. Сперва писал программу так, что это ВСЁ сразу было включено, но выставляя переменную, которая определяте, какие функции программа будет использовать, а какие нет.. В результате получился жуткий фарш (НО и ЕСЛИ)..
..Тогда решил писать программу в другом стиле.. Все наверное помнят приставки Дэнди и пр. к ним продавались картриджи, и на некоторых было по ТЫСЯЧЕ игр.. По детской наивности казалось что это МЕГА-картридж, но на поверку оказывалось, что все игры внутри, это просто разные вариации нескольких разных.
Короче програмисты писали функции из которых по сути на 98% состаит игра, а потом писали в основной функции ссылались на дополнительные. Получается, чтобы написать другую игру, нужен час, и пара десятков килобайт, и можно проделать такой трюк, как "1000 игр!"
В общем я думаю сл. версию УОЗ делать по такому принципу, некая переменная будет определять, на какой код перепрыгнет при включении программа, В каждой из них будет ВСЁ ТОЛЬКО ОСНОВНОЕ!.. а функции можно просто сложить в общую стопкоу. Впрочем ни чего нового, так все и должно быть.
... Это такая большая присказка, а сказка,.. Раз уж оно такое универсальное, значит управлять этим "много(безо)/бразием" нужно как-то удобнее. Решил что лучше всего это будет мобилка, т.к. в ней есть все безпроводные интерфейсы, мне по душе именно блютуз.. Начал ковырять, с помощью чего можно легко сделать прогу для мобилки. Оказалось что "Pithon" самое оно!. Во первых он задуман как максимально простой(не сравнить с Си), и является интерпретируемым(т.е. не код на выходе формируется, а блок используемых в программе функций, а сама программ преобразуется в просто более компактный набор байт, который просто дублирует текстовый вариант). Фишка оказалась в том, что из-за растущей популярности, и заложенной "крос-платформенности", сейчас наделали стООлька библиотек, модулей и инструментов облегчения создания программ. что пиши под что хочеш!, даже что хочеш(вплоть трёх-дэшных игр).
..от программирования мне нужно по сути не много, сделать окошко(есть модуль, в котором просто мышкой рисуеш окно какое тебе нравится), выводить графики(есть библиотеки, бери и пользуй, учить ничего не нада).. Вводить в поля свои цифры(в первом уроке о переменных, просто пишеш input, и переменной присваивается значение), и кое-какие манипуляции, +-/*... Сохранить в файл, было в 4-ом уроке, команда "оpen" присваивает переменной содержимое файла, (и в ковычках, "w(т.е. открыть как сохраняемый)"), чтобы при закрытии файла содержимое переменной сохранилось в файл,.. ну не красота-ли?!
.....Мне еще предстоит найти библиотеку, которая открывает блютуз... Но теперь я ТОЧНО знаю, что там все будет примерно так-же "открыть, включить, отправить.."
Я когда-то пытался раскурить макросы в терминале, чтобы сделать простейшую обработку полученых от МК цифр.. Наверное освоить питона, и написать свой терминал не многим сложнее, А приятный бонус, потом можно создавать все что угодно, под любые платформы, и все заточено чтобы любой чайник мог сразу всё!. Так-что рекомендую не проходить мимо, если хотите расширить возможности своих творений на МК.
Конечно-же С++ много круче, но осваивать его для простеньких прог для связи с компом, серавно что покупать промышленный пневмо-молоток, когда нужно просто забить гвоздь.
Re: Возьмусь за любой проектик на МК, мое хобби.
[uquote="Faun",url="/forum/viewtopic.php?p=3445852#p3445852"]Конечно-же С++ много круче, но осваивать его для простеньких прог для связи с компом, серавно что покупать промышленный пневмо-молоток, когда нужно просто забить гвоздь.[/uquote]
За это мне и нравится си - можно и прошивку микроконтроллера писать, и программу для компа (по крайней мере, консольные - на раз). Что-нибудь чисто-алгоритмическое при правильном подходе даже можно отладить на компе собирая под x86 а потом перенести на процессор. Я правда с STM32 развлекаюсь и под Linux.
За это мне и нравится си - можно и прошивку микроконтроллера писать, и программу для компа (по крайней мере, консольные - на раз). Что-нибудь чисто-алгоритмическое при правильном подходе даже можно отладить на компе собирая под x86 а потом перенести на процессор. Я правда с STM32 развлекаюсь и под Linux.
Re: Возьмусь за любой проектик на МК, мое хобби.
И для SMT питоны есть. ..поговаривают что и для AVR-ок.
Нужно взвешивать свои потребности, и возможности.. Как-бы не скатилось в извечный спор, какоя язык самый лучший
Нужно взвешивать свои потребности, и возможности.. Как-бы не скатилось в извечный спор, какоя язык самый лучший


