16F628a to 16F873a


Results 1 to 5 of 5

Threaded View

  1. #1
    Join Date
    Sep 2006
    Location
    Venezuela - Caracas
    Posts
    48

    Default 16F628a to 16F873a

    i have this code working 100% in 16F628 with 4mhz - resonator
    Code:
    include "modedefs.bas"
    
    ' general purpose variables
    I                 VAR   BYTE
    J                 VAR   BYTE
    K                 VAR   BYTE
    Contador          var   byte
    
    'TRISB = %01001010
    '         76543210
    
    CE                var   PORTB.5     '0
    CS                var   PORTB.4     '0
    DR                var   PORTB.3     '1
    Clock             var   PORTB.2     '0
    Data_Entrada      var   PORTB.1     '1
    Data_Saida        var   PORTB.1     '1
    
    ' THIS IS THE ADDRESS FOR THE w/ Laipec TRW-24G 
    Canal_1           var   byte  ' Channel 1
    Canal_2           var   byte  ' Channel 2
     
    
    ' pin definitions for debug LEDs and switch
    Led_Rx            var   PORTA.1  ' led goes on during rf module configuration
    Led_Tx            var   PORTA.0  ' led goes on during rf message rx or tx
    
    Transmitir        var   PORTA.2  ' switch used to transmit rf message
    Serial_Saida      var   PORTA.3  ' serial out to pc 
    
    ' constants for RF configuration modes
    RX                var   byte 
    TX                var   Byte 
    
    'indicates state of current RF configuration - TX is 0, RX is 1
    Estado_Atual      var   bit
    
    'hold data for RF message  
    Dados             var   byte[40]
    Dados_Recebidos   var   byte[4]
    Dados_Enviados    var   byte[4]
    
    'hold data for RF configuration
    Configuracao      var   Byte[16]
    
    'variables for each received or sent message
    Msg_Origem        var   byte
    Msg_Destino       var   byte
    Msg_Data_1        var   byte
    Msg_Data_2        var   byte
    
    '-------------------------------------------------------------------------------
    Boot:
       SEROUT Serial_Saida, T9600, ["BOOT", 13, 10]
       PAUSE 1
       
       Canal_1 = $BB 
       Canal_2 = $BB 
    
       CMCON        = 7
       VRCON        = 0
       OPTION_REG.7 = 0
       
       PORTA = %00000000
       TRISA = %00000100    ' 0 = Output, 1 = Input
       
       PORTC = %00000000 
       TRISC = %01001010    ' 0 = Output, 1 = Input
           
    Inicio:
    
       ' intialize RF module configuration
       ' constants to define receive/transmit modes at 2402 Mhz frequency   
       RX = $05
       TX = $04   
       Estado_Atual = rX
        
       SEROUT Serial_Saida, T9600, ["CONFIG", 13, 10]
       PAUSE 1
       
       GOSUB Configurar
       
       LOW Transmitir
    
    '-------------------------------------------------------------------------------
       contador = 0
       
       while 1
    
          low CS   ' bring CS low before turning CE high - only one high at a time!
          HIGH CE  ' bring CE high to bring RF into active mode
    
          IF Transmitir = 1 THEN
             for J = 1 to 70
                pause 5
            
                Msg_Destino = "#"
                msg_origem  = "<"
                Msg_Data_1  = 64+J
                Msg_Data_2  = J
                         
                gosub Enviar_Dados
                                     
                Msg_Destino = 0      ' CHANGE THIS TP WHO SHOULD RECIEVE MESSAGE
                Msg_Data_1  = 0      ' DATA SENT
                Msg_Data_2  = 0   
             
                LOW Transmitir
             
             next J
          ENDIF
            
          ' if there's a message waiting in the RX buffer, read it
          if DR = 1 Then            
             INPUT Data_Entrada                      
             GOSUB Receber_Dados                      
          EndIF
       WEND
        
        
    '-------------------------------------------------------------------------------
    Receber_Dados:
       Dados_Recebidos[0] = 0
       Dados_Recebidos[1] = 0
       Dados_Recebidos[2] = 0
       Dados_Recebidos[3] = 0
    
       ' acende led de transmissao
       High Led_Rx
                
       INPUT Data_Entrada
       
       ' power down RF front-end for current conservation
       LOW CE
       
       ' clock in data from RF-24G to PIC
       for i=0 to 3
          ' clock should follow data by at least 50nsec
          shiftin Data_Entrada, Clock, MSBPRE, [Dados_Recebidos[i]\8]
       NEXT
    
       ' power up RF front-end again
       high CE 
       
       Msg_Destino = Dados_Recebidos[0]
       Msg_Origem  = Dados_Recebidos[1]
       Msg_Data_1  = Dados_Recebidos[2]
       Msg_Data_2  = Dados_Recebidos[3] 
    
       SEROUT Serial_Saida, T9600, [Dados_Recebidos[0], Dados_Recebidos[1], Dados_Recebidos[2], Dados_Recebidos[3], 13, 10]    
        
       ' apaga led de transmissao
       low Led_Rx    
    RETURN
    
    '-------------------------------------------------------------------------------
    Enviar_Dados:   
       ' acende led de recepcao
       high Led_Tx
       
       Dados_Enviados[0] = Msg_Destino
       Dados_Enviados[1] = Msg_Origem
       Dados_Enviados[2] = Msg_Data_1
       Dados_Enviados[3] = Msg_Data_2
    
       ' set RF to transmit mode...
       Estado_Atual = TX
       GOSUB Mudar_Estado_Atual
             
       ' for shockburst TX, the sum of RX address, payload, 
       ' and CRC must be less than 256 bits long
       ' the chip then tacks on a preamble to this message, 
       ' and the total msg is 266 bits
     
       OUTPUT Data_Saida    
        
       ' get back into active mode
       HIGH CE
        
       ' Need pause between CE high and DATA clock out
       pauseus 100
       
       ' clock out 5 byte RF address of recipient
       for i = 8 to 12
          ' clock out this byte
          shiftout Data_Saida, Clock, MSBFIRST, [Configuracao[i]\8]
       Next   
    
       ' clock out 4 bytes of data payload
       for i = 0 to 3
          ' clock out this byte
          shiftout Data_Saida, Clock, MSBFIRST, [Dados_Enviados[i]\8]
       Next   
       
       ' start shockburst transmission
       low CE 
       pauseus 300
    
       ' apaga led de recepcao
       low Led_Tx          
                
       ' afterward, set RF back to its default receive state
       Estado_Atual = RX
       GOSUB Mudar_Estado_Atual
    RETURN
    
    '-------------------------------------------------------------------------------
    Mudar_Estado_Atual:
     
       ' during configuration of the transmitter, we need DATA as an output
       OUTPUT Data_Saida
    
       ' set chip to configure mode (CE low, CS high)
       low CE
       high CS
    
       ' pause between CS high and DATA clockout
       pauseus 100
    
       ' Estado_Atual indicates 2402 Mhz frequency and either RX or TX state                                                       
       ' clock out new configuration data from PIC to RF-24G
       shiftout Data_Saida, Clock, MSBFIRST, [Estado_Atual\8]
    
       ' configuration set on falling edge of CS
       low CS
       low CE
    
       ' for consistency with the rx, stick this here
       input DR
    
       ' flash the LED on B6 to indicate that we configured
       ' high Led_Rx
       ' pause 250
       ' low Led_Rx    
    RETURN
    
    '-------------------------------------------------------------------------------
    Configurar:
        ' acende leds de configuracao
        high Led_Rx
        high Led_Tx
    
        'configuration is a 144 bit word
        'must be clocked in MSB first
        'bit map
        '143:120 - reserved for testing
        '119:112 - length of data payload section RX channel 2
        '111-104 - length of data payload section RX channel 1 
        '103:64  - up to 5 byte address for RX channel 2
        '63:24   - up to 5 byte address for RX channel 1
        '23:18   - number of address bits (both RX channels)
        '17      - 8 or 16 bit CRC
        '16      - enable on-chip CRCD generation/checking
        '15      - enable two channel receive mode
        '14      - communication mode (direct or shockburst)
        '13      - RF data rate (1Mbps requires 16Mhz crystal)
        '12:10   - crystal frequency
        '9:8     - RF output power
        '7:1     - frequency channel
        '0       - RX or TX operation
    
        'setup Configuracao with config bytes, see datasheet for default configuration
        'this array is backwards so we can clock from MSB to LSB by increasing the index
        'Data bits 119-112: Max data width on channel 2 (excluding CRC and adrs)
         Configuracao[1] = $20 'payloadSize, 4 BYTES
        'Data bits 111-104: Max data width on channel 1 (excluding CRC and adrs)
         Configuracao[2] = $20 'payloadSize, 4 BYTES
        'Data bits 103-64: Channel 2 address, 5 bytes (40 bits)
         Configuracao[3] = Canal_2
         Configuracao[4] = Canal_2
         Configuracao[5] = Canal_2
         Configuracao[6] = Canal_2
         Configuracao[7] = Canal_2
        'Data bits 63-24: Channel 1 address, 5 bytes (40 bits)
         Configuracao[8] = Canal_1
         Configuracao[9] = Canal_1
         Configuracao[10] = Canal_1
         Configuracao[11] = Canal_1
         Configuracao[12] = Canal_1
        'Data bits 23-16: Address width and CRC  - 40 bit addr, 16 bit CRC, CRC enabled
         Configuracao[13] = $A3
        'Data bits 15-8: One Channel Receive, Shockburst Enabled, 250 kilobits, etc
         Configuracao[14] = $4F
        'Data bits 7-0: 2402 Mhz frequency, RX enabled/disabled (depending on Estado_Atual)
         Configuracao[15] = Estado_Atual
    
        ' During configuration of the transmitter, we need DATA as an output
        INPUT DR
        INPUT Data_Entrada
        OUTPUT Data_Saida
    
        ' set chip to configure mode (CE low, CS high)
        low CE
        high CS
    
        ' pause between CS high and DATA clockout
        pauseus 100
    
        ' clock out configuration bytes from PIC to RF-24G
        for i = 1 to 15
            'set config one byte at a time from MSB to LSB
            shiftout Data_Saida, Clock, MSBFIRST, [Configuracao[i]\8]
        next
        
        ' configuration is set on the falling edge of CS, bring it low
        low CS
        low CE
    
        ' apaga leds de configuracao
        low Led_Rx
        low Led_Tx
    RETURN
    translate to 16F873A not work.....than i use serout, invalid caracters

    change portb 16F628A to portc 16F873A
    Code:
    CE                var   PORTC.5     '0
    CS                var   PORTC.4     '0
    DR                var   PORTC.3     '1
    Clock             var   PORTC.2     '0
    Data_Entrada      var   PORTC.1     '1
    Data_Saida        var   PORTC.1     '1
    
    PORTC = %00000000 
    TRISC = %01001010    ' 0 = Output, 1 = Input
    Last edited by mpardinho; - 3rd March 2007 at 16:59.

Similar Threads

  1. boot loader for 16f628a ?
    By tdavis80 in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 5th January 2008, 02:07
  2. Are 16f628 and 16f628A difference each other?
    By elektrodam in forum mel PIC BASIC Pro
    Replies: 8
    Last Post: - 15th July 2006, 06:20
  3. MPLAB ICD ver 1 & 16F628A
    By Tissy in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 26th February 2005, 00:44
  4. new user with problem using PGP Pro, Lab-X3 with 16F628A
    By equipoise in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 28th July 2004, 07:42
  5. HSEROUT and 16F628A
    By fredblah in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 6th May 2004, 00:07

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts