Стробоскоп на светодиодах.

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Ответить
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Стробоскоп на светодиодах.

Сообщение reasonx »

Здравствуйте все.

Не стал поднимать темы 2х годичной давности, поэтому создал новую.

Закончил делать схему управления, встал вопрос в светодиодах и с этим связанного.

В электронике я глубоко начинающий, а в оптике вообще дерево беспросветное.

Отсюда несколько вопрос:

В 2х темах о светодиодных стробах что существуют на сем форуме, ни в одной не пришли к окончательному выводу на каких светодиодах лучше сделать. (Оба автора делали на небольшое помещение, но так и не отписались что получилось и на чем сделали)
Собственно что выбрать ? Пару тройку дорогих (300р+) или множество дешевых ярких.

И хотелось бы конкретные модели, которые не проблема достать, если можно конечно.
Аватара пользователя
m.ix
Друг Кота
Сообщения: 16545
Зарегистрирован: Вт сен 07, 2010 03:01:06
Откуда: Moscow-Izmaylovo
Контактная информация:

Re: Стробоскоп на светодиодах.

Сообщение m.ix »

любой ставь
супер пупер мега яркий
радиатор по любому будет требоватся
но уже не такой массивный, если конечно в виде фонарика не будешь юзать их.

Изображение снимал со вспышкой!

Но не забываем про собирающие линзы.
Лечу лечить WWWашу покалеченную технику.
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Re: Стробоскоп на светодиодах.

Сообщение reasonx »

И почем такие ? Можно модельку того круглого побольше и плоского пониже ? :o
Аватара пользователя
m.ix
Друг Кота
Сообщения: 16545
Зарегистрирован: Вт сен 07, 2010 03:01:06
Откуда: Moscow-Izmaylovo
Контактная информация:

Re: Стробоскоп на светодиодах.

Сообщение m.ix »

полоски от полутора тысяч
Кругляшки маленькие тоже полторы
Большие 4-5тр
марки не записал.

На ободах надписи есть
СпойлерИзображение

сверху силикон или типа того, так что когдтём выцарапать возможно кристаллик светодиода :)))
Лечу лечить WWWашу покалеченную технику.
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Re: Стробоскоп на светодиодах.

Сообщение reasonx »

Не гуглятся по надписям, да и дорого через чур, мне бы пару штук по 300-400р.

Такого хватит для площади 30квМ ?
Аватара пользователя
m.ix
Друг Кота
Сообщения: 16545
Зарегистрирован: Вт сен 07, 2010 03:01:06
Откуда: Moscow-Izmaylovo
Контактная информация:

Re: Стробоскоп на светодиодах.

Сообщение m.ix »

где собрался стробоскопить?
в авто - выставлять время зажигания
в клубе - выставлять .....
Лечу лечить WWWашу покалеченную технику.
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Re: Стробоскоп на светодиодах.

Сообщение reasonx »

Пока выставлено 30 мс на вспышку в бит и 30мс на вспышку при мерцании. Учитывая что планирую еще 2 режима с авто выбором, то все это буду настраивать по ходу.

Пока надо работоспособный прототип сварганить.
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Re: Стробоскоп на светодиодах.

Сообщение reasonx »

Выбор пал на 4 штуки CXA1507-0000-000N00G40E3

Вот даташит

http://www.terraelectronica.ru/pdf/CREE/CXA1507.pdf

Как выбор господам ?
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Re: Стробоскоп на светодиодах.

Сообщение reasonx »

Решил почти полностью отказаться от дисркретки и начать сразу делать на контроллере.

Кодю первый раз, можно сказать на это и учусь (Все знают с какого сайта)

Получилось примерно следующие, пока все дошло только до начала определения 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: Стробоскоп на светодиодах.

Сообщение maglev »

Я-бы писал на Си.
Не вникал в код, но что-то вызываемое "RCALL BOnCheck" заканчивается таким:

POP R16 ;----> Вытаскиваем адрес из стека, что бы не было переполнения
POP R16
JMP Mainloop ;Возврат в диспетчер, с рестартом цикла

зачем? Не проще-ли RET?
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Re: Стробоскоп на светодиодах.

Сообщение reasonx »

maglev писал(а):Я-бы писал на Си.
Не вникал в код, но что-то вызываемое "RCALL BOnCheck" заканчивается таким:

POP R16 ;----> Вытаскиваем адрес из стека, что бы не было переполнения
POP R16
JMP Mainloop ;Возврат в диспетчер, с рестартом цикла

зачем? Не проще-ли RET?


Если будет RET, то он продолжит цикл, а надо именно с рестартом.
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Re: Стробоскоп на светодиодах.

Сообщение reasonx »

Дописал счетчик 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         ; Сегмент EEPROM
reasonx
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вс фев 17, 2013 21:32:57

Re: Стробоскоп на светодиодах.

Сообщение reasonx »

Вот сделал схему, если кто залезет, гляньте краем глаза.
Изображение


И новый код.
Спойлер

Код: Выделить всё

.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
Ответить

Вернуться в «Умные мысли»