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: 40
Úvodní téma
(@ok5tvr)
Trusted Member
Přidal se: před 15 roky

Nedávno jsem se rozhodl naprogramovat procesor ATmega pro odesílání zpráv do APRS . ATmega je používám spolu s FX614. Po všech testech se vše jevilo korektně, nyní však vyvstal problém který je pravděpodobně způsoben chybným výpočtem kontrolního součtu FCS v paketu. Mohu se prosím zeptat jakým způsobem se provádí kontrolní součet z kolika bytu se součet provádí. velice děkuji tomáš OK5TVR

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

Ahoj,
tady je vytvořený program ve bascom jedná se zatím pouze o odesílání dat nadefinovaných do tabolky dat1:.
buhužel je asi kvuli špatnému výpočtu kontrolního součtu nefunkční. ale pro jistotu přikládám kod třeba se někomu podaří modifikace která bude funkční. ahoj tomáš OK5tvr

p.s. nadále pokračuji ve vývoji.

____________________
$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 S(27) As Byte
Dim Fcs_v As Word

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

Gosub Flag
Gosub Flag
Gosub Flag

'odesílá 27 bytu z tabulky
Restore Dta1
For Count = 1 To 27
Read B1
S(count) = B1
For Count1 = 0 To 7 'převod bytu na jednotlivé bity a odeslání
Rotate B1 , Left , 1
B2 = B1 And &H01

Portc.5 = B2
Waitus 745 'zpoždění 745 us pro badovou rychlost 1200
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 745
End If
Next Count1
Next Count

Fcs_v = Crc16uni(s(1) , 27 , &HFFFF , &H8408 , 0 , 0) 'výpočet kontrolního součtu z 27 bytů určených k odeslání

Gosub Fcs
Gosub Flag
Gosub Flag
Gosub Flag

Portc.3 = 0
Wait 2
Loop
End

'tabulka dat určená k odeslání
Dta1:
Data &H86 , &HA2 , &H40 , &H40 , &H40 , &H40 , &H60 , &HAE , &H64 , &H8C , &HA6 , &H40 , &H40 , &H68 , &H4A , &H8A , &H98 , &H82 , &HB2 , &H40 , &H61 , &H03 , &HF0 , &H54 , &H65 , &H73 , &H74

'odeslání flagu
Flag:
B3 = &H7E
For Count1b = 0 To 15
Rotate B3 , Left , 1
B2 = B3 And &H01
Portc.5 = B2
Waitus 745

Next Count1b
Return

'kontrolní součet
Fcs:
B3 = &H28 'odeslání fsc nízkého bytu
For Count1c = 0 To 7
Rotate B3 , Left , 1
B2 = B3 And &H01
Portc.5 = B2
Waitus 745
If B2 = 1 Then P1 = P1 + 1
If B2 = 0 Then P1 = 0
If P1 = 5 Then
Portc.5 = 0
Waitus 745
End If
Next Count1c

B3 = &H15 'odeslání fsc bysokého bytu
For Count1c = 0 To 7
Rotate B3 , Left , 1
B2 = B3 And &H01
Portc.5 = B2
Waitus 745
If B2 = 1 Then P1 = P1 + 1
If B2 = 0 Then P1 = 0
If P1 = 5 Then
Portc.5 = 0
Waitus 745
End If
Next Count1c
Return

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

Ahoj Tome,

sice atmel moc neznam, ani primo konstrukci AX-25 ramce, ale v tom kodu, ktery jsi dal k nahlednuti, mi je divna jedna vec. Cekal bych, ze data budou odesilany po jednotlivych bytech, postupne bud od spodniho nebo od horniho bitu. Prijde mi ale, ze tak, jak to mas napsane, se Tve bity odesilaji v tomto poradi: 2 3 4 5 6 7 8 1. Nejdriv delas rotaci doleva a az pak vybiras bit na prvni pozici (AND 01). Nemelo by to byt naopak? Tj ze nejdriv si pomoci AND vyberes prvni bit a az pak provedes rotaci?

Martin ok1djo

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

v prvním případě jsem to měl stejně, ale byl problém když jsem nechal vše vypsat binárně na port.
mělo být odesláno 01000111 a odeslalo se 10100011, pri tomto zápisu se odešle 01000111 takže toto je snad správně.
tomáš

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