tifaso Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 Есть прошивки систем дистанционного управления на ассемблере. Одна на 4 канала. Вторая на 16 каналов. Все схемы комплектные со своими пультами это для меня очень важно. 4 канальная система.zip 16 канальная система.zip В архивах также вложены все схемы и фьюзы. Всё это работает само по себе нормально, но чтобы где то её использовать нужно как то всё время выкручиваться. Это бы всё облегчило если бы кто помог переписать эти прошивки с ассемблера на си сохранив при этом полностью весь функционал. Так как в си мне разобраться гораздо легче чем в ассемблере. Так же я там уже сам смогу корректировать код вывода сигнала уже под свои нужды. Типа фиксированное нажатие кнопки или нет. Я работаю с кодом в Atmel Studio 6.2 ну хотелось бы чтобы была совместимость с этим редактором. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
andrusha152 Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 Вряд ли кто за бесплатно согласится. В разделе Работа вам быстрее помогут. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
tifaso Опубликовано 15 сентября, 2021 Автор Поделиться Опубликовано 15 сентября, 2021 (изменено) Средсв всё равно нет на это. Интересно всё таки попробовать, а можно ли как то допустим не трогая основной код сделать вставки кодом на си или такое тут не прокатит? Знаю где то такое делают. Но это так как минимум, а так хотелось бы полностью уже переписать было бы меньше проблем. Изменено 15 сентября, 2021 пользователем tifaso 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
andrusha152 Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 Написать код с нуля намного проще, чем переделывать чужой. Ждите, может найдётся энтузиаст, который вам поможет. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
andrusha152 Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 Давно бы уже сами написали. В сети куча примеров. Раз. Два. Исходники есть, было бы желание. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 15 сентября, 2021 Автор Поделиться Опубликовано 15 сентября, 2021 @andrusha152 Здесь нету главного условия. Это комплектность устройства должен быть и пульт и приёмник с полной совместимостью. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
andrusha152 Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 Пульт можно взять любой, на Али их куча, с разными протоколами. Самсунг, Сони, RC5 - все эти протоколы неоднократно описаны в сети с примерами. Только под себя код подправить и пользоваться на здоровье. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 15 сентября, 2021 Автор Поделиться Опубликовано 15 сентября, 2021 @andrusha152 Нет это не годится. Нужен обязательно самодельный. Только такие варианты и рассматриваются. Хотя впринцепи есть такой вариант собрать пульт на SAA3010P. Они у меня есть и уже как то найти связи с пультом в приёмнике это самое сложное для меня. У меня есть и прошивка для приёмника на RC5 протоколе, но как найти эти связи это ад для меня. осциллографа нету сразу говорю. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
otest Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 Цитата Так как в си мне разобраться гораздо легче чем в ассемблере. Вот и перепиши весь алгоритм на СИ. В чём проблема? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 15 сентября, 2021 Автор Поделиться Опубликовано 15 сентября, 2021 @otest Можно попробовать с помощью справочника по ассемблеру попытаться что то написать. Но как сомневаюсь что что то выйдет. Ассемблер сильно сложный и путаный. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
andrusha152 Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 10 минут назад, otest сказал: перепиши весь алгоритм на СИ Для этого нужно знать ассемблер и Си. 12 минут назад, otest сказал: В чём проблема? Вот в этом и проблема. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
otest Опубликовано 15 сентября, 2021 Поделиться Опубликовано 15 сентября, 2021 Цитата Для этого нужно знать ассемблер и Си. Для этого нужно знать алгоритм работы устройства. А на каком языке это написано устройству на плевать. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr. West Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 Разница между ассемблером и СИ примерно такая: Если на СИ программа выглядит так: "Открыть форточку", то на Ассемблере это будет иметь вид:" Встать с дивана, прошагать направо 2 метра, налево полтора, поднять руку, растопырить кисть, поднести к ручке, сжать кисть, повернуть ручку, потянуть .. и т.д." Причём "встать с дивана" и "шагнуть"- это будут ещё отдельные подпрограммы. Берёшь листинг в одну руку, справочник в другую и по порядку разбираешься с каждой командой, пишешь комментарии в каждую строку - что здесь происходит. Всё это куда реальней, чем ждать у моря погоды. А там, глядишь, и нужда переписывать программу отпадёт, просто внесёшь своих изменения. 1 "Я не знаю какой там коэффициент, я просто паять умею. " Ссылка на комментарий Поделиться на другие сайты Поделиться
andrusha152 Опубликовано 16 сентября, 2021 Поделиться Опубликовано 16 сентября, 2021 9 часов назад, otest сказал: устройству на плевать А при чём здесь устройство? Тема про другое. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 17 сентября, 2021 Автор Поделиться Опубликовано 17 сентября, 2021 (изменено) Сейчас перевёл для начала все имеющиеся комментарии в фале листинга и в коде прошивок для 16 канальной системы ДУ. Уже даже сейчас из этих комментариев стала понятна примерная логика работы программ. Теперь ещё сделаю также перевод комментариев на 4 канальную систему. Ну и тогда уже начну разбирать поочерёдно каждую команду с помощью справочника и делая свои приписки что за что отвечает и что делает. Ну а там уже посмотрим что выйдет. Изменено 17 сентября, 2021 пользователем tifaso 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 19 сентября, 2021 Автор Поделиться Опубликовано 19 сентября, 2021 (изменено) Закончил переводы комментариев и начал потихоньку копаться в справочнике ассемблера. И тут я вообще стал понимать, то что по сути то мне и не стоит даже это всё переписывать, а лишь достаточно переписать выводы сигнала на выходе приёмника чтобы его можно было правильно обработать, но тут ещё нужно разобраться от куда что приходит и как приёмник подаёт сигналы на разные каналы. Примерную логику я знаю так как система дистанционного управления мне близка было не мало литературы по ней изучено.Нужно только разбираться кодом. из комментариев в прошивке пульта я понял что сигнал передаётся на частоте 37 мг. там это чётко написано.Ну мне эту часть можно даже не трогать. Принимать и проводить дальнейшую обработку сигналов я буду другой микросхемой со своей прошивкой. А здесь мне нужно будет сделать так чтобы приёмник на выход подавал сигнал так как будто идёт обычное нажатие на кнопку. В общем при нажатии на пульт выдать отрицательный сигнал на соответствующем выводе приёмника. Изменено 19 сентября, 2021 пользователем tifaso 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 19 сентября, 2021 Автор Поделиться Опубликовано 19 сентября, 2021 (изменено) Всё вроде бы как посидел сравнил прошивки посмотрел справочник и понял что же нужно сделать. Достаточно переписать несколько строк кода и всё будет в порядке. Сигнал на выходе будет выходить так как нужно. И не нужно мне больше делать этих костылей на выходе. Обрабатывать сигнал я уже всё равно своей микросхемой буду вернее со своей прошивкой на си. А тут уж лучше сделать так. Изменено 19 сентября, 2021 пользователем tifaso 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 19 сентября, 2021 Автор Поделиться Опубликовано 19 сентября, 2021 (изменено) Всё переписал как мне нужно осталось только протестироваль, но у меня сейчас не на чем тестировать нужно ещё собирать саму систему.Но думаю что всё уже должно работать. Ведь я смотрел в других прошивках этого же автора как он делал там и наконец то уловил суть алгоритма данного кода. Всё всем спасибо. Изменено 19 сентября, 2021 пользователем tifaso 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 19 сентября, 2021 Автор Поделиться Опубликовано 19 сентября, 2021 В общем собрал на макетке без пайки проверил как то не так оно работает как ожидалось. Ну это прийдётся дальше разбираться править код тестировать. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
100482 Опубликовано 19 сентября, 2021 Поделиться Опубликовано 19 сентября, 2021 5 часов назад, tifaso сказал: Всё переписал как мне нужно Быстро уж слишком, даже удивился, и в результате 13 минут назад, tifaso сказал: как то не так оно работает как ожидалось Кажущаяся простота 6 часов назад, tifaso сказал: Достаточно переписать несколько строк кода и всё будет в порядке. Ну да, тогда каждый бы был "писателем". 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 19 сентября, 2021 Автор Поделиться Опубликовано 19 сентября, 2021 Да ничего страшно на самом то деле уже почти всё как нужно осталось только один момент доработать видимо я где то упустил в коде, но думаю это будет не так сложно найти. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 20 сентября, 2021 Автор Поделиться Опубликовано 20 сентября, 2021 В общем так выкладываю всё как есть в подробностях: 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,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 Скрытый текст Схема: С фиксацией кнопок Код пульта: ; Передатчик 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 Так впринцепи оно работает, но при отжатии кнопки нужно ещё как то отлючать сигнал. И вот тут я вошёл в ступор. Что же дальше делать? Где что ещё исправить? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость В прицепе Опубликовано 20 сентября, 2021 Поделиться Опубликовано 20 сентября, 2021 19 минут назад, tifaso сказал: Где что ещё исправить? "Впринцепи"! "Впринцепи" своё исправь! Пожалуйста! Ведь это могут читать люди! 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 20 сентября, 2021 Автор Поделиться Опубликовано 20 сентября, 2021 (изменено) @Гость В прицепе Что конкретно там исправлять я так и не догоняю. Всё вроде верно. Нужно только сделать чтобы на отжатие отключалось. А вот и проблемка в том что не могу найти где это. Или мне нужно переписать условие выполнения действия при нажатии. Изменено 20 сентября, 2021 пользователем tifaso 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
tifaso Опубликовано 21 сентября, 2021 Автор Поделиться Опубликовано 21 сентября, 2021 Сейчас всё таки доработал код вроде бы так как нужно отрабатывает. Скрытый текст ; 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 Не уверен что сделал правильно, но на более лучшее решение я не могу сообразить. Кто знает как сделать лучше подскажите. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.