logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

RFM12B + 2313 dla znawców tematu

ShEvU_elektro 19 Lis 2009 23:46 2274 5
  • #1 7284279
    ShEvU_elektro
    Poziom 25  
    Witam
    Po przeczytaniu wszystkich postów na temat RFM12B (nie tylko na elektrodzie), poprzerabiałem kod któregoś z kolegów na forum pod swoje potrzeby i sprzęt.

    Męczę się już 2 dzień i mimo że chciałem sam rozwiazać problem, proszę o pomoc.
    Mianowicie chciałbym abyście zerknęli w kody i ewentualnie upatrzyli nieprawidłowości

    Dodam że elektronika na 99% jest dobrze a sam odbiornik nie reaguje.

    Poniżej kody.

    NADAJNIK

    $regfile = "attiny2313.dat"
    $crystal = 8000000
    
    '-----------------------------------------------------
    Dim Dana As Byte
    
    Dim I As Byte
    
    Dim Data_out As Word
    Dim Data_in As Word
    
    Dim Data_to_send As Byte
    Dim Received_data As Byte
    
    Dim D1 As Byte
    Dim D2 As Byte
    Dim D3 As Byte
    Dim D4 As Byte
    '-----------------------------------------------------
    Rf_nirq Alias Pinb.0                                        'in
    Rf_sdo Alias Pinb.1                                         'in
    Rf_nsel Alias Portb.2                                       'out
    Rf_sck Alias Portb.3                                        'out
    Rf_sdi Alias Portb.4                                        'out
    
    
    '-----------------------------------------------------
    'Portb = &B00010111
     Portb = &B00000011
    
    
    Config Portb = &B00011100
    Config Portd = Output
    
    
    
    
    
    Waitms 100
    Gosub Rf12_init
    Waitms 100
    Gosub Rf12_init
    
    
    
    
    
    Do
      Dana = 85
      D1 = Dana
      D4 = D1
    
    
              Data_out = &H0000
              Gosub Rf12_wrt_cmd_2
    
    
              Data_out = &H8239                                 '!er,!ebb,et,es,ex,!eb,!ew,dc
              Gosub Rf12_wrt_cmd_2
    
    
    
              Data_to_send = &HAA
              Gosub Rf12_send
    
    
    
              Data_to_send = &HAA
              Gosub Rf12_send
              Data_to_send = &HAA
              Gosub Rf12_send
    
              Data_to_send = &H2D
              Gosub Rf12_send
              Data_to_send = &HD4
              Gosub Rf12_send
    
    
              Data_to_send = D1
              Gosub Rf12_send
              Data_to_send = D2
              Gosub Rf12_send
              Data_to_send = D3
              Gosub Rf12_send
              Data_to_send = D4
              Gosub Rf12_send
    
    
              Data_to_send = &HAA
              Gosub Rf12_send
              Data_to_send = &HAA
              Gosub Rf12_send
              Data_to_send = &HAA
              Gosub Rf12_send
    
    
    
    
              Data_out = &H8201
              Gosub Rf12_wrt_cmd_2
    
       Set Portd.0
       Wait 1
       Reset Portd.0
       Wait 1
    
    
      Waitms 10
    
    
    Loop
    '-----------------------------------------------------
    Rf12_init:
        Data_out = &H80D7                                       'El,Ef,433band,12.0pf                80E8     12.5pf
        Gosub Rf12_wrt_cmd_2
        Data_out = &H8239                                       '!er,!ebb,et,es,ex,!eb,!ew,dc        8298     er,!ebb,!et,es,ex,!eb,!ew,!dc
        Gosub Rf12_wrt_cmd_2
        Data_out = &HA640                                       '433MHz
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC647                                       '4.8kbps                             C611     19.2kbps
        Gosub Rf12_wrt_cmd_2
        Data_out = &H94A0                                       'VDI,FAST,134kHz,0dBm,-103dBm
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC2AC                                       'AL,!ml,DIG,DQD4
        Gosub Rf12_wrt_cmd_2
        Data_out = &HCA81                                       'FIFO8,SYNC,!ff,DR
        Gosub Rf12_wrt_cmd_2
        Data_out = &HCED4                                       'SYNC=2DD4;
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC483                                       '@PWR,NO RSTRIC,!st,!fi,OE,EN
        Gosub Rf12_wrt_cmd_2
        Data_out = &H9850                                       '!mp,90kHz,MAX OUT
        Gosub Rf12_wrt_cmd_2
        Data_out = &HCC77                                       'OB1,OB0, LPX,!ddy,DDIT,BW0          CC17     !OB1,!OB0, LPX,!ddy,DDIT,BW0
        Gosub Rf12_wrt_cmd_2
        Data_out = &HE000                                       'NOT USE
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC800                                       'NOT USE
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC040                                       '1.66MHz,
        Gosub Rf12_wrt_cmd_2
    Return
    '-----------------------------------------------------
    Rf12_send:
      !Wait_for_nIRQ_low_1:
      sbic Pinb, 0
    
        jmp Wait_for_nIRQ_low_1
    
    
    
      lds R16, {Data_to_send}
      sts {Data_Out+0}, R16
      ldi R16, &HB8
      sts {Data_Out+1}, R16
    
    
    
      Gosub Rf12_wrt_cmd_2
    Return
    '-----------------------------------------------------
    
    '-----------------------------------------------------
    Rf12_wrt_cmd_2:
        Rf_sck = 0
        Rf_nsel = 0
    
    
    
        Data_in = 0
    
        For I = 0 To 15
           Rf_sdi = Data_out.15
    
           Shift Data_out , Left , 1
    
           Rf_sck = 1
    
           Shift Data_in , Left , 1
    
           Data_in.0 = Rf_sdo
    
           Rf_sck = 0
        Next I
    
    
    
        Rf_sck = 0
        Rf_nsel = 1
    Return


    Odbiornik:

    $regfile = "attiny2313.dat"
    $crystal = 8000000
    
    '-----------------------------------------------------
    
    
    
    
    
    
    Dim I As Byte
    
    Dim Data_out As Word
    Dim Data_in As Word
    
    Dim Data_to_send As Byte
    Dim Received_data As Byte
    
    Dim D1 As Byte
    Dim D2 As Byte
    Dim D3 As Byte
    Dim D4 As Byte
    '-----------------------------------------------------
    Rf_nirq Alias Pinb.0                                        'in
    Rf_sdo Alias Pinb.1                                         'in
    Rf_nsel Alias Portb.2                                       'out
    Rf_sck Alias Portb.3                                        'out
    Rf_sdi Alias Portb.4                                        'out
    
    
    '-----------------------------------------------------
    'Portb =  &B00010111
    Portb = &B00000011
    
    Config Portb = &B00011100
    Config Portd.1 = Output
    
    
    
    
    Enable Interrupts
    
    Set Portd.1
    Wait 1
    Reset Portd.1
    Wait 1
    
    Waitms 100
    Gosub Rf12_init
    Waitms 100
    Gosub Rf12_init
    
    
    Do
    
      Data_out = &H8298                                         '!er,!ebb,et,es,ex,!eb,!ew,dc        8298     er,!ebb,!et,es,ex,!eb,!ew,!dc
      Gosub Rf12_wrt_cmd_2
    
    
      Data_out = &HCA81
      Gosub Rf12_wrt_cmd_2
      Data_out = &HCA83
      Gosub Rf12_wrt_cmd_2
    
    
      Waitms 1
    
    
      Gosub Rf12_receive
      D1 = Received_data
    
      Data_out = &HCA81
      Gosub Rf12_wrt_cmd_2
      Data_out = &HCA83
      Gosub Rf12_wrt_cmd_2
    
         If D1 = 85 Then
       Toggle Portd.1                                           ' zamien stan diody
    
    
          Wait 1
       End If
    
    Loop
    '-----------------------------------------------------
    Rf12_init:
        Data_out = &H80D7                                       'El,Ef,433band,12.0pf                80E8     12.5pf
        Gosub Rf12_wrt_cmd_2
        Data_out = &H8299                                       '!er,!ebb,et,es,ex,!eb,!ew,dc        8298     er,!ebb,!et,es,ex,!eb,!ew,!dc
        Gosub Rf12_wrt_cmd_2
        Data_out = &HA640                                       '433MHz
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC647                                       '4.8kbps                             C611     19.2kbps
        Gosub Rf12_wrt_cmd_2
        Data_out = &H94A0                                       'VDI,FAST,134kHz,0dBm,-103dBm
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC2AC                                       'AL,!ml,DIG,DQD4
        Gosub Rf12_wrt_cmd_2
        Data_out = &HCA81                                       'FIFO8,SYNC,!ff,DR
        Gosub Rf12_wrt_cmd_2
        Data_out = &HCED4                                       'SYNC=2DD4;
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC483                                       '@PWR,NO RSTRIC,!st,!fi,OE,EN
        Gosub Rf12_wrt_cmd_2
        Data_out = &H9850                                       '!mp,90kHz,MAX OUT
        Gosub Rf12_wrt_cmd_2
        Data_out = &HCC77                                       'OB1,OB0, LPX,!ddy,DDIT,BW0          CC17     !OB1,!OB0, LPX,!ddy,DDIT,BW0
        Gosub Rf12_wrt_cmd_2
        Data_out = &HE000                                       'NOT USE
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC800                                       'NOT USE
        Gosub Rf12_wrt_cmd_2
        Data_out = &HC040                                       '1.66MHz,
        Gosub Rf12_wrt_cmd_2
    
    Return
    '-----------------------------------------------------
    Rf12_send:
      !Wait_for_nIRQ_low_1:
      sbic Pinb, 0
        jmp Wait_for_nIRQ_low_1
    
    
    
      lds R16, {Data_to_send}
      sts {Data_Out+0}, R16
      ldi R16, &HB8
      sts {Data_Out+1}, R16
    
      Gosub Rf12_wrt_cmd_2
    Return
    '-----------------------------------------------------
    Rf12_receive:
    
    
    
    
      Data_out = &H0000
      Gosub Rf12_wrt_cmd_2
    
    
      Data_out = &HB000
      Gosub Rf12_wrt_cmd_2
    
      lds R16, {Data_In+0}
      sts {Received_data}, R16
    
    
    
    
    
    
    
    Return
    '-----------------------------------------------------
    Rf12_wrt_cmd_2:
        Rf_sck = 0
        Rf_nsel = 0
    
    
    
        Data_in = 0
    
        For I = 0 To 15
           Rf_sdi = Data_out.15
    
           Shift Data_out , Left , 1
    
           Rf_sck = 1
    
           Shift Data_in , Left , 1
    
           Data_in.0 = Rf_sdo
    
           Rf_sck = 0
        Next I
    
    
    
        Rf_sck = 0
        Rf_nsel = 1
    Return
  • #2 7284467
    Konto nie istnieje
    Poziom 1  
  • #3 7284719
    ShEvU_elektro
    Poziom 25  
    Tak, kodzik jest któregoś z kolegów na forum, jeśli sobie przypomnę czyj to kod, odrazu napisze. Chciałem coś pewnego, co pozwoliłoby sprawdzić same transceivery :)

    Dziękuje za odpowiedź, zaraz testuje.


    EDIT

    Procek odbiornika staje dokładnie w tej procedurze :

    Rf12_receive:
      Jeszcze:
      Data_out = &H0000
      Gosub Rf12_wrt_cmd_2
    
      If Data_in.15 = 0 Then
        Goto Jeszcze
      End If
    
    
      Data_out = &HB000
      Gosub Rf12_wrt_cmd_2
    
      lds R16, {Data_In+0}
      sts {Received_data}, R16
    Return
    '------------------------------------------------------------------------------- 


    Przy tym warunku:

      Jeszcze:
      Data_out = &H0000
      Gosub Rf12_wrt_cmd_2
    
      If Data_in.15 = 0 Then
        Goto Jeszcze
    [b]tutaj staje procesor[/b]
    
      End If


    Czy oznacza to że procesor nie ma komunikacji z RFM?
  • #4 7285148
    Konto nie istnieje
    Poziom 1  
  • #5 7285198
    ShEvU_elektro
    Poziom 25  
    No to ja już też wiem czyj jest :)

    Antenki są takie jakie dostałem do nich przy zakupie. Sprawdzę pobory jak wrócę z pracy. Co do odległości pomiędzy modułami, to są one na biurku, okolo 50cm od siebie, zasilane z innych źródeł.

    O wynikach poinformuję.
  • #6 7528597
    ShEvU_elektro
    Poziom 25  
    Pozwolę sobie odkopać temat.
    Wczoraj stwierdziłem że czas usiąść do tych modułów i tak też się stało.
    Po zaprojektowaniu nowej płytki, zrobieniu "kanapki" z uC i RFM12 i dołączeniu rezystora 10k do linii DATA komunikacja ruszyła. Moduły są na 433Mhz, zasięg, no właśnie tutaj jest problem, bo zasięg jest około 5m w otwartej przestrzeni :( Parametr LNA Gain ustawiony jest -6dBm tak jak ktoś na forum zalecał. Jakieś sugestie co do dobrania reszty parametrów?


    EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT EDIT

    Witam ponownie.
    Moduły w końcu ruszyły. Okazało się że jeden moduł był "przypalony", a raczej jego radiówka (wcześniejszy błąd konstrukcyjny). Po wymianie, zasięg jaki otrzymałem to 400m, z tym że skończył mi się już otwarty teren do prób. Jeden moduł leżał na dachu auta natomiast drugi trzymałem w ręce. Obie antenki (dołączone druciki) były ustawione pionowo.

    Częstotliwość 434Mhz
    Prędkość 4.8kbps
    LNA GAIN -6dBm
REKLAMA