www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

avr, modbus, crc16

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 723
Aktiv.: 3.05
Kraj: Severna primorska

PrispevekObjavljeno: Pet Dec 21, 2007 7:35 pm    Naslov sporočila:  avr, modbus, crc16 Odgovori s citatom

Pozdravljeni!
Na atmega 48 poizkušam vzpostaviti modbus slavea. Programiram v bascom-avr okolju. Bascom ima med sampli primer modbus slavea ampak po mojih testiranjih ne deluje. Ugotovil sem, da se zalomi pri preračunavanju pravilnosti prenosa(crc).
Verjetno je problem v napačni začetni vrednosti algoritma crc(0), saj modbus uporablja crc, katerega začetna vrednost je -1!
Poizkušal sem predelati kodo, ki je v helpu:
Koda:

Public Function CRC16(buf() As Byte, lbuf As Integer) As Integer

Dim CRC1 As Long

Dim b As Boolean

CRC1 = 0 ' init CRC

For i = 1 To lbuf ' for each byte

  CRC_MSB = CRC1 \ 256

  crc_LSB = CRC1 And 255

  CRC_MSB = CRC_MSB Xor buf(i)

  CRC1 = (CRC_MSB * 256) + crc_LSB




  For J = 0 To 7 Step 1 ' for each bit

    CRC1 = shl(CRC1, b)

    If b Then CRC1 = CRC1 Xor &H1021

Next J

Next i




CRC16 = CRC1

End Function




'Shift Left function

Function shl(n As Long, ByRef b As Boolean) As Long

  Dim L As Long

  L = n

  L = L * 2

  If (L > &HFFFF&) Then

    b = True

  Else

    b = False

  End If

  shl = L And &HFFFF&

End Function


Ampak imam težave pri precej osnovnih stvareh:
nikakor mi ne uspe, da bi ta del kode uporabil kot funkcijo, ki bi jo poklical iz glavnega prgrama.
Prišel sem tako daleč, da sem ugotovil, da jo moram funkcijo najprej deklarirati, prej kot jo lahko kličem, do konca pa mi ne uspe... bascom javlja kar neke čudne errorje... Rolling Eyes

Poizkušal sem nekako takole:
Koda:


'Glavni program...
'Deklaracije vseh potrebnih stvari od baudrate-a, spremenljivk, vrednosti kristala, stacka,...
 Dim polje(8) As Byte
Declare Public Function CRC16(buf() As Byte, lbuf As Integer) As Integer

Do
Crc = Function CRC16(polje(),6)
Loop

End 'program

Public Function CRC16(buf() As Byte, lbuf As Integer) As Integer

Dim CRC1 As Long

Dim b As Boolean

CRC1 = 0 ' init CRC <- TALE VREDNOST BI MORALA BITI -1!!!!!

For i = 1 To lbuf ' for each byte

  CRC_MSB = CRC1 \ 256

  crc_LSB = CRC1 And 255

  CRC_MSB = CRC_MSB Xor buf(i)

  CRC1 = (CRC_MSB * 256) + crc_LSB




  For J = 0 To 7 Step 1 ' for each bit

    CRC1 = shl(CRC1, b)

    If b Then CRC1 = CRC1 Xor &H1021

Next J

Next i




CRC16 = CRC1

End Function




'Shift Left function

Function shl(n As Long, ByRef b As Boolean) As Long

  Dim L As Long

  L = n

  L = L * 2

  If (L > &HFFFF&) Then

    b = True

  Else

    b = False

  End If

  shl = L And &HFFFF&

End Function



Kje bi moral deklarirati funkcijo shl? V glavnem programu ali v funkciji Crc16?



Hvala za pomoč!
Lp, eddie
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group