Страница 1 из 1

Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 11:22:28
olegue
Вот нагуглил я случайно вот такое готовое решение

http://danyk.cz/avr_rdo.html
Изображение

код ПЕРЕДАТЧИКА
Спойлер

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

; Vysilac 4-kanaloveho radioveho dalkoveho ovladani
; Modulace sirkou pulzu
; CPU 1,2 MHz
; DANYK
; http://danyk.cz/avr_rdo.html

.NOLIST   
.INCLUDE "tn13def.inc"     
.LIST     


; --- !!! ZDE SE NASTAVUJE 7-bitove ID zarizeni !!! ----------------
.EQU ID=0b1001001
; ------------------------------------------------------------------


;.DEF POS3=R13		;posuvne registry
.DEF POS1=R14		;posuvne registry
.DEF POS2=R15		;posuvne registry

.DEF REG=R16		;pracovni registr
.DEF REG2=R17		;pracovni registr 2
.DEF CYKLY=R18		;pocitadlo vysilacich cyklu
.DEF BITY=R19		;pocitadlo odeslanych bitu

.DEF DATA1=R20		;data
.DEF DATA2=R21		;data
;.DEF DATA3=R22		;data


.EQU SMER=DDRB		;rizeni smeru  
.EQU PORT=PORTB		;port  
.EQU PINY=PINB		;port 
                    
.CSEG				;kodový segment   

.ORG 0
RJMP START

.ORG PCI0addr
RJMP TLACITKO
	
START:

;nastavi portB
LDI REG,0b00010000
OUT SMER,REG
LDI REG,0b00001111
OUT PORT,REG



LDI	REG,0b00100000	; povoli preruseni PCINT
OUT	GIMSK,REG    	;

LDI	REG,0b00001111	; povoli preruseni PCINT na 0,1,2,3
OUT	PCMSK,REG    	;

LDI	REG,0b00110000	;povoli uspani (sleep) a nastavi mod power down
OUT	MCUCR,REG

;vypne analog. komparator - neni nikdy vyuzit (setri energii)
LDI	REG,0b10000000	
OUT	ACSR,REG  

SEI

SMYCKA:
SLEEP
RJMP SMYCKA


TLACITKO:
IN REG2,PINY
ANDI REG2,0b00001111

CPI REG2,0b00001111
BREQ NENE

RCALL ZAKODUJ
RJMP TLACITKO
NENE:
LDI REG,0b00001111
OUT PORT,REG
RETI


ZAKODUJ:	; zakodovani dat (stav tlacitek v REG2 ... 0-0-0-0-TL4-TL3-TL2-TL1)

;vytvori inverzi
MOV DATA2,REG2
SWAP DATA2
COM REG2
ANDI REG2,0b00001111
OR DATA2,REG2

LDI REG,ID
LSL REG
MOV DATA1,REG

;spocita paritni bit (REG) z dolni pulky REG2 a z REG
EOR REG2,REG
SWAP REG
EOR REG2,REG
MOV REG,REG2
LSR REG2
LSR REG2
EOR REG,REG2
MOV REG2,REG
LSR REG2
EOR REG,REG2
ANDI REG,1
;prida paritni bit
OR DATA1,REG

RCALL VYSILEJ
RET



;Vysila s pouzitim inverzniho kontrolniho kodu
;Kodovani delkou pulzu (dlouhy = 1)
;Zacina se MSB
VYSILEJ:
LDI CYKLY,5		;pocet vzorku v jednom vysilacim impulzu
VYSILEJ_DAL:

MOVW POS1,DATA1
;MOV POS3,DATA3

LDI BITY,16
DALSI_BIT:
SBRS POS2,7
RCALL KRATKA_1
SBRC POS2,7
RCALL DLOUHA_1
RCALL KRATKA_0
LSL POS1
ROL POS2
;ROL POS3
DEC BITY
BRNE DALSI_BIT

RCALL KRATKA_0
RCALL KRATKA_0
RCALL KRATKA_0
RCALL KRATKA_0

DEC CYKLY
BREQ DOVYSILEJ
RJMP VYSILEJ_DAL
DOVYSILEJ:

RET



;Krátká mezera
KRATKA_0:
LDI REG,80		;x 2,5us
CEKEJ_K0:
DEC REG
BRNE CEKEJ_K0
RET


;Krátký impulz
KRATKA_1:
SBI PORT,4

LDI REG,40		;x 2,5us
CEKEJ_K1:
DEC REG
BRNE CEKEJ_K1

CBI PORT,4
RET


;Dlouhý impulz
DLOUHA_1:
SBI PORT,4

LDI REG,160		;x 2,5us
CEKEJ_D1:
DEC REG
BRNE CEKEJ_D1

CBI PORT,4
RET

кОД ПРИЕМНИКА
Спойлер

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

; Prijimac 4-kanaloveho radioveho dalkoveho ovladani
; kodovani delkou pulzu
; ATtiny13A / 13 / 13V, CPU 1,2 MHz
; DANYK
; http://danyk.cz/avr_rdo.html

.NOLIST   
.INCLUDE "tn13def.inc"     
.LIST     


; --- !!! ZDE SE NASTAVUJE 7-bitove ID zarizeni !!! ----------------
.EQU ID=0b1001001
; ------------------------------------------------------------------


.DEF VYST1_P=R12	;predchozi stav prijimace bitu
.DEF VYST2_P=R13	;predchozi stav prijimace bitu 2
.DEF VYST1=R14		;posuvny registr prijimace bitu
.DEF VYST2=R15		;posuvny registr prijimace bitu 2

.DEF REG=R16		;pracovni registr
.DEF REG2=R17		;pracovni registr 2
.DEF STAV=R18		;registr stavu vstupu
.DEF PRODLEVA=R19	;prodleva do dalsi reakce
.DEF KOPIE1=R20		;kopie vystupu
.DEF KOPIE2=R21		;kopie vystupu 2
.DEF BITY=R22		;pocitadlo bitu
.DEF ZALOHA=R23		;zalohuje casomiru
.DEF PRETEK=R24		;pretekani casovace


.EQU SMER=DDRB		;rizeni smeru  
.EQU PORT=PORTB		;port  
.EQU PINY=PINB		;port 
                    
.CSEG				;kodový segment   

.ORG 0
RJMP START

.ORG PCI0addr
RJMP SIGNAL
	
.ORG OC0Aaddr
RJMP CAS_VYPRSEL

START:

LDI REG,LOW(RAMEND)
OUT SPL,REG

;nastavi portB
LDI REG,0b00001111
OUT SMER,REG
LDI REG,0b00000000
OUT PORT,REG

; NASTAVENI CASOVACU
LDI	REG,0b00000010 	; nastavi čítač na nulovani pri dosazeni porovnavane...
OUT	TCCR0A,REG    	; ...hodnoty (tzv. CTC), OC0 nevyuzit
LDI	REG,0b00000010 	; preddeleni 8
OUT	TCCR0B,REG    	; 
LDI	REG,255      	; nastavi porovnavanou hodnotu
OUT	OCR0A,REG     	; 
LDI	REG,0b00000100	; povoli preruseni OCIE0A
OUT	TIMSK0,REG    	; 


LDI	REG,0b00100000	; povoli preruseni PCINT
OUT	GIMSK,REG    	;

LDI	REG,0b00010000	; povoli preruseni PCINT na 4
OUT	PCMSK,REG    	;

LDI	REG,0b00110000	;povoli uspani (sleep) a nastavi mod power down
OUT	MCUCR,REG

;vypne analog. komparator - neni nikdy vyuzit (setri energii)
LDI	REG,0b10000000	
OUT	ACSR,REG  


CLR BITY

SEI

SMYCKA:
SLEEP
RJMP SMYCKA


SIGNAL:
IN STAV,PINY
SBRS STAV,4
RJMP SESTUPNA

; Nabezna hrana _- !!!!!!!!!!!!!!
; ------------------------------------------------------------------
IN ZALOHA,TCNT0
CLR REG
OUT TCNT0,REG

CPI ZALOHA,64
BRLO KONEC_HRAN
RCALL KONTROLA

RJMP KONEC_HRAN

; Sestupna hrana -_ !!!!!!!!!!!!!
; ------------------------------------------------------------------
SESTUPNA:

IN REG,TCNT0

CPI REG,8		;Prah delky zakmitu / kratkeho pulzu
BRLO ZAKMIT

CLR REG2
OUT TCNT0,REG2

CPI REG,128		;Prah delky dlouheho pulzu / prilis dlouheho pulzu
BRLO NE_KONEC_SNIMKU

CLR VYST1
CLR VYST2
CLR BITY
RJMP KONEC_HRAN

NE_KONEC_SNIMKU:

LSL VYST1
ROL VYST2
INC BITY
CPI REG,32		;Prah kratkeho pulzu / dlouheho pulzu
BRLO KRATKY_P
INC VYST1
KRATKY_P:

ZAKMIT_KONEC:
KONEC_HRAN:

LDI	REG,0b00100000	;povoli uspani (sleep) a nastavi mod idle
OUT	MCUCR,REG
RETI


ZAKMIT:
ADD REG,ZALOHA
OUT TCNT0,REG
RJMP ZAKMIT_KONEC




CAS_VYPRSEL:
;kontrola spravnosti prenosu
RCALL KONTROLA

INC PRETEK
CPI PRETEK,40
BRLO VYPRSENI_NE
CLR PRETEK

CLR PRODLEVA

LDI	REG,0b00110000	;povoli uspani (sleep) a nastavi mod power down
OUT	MCUCR,REG

VYPRSENI_NE:
RETI



KONTROLA:
CPI BITY,16		;nesedi-li pocet bitu, zahodi kod
BRLO CHYBA_BITY

CP VYST1_P,VYST1	;nejsou-li 2 po sobe jdouci kody stejne, nereaguje
CPC VYST2_P,VYST2
BRNE CHYBA_RUZNE

RCALL PRIJEM
CHYBA_BITY:

CLR VYST1
CLR VYST2

CHYBA_RUZNE:
MOVW VYST1_P,VYST1
CLR BITY
RET



PRIJEM:
CPI PRODLEVA,0
BRNE NEREAGUJ

;kontrola ID zarizeni
MOV REG,VYST1
LSR REG
CPI REG,ID
BRNE NEREAGUJ


MOVW REG,VYST1
ANDI REG,0b11111110
;spocita paritni bit (REG) z dolni pulky REG2 a z REG
EOR REG2,REG
SWAP REG
EOR REG2,REG
MOV REG,REG2
LSR REG2
LSR REG2
EOR REG,REG2
MOV REG2,REG
LSR REG2
EOR REG,REG2
ANDI REG,1
;porovna paritni bit
MOV REG2,VYST1
ANDI REG2,1
CP REG2,REG
BRNE NEREAGUJ

;porovna inverzi
MOV REG,VYST2
MOV REG2,VYST2
SWAP REG2
COM REG2
CP REG,REG2
BRNE NEREAGUJ


MOV KOPIE1,VYST2
ANDI KOPIE1,0b00001111

IN REG,PORT
CPI KOPIE1,0b00000001
BREQ TL0
CPI KOPIE1,0b00000010
BREQ TL1
CPI KOPIE1,0b00000100
BREQ TL2
CPI KOPIE1,0b00001000
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:
LDI PRODLEVA,1
NEREAGUJ:
RET
все это есть на сайте.

Я попытался повторить и даже скинул в протеус.
Будут благодарен если знатоки по русски откоментируют asm код

Добавлено after 4 minutes 36 seconds:
Но в железе работает как то криво. Передатчик беспрерывно передает сигнал. А почему пока так и не понял.
аХотя в протеусе все отлично.

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 14:39:36
Карбофос
[uquote="olegue",url="/forum/viewtopic.php?p=3945794#p3945794"]Но в железе работает как то криво. Передатчик беспрерывно передает сигнал. А почему пока так и не понял.[/uquote]
Возможно, наводки от радиомодуля.
Конденсатор по питанию контроллера + резистор 10к с VCC на 1 пин (RESET) попробуйте.

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 18:19:34
olegue
Изображение

сегодня из китая, как по заказу, прибыл коплект на 433 мгц, поставил его и все ок. Странно.

Добавлено after 42 minutes 50 seconds:
Карбофос писал(а):Конденсатор по питанию контроллера + резистор 10к с VCC на 1 пин (RESET) попробуйте.
уже поставил .
Нет , надо посмотреть в протеусе более внимательно. Один из канало глючный в передатчике . Сам включается и выключается.

Добавлено after 49 minutes:
вот проект в протеусе, может отому будет интересно посмотреть
Изображение

версия протеуса 8.5

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 18:59:54
Карбофос
[uquote="olegue",url="/forum/viewtopic.php?p=3946005#p3946005"]Один из канало глючный в передатчике . Сам включается и выключается.[/uquote]
Внутренний pull-up резистор (подтяжка) сгорел, можно снаружи припаять 10к.
Для проверки, относительно 0 проверьте напряжения на кнопках. На исправных будет равно напряжению питания.

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 19:27:36
olegue
Карбофос писал(а):Внутренний pull-up резистор (подтяжка) сгорел, можно снаружи припаять 10к.
типа висит в воздухе и собирает помехи?.
А может автор прошивки забыл его подключить в коде?

Добавлено after 1 minute 37 seconds:
ок, подпаяюсь, это без вопросов. Спасибо

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 19:29:41
Карбофос
Нет, не забыл.

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

START:

;nastavi portB
LDI REG,0b00010000
OUT SMER,REG
LDI REG,0b00001111
OUT PORT,REG

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 21:06:55
dgrett
Не вижу где здесь «не забыл». Вижу на ресет подтяжка выключена.

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 22:41:34
Карбофос
Пользоваться "подтяжкой" для сигнала RESET???
Это просто супер.
Ты-же ее сможешь включить лишь когда контроллер в работе уже. :shock:

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 23:18:00
BOB51
Корректно подключение вывода RESET к +питания через внешний резистор 1к...
:roll:

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Вт дек 22, 2020 23:54:28
Карбофос
Номинал, наверное, зависит от напряженности внешнего электрического поля и разводки платы. :))

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 00:40:22
dgrett
Обычно я 10к ставлю. 1к у меня программатор непересиливает.

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 10:30:09
BOB51
10 это многовато...
Обычно 1-4,7 (из того, что попадется).
У моей версии SiProg шинный буфер КР580ВА87 - тот и 1 килоом вытягивает.
https://img.radiokot.ru/files/20529/2e8f5nlce2.GIF
8)

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 13:59:30
oleg110592
а че гадать то про ресет - есть рекомендация производителя
Изображение

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 14:03:20
BOB51
Эта рекомендация касается организации полноценной цепочки "внешнего сброса".
В случае, когда мы работаем с внутренним (а для большинства АВРок это весьма удобно), между выводом сброса и + питания просто вешается внешний резистор (там какая-то своя апнота была - искать... долго....).
8)

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 14:25:59
oleg110592
туда (к ресету) еще программатор обычно подключают - уже выше писали про неосиливает
The reset line has an internal pull-up resistor, but if the environment is noisy it can be insufficient and reset can therefore occur sporadically. Refer to datasheet for value of pull-up resistor on specific devices. Connecting the RESET so that it is possible to enter both high-voltage programming and ordinary low level reset can be achieved by applying a pull-up resistor to the RESET line. This pull-up resistor makes sure that reset does not go low unintended. The pull-up resistor can in theory be of any size, but if the Atmel®AVR® should be programmed from e.g. STK500/AVRISP the pull-up should not be so strong that the programmer cannot activate RESET by draw the RESET line low. The recommended pull-up resistor is 4.7kΩ or larger when using STK500 for programming. For debugWIRE to function properly, the pull-up must not be smaller than 10kΩ.

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 14:29:03
BOB51
Опять от темы отклонились...
8)
Я с теми радиочастотными модулями не сильно - то работал...
Однако JDY40 вроде поинтереснее....
:dont_know:

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 17:11:53
oleg110592
ага - шинный буфер КР580ВА87 прям в тему радиоуправления :)))
А вот ардуинщики радиомодули из темы освоили
https://diytimes.ru/post/65
надо ардуинщиков местных (например BOB51) просить чтоб скетчи оттуда для тини13 скомпилили - будет хороший тест для радиомодулей и благодарность потомков.

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 19:17:56
NStorm
SYN115/SYN480R поинтереснее будут: http://avrproject.ru/load/kak_podkljuch ... 0/2-1-0-32
А для работы с ними вместо VirtualWire уже есть более современная библиотека RadioHead (от того же автора): http://www.airspayce.com/mikem/arduino/RadioHead/
Он сам пишет, что VirtualWire устарела и заменена этой. И примеры там тоже есть.

Re: Радиоуправление на Attiny13 (Asm) сайт danyk.cz

Добавлено: Ср дек 23, 2020 20:21:43
oleg110592
раз пошла такая пьянка - применял NRF24l01, очень положительные впечатления. Дешево и сердито. У ардуинщиков поддержка есть
https://arduinomaster.ru/datchiki-ardui ... kluchenie/
там кстати возможно о причинах "глючности передатчика"
Во время запуска микроконтроллера могут возникнуть проблемы, которые связаны с тем, что не предусмотрена нужная сила тока в модуле питания 3,3 В. Из-за этого могут возникнуть помехи, мешающие стабильной работе.