Forum

APRS, protokol AX.2...
 
Oznámení
Smazat vše

APRS, protokol AX.25

13 Příspěvky
5 Uživatelé
0 Reactions
25.5 K Zobrazeno
Příspěvky: 60
(@ok1nmj)
Trusted Member
Přidal se: před 15 roky

Zdravím vás, kolegové,
tak nevím, jestli vám neunikla jedna maličkost. MX614, TCM 3105 a podobné obvody jsou "jen" převodníky mezi AFSK a logickými signály (AFSK je dvoutónový systém, kdy jedné úrovni odpovídá jeden tón a druhé úrovni druhý, pro 1200 Bd je to 1200 a 2200 Hz, je to podle nějakého doporučení CCITT systém podle normy "pokud si vzpomínám" Bell202)
Pokud se objeví v komunikaci 8-i bitové slovo, která má samé L nebo samé H úrovně, už by to trvalo dlouho a mohla by se porušit synchronizace a tak se tam nějak vkládá "opačná" úroveň. Mám dojem, že maximální počet bitů jedné úrovně je 5 nebo 6 za sebou.To je jedna z věcí, kterou hlídá a "upravuje" TNC nebo SW v PC.
Tomáši, pokud bys to chtěl vědět přesněji jak to je, najdu ti to, někde jsem to měl podrobně popsané.
Pokud máš zájem, ozvi se na ok1nmj@seznam.cz (nebo na utržené sluchátko 720 32 77 22)

Jirka OK1NMJ

Odpověď
Příspěvky: 143
(@ok1djo)
Estimable Member
Přidal se: před 16 roky

Ahoj Jirko,
Honza to v kodu nejak implementovane ma. Pridava se to po patem bitu v rade vyslanych nul (odvysila se jednicka). Jestli to je ci neni spravne nevim, normu pro CCITT jsem nestudoval, ale v kodu "neco pro tuhle funkcionalitu" je. Kazdopadne vice hlav vice vi :).
Martin

Odpověď
Příspěvky: 40
Úvodní téma
(@ok5tvr)
Trusted Member
Přidal se: před 15 roky

mě ted jde opravdu o kontrolní součet, to nemohu stále vyřešit. To vysílání 5 jedniček je ošetřeno je to kvůli tomu aby nevznikla podoba s flag tedy 01111110. to mám vyřešené tak, že při vysílání počítám počet odvysílaných bitů 1 když je jich 5 tak jako 6 se vyšle bit 0.

ale masivně jsem se zasekl u FCS kontrolního součtu.
http://www.ansr.org/kd7lmo/www.kd7lmo.net/picobeacon_source.html
program bascom má předdefinované rutiny pro vypočet crc ale bohužel nejsem si jistý jest-li je pro výpočet do aprs vohodná zle zvolit jak počátek pro výpočet tak počet bytů ve výpočtu tak i polymon přes ktrý je crc počítáno.

velice děkuji za všechy rady tomáš

Odpověď
Příspěvky: 40
Úvodní téma
(@ok5tvr)
Trusted Member
Přidal se: před 15 roky

zde by měl být opravený kod, s novým výpočetem pro fcs to je vypočeteno a pak ručně zadáno do fcs:
---------------------------------------
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 50
$framesize = 50
$baud = 1200

Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , _
Db7 = Portb.0 , E = Portb.7 , Rs = Portb.6

Config Portc.3 = Output
Config Portc.5 = Output

'Typ Displeje
Config Lcd = 16 * 2
Cls
Cursor Off

Dim Count As Byte
Dim Count1 As Byte
Dim Count1b As Byte
Dim Count1c As Byte
Dim B1 As Byte
Dim B2 As Byte
Dim B3 As Byte
Dim P1 As Byte
Dim O1 As Byte
Dim O2 As Byte
Dim C As Word
Dim S(48) As Byte
Dim Fcshi As Byte
Dim Fcslo As Byte
Dim Tbyte As Byte
Dim Lsb_int As Byte
Dim Crc As Word
Dim Crc1 As Word
Dim Xor_int As Byte
Dim Crchi As Word
Dim Value As Byte
Dim A As Byte

Crc = &HFFFF
'čtení dat k vysílání z tabulky
Restore Dta1
For Count = 1 To 48
Read B1
S(count) = B1 'uložení dat do dole S()
Next Count

Do
'portc.3 k ovládání ptt
Portc.3 = 1

Gosub Flag
Gosub Flag
Gosub Flag
Gosub Flag
Gosub Flag

'odesílá 27 bytu z tabulky

For Count = 1 To 48

B1 = S(count)

For Count1 = 0 To 7 'převod bytu na jednotlivé bity a odeslání
B2 = B1 And &H01
Portc.5 = B2
Waitus 750 'zpoždění 750 us pro badovou rychlost 1200
Rotate B1 , Right , 1
If B2 = 1 Then P1 = P1 + 1 'počítá kolik bit 1 bylo odeslání
If B2 = 0 Then P1 = 0
If P1 = 5 Then 'pokud 5 za sebou odešle 0
Portc.5 = 0
Waitus 750
End If
Next Count1
Next Count

Gosub Fcs

Gosub Flag

Portc.3 = 0
Wait 2

Loop

End

'tabulka dat určená k odeslání
Dta1:
Data &H82 , &HA0 , &HA4 , &HA6 , &H40 , &H40 , &H60 , &H9E , &H96 , &H6A , _
&Ha8 , &HAC , &HA4 , &H62 , &HAE , &H92 , &H88 , &H8A , &H62 , &H40 , &H63 , &H03 , _
&H58 , &H52 , &H57 , &H52 , &H50 , &H46 , &H56 , &H51 , &H78 , &H47 , _
&H48 , &H49 , &H51 , &H50 , &H50 , &H46 , &H48 , &H51 , &H69 , &H45 , _
&H79 , &H75 , &H57 , &H84 , &H86 , &H82

'odeslání flagu
Flag:
B3 = &HFE
For Count1b = 0 To 7
B2 = B3 And &H01
Portc.5 = B2
Rotate B3 , Right , 1
Waitus 750
Next Count1b
Return

'kontrolní součet
Fcs:
B1 = &H76 'vysílá jako první nejnižší byte
For Count1 = 0 To 7 'převod bytu na jednotlivé bity a odeslání
B2 = B1 And &H01
Portc.5 = B2
Waitus 750 'zpoždění 750 us pro badovou rychlost 1200
Rotate B1 , Right , 1
If B2 = 1 Then P1 = P1 + 1 'počítá kolik bit 1 bylo odeslání
If B2 = 0 Then P1 = 0
If P1 = 5 Then 'pokud 5 za sebou odešle 0
Portc.5 = 0
Waitus 750
End If
Next Count1

B1 = &H4D
For Count1 = 0 To 7 'převod bytu na jednotlivé bity a odeslání
B2 = B1 And &H01
Portc.5 = B2
Waitus 750 'zpoždění 750 us pro badovou rychlost 1200
Rotate B1 , Right , 1
If B2 = 1 Then P1 = P1 + 1 'počítá kolik bit 1 bylo odeslání
If B2 = 0 Then P1 = 0
If P1 = 5 Then 'pokud 5 za sebou odešle 0
Portc.5 = 0
Waitus 750
End If
Next Count1

Fsc_2: 'výpočet crc
For Count = 1 To 48
C = S(count)
For Count1 = 0 To 7
Lsb_int = C And &H01
Crc = Crc Xor Lsb_int
Crc1 = Crc And &H01
If Crc1 = 1 Then
Shift Crc , Right , 1
Crc = Crc Xor &H8408
End If
If Crc1 = 0 Then
Shift Crc , Right , 1
End If

Shift C , Right , 1

Next Count1
Next Count

Odpověď
Příspěvky: 60
(@ok1nmj)
Trusted Member
Přidal se: před 15 roky

Ahoj,
musím se přiznat, že nejsem velký odborník na programování a s Bascom nemám zkušenosti vůbec, tak tam nějak nevidím, jestli tam máš "překodování" NRZI (předpokládám, že když se na APRS používá TNC jako na packet, že to bude stejné)

Jak počítáš ten kontrolní součet? Podle toho divného vzorečku pro packet?

Jirka

Odpověď
Stránka 2 / 3
Sdílet: