Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. plawrence14
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    plawrence14

    @plawrence14

    0
    Reputation
    1
    Posts
    61
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    plawrence14 Follow

    Best posts made by plawrence14

    This user hasn't posted anything yet.

    Latest posts made by plawrence14

    • SX1278

      HI
      I am using a PIC18F45K22 and am trying to control a sx1278 radio module through the SPI I have tried bit banging as per the code below but dont seam to be getting any output I can see the states by slowing the programdown and watchingthe different pins state and i believe they are looping through bytes correctly. can anyone have a look and see if they can see a mistake?

      Thanks paul

      program bitBangSPI

      ' Declarations section
      dim NCS as sbit at LATA.4 'set a4 as nss output
      dim MCK as sbit at LATC.3 'set c3 as clk outout
      dim MOSI as sbit at LATC.5 'set c5 as write outpur
      dim MISO as sbit at PORTC.4 'set c4 as read input

      dim bitcnt as byte ' used as count for sending a byte
      dim address as byte ' used to hold register address to write too
      dim payload as byte ' used to hold data to be sent

      Sub procedure sendByte()
      MOSI = 0 'set MOSI start at 0
      NCS = 0 'NCS low to select sx1278
      MCK =0
      'first write address byte
      for bitcnt = 0 to 7 'counts through all bits in byte
      MCK = 0 'clock low
      if address AND 0x80 then 'checks MSB against address for 1to decide what to write to mosi
      MOSI = 1
      else
      MOSI = 0
      end if
      delay_ms (200)
      MCK = 1 'clock high
      delay_ms (200)
      address = address <<1
      next bitcnt

      'now write data      byte
      for bitcnt = 0 to 7                     'counts through all bits in byte
          MCK = 0                          'clock low
          if payload AND 0x80 then            'checks MSB against payloadfor 1to decide what to write to mosi
              MOSI = 1
          else
              MOSI = 0
          end if
          delay_ms (200)                      'just used so I can watch the bits on dev board
          MCK = 1                             'clock high
          delay_ms (200)                      'just used so I can watch the bits on dev board
          payload = payload <<1
      next bitcnt                             'loop to next bit in byte
      MCK = 0                                 'clock low
      NCS = 1                                 'NCS sent low unselecting sx1278
      

      end sub

      sub procedure Standby()
      address = 0x01 'OpMode reg address

      payload =   0x89                  ' in standby mode
      sendByte()
      

      end sub

      sub procedure FSTX()
      address = 0x01 'OpMode reg address

      payload =   0x8A               ' in FSTX mode
      sendByte()
      

      end sub

      sub procedure transmit()
      address = 0x01 'OpMode reg address

      payload =   0x8B               ' in TX mode  (used transmit as name of sub as TX reserved
      sendByte()
      

      end sub

      main:
      ' Main program

      OSCCON = 0x60        'set to 8 negs
      PLLEN_Bit = true     'multiple of 4 so 32 megs
      ANSELB = 0           ' set port b to digital
      ANSELC = 0           ' set port c to digital
      ANSELD = 0            ' set port d to digital
      TRISA = 0x00
      TRISD = 0X00         'SET AS OUT PUT
      TRISC = 0x10         'set port C as output except pin 4 thats an input
      TRISB0_bit =1        'sets RB0 pin as a input
      TRISB1_bit =1        'sets RB1 pin as a input
      TRISB2_bit =1        'sets RB2 pin as a input
      TRISB3_bit =1        'sets RB3 pin as a input
      NCS = 1
      Standby()                      ' in standby mode
      
      
      
      while true
            if (BUTTON(PORTB, 0, 1, 1)) then               ' check scondition of button attached to B0  run if pressed
               LATD = 0xFF
      
               FSTX()
      
               address =   0x00      'fifo reg address
      
      
               payload =   0x01      'data to be transmitted
      
               sendByte()
      
               transmit()
      
               LATD = 0x00
            end if
      wend
      

      end.

      posted in Hardware
      plawrence14
      plawrence14