Serin Not Recognizing Qualifier From Another PIC


+ Reply to Thread
Results 1 to 24 of 24

Hybrid View

  1. #1
    Join Date
    Dec 2019
    Location
    Stuart, FL USA
    Posts
    15


    Did you find this post helpful? Yes | No

    Default Re: Serin Not Recognizing Qualifier From Another PIC

    Hi Amgen,

    I don't recall why I included a PPL in my oscillator comment but, I believe that I have my OSCON statement correct for an internal 4 MHz cock. Right?

    OSCCON = %01100000 ' Set system internal clock 4MHz.

    Thank you for pointing that out!

  2. #2


    Did you find this post helpful? Yes | No

    Default Re: Serin Not Recognizing Qualifier From Another PIC

    looks right now, ...... first post was unsure for OSCCON..... no wait !!!!! check for ... $01100001, bit 0, system clock ,,, but looks like you had it right UNLESS the configuration setting didn't set properly, so can use this one which calls for system to use int osc...... good fkin luck if all that fails
    Last edited by amgen; - 19th April 2024 at 01:58.

  3. #3
    Join Date
    Dec 2019
    Location
    Stuart, FL USA
    Posts
    15


    Did you find this post helpful? Yes | No

    Default Re: Serin Not Recognizing Qualifier From Another PIC

    This is a photo of the packet (8N1) generated by my PIC transmitter and that for some reason is not being received by my PIC receiver port GPIO.5. It's a two byte transmission $A and $61. Its in "true" format with idling level at +5VDC (Mark condition).

    SERIN is not recognizing it... Why?
    Attached Images Attached Images  

  4. #4
    Join Date
    May 2013
    Location
    australia
    Posts
    2,391


    Did you find this post helpful? Yes | No

    Default Re: Serin Not Recognizing Qualifier From Another PIC

    works perfectly for me if you don't try to use qualifier before you actually set it to a meaningful value as rocket troy indicated

    Code:
    #CONFIG; set CONFIG1 for internal oscillator, watchdog on, MCLR pin as OFF
     __config _WDTE_ON & _MCLRE_OFF & _INTOSCIO & _PWRTE_ON
    
    
    #ENDCONFIG
    
    
    
    
    OSCCON = %  01100000 ' Set system clock 4MHz
    
    
    
    
    DEFINE OSC 4 '  PBP timing to 4MHz system clock
    
    
    OPTION_REG.7 = 0 ' Enable Weak Pullups Control
    WPU = %  00100000 ' Disable all Weak Pullups except GPIO.5
    ANSEL = 0 ' No analog inputs
    TRISIO = %  00111001 ' Make GP1, GP2 outputs. GP0, GP3, GP4 & GP5 = inputs
    CMCON0 = %  00000111 ' Turn off comparators
    
    
    
    
    
    
    IDByte var byte ' Receiver ID.
    IDByteRx var byte ' New IDByte
    
    
    Z1Alarm var GPIO.2 ' Zone1 Alarm LED
    Z2Alarm var GPIO.1 ' Zone2 Alarm LED
    
    
    ProgIDRx var byte ' Received Programmer ID
    PrgIn var GPIO.5 ' Programmer Detect & Data Port
    
    
    
    
    
    
    
    ProgIDRx = $d  '   define qualifier
    gpio=0
    
    
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''
    MainLoop:
    Serin PrgIn,1,[ProgIDRx],IDByteRx ' Wait  for new I.D. to arrive
    GOSUB UpdateID ' Verify arrival and execute UpdateID Subroutine
    GOTO MainLoop
    
    
    
    
    
    
    
    UpdateID:
    Z1Alarm = 1 : Z2Alarm = 1 ' LEDs to Confirm programing Subroutine
    PAUSE 500
    Z1Alarm = 0 : Z2Alarm = 0 ' Turn off LEDs
    PAUSE 1000
    Z1Alarm = 1 : Z2Alarm = 1 ' LEDs to Confirm in programing mode
    PAUSE 1000
    Z1Alarm = 0 : Z2Alarm = 0 ' Turn off LEDs
    IDByte = IDByteRx
    'Write 1, IDByte ' Write new ID to EEPROM
    
    
    RETURN
    
    
    
    
    ENd
    Last edited by richard; - 19th April 2024 at 02:29.
    Warning I'm not a teacher

  5. #5
    Join Date
    Dec 2019
    Location
    Stuart, FL USA
    Posts
    15


    Did you find this post helpful? Yes | No

    Default Re: Serin Not Recognizing Qualifier From Another PIC

    Hi Richard,

    Thank you and appreciate for your input.

    The function of this program is to allow the reprogramming of the Receiver's ID.
    The program is structured to provide a five second period of time upon power up of the Receiver to allow the attachment of a PIC based programmer (My design) to reprogram the ID of the respective receiver before the programs "MainLoop" begins.

    I added your modifications and still couldn't get it to work. BTW, why the GPIO=0? Does that clear all GPIO ports, I presume?

    Below is the modified code.


    ************************************************** *****************
    ********************** Receiver Code *********************************
    ************************************************** *****************
    #CONFIG
    __config _WDTE_ON & _MCLRE_OFF & _INTOSCIO & _PWRTE_ON
    #ENDCONFIG


    OSCCON = %01100000 ' Set system internal clock 4MHz


    DEFINE OSC 4 ' Calibrate PBP timing to 4MHz system clock


    OPTION_REG =% 00000000 ' Enable Weak Pullups Control
    WPU =% 00100000 ' Disable all Weak Pullups except on GPio.5
    ANSEL = %000000 ' No analog inputs
    TRISIO = %111001 ' Make GP1, GP2 outputs. GP0, GP3, GP4 & GP5 = inputs
    CMCON0 =%000111 ' Turn off comparators
    ADCON0 = 0 ' Turn off A/D


    AlarmByte var Byte ' Received Alarm
    AlarmVal var byte ' Alarm Zone(s)
    RxIn var GPIO.0 ' Incoming Packet Port
    Z1Alarm var GPIO.2 ' Zone1 Alarm LED
    Z2Alarm var GPIO.1 ' Zone2 Alarm LED
    ByteSum var Byte ' IDByte & AlarmByte Sum Value
    ChkSum var byte ' ChkSum value to test
    ProgID var byte ' Programmer Present Verify
    PrgIn var GPIO.5 ' Programmer Detect & Data Port
    IDByte var byte ' Receiver ID.
    IDByteRx var byte ' New IDByte
    ProgIDRx var byte ' Received Programmer ID


    '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
    Pause 500 ' Pause for Register initialization
    ProgIDRx = $D ' Define qualifier
    GPIO=0


    Z2Alarm = 1 'Confirm in programing mode


    Serin PrgIn,1,5000,MainLoop,[ProgIDRx],IDByteRx ' Check for new I.D.
    if ProgIDRx = $A then ' Match Programmer ID
    IDByte = IDByteRx
    Write 1, IDByte
    Z1Alarm = 1 : Z2Alarm = 1 ' Confirm programing Subroutine
    pause 500
    Z1Alarm = 0 : Z2Alarm = 0
    pause 1000
    Z1Alarm = 1 : Z2Alarm = 1 'Confirm in programing mode
    pause 1000
    Z1Alarm = 0 : Z2Alarm = 0
    endif
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; START ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    MainLoop:


    I suspect that I may have a protocol issue in that my packet isn't in proper form for SERIN? Below is a JPG of my oscilloscope screen showing the packet received from the Programmer (Transmitter).

    Thank you for your help!

  6. #6
    Join Date
    May 2013
    Location
    australia
    Posts
    2,391


    Did you find this post helpful? Yes | No

    Default Re: Serin Not Recognizing Qualifier From Another PIC

    you misunderstand how the qualifier works

    this can not work as you set the qualifier to 0x0d as per my example , ProgIDRx will always be 0x0d
    untill you change it , serin will never change it

    if ProgIDRx = $A then ' Match Programmer ID ;;// will always fail

    this time out loop is pointless in this example as serin with [a qualifier ] will always block until the input qualifier is received
    Serin PrgIn,1,5000,MainLoop,[ProgIDRx],IDByteRx ' Check for new I.D.


    this will do the same thing
    MainLoop:
    Serin PrgIn,1,[ProgIDRx],IDByteRx ' Check for new I.D.
    IDByte = IDByteRx
    Write 1, IDByte
    Z1Alarm = 1 : Z2Alarm = 1 ' Confirm programing Subroutine
    pause 500
    Z1Alarm = 0 : Z2Alarm = 0
    pause 1000
    Z1Alarm = 1 : Z2Alarm = 1 'Confirm in programing mode
    pause 1000
    Z1Alarm = 0 : Z2Alarm = 0
    endif
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; START ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    goto MainLoop


    I added your modifications and still couldn't get it to work.
    note i used 0x0d AS a qualifier as its easer to use than 0x0a in proteus simulator
    u need to either change it back to 0x0a or alter the tx code to match








    BTW, why the GPIO=0? Does that clear all GPIO ports, I presume

    yes because at power up the alarm leds could be in any random state if you don't



    Last edited by richard; - 19th April 2024 at 05:12.
    Warning I'm not a teacher

  7. #7
    Join Date
    Dec 2010
    Location
    Melbourne Australia
    Posts
    137


    Did you find this post helpful? Yes | No

    Default Re: Serin Not Recognizing Qualifier From Another PIC

    Maybe all you want then is just:

    Serin PrgIn,1,5000,MainLoop, ProgIDRx

    ?

    Troy

  8. #8
    Join Date
    Dec 2019
    Location
    Stuart, FL USA
    Posts
    15


    Did you find this post helpful? Yes | No

    Default Re: Serin Not Recognizing Qualifier From Another PIC

    Hi Troy,

    You were right on in assuming that I misunderstood how the Qualifier works. With your help, now I do!

    I've modified the program accordingly and now it works perfectly!

    Thank you for taking your valuable time to assist me!

    Thanks to all who responded to my post. This is a great website and support forum!

Similar Threads

  1. RF Module Qualifier, CRC?
    By tazntex in forum Serial
    Replies: 14
    Last Post: - 22nd March 2010, 16:15
  2. HSERIN qualifier
    By Charles Linquis in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 14th December 2009, 11:53
  3. ICSP not recognizing..
    By sirvo in forum mel PIC BASIC Pro
    Replies: 11
    Last Post: - 11th June 2008, 20:31
  4. recognizing a serin2 string
    By ehertz in forum Serial
    Replies: 2
    Last Post: - 9th September 2006, 03:24
  5. Herin Qualifier
    By MORAND in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 5th May 2004, 16:56

Members who have read this thread : 14

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