Перейти к содержанию

Переписать системы ду из ассемблера в си


tifaso

Рекомендуемые сообщения

Есть прошивки систем дистанционного управления на ассемблере. Одна на 4 канала. Вторая на 16 каналов. Все схемы комплектные со своими пультами это для меня очень важно.

4 канальная система.zip  16 канальная система.zip

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

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

Я работаю с кодом в Atmel Studio 6.2 ну хотелось бы чтобы была совместимость с этим редактором.

Ссылка на комментарий
Поделиться на другие сайты

Средсв всё равно нет на это.

Интересно всё таки попробовать, а можно ли как то допустим не трогая основной код сделать вставки кодом на си или такое тут не прокатит? Знаю где то такое делают. Но это так как минимум, а так хотелось бы полностью уже переписать было бы меньше проблем.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Пульт можно взять любой, на Али их куча, с разными протоколами. Самсунг, Сони, RC5 - все эти протоколы неоднократно описаны в сети с примерами. Только под себя код подправить и пользоваться на здоровье.

Ссылка на комментарий
Поделиться на другие сайты

@andrusha152 Нет это не годится. Нужен обязательно самодельный. Только такие варианты и рассматриваются.

Хотя впринцепи есть такой вариант собрать пульт на SAA3010P. Они у меня есть и уже как то найти связи с пультом в приёмнике это самое сложное для меня. У меня есть и прошивка для приёмника на RC5 протоколе, но как найти эти связи это ад для меня. осциллографа нету сразу говорю.

Ссылка на комментарий
Поделиться на другие сайты

@otest Можно попробовать с помощью справочника по ассемблеру попытаться что то написать. Но как сомневаюсь что что то выйдет. Ассемблер сильно сложный и путаный.

Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, otest сказал:

перепиши весь алгоритм на СИ

Для этого нужно знать ассемблер и Си.

 

12 минут назад, otest сказал:

В чём проблема?

Вот в этом и проблема. :)

 

Ссылка на комментарий
Поделиться на другие сайты

Цитата

Для этого нужно знать ассемблер и Си.

Для этого нужно знать алгоритм работы устройства. А на каком языке это написано устройству на плевать.

Ссылка на комментарий
Поделиться на другие сайты

Разница между ассемблером и СИ примерно такая:
Если на СИ программа выглядит так: "Открыть форточку", то на Ассемблере это будет иметь вид:" Встать с дивана, прошагать направо 2 метра, налево полтора, поднять руку, растопырить кисть, поднести к ручке, сжать кисть, повернуть ручку, потянуть .. и т.д."
Причём "встать с дивана" и "шагнуть"- это будут ещё отдельные подпрограммы.:lol:

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

 

"Я не знаю какой там коэффициент, я просто паять умею. "

Ссылка на комментарий
Поделиться на другие сайты

Сейчас перевёл для начала все имеющиеся комментарии в фале листинга и в коде прошивок для 16 канальной системы ДУ. Уже даже сейчас из этих комментариев стала понятна примерная логика работы программ. Теперь ещё сделаю также перевод комментариев на 4 канальную систему. Ну и тогда уже начну разбирать поочерёдно каждую команду с помощью справочника и делая свои приписки что за что отвечает и что делает. Ну а там уже посмотрим что выйдет.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

Закончил переводы комментариев и начал потихоньку копаться в справочнике ассемблера. И тут я вообще стал понимать, то что по сути то мне и не стоит даже это всё переписывать, а лишь достаточно переписать выводы сигнала на выходе приёмника чтобы его можно было правильно обработать, но тут ещё нужно разобраться от куда что приходит и как приёмник подаёт сигналы на разные каналы. Примерную логику я знаю так как система дистанционного управления мне близка было не мало литературы по ней изучено.Нужно только разбираться кодом. из комментариев в прошивке пульта я понял что сигнал передаётся на частоте 37 мг. там это чётко написано.Ну мне эту часть можно даже не трогать. Принимать и проводить дальнейшую обработку сигналов я буду другой микросхемой со своей прошивкой. А здесь мне нужно будет сделать так чтобы приёмник на выход подавал сигнал так как будто идёт обычное нажатие на кнопку. В общем при нажатии на пульт выдать отрицательный сигнал на соответствующем выводе приёмника.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

Всё вроде бы как посидел сравнил прошивки посмотрел справочник и понял что же нужно сделать. Достаточно переписать несколько строк кода и всё будет в порядке. Сигнал на выходе будет выходить так как нужно. И не нужно мне больше делать этих костылей на выходе. Обрабатывать сигнал я уже всё равно своей микросхемой буду вернее со своей прошивкой на си. А тут уж лучше сделать так.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

Всё переписал как мне нужно осталось только протестироваль, но у меня сейчас не на чем тестировать нужно ещё собирать саму систему.Но думаю что всё уже должно работать. Ведь я смотрел в других прошивках этого  же автора как он делал там и наконец то уловил суть алгоритма данного кода. Всё всем спасибо.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

В общем собрал на макетке без пайки проверил как то не так оно работает как ожидалось. Ну это прийдётся дальше разбираться править код тестировать.

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, tifaso сказал:

Всё переписал как мне нужно

Быстро уж слишком, даже удивился, и в результате

13 минут назад, tifaso сказал:

как то не так оно работает как ожидалось

Кажущаяся простота

6 часов назад, tifaso сказал:

Достаточно переписать несколько строк кода и всё будет в порядке.

Ну да, тогда каждый бы был "писателем".

Ссылка на комментарий
Поделиться на другие сайты

Да ничего страшно на самом то деле уже почти всё как нужно осталось только один момент доработать видимо я где то упустил в коде, но думаю это будет не так сложно найти.

Ссылка на комментарий
Поделиться на другие сайты

В общем так выкладываю всё как есть в подробностях:

4 канальная система от автора DANYK

Скрытый текст

Схема:

avr_dop.png.d7f232c6bedf4f49f8692e63ed98ea2b.png

 С фиксацией кнопок

 Код пульта:


; Передатчик
; Процессор 1,2 МГц
; f 37 500 Гц
; создатель: DANYK 
; http://danyk.cz

.NOLIST   
.INCLUDE "tn13def.inc"     
.LIST     


.DEF REG=R16		;рабочий регистр
.DEF REG2=R17		;рабочий регистр 2
.DEF CYKLY=R18		;счетчик циклов
.DEF CEK=R19		;регистр ожидания
.DEF CEK2=R20		;регистр ожидания 2
.EQU SMER=DDRB		;управление направлением  
.EQU PORT=PORTB		;порт  
.EQU PINY=PINB		;порт 
                    
.CSEG				;сегмент кода   

.ORG 0
RJMP START

.ORG PCI0addr
RJMP TLACITKO
	
START:

;установить портB
LDI REG,0b00010000
OUT SMER,REG
LDI REG,0b00001111
OUT PORT,REG

; НАСТРОЙКИ ТАЙМЕРА
;LDI	REG,0b00000000 	; установить счетчик на ноль при настройке на сравнение ...
;OUT	TCCR0A,REG    	; ... значения (так называемый CTC), OC0 не используется, подраздел 256
;LDI	REG,37      	; установить сравниваемое значение (мультиплексирование прибл. 100 Гц)
;OUT	OCR0A,REG     	; 
;LDI	REG,0b00000000	; разрешить прерывание обеих цитат
;OUT	TIMSK0,REG    	; (бит 0 включает citac0A, бит 6 включает citac1A)



LDI	REG,0b00100000	; разрешить прерывание PCINT
OUT	GIMSK,REG    	;

LDI	REG,0b00001111	; разрешить прерывание PCINT на 0,1,2,3
OUT	PCMSK,REG    	;

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG

;выключает аналог. компаратор - никогда не использовался (экономия энергии)
LDI	REG,0b10000000	
OUT	ACSR,REG  

SEI

SMYCKA:
SLEEP
RJMP SMYCKA


TLACITKO:
ZNOVA:
IN REG2,PINY
ANDI REG2,0b00001111

CPI REG2,0b00000111
BREQ TL3
CPI REG2,0b00001011
BREQ TL2
CPI REG2,0b00001101
BREQ TL1
CPI REG2,0b00001110
BREQ TL0

RJMP NENE

;Кнопка кодирования (двухбитное кодирование)
TL0:
LDI REG2,0b00000000
RJMP TL_ZAKOD
TL1:
LDI REG2,0b00000001
RJMP TL_ZAKOD
TL2:
LDI REG2,0b00000010
RJMP TL_ZAKOD
TL3:
LDI REG2,0b00000011
RJMP TL_ZAKOD

TL_ZAKOD:
RCALL VYSILEJ
RJMP ZNOVA
NENE:
LDI REG,0b00001111
OUT PORT,REG
RETI

; Передается с использованием обратного управляющего кода
; Кодирование длины промежутка
; MSB начинается 
VYSILEJ:
LDI CYKLY,6
VYSILEJ_DAL:

RCALL KRATKA_1

SBRS REG2,1
RCALL KRATKA_0
SBRC REG2,1
RCALL DLOUHA_0

RCALL KRATKA_1

SBRS REG2,0
RCALL KRATKA_0
SBRC REG2,0
RCALL DLOUHA_0

RCALL KRATKA_1

SBRC REG2,1
RCALL KRATKA_0
SBRS REG2,1
RCALL DLOUHA_0

RCALL KRATKA_1

SBRC REG2,0
RCALL KRATKA_0
SBRS REG2,0
RCALL DLOUHA_0

RCALL KRATKA_1

RCALL DLOUHA_0
RCALL DLOUHA_0
RCALL DLOUHA_0
RCALL DLOUHA_0

DEC CYKLY
BRNE VYSILEJ_DAL
RET


;Короткий промежуток
KRATKA_0:
LDI CEK,16
CEKEJ_K0:

NOP
NOP
LDI CEK2,9
CEKEJ_K0A:
DEC CEK2
BRNE CEKEJ_K0A

DEC CEK
BRNE CEKEJ_K0
RET


;Длинный промежуток
DLOUHA_0:
LDI CEK,64
CEKEJ_D0:

NOP
NOP
LDI CEK2,9
CEKEJ_D0A:
DEC CEK2
BRNE CEKEJ_D0A

DEC CEK
BRNE CEKEJ_D0
RET


;Короткий импульс
KRATKA_1:
LDI CEK,16
CEKEJ_K1:

LDI REG,0b00011111
OUT PORT,REG

LDI CEK2,3
CEKEJ_K1A:
DEC CEK2
BRNE CEKEJ_K1A

LDI REG,0b00001111
OUT PORT,REG

;NOP
NOP
LDI CEK2,5
CEKEJ_K1B:
DEC CEK2
BRNE CEKEJ_K1B

DEC CEK
BRNE CEKEJ_K1
RET

Код приёмника:


;4-канальный приемник DO
;кодируется длиной промежутка. 
;1,2MHz
; создан: DANYK
; http://danyk.cz

.NOLIST   
.INCLUDE "tn13def.inc"     
.LIST     

.DEF REG=R16		;рабочий регистр
.DEF REG2=R17		;рабочий регистр 2
.DEF STAV=R18		;регистр состояния входа
.DEF VYST=R19		;регистр выхода
.DEF VYST_2=R20		;предыдущий выходной регистр 
.DEF VYST_3=R21		;регистр предварительного вывода 
.DEF PRODLEVA=R22	;отложить до дальнейшей реакции
.DEF BITY=R23		;счетчик битов

.EQU SMER=DDRB		;контроль направления  
.EQU PORT=PORTB		;порт  
.EQU PINY=PINB		;порт 
                    
.CSEG				;сегмент кода   

.ORG 0
RJMP START

.ORG PCI0addr
RJMP SIGNAL
	
.ORG OC0Aaddr
RJMP CAS_VYPRSEL

START:

LDI REG,LOW(RAMEND)
OUT SPL,REG

;настройки портB
LDI REG,0b00001111
OUT SMER,REG
LDI REG,0b00010000
OUT PORT,REG

; НАСТРОЙКИ ТАЙМЕРА
LDI	REG,0b00000010 	; установить счетчик на ноль, когда установлен для сравнения ...
OUT	TCCR0A,REG    	; ... значения (так называемый CTC), OC0 не используется
LDI	REG,0b00000011 	; делитель 64
OUT	TCCR0B,REG    	; 
LDI	REG,255      	; устанавливает сравниваемое значение
OUT	OCR0A,REG     	; 
LDI	REG,0b00000100	; разрешить прерывание OCIE0A
OUT	TIMSK0,REG    	; 


LDI	REG,0b00100000	; включить прервание PCINT
OUT	GIMSK,REG    	;

LDI	REG,0b00010000	; разрешить прерывание PCINT на 4
OUT	PCMSK,REG    	;

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG

;выключает аналог. компаратор - никогда не использовался (экономия энергии)
LDI	REG,0b10000000	
OUT	ACSR,REG  

SEI

SMYCKA:
SLEEP
RJMP SMYCKA


SIGNAL:
IN STAV,PINY
COM STAV	;инвертирует входной сигнал (приемник в состоянии покоя log1)

;Низкий уровень
SBRC STAV,4
RJMP NE_10

LDI REG,0
OUT TCNT0,REG

NE_10:

;Высокий уровень
SBRS STAV,4
RJMP NE_01

IN REG,TCNT0

CPI REG,4		;Порог затемнения 
BRLO ZAKMIT

CPI REG,64		;Длинный промежуток / интервал длины промежутка
BRLO NE_KONEC_SNIMKU

RCALL KONTROLA

MOV VYST_3,VYST_2
MOV VYST_2,VYST

NE_KONEC_SNIMKU:

LSL VYST
INC BITY
IN REG,TCNT0
CPI REG,16		;Порог короткого / длинного промежутка
BRLO KRATKA_M
INC VYST
KRATKA_M:

ZAKMIT:
NE_01:


LDI	REG,0b00100000	;включить спящий режим и установить режим ожидания
OUT	MCUCR,REG
RETI


;проверить правильность передачи
KONTROLA:
ANDI VYST,0b00001111
CPI BITY,5		;если количество битов не подходит, сбросить код
BRNE SPATNE_BITY
CP VYST_2,VYST	;если 3 последовательных кода не совпадают, он не отвечает
BRNE RUZNE_KODY
CP VYST_3,VYST	;если 3 последовательных кода не совпадают, он не отвечает
BRNE RUZNE_KODY
RCALL PRIJEM
RUZNE_KODY:
CLR BITY
RET
SPATNE_BITY:
CLR VYST
CLR BITY
RET



CAS_VYPRSEL:

RCALL KONTROLA

LDI VYST,0
LDI VYST_2,1
LDI VYST_3,2

LDI PRODLEVA,0

LDI REG,0
OUT TCNT0,REG

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG
RETI



PRIJEM:
CPI PRODLEVA,0
BRNE NEREAGUJ
IN REG,PORT

ANDI VYST,0b00001111

CPI VYST,0b00000011
BREQ TL0
CPI VYST,0b00000110
BREQ TL1
CPI VYST,0b00001001
BREQ TL2
CPI VYST,0b00001100
BREQ TL3

RJMP NEREAGUJ

TL0:
SBRC REG,0
CBI PORT,0
SBRS REG,0
SBI PORT,0
RJMP KONEC_TL

TL1:
SBRC REG,1
CBI PORT,1
SBRS REG,1
SBI PORT,1
RJMP KONEC_TL

TL2:
SBRC REG,2
CBI PORT,2
SBRS REG,2
SBI PORT,2
RJMP KONEC_TL

TL3:
SBRC REG,3
CBI PORT,3
SBRS REG,3
SBI PORT,3
RJMP KONEC_TL

KONEC_TL:
NEREAGUJ:
LDI PRODLEVA,1
RET

Ещё одна 4 канальная система тоже от автора DANYK только это уже без фиксации кнопок

Код пульта:


; Передатчик
; Процессор 1,2 МГц
; f 37 500 Гц
; создатель: DANYK 
; http://danyk.cz

.NOLIST   
.INCLUDE "tn13def.inc"     
.LIST     


.DEF REG=R16		;рабочий регистр
.DEF REG2=R17		;рабочий регистр 2
.DEF CYKLY=R18		;счетчик циклов
.DEF CEK=R19		;регистр ожидания
.DEF CEK2=R20		;регистр ожидания 2
.EQU SMER=DDRB		;управление направлением  
.EQU PORT=PORTB		;порт  
.EQU PINY=PINB		;порт 
                    
.CSEG				;сегмент кода   

.ORG 0
RJMP START

.ORG PCI0addr
RJMP TLACITKO
	
START:

;установить портB
LDI REG,0b00010000
OUT SMER,REG
LDI REG,0b00001111
OUT PORT,REG

; НАСТРОЙКИ ТАЙМЕРА
;LDI	REG,0b00000000 	; установить счетчик на ноль при настройке на сравнение ...
;OUT	TCCR0A,REG    	; ... значения (так называемый CTC), OC0 не используется, подраздел 256
;LDI	REG,37      	; установить сравниваемое значение (мультиплексирование прибл. 100 Гц)
;OUT	OCR0A,REG     	; 
;LDI	REG,0b00000000	; разрешить прерывание обеих цитат
;OUT	TIMSK0,REG    	; (бит 0 включает citac0A, бит 6 включает citac1A) 



LDI	REG,0b00100000	; разрешить прерывание PCINT
OUT	GIMSK,REG    	;

LDI	REG,0b00001111	; разрешить прерывание PCINT на 0,1,2,3
OUT	PCMSK,REG    	;

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG

;выключает аналог. компаратор - никогда не использовался (экономия энергии) 
LDI	REG,0b10000000	
OUT	ACSR,REG  

SEI

SMYCKA:
SLEEP
RJMP SMYCKA


TLACITKO:
ZNOVA:
IN REG2,PINY
ANDI REG2,0b00001111

CPI REG2,0b00000111
BREQ TL3
CPI REG2,0b00001011
BREQ TL2
CPI REG2,0b00001101
BREQ TL1
CPI REG2,0b00001110
BREQ TL0

RJMP NENE

;Кодирование кнопок (двухбитное кодирование)
TL0:
LDI REG2,0b00000000
RJMP TL_ZAKOD
TL1:
LDI REG2,0b00000001
RJMP TL_ZAKOD
TL2:
LDI REG2,0b00000010
RJMP TL_ZAKOD
TL3:
LDI REG2,0b00000011
RJMP TL_ZAKOD

TL_ZAKOD:
RCALL VYSILEJ
RJMP ZNOVA
NENE:
LDI REG,0b00001111
OUT PORT,REG
RETI

; Передается с использованием обратного управляющего кода
; Кодирование длины зазора
; MSB начинается 
VYSILEJ:
LDI CYKLY,6
VYSILEJ_DAL:

RCALL KRATKA_1

SBRS REG2,1
RCALL KRATKA_0
SBRC REG2,1
RCALL DLOUHA_0

RCALL KRATKA_1

SBRS REG2,0
RCALL KRATKA_0
SBRC REG2,0
RCALL DLOUHA_0

RCALL KRATKA_1

SBRC REG2,1
RCALL KRATKA_0
SBRS REG2,1
RCALL DLOUHA_0

RCALL KRATKA_1

SBRC REG2,0
RCALL KRATKA_0
SBRS REG2,0
RCALL DLOUHA_0

RCALL KRATKA_1

RCALL DLOUHA_0
RCALL DLOUHA_0
RCALL DLOUHA_0
RCALL DLOUHA_0

DEC CYKLY
BRNE VYSILEJ_DAL
RET


;Короткий промежуток
KRATKA_0:
LDI CEK,16
CEKEJ_K0:

NOP
NOP
LDI CEK2,9
CEKEJ_K0A:
DEC CEK2
BRNE CEKEJ_K0A

DEC CEK
BRNE CEKEJ_K0
RET


;Длинный промежуток
DLOUHA_0:
LDI CEK,64
CEKEJ_D0:

NOP
NOP
LDI CEK2,9
CEKEJ_D0A:
DEC CEK2
BRNE CEKEJ_D0A

DEC CEK
BRNE CEKEJ_D0
RET


;Короткий импульс
KRATKA_1:
LDI CEK,16
CEKEJ_K1:

LDI REG,0b00011111
OUT PORT,REG

LDI CEK2,3
CEKEJ_K1A:
DEC CEK2
BRNE CEKEJ_K1A

LDI REG,0b00001111
OUT PORT,REG

;NOP
NOP
LDI CEK2,5
CEKEJ_K1B:
DEC CEK2
BRNE CEKEJ_K1B

DEC CEK
BRNE CEKEJ_K1
RET

Код приёмника:


; 4-канальный приемник DO для команд.
; кодируется длиной промежутка.
; Внутренний генератор 1,2 МГц
; создатель: DANYK
; http://danyk.cz

.NOLIST   
.INCLUDE "tn13def.inc"     
.LIST     

.DEF REG=R16		;рабочий регистр
.DEF REG2=R17		;рабочий регистр 2
.DEF STAV=R18		;регистр состояния входа
.DEF VYST=R19		;выходной регистр
.DEF VYST_2=R20		;предыдущий выходной регистр 
.DEF VYST_3=R21		;регистр предварительного вывода 
.DEF BITY=R22		;счетчик битов

.EQU SMER=DDRB		;управление направлением  
.EQU PORT=PORTB		;порт  
.EQU PINY=PINB		;порт 
                    
.CSEG				;сегмент кода   

.ORG 0
RJMP START

.ORG PCI0addr
RJMP SIGNAL
	
.ORG OC0Aaddr
RJMP CAS_VYPRSEL

START:

LDI REG,LOW(RAMEND)
OUT SPL,REG

;установить портB
LDI REG,0b00001111
OUT SMER,REG
LDI REG,0b00010000
OUT PORT,REG

; НАСТРОЙКИ ТАЙМЕРА
LDI	REG,0b00000010 	; установить счетчик на ноль при достижении сравнения ...
OUT	TCCR0A,REG    	; ... значения (так называемый CTC), OC0 не используется
LDI	REG,0b00000011 	; делитель 64
OUT	TCCR0B,REG    	; 
LDI	REG,255      	; устанавливает сравниваемое значение
OUT	OCR0A,REG     	; 
LDI	REG,0b00000100	; разрешить прерывание OCIE0A
OUT	TIMSK0,REG    	; 


LDI	REG,0b00100000	; разрешить прерывание PCINT
OUT	GIMSK,REG    	;

LDI	REG,0b00010000	; разрешить прерывание PCINT на 4
OUT	PCMSK,REG    	;

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG

;выключает аналог. компаратор - никогда не использовался (экономия энергии) 
LDI	REG,0b10000000	
OUT	ACSR,REG  

SEI


SMYCKA:
SLEEP
RJMP SMYCKA


SIGNAL:
IN STAV,PINY
COM STAV	;инвертирует входной сигнал (приемник имеет log1 в состоянии покоя)

;Низкий уровень
SBRC STAV,4
RJMP NE_10

LDI REG,0
OUT TCNT0,REG

NE_10:

;Верхний уровень
SBRS STAV,4
RJMP NE_01

IN REG,TCNT0

CPI REG,4		;Порог длины колебаний 
BRLO ZAKMIT

CPI REG,64		;Большой разрыв / пороговый разрыв
BRLO NE_KONEC_SNIMKU

RCALL KONTROLA

MOV VYST_3,VYST_2
MOV VYST_2,VYST

NE_KONEC_SNIMKU:

LSL VYST
INC BITY
IN REG,TCNT0
CPI REG,16		;Порог короткого / длинного промежутка
BRLO KRATKA_M
INC VYST
KRATKA_M:

ZAKMIT:
NE_01:


LDI	REG,0b00100000	;включить спящий режим и установить режим ожидания
OUT	MCUCR,REG
RETI


;проверьте правильность передачи
KONTROLA:
ANDI VYST,0b00001111
CPI BITY,5		;если количество бит не влезает, сбросить код
BRNE SPATNE_BITY
CP VYST_2,VYST	;если 3 последовательных кода не совпадают, он не отвечает
BRNE RUZNE_KODY
CP VYST_3,VYST	;если 3 последовательных кода не совпадают, он не отвечает
BRNE RUZNE_KODY
RCALL PRIJEM
RUZNE_KODY:
CLR BITY
RET
SPATNE_BITY:
CLR VYST
CLR BITY
RET



CAS_VYPRSEL:

RCALL KONTROLA

LDI VYST,0
LDI VYST_2,1
LDI VYST_3,2

LDI REG,0b00010000
OUT PORT,REG

LDI REG,0
OUT TCNT0,REG

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG
RETI



PRIJEM:

ANDI VYST,0b00001111

CPI VYST,0b00000011
BREQ TL0
CPI VYST,0b00000110
BREQ TL1
CPI VYST,0b00001001
BREQ TL2
CPI VYST,0b00001100
BREQ TL3

RJMP KONEC_TL

TL0:
SBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
RJMP KONEC_TL

TL1:
CBI PORT,0
SBI PORT,1
CBI PORT,2
CBI PORT,3
RJMP KONEC_TL

TL2:
CBI PORT,0
CBI PORT,1
SBI PORT,2
CBI PORT,3
RJMP KONEC_TL

TL3:
CBI PORT,0
CBI PORT,1
CBI PORT,2
SBI PORT,3
RJMP KONEC_TL

KONEC_TL:
RET

 

16 канальная система от автора DANYK

Скрытый текст

Схема:

avr_do2.png.c4b84b065773cf6986a0adb84aaaf6d9.png

С фиксацией кнопок

Код пульта:


; Передатчик DO, 16 каналов
; CPU 1 МГц
; f 37000 Гц
; создатель: DANYK 
; http://danyk.cz

.NOLIST   
.INCLUDE "tn2313Adef.inc"     
.LIST     


.DEF REG=R16		;рабочий регистр
.DEF REG2=R17		;рабочий регистр 2
.DEF CYKLY=R18		;счетчик циклов
.DEF CEK=R19		;регистр ожидания
.DEF CEK2=R20		;регистр ожидания 2

.EQU SMER=DDRB		;управление направлением  
.EQU PORT=PORTB		;порт  
.EQU PINY=PINB		;входы

.EQU SMER2=DDRD		;управление направлением  
.EQU PORT2=PORTD	;порт  
.EQU PINY2=PIND		;входы

.EQU SMER3=DDRA		;управление направлением  
.EQU PORT3=PORTA	;порт  
.EQU PINY3=PINA		;входы
                    
.CSEG				;сегмент кода   

.ORG 0
RJMP START

.ORG PCIBaddr
RJMP TLACITKO_0_7

.ORG PCIAaddr
RJMP TLACITKO_15

.ORG PCIDaddr
RJMP TLACITKO_8_14

	
START:

LDI REG,LOW(RAMEND)
OUT SPL,REG

;установить порт B
LDI REG,0b00000000
OUT SMER,REG
LDI REG,0b11111111
OUT PORT,REG

;установить порт D
LDI REG,0b00000000
OUT SMER2,REG
LDI REG,0b01111111
OUT PORT2,REG

;установить порт A
LDI REG,0b00000010
OUT SMER3,REG
LDI REG,0b00000001
OUT PORT3,REG


LDI	REG,0b00111000	; включить прерывание PCINT 
OUT	GIMSK,REG    	;

LDI	REG,0b01111111	; включить прерывание PCINT 
OUT	PCMSK2,REG    	;

LDI	REG,0b00000001	; включить прерывание PCINT 
OUT	PCMSK1,REG    	;

LDI	REG,0b11111111	; включить прерывание PCINT 
OUT	PCMSK,REG    	;


LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG

;выключает аналог. компаратор - никогда не использовался (экономия энергии) 
LDI	REG,0b10000000	
OUT	ACSR,REG  

;отключает другие вещи: цитаты, USI, USART (экономия энергии)
LDI	REG,0b00001111
OUT	PRR,REG  


SEI

SMYCKA:
SLEEP
RJMP SMYCKA


;Кнопка 0-7
TLACITKO_0_7:
IN REG2,PINY
;ANDI REG2,0b11111111

CPI REG2,0b01111111
BREQ TL7
CPI REG2,0b10111111
BREQ TL6
CPI REG2,0b11011111
BREQ TL5
CPI REG2,0b11101111
BREQ TL4
CPI REG2,0b11110111
BREQ TL3
CPI REG2,0b11111011
BREQ TL2
CPI REG2,0b11111101
BREQ TL1
CPI REG2,0b11111110
BREQ TL0

LDI REG,0b00000001
OUT PORT3,REG
RETI

;Кодирует кнопку 0-7.
TL7:
LDI REG2,7
RJMP TL_0_7_ZAKOD
TL6:
LDI REG2,6
RJMP TL_0_7_ZAKOD
TL5:
LDI REG2,5
RJMP TL_0_7_ZAKOD
TL4:
LDI REG2,4
RJMP TL_0_7_ZAKOD
TL3:
LDI REG2,3
RJMP TL_0_7_ZAKOD
TL2:
LDI REG2,2
RJMP TL_0_7_ZAKOD
TL1:
LDI REG2,1
RJMP TL_0_7_ZAKOD
TL0:
LDI REG2,0
RJMP TL_0_7_ZAKOD

TL_0_7_ZAKOD:
RCALL VYSILEJ
RJMP TLACITKO_0_7



;Кнопка 8-14
TLACITKO_8_14:
IN REG2,PINY2
ANDI REG2,0b01111111

CPI REG2,0b00111111
BREQ TL14
CPI REG2,0b01011111
BREQ TL13
CPI REG2,0b01101111
BREQ TL12
CPI REG2,0b01110111
BREQ TL11
CPI REG2,0b01111011
BREQ TL10
CPI REG2,0b01111101
BREQ TL9
CPI REG2,0b01111110
BREQ TL8

LDI REG,0b00000001
OUT PORT3,REG
RETI

;Кодирует кнопку 8-14
TL14:
LDI REG2,14
RJMP TL_8_14_ZAKOD
TL13:
LDI REG2,13
RJMP TL_8_14_ZAKOD
TL12:
LDI REG2,12
RJMP TL_8_14_ZAKOD
TL11:
LDI REG2,11
RJMP TL_8_14_ZAKOD
TL10:
LDI REG2,10
RJMP TL_8_14_ZAKOD
TL9:
LDI REG2,9
RJMP TL_8_14_ZAKOD
TL8:
LDI REG2,8
RJMP TL_8_14_ZAKOD

TL_8_14_ZAKOD:
RCALL VYSILEJ
RJMP TLACITKO_8_14


;Кнопка 15
TLACITKO_15:
IN REG2,PINY3
ANDI REG2,0b00000001

CPI REG2,0b00000000
BREQ TL15

LDI REG,0b00000001
OUT PORT3,REG
RETI

;Кодирует кнопку 15
TL15:
LDI REG2,15
RJMP TL_15_ZAKOD

TL_15_ZAKOD:
RCALL VYSILEJ
RJMP TLACITKO_15




; Передается с использованием обратного управляющего кода
; Кодирование длины промежутка
; MSB начинается 
VYSILEJ:
LDI CYKLY,4
VYSILEJ_DAL:

RCALL KRATKA_1

SBRS REG2,3
RCALL KRATKA_0
SBRC REG2,3
RCALL DLOUHA_0

RCALL KRATKA_1

SBRS REG2,2
RCALL KRATKA_0
SBRC REG2,2
RCALL DLOUHA_0

RCALL KRATKA_1

SBRS REG2,1
RCALL KRATKA_0
SBRC REG2,1
RCALL DLOUHA_0

RCALL KRATKA_1

SBRS REG2,0
RCALL KRATKA_0
SBRC REG2,0
RCALL DLOUHA_0

RCALL KRATKA_1

SBRC REG2,3
RCALL KRATKA_0
SBRS REG2,3
RCALL DLOUHA_0

RCALL KRATKA_1

SBRC REG2,2
RCALL KRATKA_0
SBRS REG2,2
RCALL DLOUHA_0

RCALL KRATKA_1

SBRC REG2,1
RCALL KRATKA_0
SBRS REG2,1
RCALL DLOUHA_0

RCALL KRATKA_1

SBRC REG2,0
RCALL KRATKA_0
SBRS REG2,0
RCALL DLOUHA_0

RCALL KRATKA_1

RCALL DLOUHA_0
RCALL DLOUHA_0
RCALL DLOUHA_0
RCALL DLOUHA_0

DEC CYKLY
BRNE VYSILEJ_DAL
RET


;Короткий промежуток
KRATKA_0:
LDI CEK,16
CEKEJ_K0:

LDI CEK2,8
CEKEJ_K0A:
DEC CEK2
BRNE CEKEJ_K0A

DEC CEK
BRNE CEKEJ_K0
RET


;Длинный промежуток
DLOUHA_0:
LDI CEK,64
CEKEJ_D0:

LDI CEK2,8
CEKEJ_D0A:
DEC CEK2
BRNE CEKEJ_D0A

DEC CEK
BRNE CEKEJ_D0
RET


;Короткий импульс
KRATKA_1:
LDI CEK,16
CEKEJ_K1:

LDI REG,0b00000011
OUT PORT3,REG

NOP
LDI CEK2,2
CEKEJ_K1A:
DEC CEK2
BRNE CEKEJ_K1A

LDI REG,0b00000001
OUT PORT3,REG

NOP
LDI CEK2,4
CEKEJ_K1B:
DEC CEK2
BRNE CEKEJ_K1B

DEC CEK
BRNE CEKEJ_K1
RET

Код приёмника:


; 16-канальный приемник DO
; кодируется длиной промежутка.
; 1 МГц ATTiny2313A
; создатель: DANYK 
; http://danyk.cz

.NOLIST ;Выключить генерацию листинга  
.INCLUDE "tn2313Adef.inc";Вложить другой файл  
.LIST ;Включить генерацию листинга    

;DEF Назначить регистру символическое имя
.DEF REG=R16		;рабочий регистр
.DEF REG2=R17		;рабочий регистр 2
.DEF STAV=R18		;регистр состояния входа
.DEF VYST=R19		;выходной регистр
.DEF VYST_2=R20		;предыдущий выходной регистр
.DEF PRODLEVA=R21	;отложить до дальнейшей реакции
.DEF BITY=R22		;битовый счетчик

;EQU Установить постоянное выражение
.EQU SMER=DDRB		;управление направлением  
.EQU PORT=PORTB		;порт  

.EQU SMER2=DDRD		;управление направлением  
.EQU PORT2=PORTD	;порт  

.EQU SMER3=DDRA		;управление направлением  
.EQU PORT3=PORTA	;порт  
.EQU PINY3=PINA		;входы

;CSEG Программный сегмент                    
.CSEG				;сегмент кода   

;ORG  Установить положение в сегменте
;RJMP Относительный переход
.ORG 0
RJMP START

.ORG OC0Aaddr
RJMP CAS_VYPRSEL

.ORG PCIAaddr
RJMP SIGNAL
	

START:

LDI REG,LOW(RAMEND)
OUT SPL,REG

;установить порт B
LDI REG,0b11111111
OUT SMER,REG
LDI REG,0b00000000
OUT PORT,REG

;установить порт D
LDI REG,0b01111111
OUT SMER2,REG
LDI REG,0b00000000
OUT PORT2,REG

;установить порт A
LDI REG,0b00000001
OUT SMER3,REG
LDI REG,0b00000010
OUT PORT3,REG

; НАСТРОЙКИ ТАЙМЕРА
LDI	REG,0b00000010 	; установить счетчик на ноль при настройке на сравнение ...
OUT	TCCR0A,REG    	; ... значения (так называемый CTC), OC0 не используется
LDI	REG,0b00000011 	; делитель 64
OUT	TCCR0B,REG    	; 
LDI	REG,213      	; устанавливает сравниваемое значение
OUT	OCR0A,REG     	; 

LDI	REG,0b00000001	; разрешить прерывание OCIE0A
OUT	TIMSK,REG    	; 



LDI	REG,0b00001000	; разрешить прерывание PCINT1
OUT	GIMSK,REG    	;

LDI	REG,0b00000010	; разрешить прерывание PCINT на PA1 (PCINT9)
OUT	PCMSK1,REG    	;

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG

;выключает аналог. компаратор - никогда не использовался (экономия энергии) 
LDI	REG,0b10000000	
OUT	ACSR,REG  

SEI

SMYCKA:
SLEEP
RJMP SMYCKA


SIGNAL:
IN STAV,PINY3
COM STAV	;инвертирует входной сигнал (приемник в состоянии покоя log1)

;Низкий уровень
SBRC STAV,1
RJMP NE_10

LDI REG,0
OUT TCNT0,REG

NE_10:

;Верхний уровень
SBRS STAV,1
RJMP NE_01

IN REG,TCNT0

CPI REG,3		;Порог колебания / длинного (короткого) импульса
BRLO ZAKMIT

CPI REG,53		;Длинный промежуток / пороговый промежуток
BRLO NE_KONEC_SNIMKU

RCALL KONTROLA

MOV VYST_2,VYST

NE_KONEC_SNIMKU:

LSL VYST
INC BITY
IN REG,TCNT0
CPI REG,13		;Порог короткого / длинного промежутка
BRLO KRATKA_M
INC VYST
KRATKA_M:

ZAKMIT:
NE_01:

LDI	REG,0b00100000	;включить спящий режим и установить режим ожидания
OUT	MCUCR,REG
RETI



CAS_VYPRSEL:

RCALL KONTROLA

CLR VYST
SER VYST_2

CLR PRODLEVA

LDI REG,0
OUT TCNT0,REG

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG
RETI



;проверьте правильность передачи
KONTROLA:
CPI BITY,9		;если количество бит не влезает, отбросьте код
BRNE SPATNE_BITY
CP VYST_2,VYST	;если 2 последовательных кода не совпадают, он не отвечает
BRNE RUZNE_KODY
RCALL PRIJEM
RUZNE_KODY:
CLR BITY
RET
SPATNE_BITY:
CLR VYST
CLR BITY
RET



PRIJEM:

CPI PRODLEVA,0
BREQ PRODLEVA_JE_0
RJMP KONEC_TL
PRODLEVA_JE_0:

MOV REG,VYST
SWAP REG
ANDI REG,0b00001111

MOV REG2,VYST
COM REG2
ANDI REG2,0b00001111

CP REG,REG2
BREQ SHODA
RJMP KONEC_TL
SHODA:

CLR REG2
LDI ZL,LOW(SKOK)
LDI ZH,HIGH(SKOK)
ADD ZL,REG
ADC ZH,REG2
IJMP

SKOK:
RJMP TL0
RJMP TL1
RJMP TL2
RJMP TL3
RJMP TL4
RJMP TL5
RJMP TL6
RJMP TL7
RJMP TL8
RJMP TL9
RJMP TL10
RJMP TL11
RJMP TL12
RJMP TL13
RJMP TL14
RJMP TL15


TL0:
;IN Чтение порта
IN REG,PORT
;SBRC Пропустить если бит в регистре очищен
SBRC REG,0
;CBI Очистить бит в порту
CBI PORT,0
;SBRS Пропустить если бит в регистре установлен
SBRS REG,0
;SBI Установить бит в порту
SBI PORT,0
;RJMP Относительный переход
RJMP KONEC_TL

TL1:
IN REG,PORT
SBRC REG,1
CBI PORT,1
SBRS REG,1
SBI PORT,1
RJMP KONEC_TL

TL2:
IN REG,PORT
SBRC REG,2
CBI PORT,2
SBRS REG,2
SBI PORT,2
RJMP KONEC_TL

TL3:
IN REG,PORT
SBRC REG,3
CBI PORT,3
SBRS REG,3
SBI PORT,3
RJMP KONEC_TL

TL4:
IN REG,PORT
SBRC REG,4
CBI PORT,4
SBRS REG,4
SBI PORT,4
RJMP KONEC_TL

TL5:
IN REG,PORT
SBRC REG,5
CBI PORT,5
SBRS REG,5
SBI PORT,5
RJMP KONEC_TL

TL6:
IN REG,PORT
SBRC REG,6
CBI PORT,6
SBRS REG,6
SBI PORT,6
RJMP KONEC_TL

TL7:
IN REG,PORT
SBRC REG,7
CBI PORT,7
SBRS REG,7
SBI PORT,7
RJMP KONEC_TL

TL8:
IN REG,PORT2
SBRC REG,0
CBI PORT2,0
SBRS REG,0
SBI PORT2,0
RJMP KONEC_TL

TL9:
IN REG,PORT2
SBRC REG,1
CBI PORT2,1
SBRS REG,1
SBI PORT2,1
RJMP KONEC_TL

TL10:
IN REG,PORT2
SBRC REG,2
CBI PORT2,2
SBRS REG,2
SBI PORT2,2
RJMP KONEC_TL

TL11:
IN REG,PORT2
SBRC REG,3
CBI PORT2,3
SBRS REG,3
SBI PORT2,3
RJMP KONEC_TL

TL12:
IN REG,PORT2
SBRC REG,4
CBI PORT2,4
SBRS REG,4
SBI PORT2,4
RJMP KONEC_TL

TL13:
IN REG,PORT2
SBRC REG,5
CBI PORT2,5
SBRS REG,5
SBI PORT2,5
RJMP KONEC_TL

TL14:
IN REG,PORT2
SBRC REG,6
CBI PORT2,6
SBRS REG,6
SBI PORT2,6
RJMP KONEC_TL

TL15:
IN REG,PORT3
SBRC REG,0
CBI PORT3,0
SBRS REG,0
SBI PORT3,0
RJMP KONEC_TL

KONEC_TL:
LDI PRODLEVA,1
RET

 

Комментарии в коде перевёл на русский чтобы было легче разобраться.

Мне же нужно сделать 16 канальную систему без фиксации кнопок по этим же схемам.

Впринцепи я уже попробовал переписать прошивку приёмника вот что из этого получилось.

Скрытый текст

; 16-канальный приемник DO
; кодируется длиной промежутка.
; 1 МГц ATTiny2313A
; создатель: DANYK 
; http://danyk.cz

.NOLIST ;Выключить генерацию листинга  
.INCLUDE "tn2313Adef.inc";Вложить другой файл  
.LIST ;Включить генерацию листинга    

;DEF Назначить регистру символическое имя
.DEF REG=R16		;рабочий регистр
.DEF REG2=R17		;рабочий регистр 2
.DEF STAV=R18		;регистр состояния входа
.DEF VYST=R19		;выходной регистр
.DEF VYST_2=R20		;предыдущий выходной регистр
.DEF PRODLEVA=R21	;отложить до дальнейшей реакции
.DEF BITY=R22		;битовый счетчик

;EQU Установить постоянное выражение
.EQU SMER=DDRB		;управление направлением  
.EQU PORT=PORTB		;порт  

.EQU SMER2=DDRD		;управление направлением  
.EQU PORT2=PORTD	;порт  

.EQU SMER3=DDRA		;управление направлением  
.EQU PORT3=PORTA	;порт  
.EQU PINY3=PINA		;входы

;CSEG Программный сегмент                    
.CSEG				;сегмент кода   

;ORG  Установить положение в сегменте
;RJMP Относительный переход
.ORG 0
RJMP START

.ORG OC0Aaddr
RJMP CAS_VYPRSEL

.ORG PCIAaddr
RJMP SIGNAL
	

START:

LDI REG,LOW(RAMEND)
OUT SPL,REG

;установить порт B
LDI REG,0b11111111
OUT SMER,REG
LDI REG,0b00000000
OUT PORT,REG

;установить порт D
LDI REG,0b01111111
OUT SMER2,REG
LDI REG,0b00000000
OUT PORT2,REG

;установить порт A
LDI REG,0b00000001
OUT SMER3,REG
LDI REG,0b00000010
OUT PORT3,REG

; НАСТРОЙКИ ТАЙМЕРА
LDI	REG,0b00000010 	; установить счетчик на ноль при настройке на сравнение ...
OUT	TCCR0A,REG    	; ... значения (так называемый CTC), OC0 не используется
LDI	REG,0b00000011 	; делитель 64
OUT	TCCR0B,REG    	; 
LDI	REG,213      	; устанавливает сравниваемое значение
OUT	OCR0A,REG     	; 

LDI	REG,0b00000001	; разрешить прерывание OCIE0A
OUT	TIMSK,REG    	; 



LDI	REG,0b00001000	; разрешить прерывание PCINT1
OUT	GIMSK,REG    	;

LDI	REG,0b00000010	; разрешить прерывание PCINT на PA1 (PCINT9)
OUT	PCMSK1,REG    	;

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG

;выключает аналог. компаратор - никогда не использовался (экономия энергии) 
LDI	REG,0b10000000	
OUT	ACSR,REG  

SEI

SMYCKA:
SLEEP
RJMP SMYCKA


SIGNAL:
IN STAV,PINY3
COM STAV	;инвертирует входной сигнал (приемник в состоянии покоя log1)

;Низкий уровень
SBRC STAV,1
RJMP NE_10

LDI REG,0
OUT TCNT0,REG

NE_10:

;Верхний уровень
SBRS STAV,1
RJMP NE_01

IN REG,TCNT0

CPI REG,3		;Порог колебания / длинного (короткого) импульса
BRLO ZAKMIT

CPI REG,53		;Длинный промежуток / пороговый промежуток
BRLO NE_KONEC_SNIMKU

RCALL KONTROLA

MOV VYST_2,VYST

NE_KONEC_SNIMKU:

LSL VYST
INC BITY
IN REG,TCNT0
CPI REG,13		;Порог короткого / длинного промежутка
BRLO KRATKA_M
INC VYST
KRATKA_M:

ZAKMIT:
NE_01:

LDI	REG,0b00100000	;включить спящий режим и установить режим ожидания
OUT	MCUCR,REG
RETI



CAS_VYPRSEL:

RCALL KONTROLA

CLR VYST
SER VYST_2

CLR PRODLEVA

LDI REG,0
OUT TCNT0,REG

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG
RETI



;проверьте правильность передачи
KONTROLA:
CPI BITY,9		;если количество бит не влезает, отбросьте код
BRNE SPATNE_BITY
CP VYST_2,VYST	;если 2 последовательных кода не совпадают, он не отвечает
BRNE RUZNE_KODY
RCALL PRIJEM
RUZNE_KODY:
CLR BITY
RET
SPATNE_BITY:
CLR VYST
CLR BITY
RET



PRIJEM:

CPI PRODLEVA,0
BREQ PRODLEVA_JE_0
RJMP KONEC_TL
PRODLEVA_JE_0:

MOV REG,VYST
SWAP REG
ANDI REG,0b00001111

MOV REG2,VYST
COM REG2
ANDI REG2,0b00001111

CP REG,REG2
BREQ SHODA
RJMP KONEC_TL
SHODA:

CLR REG2
LDI ZL,LOW(SKOK)
LDI ZH,HIGH(SKOK)
ADD ZL,REG
ADC ZH,REG2
IJMP

SKOK:
RJMP TL0
RJMP TL1
RJMP TL2
RJMP TL3
RJMP TL4
RJMP TL5
RJMP TL6
RJMP TL7
RJMP TL8
RJMP TL9
RJMP TL10
RJMP TL11
RJMP TL12
RJMP TL13
RJMP TL14
RJMP TL15


TL0:
SBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL1:
CBI PORT,0
SBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL2:
CBI PORT,0
CBI PORT,1
SBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL3:
CBI PORT,0
CBI PORT,1
CBI PORT,2
SBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL4:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
SBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL5:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
SBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL6:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
SBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL7:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
SBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL8:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
SBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL9:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
SBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL10:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
SBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL11:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
SBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL12:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
SBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL13:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
SBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL14:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
SBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL15:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
SBI PORT3,0
RJMP KONEC_TL

KONEC_TL:
RET

 

Так впринцепи оно работает, но при отжатии кнопки нужно ещё как то отлючать сигнал. И вот тут я вошёл в ступор. Что же дальше делать? Где что ещё исправить?

Ссылка на комментарий
Поделиться на другие сайты

19 минут назад, tifaso сказал:

Где что ещё исправить?

"Впринцепи"! "Впринцепи" своё исправь! Пожалуйста! Ведь это могут читать люди!

Ссылка на комментарий
Поделиться на другие сайты

@Гость В прицепе Что конкретно там исправлять я так и не догоняю. Всё вроде верно. Нужно только сделать чтобы на отжатие отключалось. А вот и проблемка в том что не могу найти где это. Или мне нужно переписать условие выполнения действия при нажатии.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

Сейчас всё таки доработал код вроде бы так как нужно отрабатывает.

Скрытый текст

; 16-канальный приемник DO
; кодируется длиной промежутка.
; 1 МГц ATTiny2313A
; создатель: DANYK 
; http://danyk.cz

.NOLIST ;Выключить генерацию листинга  
.INCLUDE "tn2313Adef.inc";Вложить другой файл  
.LIST ;Включить генерацию листинга    

;DEF Назначить регистру символическое имя
.DEF REG=R16		;рабочий регистр
.DEF REG2=R17		;рабочий регистр 2
.DEF STAV=R18		;регистр состояния входа
.DEF VYST=R19		;выходной регистр
.DEF VYST_2=R20		;предыдущий выходной регистр
.DEF PRODLEVA=R21	;отложить до дальнейшей реакции
.DEF BITY=R22		;битовый счетчик

;EQU Установить постоянное выражение
.EQU SMER=DDRB		;управление направлением  
.EQU PORT=PORTB		;порт  

.EQU SMER2=DDRD		;управление направлением  
.EQU PORT2=PORTD	;порт  

.EQU SMER3=DDRA		;управление направлением  
.EQU PORT3=PORTA	;порт  
.EQU PINY3=PINA		;входы

;CSEG Программный сегмент                    
.CSEG				;сегмент кода   

;ORG  Установить положение в сегменте
;RJMP Относительный переход
.ORG 0
RJMP START

.ORG OC0Aaddr
RJMP CAS_VYPRSEL

.ORG PCIAaddr
RJMP SIGNAL
	

START:

LDI REG,LOW(RAMEND)
OUT SPL,REG

;установить порт B
LDI REG,0b11111111
OUT SMER,REG
LDI REG,0b00000000
OUT PORT,REG

;установить порт D
LDI REG,0b01111111
OUT SMER2,REG
LDI REG,0b00000000
OUT PORT2,REG

;установить порт A
LDI REG,0b00000001
OUT SMER3,REG
LDI REG,0b00000010
OUT PORT3,REG

; НАСТРОЙКИ ТАЙМЕРА
LDI	REG,0b00000010 	; установить счетчик на ноль при настройке на сравнение ...
OUT	TCCR0A,REG    	; ... значения (так называемый CTC), OC0 не используется
LDI	REG,0b00000011 	; делитель 64
OUT	TCCR0B,REG    	; 
LDI	REG,213      	; устанавливает сравниваемое значение
OUT	OCR0A,REG     	; 

LDI	REG,0b00000001	; разрешить прерывание OCIE0A
OUT	TIMSK,REG    	; 



LDI	REG,0b00001000	; разрешить прерывание PCINT1
OUT	GIMSK,REG    	;

LDI	REG,0b00000010	; разрешить прерывание PCINT на PA1 (PCINT9)
OUT	PCMSK1,REG    	;

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG

;выключает аналог. компаратор - никогда не использовался (экономия энергии) 
LDI	REG,0b10000000	
OUT	ACSR,REG  

SEI

SMYCKA:
SLEEP
RJMP SMYCKA


SIGNAL:
IN STAV,PINY3
COM STAV	;инвертирует входной сигнал (приемник в состоянии покоя log1)

;Низкий уровень
SBRC STAV,1
RJMP NE_10

LDI REG,0
OUT TCNT0,REG

NE_10:

;Верхний уровень
SBRS STAV,1
RJMP NE_01

IN REG,TCNT0

CPI REG,3		;Порог колебания / длинного (короткого) импульса
BRLO ZAKMIT

CPI REG,53		;Длинный промежуток / пороговый промежуток
BRLO NE_KONEC_SNIMKU

RCALL KONTROLA

MOV VYST_2,VYST

NE_KONEC_SNIMKU:

LSL VYST
INC BITY
IN REG,TCNT0
CPI REG,13		;Порог короткого / длинного промежутка
BRLO KRATKA_M
INC VYST
KRATKA_M:

ZAKMIT:
NE_01:

LDI	REG,0b00100000	;включить спящий режим и установить режим ожидания
OUT	MCUCR,REG
RETI



CAS_VYPRSEL:

RCALL KONTROLA

CLR VYST
SER VYST_2

CLR PRODLEVA

LDI REG,0
OUT TCNT0,REG

LDI	REG,0b00110000	;включить спящий режим и установить режим отключения питания
OUT	MCUCR,REG
RETI



;проверьте правильность передачи
KONTROLA:
CPI BITY,9		;если количество бит не влезает, отбросьте код
BRNE SPATNE_BITY
CP VYST_2,VYST	;если 2 последовательных кода не совпадают, он не отвечает
BRNE RUZNE_KODY
RCALL PRIJEM
RUZNE_KODY:
CLR BITY
RET
SPATNE_BITY:
CLR VYST
CLR BITY
RET



PRIJEM:

CPI PRODLEVA,0
BREQ PRODLEVA_JE_0
RJMP KONEC_TL
PRODLEVA_JE_0:

MOV REG,VYST
SWAP REG
ANDI REG,0b00001111

MOV REG2,VYST
COM REG2
ANDI REG2,0b00001111

CP REG,REG2
BREQ SHODA
RJMP KONEC_TL
SHODA:

CLR REG2
LDI ZL,LOW(SKOK)
LDI ZH,HIGH(SKOK)
ADD ZL,REG
ADC ZH,REG2
IJMP

SKOK:
RJMP TL0
RJMP TL1
RJMP TL2
RJMP TL3
RJMP TL4
RJMP TL5
RJMP TL6
RJMP TL7
RJMP TL8
RJMP TL9
RJMP TL10
RJMP TL11
RJMP TL12
RJMP TL13
RJMP TL14
RJMP TL15


TL0:
SBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL1:
CBI PORT,0
SBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL2:
CBI PORT,0
CBI PORT,1
SBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL3:
CBI PORT,0
CBI PORT,1
CBI PORT,2
SBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL4:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
SBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL5:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
SBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL6:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
SBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL7:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
SBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL8:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
SBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL9:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
SBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL10:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
SBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL11:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
SBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL12:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
SBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL13:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
SBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL14:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
SBI PORT2,6
CBI PORT3,0
RJMP KONEC_TL

TL15:
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
SBI PORT3,0
RJMP KONEC_TL

KONEC_TL:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CBI PORT,0
CBI PORT,1
CBI PORT,2
CBI PORT,3
CBI PORT,4
CBI PORT,5
CBI PORT,6
CBI PORT,7
CBI PORT2,0
CBI PORT2,1
CBI PORT2,2
CBI PORT2,3
CBI PORT2,4
CBI PORT2,5
CBI PORT2,6
CBI PORT3,0
RET

 

Не уверен что сделал правильно, но на более лучшее решение я не могу сообразить. Кто знает как сделать лучше подскажите.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
    • Чтобы меньше было излучения, нужно мотать тороидальную. Возможно для повышения добротности по омическому сопротивлению лучше этот ТОР мотать в пару слоев. Если ее намотать на шило, то она вряд ли будет вообще работать как катушка.   Индуктивность прямо пропорциональна площади сечения, которая в свою очередь прямо пропорциональна квадрату диаметра. К тому же индуктивность в обратной пропорции с длиной намотки.
    • Я в ходе отладки выяснил, что сбоит в функции:  void w25qWritingByUSB(uint32_t dpagenum, uint8_t *bufByUSB) При чем поведение очень странное. Отладочные сообщения даже не выводятся в начале функции. В ходе экспериментов понял что связано это с объявлением массивов и решил объявить большие буферы которые на 4КБ и 0.25КБ: uint8_t current_sector_buf[4096]; uint8_t buf[256]; глобально. В оригинале, буферы объявлялись локально в функции. После изменения буквально двух строчек кода, все заработало. Также, в оригинальном проекте было сильно напутано из функциями. Я решил функции выкинуть из main.c и вставить в w25q.c Эти функции: void w25qEraseSector(uint16_t sector) void w25qWritingByUSB(uint32_t dpagenum, uint8_t *bufByUSB) Поиск данной проблемы реально отобрало кучу времени. На будущее буду знать что и такое бывает...
    • есть готовый  драйвер BTS7960 до 43А (долговременно до 10) с шим и все, что нужно и стоит недорого. И не надо изобретать  велосипед. Даже с учетом завышения параметров  уж 5А свободно.
    • А есть внятное описание этого M18? По моему он не очень "интегирируется" с микроконтроллером, да и нужно ли? По схеме выше - подключить его к U1C, выход U1C кинуть на +С12, U1D вообще выкинуть вместе с D1,D2 и R13.
    • Прежде чем сломя голову что-либо менять, следует задуматься о причинах выхода этого "чего-либо" из строя. В противном случае замененное отправится протоптанной тропой своих предшественников. Защитной лампой пользоваться умеете? Вот на нее и заменяйте для начала.
    • Это обрывные резисторы в роли предохранителей. Номинал на последнем фото похож на 470 Ом (желтый-фиолетовый-коричневый-золотой, если цвета правильно разглядел), но это многовато, вот 47 Ом - похоже на правду. Можно ставить в достаточно широком диапазоне, другое дело, что горят они не просто так. Скорее всего дальше где-то косяк. А мультиметром измеряли сопротивление? Что показывает?
×
×
  • Создать...