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
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
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áš
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
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