Стробоскоп на светодиодах.
Стробоскоп на светодиодах.
Здравствуйте все.
Не стал поднимать темы 2х годичной давности, поэтому создал новую.
Закончил делать схему управления, встал вопрос в светодиодах и с этим связанного.
В электронике я глубоко начинающий, а в оптике вообще дерево беспросветное.
Отсюда несколько вопрос:
В 2х темах о светодиодных стробах что существуют на сем форуме, ни в одной не пришли к окончательному выводу на каких светодиодах лучше сделать. (Оба автора делали на небольшое помещение, но так и не отписались что получилось и на чем сделали)
Собственно что выбрать ? Пару тройку дорогих (300р+) или множество дешевых ярких.
И хотелось бы конкретные модели, которые не проблема достать, если можно конечно.
Не стал поднимать темы 2х годичной давности, поэтому создал новую.
Закончил делать схему управления, встал вопрос в светодиодах и с этим связанного.
В электронике я глубоко начинающий, а в оптике вообще дерево беспросветное.
Отсюда несколько вопрос:
В 2х темах о светодиодных стробах что существуют на сем форуме, ни в одной не пришли к окончательному выводу на каких светодиодах лучше сделать. (Оба автора делали на небольшое помещение, но так и не отписались что получилось и на чем сделали)
Собственно что выбрать ? Пару тройку дорогих (300р+) или множество дешевых ярких.
И хотелось бы конкретные модели, которые не проблема достать, если можно конечно.
- m.ix
- Друг Кота
- Сообщения: 16545
- Зарегистрирован: Вт сен 07, 2010 03:01:06
- Откуда: Moscow-Izmaylovo
- Контактная информация:
Re: Стробоскоп на светодиодах.
любой ставь
супер пупер мега яркий
радиатор по любому будет требоватся
но уже не такой массивный, если конечно в виде фонарика не будешь юзать их.
снимал со вспышкой!
Но не забываем про собирающие линзы.
супер пупер мега яркий
радиатор по любому будет требоватся
но уже не такой массивный, если конечно в виде фонарика не будешь юзать их.
снимал со вспышкой!Но не забываем про собирающие линзы.
Лечу лечить WWWашу покалеченную технику.
Re: Стробоскоп на светодиодах.
И почем такие ? Можно модельку того круглого побольше и плоского пониже ? 
- m.ix
- Друг Кота
- Сообщения: 16545
- Зарегистрирован: Вт сен 07, 2010 03:01:06
- Откуда: Moscow-Izmaylovo
- Контактная информация:
Re: Стробоскоп на светодиодах.
полоски от полутора тысяч
Кругляшки маленькие тоже полторы
Большие 4-5тр
марки не записал.
На ободах надписи есть

сверху силикон или типа того, так что когдтём выцарапать возможно кристаллик светодиода
Кругляшки маленькие тоже полторы
Большие 4-5тр
марки не записал.
На ободах надписи есть
Спойлер

сверху силикон или типа того, так что когдтём выцарапать возможно кристаллик светодиода
Лечу лечить WWWашу покалеченную технику.
Re: Стробоскоп на светодиодах.
Не гуглятся по надписям, да и дорого через чур, мне бы пару штук по 300-400р.
Такого хватит для площади 30квМ ?
Такого хватит для площади 30квМ ?
- m.ix
- Друг Кота
- Сообщения: 16545
- Зарегистрирован: Вт сен 07, 2010 03:01:06
- Откуда: Moscow-Izmaylovo
- Контактная информация:
Re: Стробоскоп на светодиодах.
где собрался стробоскопить?
в авто - выставлять время зажигания
в клубе - выставлять .....
в авто - выставлять время зажигания
в клубе - выставлять .....
Лечу лечить WWWашу покалеченную технику.
Re: Стробоскоп на светодиодах.
Пока выставлено 30 мс на вспышку в бит и 30мс на вспышку при мерцании. Учитывая что планирую еще 2 режима с авто выбором, то все это буду настраивать по ходу.
Пока надо работоспособный прототип сварганить.
Пока надо работоспособный прототип сварганить.
Re: Стробоскоп на светодиодах.
Выбор пал на 4 штуки CXA1507-0000-000N00G40E3
Вот даташит
http://www.terraelectronica.ru/pdf/CREE/CXA1507.pdf
Как выбор господам ?
Вот даташит
http://www.terraelectronica.ru/pdf/CREE/CXA1507.pdf
Как выбор господам ?
Re: Стробоскоп на светодиодах.
Решил почти полностью отказаться от дисркретки и начать сразу делать на контроллере.
Кодю первый раз, можно сказать на это и учусь (Все знают с какого сайта)
Получилось примерно следующие, пока все дошло только до начала определения BPM, но для меня было то еще задание.
Прошу старожил кодинга проверить, насколько уродски и можно ли это оптимизировать ?
Да, код для ATMega16
Кодю первый раз, можно сказать на это и учусь (Все знают с какого сайта)
Получилось примерно следующие, пока все дошло только до начала определения BPM, но для меня было то еще задание.
Прошу старожил кодинга проверить, насколько уродски и можно ли это оптимизировать ?
Спойлер
Код: Выделить всё
; RAM =================
.DSEG ; Сегмент ОЗУ
.ORG SRAM_START+100
BCount: .byte 2 ;Переменная счетчик ударов
; FLASH ===============
.CSEG ; Кодовый сегмент
.ORG 0x000000
JMP Reset
;######################Константы######################
.equ Bar = 4 ;Константа такт
.equ Square = 16 ;Константа квадрат
.equ DSquare = 32 ;Константа двойка
.def FBeat = R21 ;Флаг первый бит
.def AllClear = R20 ;Флаг ресет выполнен
;######################################################
;========Сброс счетчика========
ClrCounter: LDI XL,(BCount) ; Загрузка адреса счетчика
CLR R16 ; Обнуление регистра
ST X,R16 ; Запись значения счетчика
RET
;========Инициализация========
Reset: LDI R16,low(RAMEND) ;Инициализация стека
OUT SPL,R16
LDI R16,HIGH(RAMEND)
OUT SPH,R16
RCALL ClrCounter ;Очистка памяти
LDI R20,1 ;Флаг "Ресет выполнен"
JMP WStart ;Ожидание подачи сигнала
;========Ожидание подачи сигнала========
WStart: RCALL CheckOn ;Вызов подпрограммы проверки подачи сигнала
CLR R20 ;Очистка флага "ресет выполнен"
JMP MainLoop ;Пререход в диспетчер
;========Проверка сигнала включения========
CheckOn: SBIC PIND,7 ;Проверка пина "подачи сигнала"
RET ;Возврат из подпрограммы (Если сигнал присутствует)
CPI R20,1 ;Проверка флага "Ресет выполнен"
BRNE Reset ;Если ресет не выполнен, выполнить
JMP CheckON ;Если ресет выполнен, ожидать сигнала.
;========Диспетчер========Диспетчер========Диспетчер========Диспетчер========
Mainloop: RCALL CheckOn ;Вызов подпрограммы проверки подачи сигнала
RCALL BOnCheck ;Вызов подпрограммы проверки наличия первого ударного
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
JMP Mainloop
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;========Проверка 1ого ударного========
BOnCheck: SBRC FBeat,0 ;Проверка флага "1 бит"
RET ;Если стоит, то возврат в диспетчер с продолжением цикла
SBIS PIND,6 ;Если нет, проверка пина, на наличие сигнала
JMP PC+4 ;Если нет сигнала, прыжок на 4 такта вниз ---->
LDI FBeat,1 ;Если есть сигнал, поднимаем флаг
RET ;И возвращаемся в диспетчер, с продолжением цикла.
POP R16 ;----> Вытаскиваем адрес из стека, что бы не было переполнения
POP R16
JMP Mainloop ;Возврат в диспетчер, с рестартом цикла
Да, код для ATMega16
- maglev
- Потрогал лапой паяльник
- Сообщения: 316
- Зарегистрирован: Пт апр 17, 2009 22:45:42
- Откуда: Minsk
- Контактная информация:
Re: Стробоскоп на светодиодах.
Я-бы писал на Си.
Не вникал в код, но что-то вызываемое "RCALL BOnCheck" заканчивается таким:
POP R16 ;----> Вытаскиваем адрес из стека, что бы не было переполнения
POP R16
JMP Mainloop ;Возврат в диспетчер, с рестартом цикла
зачем? Не проще-ли RET?
Не вникал в код, но что-то вызываемое "RCALL BOnCheck" заканчивается таким:
POP R16 ;----> Вытаскиваем адрес из стека, что бы не было переполнения
POP R16
JMP Mainloop ;Возврат в диспетчер, с рестартом цикла
зачем? Не проще-ли RET?
Re: Стробоскоп на светодиодах.
maglev писал(а):Я-бы писал на Си.
Не вникал в код, но что-то вызываемое "RCALL BOnCheck" заканчивается таким:
POP R16 ;----> Вытаскиваем адрес из стека, что бы не было переполнения
POP R16
JMP Mainloop ;Возврат в диспетчер, с рестартом цикла
зачем? Не проще-ли RET?
Если будет RET, то он продолжит цикл, а надо именно с рестартом.
Re: Стробоскоп на светодиодах.
Дописал счетчик BPM и поддерживающий генератор BPM
Мб кто-то все таки заинтересуется. Все прокомментировано по максимуму.
Мб кто-то все таки заинтересуется. Все прокомментировано по максимуму.
Спойлер
Код: Выделить всё
.include "tn25def.inc"
;= Start macro.inc ====
;= End macro.inc ====
; RAM =================
.DSEG ; Сегмент ОЗУ
.ORG SRAM_START+100
BCount: .byte 2 ;Переменная счетчик ударов
; FLASH ===============
.CSEG ; Кодовый сегмент
.ORG 0x000000
RJMP Reset
; ***** INTERRUPT VECTORS ************************************************
.ORG 0x0001
RJMP TC
.ORG 0x0002
RETI
.ORG 0x0003
RJMP TC4
.ORG 0x0004
RJMP TC3
.ORG 0x0005
RJMP RTClock
.ORG 0x0006
RETI
.ORG 0x0007
RETI
.ORG 0x0008
RETI
.ORG 0x0009
RETI
.ORG 0x000A
RETI
.ORG 0x000B
RETI
.ORG 0x000C
RETI
.ORG 0x000D
RETI
.ORG 0x000E
RETI
;######################Константы######################
.equ Bar = 4 ;Константа такт
.equ Square = 16 ;Константа квадрат
.equ DSquare = 32 ;Константа двойка
.def AllClear = R20 ;Флаг ресет выполнен
.def TimerON = R21 ;Флаг таймер запущен
.def RTCHigh = R22 ;Сарший байт RTC(Часы)
.def RTCLow = R23 ;Младший байт RTC(Часы)
.def TCO1High = R24 ;Сарший байт TCO(Точка начала отсчета BTC)
.def TCO1Low = R25 ;Младший байт TCO(Точка начала отсчета BTC)
.def TCN1High = R26 ;Сарший байт TCN(Точка конца отсчета BTC)
.def TCN1Low = R27 ;Младший байт TCN(Точка конца отсчета BTC)
.def BTCHigh = R28 ;Старший байт BTC(Часы BTC)
;######################################################
;====
;========Инициализация===================
;====
Reset: LDI R16,RAMEND ;Инициализация стека
OUT SPL,R16
CLR R0
CLR R1
CLR R2
CLR R3
CLR R4
CLR R5
CLR R6
CLR R7
CLR R8
CLR R9
CLR R10
CLR R11
CLR R12
CLR R13
CLR R14
CLR R15
CLR R16
CLR R17
CLR R18
CLR R19
CLR R20
CLR R21
CLR R22
CLR R23
CLR R24
CLR R25
CLR R26
CLR R27
CLR R28
CLR R29
CLR R30
CLR R31
ORI R16,1<<6|1<<2 ;Устанавливаем маску ИЛИ на 7й и 3ий биты регистра R16
OUT GIMSK,R16 ;Разрешаем внешние прерывания
OUT PCMSK,R16 ;По пину PB3
ORI R16,1<<1|1<<0 ;Устанавливаем маску ИЛИ на 1й и 2ой биты регистра R16
OUT MCUCR,R16 ;Устанавливаем прерывания по нарастающему импульсу.
LDI AllClear,1 ;Флаг "Ресет выполнен"
SEI ;Разрешаем прерывания глобально
RJMP WStart ;Ожидание подачи сигнала
;====
;========Конец инициализации=============
;====
;========Ожидание подачи сигнала========
WStart: RCALL CheckOn ;Вызов подпрограммы проверки подачи сигнала
CLR R20 ;Очистка флага "ресет выполнен"
RJMP MainLoop ;Пререход в диспетчер
;========Проверка сигнала включения========
CheckOn: RET
SBIC PINB,0 ;Проверка пина "подачи сигнала"
RET ;Возврат из подпрограммы (Если сигнал присутствует)
CPI R20,1 ;Проверка флага "Ресет выполнен"
BRNE Reset ;Если ресет не выполнен, выполнить
RJMP CheckON ;Если ресет выполнен, ожидать сигнала.
;========Диспетчер========Диспетчер========Диспетчер========Диспетчер========
Mainloop: RCALL CheckOn ;Вызов подпрограммы проверки подачи сигнала
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RJMP Mainloop
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;*=*=*=*=*=*=*=*=*=*=*=*=*=Счетчик BPM*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
;========Инициализация таймера RTC========
TC: CLR R16
SBRC TimerON,0 ;Если таймер запущен, то переходим, если нет прыгаем через такт и запускаем
RJMP TC1 ;Таймер запущен, значит пришел 2ой удар и можно высчитать BPM и запустить внутренний таймер.
ORI R16,1<<0 ;Накладываем маску ИЛИ 00000001
OUT TCCR0B,R16 ;Закидываем в таймер (программируем на счет тактовой частоты)
ORI R16,1<<1 ;Накладываем маску ИЛИ 00000010
OUT TIMSK,R16 ;Закидываем в таймер (разрешаем прерывания по переполнению)
LDI TimerON,1 ;Ставим флаг "Таймер запущен"
SEI ;Разрешаем прерывания глобально
RETI ;Уходим в диспетчер
;========Инициализация таймера BTC========
TC1: CLR R16 ;Очищяем R16
OUT TCCR1,R16 ;Останавливаем таймер BPM
MOV TCO1Low,TCN1Low ;Время нового удара, становится временем старого
MOV TCO1High,TCN1High ;Время нового удара, становится временем старого
IN TCN1Low,TCNT0 ;Настоящее время, становится временем нового удара
MOV TCN1High,RTCHigh ;Настоящее время, становится временем нового удара
OUT TCNT1,TCO1Low ;Устанавливаем точку начала отсчета, равную точке старого удара
MOV BTCHigh,TCO1High ;Устанавливаем точку начала отсчета, равную точке старого удара
ORI R16,1<<0 ;Накладываем маску ИЛИ на 1ый бит
OUT TCCR1,R16 ;Запускаем Таймер BPM
IN R16,TIMSK ;Берем регистр TIMSK
ORI R16,1<<2 ;Накладываем маску на ИЛИ на 3ий бит
OUT TIMSK,R16 ;Запускаем прерывания по переполнению
OUT OCR1A,TCN1Low ;Закидываем младший байт точки конца отсчета для сравнения.
ORI R16,1<<6 ;Накладываем маску ИЛИ на 6ой бит TIMSK
OUT TIMSK,R16 ;Запускаем прерывания по совпадению с регистром A
RETI ;JESUS CHRIST IT’S A RETI GET IN THE MAINLOOP !!!!
;========Переполнение регистра BTC========
TC3: INC BTCHigh ;Увеличиваем стайрший байт BTC
CPI BTCHigh,4 ;Сравниваем с точкой переполнения
BRLO PC+2 ;Если не равно, проваливаем
CLR BTCHigh ;Если равно, обнуляем
RETII: RETI ;Проваливаем
;========Совпадение регистра сравнения с счетным регистром BTC========
TC4: CP BTCHigh,TCN1High ;Сравниваем старший байт BTC с старшим байтом точки конца отсчета.
BRNE RETII ;Не равен, сваливаем
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RETI
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;========Это часы реального времени, они считают========
RTClock: INC RTCHigh ;При переполнении младщего 8 битного регистра увеличиваем старший байт RTC
CPI RTCHigh,4 ;Сравниваем с точкой переполнения
BRLO PC+2 ;Если не равно, уходим на RETI
CLR RTCHigh ;Если равно, очистим, прошла секунда.
RETI ;Уходим
; EEPROM ==============
.ESEG ; Сегмент EEPROMRe: Стробоскоп на светодиодах.
Вот сделал схему, если кто залезет, гляньте краем глаза.

И новый код.

И новый код.
Спойлер
Код: Выделить всё
.include "tn25def.inc"
;= Start macro.inc ====
;= End macro.inc ====
; RAM =================
.DSEG ; Сегмент ОЗУ
.ORG SRAM_START+100
BCount: .byte 2 ;Переменная счетчик ударов
; FLASH ===============
.CSEG ; Кодовый сегмент
.ORG 0x000000
RJMP Reset
; ***** INTERRUPT VECTORS ************************************************
.ORG 0x0001
RJMP IC ;Прерывание по импульсу
.ORG 0x0002
RETI
.ORG 0x0003
RETI
.ORG 0x0004
RETI
.ORG 0x0005
RJMP RTClock ;Переполнение таймера RTC
.ORG 0x0006
RETI
.ORG 0x0007
RETI
.ORG 0x0008
RETI
.ORG 0x0009
RETI
.ORG 0x000A
RJMP IC2 ;Совпадение регистра сравнения A таймера RTC
.ORG 0x000B
RJMP RTClock1 ;Совпадение регистра сравнения B таймера RTC
.ORG 0x000C
RETI
.ORG 0x000D
RETI
.ORG 0x000E
RETI
;######################Константы######################
.equ Bar = 4 ;Константа такт
.equ Square = 16 ;Константа квадрат
.equ DSquare = 32 ;Константа двойка
.def RTCHigh = R18 ;Старший байт RTC(Часы)
.def StartTimeH = R19 ;Старший байт Первого импульса
.def StartTimeL = R20 ;Младший байт Первого импульса
.def EndTimeH = R21 ;Старший байт Второго импульса
.def EndTimeL = R22 ;Младший байт Второго импульса
.def SEndTimeH = R23
.def SEndTimeL = R24
.def AEndTimeH = R25
.def AEndTimeL = R26
;######################################################
;====
;========Инициализация===================
;====
Reset: LDI R16,RAMEND ;Инициализация стека
OUT SPL,R16
CLR R0
CLR R1
CLR R2
CLR R3
CLR R4
CLR R5
CLR R6
CLR R7
CLR R8
CLR R9
CLR R10
CLR R11
CLR R12
CLR R13
CLR R14
CLR R15
CLR R16
CLR R17
CLR R18
CLR R19
CLR R20
CLR R21
CLR R22
CLR R23
CLR R24
CLR R25
CLR R26
CLR R27
CLR R28
CLR R29
CLR R30
CLR R31
;==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!
LDI R16,7 ;Грузим в R16 0000 0111
OUT DDRB,R16 ;Вводим порт PB1 режим выхода
;==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!==УДАЛИТЬ ПОСЛЕ ДЕГБАГА !!!!!!!!!
;==Инициализация I\O и их прерываний
LDI R16,7 ;Грузим в R16 0000 0111
OUT PORTB,R16 ;Вводим порты PB0,PB1,PB2 режим PULL UP
LDI R16,2 ;Грузим в R16 0000 0010
OUT DDRB,R16 ;Вводим порт PB1 режим выхода
IN R16,MCUCR ;Загружаем регистр MCUCR
ORI R16,1<<1 ;Применяем маску ИЛИ 0000 0010 к регистру MCUCR
OUT MCUCR,R16 ;Возвращяем регистр MCUCR обратно
IN R16,GIMSK ;Загружаем регистр GIMSK
ORI R16,1<<6 ;Применяем маску ИЛИ 0100 0000 к регистру GIMSK
OUT GIMSK,R16 ;Возвращяем регистр GIMSK обратно
;==Инициализация таймера RTC========
;Разрешаем прерывания по переполнению таймера
IN R16,TIMSK ;Загружаем регистр TIMSK
ORI R16,1<<1 ;Применяем маску ИЛИ 00000010 к регистру TIMSK
OUT TIMSK,R16 ;Закидываем в таймер (разрешаем прерывания по переполнению)
;Програмируем таймер на счет тактовой частоты и запускаем
IN R16,TCCR0B ;Загружаем регистр TCCR0B
ORI R16,1<<0 ;Применяем маску ИЛИ 00000001 к регистру TCCR0B
OUT TCCR0B,R16 ;Возвращяем регистр TCCR0B обратно
SEI ;Разрешаем прерывания глобально
RJMP MainLoop ;Ожидание подачи сигнала
;====
;========Конец инициализации=============
;====
;========Диспетчер========Диспетчер========Диспетчер========Диспетчер========
Mainloop: NOP
NOP
NOP
NOP
NOP
NOP
RJMP Mainloop
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;*=*=*=*=*=*=*=*=*=*=*=*=*=Счетчик BPM*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
IC: Mov StartTimeH,EndTimeH
Mov StartTimeL,EndTimeL
Mov EndTimeH,RTCHigh
IN EndTimeL,TCNT0
RJMP Calc
IC1:
;==Очистим флаг регистра сравнения A==
IN R16,TIFR ;Загружаем регистр TIFR в R16
ANDI R16,16 ;Накладываем маску И 0001 0000 на регистр TIFR
OUT TIFR,R16 ;Загружаем R16 в регистрн TIFR тем самым очищяя флаг регистра сравнения A
;==Програмируем таймер генерировать прерывания по совпадению с регистром сравнения A
OUT OCR0A,AEndTimeL ;Выводим ACT в регистр сравнения A
IN R16,TIMSK ;Загружаем регистр TIMSK в R16
ORI R16,1<<4 ;Накладываем маску ИЛИ 0001 0000 на регистр TIMSK
OUT TIMSK,R16 ;Загружаем R16 в регистрн TIMSK тем самым разрешая прерывания по совпадению.
RETI
IC2: CP AEndTimeH,RTCHigh
BRNE IC3
CBI PORTB,1
LDI R17,1
RCALL IC
IC3: RETI
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;========Аспирант======
;EndTime subtrackt StartTime
Calc: Mov SEndTimeL,EndTimel
Mov SEndTimeH,EndTimeH
sub SEndTimeL,StartTimel
sbc SEndTimeH,StartTimeH
Mov AEndTimeL,EndTimel
Mov AEndTimeH,EndTimeH
add AEndTimeL,SEndTimeL
adc AEndTimeH,SEndTimeH
CPI AEndTimeH,128
BRLO Calc1
SUBI AEndTimeH,128
Calc1: RJMP IC1
;========Это часы реального времени, они считают========
RTClock: CPI R17,1
BRNE RTClockAB
SBI PORTB,1
CLR R17
RTClockAB: INC RTCHigh ;При переполнении младщего 8 битного регистра увеличиваем старший байт RTC
CPI RTCHigh,128 ;Сравниваем с точкой переполнения
BRLO RTCRETI ;Если не равно, уходим на RETI
;Если равно, досчитываем
;==Очистим флаг регистра сравнения B==
IN R16,TIFR ;Загружаем регистр TIFR в R16
ANDI R16,8 ;Накладываем маску И 0000 1000 на регистр TIFR
OUT TIFR,R16 ;Загружаем R16 в регистрн TIFR тем самым очищяя флаг регистра сравнения B
;==Програмируем таймер досчитать последние 128 тактов секунды
LDI R16,128 ;Загружаем в R16 128
OUT OCR0B,R16 ;Выводим 128 в регистр сравнения B
IN R16,TIMSK ;Загружаем регистр TIMSK в R16
ORI R16,1<<3 ;Накладываем маску ИЛИ 0000 1000 на регистр TIMSK
OUT TIMSK,R16 ;Загружаем R16 в регистрн TIMSK тем самым разрешая прерывания по совпадению.
RTCRETI: RETI
;==Прошла секунда, подготовка к подсчету следующей
RTClock1: IN R16,TIMSK ;Загружаем регистр TIMSK в R16
ANDI R16,247 ;Накладываем маску И 1111 0111 на регистр TIMSK
OUT TIMSK,R16 ;Загружаем R16 в регистрн TIMSK тем самым запрещяя прерывания по совпадению.
CLR RTCHigh ;Очистим старший байт RTC.
RETI ;Уходим
; EEPROM ==============
.ESEG ; Сегмент EEPROM