RDS matematika

Dotazy na technické problémy, vlastní řešení technických problémů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
msar
Příspěvky: 253
Registrován: 22 dub 2006, 02:00
Bydliště: Hradec Králové

#16 Příspěvek od msar »

Snad se v tom vyznáš, je to část přijmu

Kód: Vybrat vše

;BUFFER1,BUFFER1+1,BUFFER2,BUFFER2+1,RDSDA,RDSCL nadefinovány na začátku programu
RDS:	MOV DPTR,#05B9h ;=0000010110111001b
	MOV R1,#26	; počet přijímaných bitů
	MOV A,#0
	MOV R0,#3	;přijmi 3 bity
	CALL RDSCTI	;přijímací rutina
	MOV B,#0
	XCH A,B		;v B vyšší bajt	
	MOV R0,#8	;přijmi 8 bitů
	CALL RDSCTI
	XCH A,B		;v A nižší bajt
TST1:	JNB B.2,DOPLN	;pokud je 2^10 nulový, doplň bit
TST2:	XRL A,DPL	;XOR A a nižšího bajtu DPTR
	XCH A,B		;provádí XRL B,DPH
	XRL A,DPH
	XCH A,B
	DJNZ R1,DOPLN   ;dokud není 26bitů, doplňuje
	MOV BUFFER1,A 	;v BUFFER1 nižší bajt	
	MOV BUFFER1+1,B ;v BUFFER1+1 vyšší bajt

	MOV R1,#26	;to samé jako výše
	MOV R0,#3	
	CALL RDSCTI
	MOV B,#0
	XCH A,B		;v B vyšší bajt	
	MOV R0,#8	
	CALL RDSCTI
	XCH A,B		;v A nižší bajt
TST3:	JNB B.2,DOPLN
TST4:	XRL A,DPL
	XCH A,B		;provádí XRL B,DPH
	XRL A,DPH
	XCH A,B
	DJNZ R1,DOPLN
	MOV BUFFER2,A 	;v BUFFER2 nižší bajt	
	MOV BUFFER2+1,B;v BUFFER2+1 vyšší bajt
	JMP POROVN
DOPLN:	CALL RDSCTI1	;do C přijatý bit
	RLC A		;rotuj A
	XCH A,B		;provádí RLC B
	RLC A
	XCH A,B
	JNB B.2,DOPLN	;pokud je 2^10 nulový, doplň bit
	JMP TST4
RDSCTI:			;přečte tolik bitů, kolik je v R0	
CTI1:	JB RDSCL,CTI10	;čekej na náběžnou hranu
	JMP CTI1
CTI10:	MOV C,RDSDA	;data bit vlož do C
	DEC R1		;odečti R1
CTI20:	JNB RDSCL,CTI100 ;čekej na spádovou hranu
	JMP CTI20
CTI100:	RLC A		;rotuj A přes C
	DJNZ R0,CTI1	;proveď tolikrát, kolik je v R0
KONC:	RET

RDSCTI1:		;přečte 1 bit		
CTI2:	JB RDSCL,CTI30	;čekej na náběžnou hranu
	JMP CTI2
CTI30:	MOV C,RDSDA	;data bit vlož do C
	DEC R1		;odečti R1
CTI40:	JNB RDSCL,CTI50	;čekej na spádovou hranu
	JMP CTI40
CTI50:	RET
POROVN:	MOV A,BUFFER1
	XRL A,BUFFER2	;porovnej BUFFER1 a BUFFER2
	JNZ RDSS	                ;při neshodě provádí celé čtení znova
	MOV A,BUFFER1+1     ;porovnej BUFFER1+1 a BUFFER2+1
	XRL A,BUFFER2+1      ;při neshodě provádí celé čtení znova
	JNZ RDS		;(při nenulovosti A provede skok)
	CALL ZOBRAZ 	;zobraz na LCD výsledky


Piitr

#17 Příspěvek od Piitr »

Máš tam chyby:
Tøeba to JNB u TST1 skáèe na DOPLN. To je do jiného cyklu.
Tìch 11 bitù naètených na zaèátku nepoèítáš a naèteš k nim dalších 26.
Ten cyklus máš stavìnej nìjak divnì. Nulový bity ti to nepoèítá.

Já bych to udìlal nìjak takhle:
Ten offset jsem vzal 0011111100, to je ten první.
Do BUFFER1 by se mìla dát nula. Ale pokud má být jinej offset, tak vyjde asi nìco jiného.

Kód: Vybrat vše

RDS:	MOV DPTR,#05B9h	;polynom 101 1011 1001
	MOV R1,#26	;pocet prijimanych bitu
	MOV A,#0	;nuluj zbytek
	MOV B,#0
DALSI:	CALL RDSCTI1	;dalsi bit do C
	RLC A		;nasun do zbytku
	XCH A,B
	RLC A
	XCH A,B
	JNB B.2,NULA	;testuj bit 2 na 10
	XRL A,DPL	;xor
	XCH A,B
	XRL A,DPH
	XCH A,B
NULA:	DJNZ R1,DALSI	;zkus dalsi bit
	XRL A,#0FCh	;pridej offset, nizsi bajt
	XCH A,B
	XRL A,#000h	;vyssi bajt offsetu
	ORL A,B		;testuj BA na nulu
	MOV BUFFER1,A	;uloz vysledek, mel by byt nula

Piitr

#18 Příspěvek od Piitr »

Ještì, pokud použiješ ten mùj kód, tak vyndej z toho RDSCTI1 tu instrukci DEC R1. To by se to odeèítalo 2x. Správnì se má odeèítat jen tím DJNZ.

Uživatelský avatar
msar
Příspěvky: 253
Registrován: 22 dub 2006, 02:00
Bydliště: Hradec Králové

#19 Příspěvek od msar »

Díky moc, už to funguje. :D Program budu muset ještě hodně vyladit (načtení celého názvu stanice trvalo asi 5 minut). Na fotce je mé zkušební zapojení, frekvenci 96,2MHz jsem si nastavil a RDS načetlo název stanice.
Přílohy
rds_radio.JPG
(127.77 KiB) Staženo 58 x

Piitr

#20 Příspěvek od Piitr »

Za málo. To je bezva, že to šlape. Jestli je to pomalý kvùli tomu, že to má pøi pøíjmu hodnì velkou chybovost, tak byl možná pomohlo opravovat jednu chybu. Asi nejjednodušší øešení je, že pokud ti nevyjde souèet, tak postupnì projdeš všech 26 bitù a zkusíš, jestli není chyba zrovna v nìm. To udìláš tak, že ho otoèíš a spoèítáš znova celý kontrolní souèet. Když to pomùže, je hotovo. Když to nepomùže, tak ten bit vrátíš a zkusíš otoèit zase jiný. Pokud nepomùže otoèit ani jeden, tak to neopravíš, protože tam je víc chyb.

Uživatelský avatar
msar
Příspěvky: 253
Registrován: 22 dub 2006, 02:00
Bydliště: Hradec Králové

#21 Příspěvek od msar »

Už jsem opravil chybu. V případě že kontrolní výsledek nevyjde 0 jsem 26 bitů načítal znova, ale musí se udělat zpozdění v délce 1 přijímaného bitu abych nenačítal totéž chybné slovo, ale těch 26bitů posunutých o 1bit. Takhle trvá načtení informace asi 5 sekund.
Další věc je že na některých stanicích se název stanice přepisuje chybnými písmeny. Nebo vypisuje nesmysly. Počítám totiž jen kontrolní výpočet z prvních 26 bitů, a ne z dalších třech 26 bit slov. Tam se asi musí počítat s jiným slovem z annexu.

Odpovědět

Zpět na „Poradna“