Serin serout problem


Closed Thread
Results 1 to 40 of 337

Hybrid View

  1. #1
    Join Date
    Sep 2006
    Posts
    747

    Default Serin serout problem

    Hello,
    nice to see the site back up.

    I am almost finish my little project now. I have diffculty sending mutliple item on serout and receiving them on another chip using serin. I think its the way i type the command, the program does compile , but do not work.;
    here is the two codes of line:
    Sending Pic:
    serout2 portb.2, n2400, [encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE ]

    Receiving Pic:
    serin portB.3, n2400,[ encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE]

    after that i want to make the thing wireless. I have been trying to make the qualifier work in the serin command with no luck. I think this is needed because I will need to send some premamble to the receiving chip before the data right ??

    Ken

  2. #2
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    ---------------------------------------------------------------
    serout2 portb.2, n2400, [encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE ]
    ---------------------------------------------------------------


    SEROUT, not SEROUT2. Check your PBP manual for the explanation.

  3. #3
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    yes in fact I tried both and it do not work.
    I think my problem might be in the receiving end. when I do an lcd out without the serin command, the LCDout works, as soon I add the serin command, I only see black squares on the LCDout. So I think the serin command is not good.
    BUT if I just put

    serin portB.3, n2400,[ encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE]

    lcdout $FE,1
    LCDOUT "datain: ", BIN 5
    lcdout $FE,$C0, "datain2: ", bin encoded22.HighBYTE
    Pause 500

    is there something else I should be putting in for serin ?

    k

  4. #4
    Join Date
    Mar 2005
    Location
    Iowa, USA
    Posts
    216


    Did you find this post helpful? Yes | No

    Default

    You might have to provide some more of your code to troubleshoot and maybe a schematic. I believe what Skimask is referring to is SEROUT2 requires mode number instead of a mnemonic such as "n2400".
    Quote Originally Posted by TFM
    Mode is used to specify the baud rate and operating parameters of the
    serial transfer. The low order 13 bits select the baud rate. Bit 13 selects
    parity or no parity. Bit 14 selects inverted or true level. Bit 15 selects
    whether it is driven or open.
    The baud rate bits specify the bit time in microseconds - 20. To find the
    value for a given baud rate, use the equation:
    (1000000 / baud) - 20
    t2400 = 396
    n2400 = 16780
    Wisdom is knowing what path to take next... Integrity is taking it.
    Ryan Miller

  5. #5
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    By the way , the LCD is there basically to tell me what is goign on .
    anyway , here is the complete program :
    sending:

    ' Picbasic Pro program to read DS1820 1-wire temperature sensor
    ' and display temperature on LCD
    ' FOR SENDING SERIAL
    INCLUDE "modedefs.bas"
    DEFINE OSC 20 'use external 20mhz crystal

    CMCON = 7 : ANSEL = 0 : ADCON1 = 7
    ' Define LCD pins
    DEFINE LCD_DREG PORTA ' Set LCD Data port
    DEFINE LCD_DBIT 0 ' Set starting Data bit (0 or 4) if 4-bit bus

    DEFINE LCD_RSREG PORTB ' Set LCD Register Select port
    DEFINE LCD_RSBIT 1 ' Set LCD Register Select bit

    DEFINE LCD_EREG PORTB ' Set LCD Enable port
    DEFINE LCD_EBIT 0 ' Set LCD Enable bit

    DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits)
    DEFINE LCD_LINES 2 ' Set number of lines on LCD

    TRISB.2 =0
    TRISB.3 =1
    DQ var PortB.4
    temp var word
    '27
    temperature var word
    count_remain var byte
    count_per_c var byte
    counter var byte
    tempc var word
    dataout var word
    dataout2 var word
    datain var word
    array var word
    encoded1 var word
    encoded2 var word
    encoded22 var word
    encoded11 var word


    loop:
    owout DQ,1,[$cc]
    owout DQ,0,[$44]
    Pause 500
    owout DQ,1,[$cc]
    owout DQ,0,[$be]
    owin DQ, 0, [temperature.LOwBYTE, temperature.Highbyte, Skip 4, count_remain, count_per_c]
    '50
    temperature = ((( temperature >> 1) *100)- 25) + (((count_per_c - count_remain) * 100) / count_per_c)
    tempc = (((temperature *9) / 5)+3200)
    dataout = temperature / 100
    dataout2 = temperature

    encoded1 =temperature.LowBYTE
    encoded2 =temperature.HighBYTE

    For counter=0 TO 7
    IF encoded1.0[counter]=0 Then
    encoded11.0[counter*2]=0
    encoded11.0[counter*2+1]=1
    Else
    encoded11.0[counter*2]=1
    encoded11.0[counter*2+1]=0
    EndIF
    Next counter

    For counter=0 TO 7
    IF encoded2.0[counter]=0 Then
    encoded22.0[counter*2]=0
    encoded22.0[counter*2+1]=1
    Else
    encoded22.0[counter*2]=1
    encoded22.0[counter*2+1]=0
    EndIF
    Next counter
    lcdout $FE,1
    LCDOUT BIN temperature , ".", dec (temperature / 10)," ",$DF,"C"
    lcdout $FE,$C0, bin encoded22.HighBYTE , ".", bin encoded2," ",$DF,"F"
    serout portb.2, n2400, [encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE ]
    goto loop

    End


    AND RECEIVING:
    ' Picbasic Pro program to read DS1820 1-wire temperature sensor
    ' and display temperature on LCD
    ' FOR Receiving SERIAL
    INCLUDE "modedefs.bas"
    DEFINE OSC 20 'use external 20mhz crystal

    CMCON = 7 : ANSEL = 0 : ADCON1 = 7
    ' Define LCD pins
    DEFINE LCD_DREG PORTA ' Set LCD Data port
    DEFINE LCD_DBIT 0 ' Set starting Data bit (0 or 4) if 4-bit bus

    DEFINE LCD_RSREG PORTB ' Set LCD Register Select port
    DEFINE LCD_RSBIT 1 ' Set LCD Register Select bit

    DEFINE LCD_EREG PORTB ' Set LCD Enable port
    DEFINE LCD_EBIT 0 ' Set LCD Enable bit

    DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits)
    DEFINE LCD_LINES 2 ' Set number of lines on LCD
    '22
    datain2 var word
    datain var word
    dataout var word
    counter var byte
    temperature var word
    encoded1 var word
    encoded2 var word
    encoded11 var word
    encoded22 var word

    pause 500

    loop:
    '36
    serin portB.3, n2400,[ encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE]

    lcdout $FE,1
    LCDOUT "datain: ", BIN 5
    lcdout $FE,$C0, "datain2: ", bin encoded22.HighBYTE , ".", dec datain2," ",$DF,"C"
    Pause 500

    For counter=0 TO 7 'decoding
    encoded1.0[counter]=encoded11.0[counter*2]
    encoded2.0[counter]=encoded22.0[counter*2]
    Next counter

    temperature= encoded1 ' putting back together as the original temperature
    For counter=0 TO 7
    temperature.0[counter+8]=encoded2.0[counter+8]
    Next counter

    goto loop

    End

  6. #6
    Join Date
    Mar 2005
    Location
    Iowa, USA
    Posts
    216


    Did you find this post helpful? Yes | No

    Default

    If you're not using a Qualifier, I think you need to use Serin2. Maybe you can use it without the qualifier... I don't know.
    Quote Originally Posted by Manual
    SERIN Pin,Mode,{Timeout,Label,}{[Qual...],}{Item...}
    ‘ Wait until the character
    serially on Pin1 and put
    SERIN 1,N2400,[“A”],B0

    ....The list of data items to be received may be preceded by one or more
    qualifiers enclosed within brackets. SERIN must receive these bytes in
    exact order before receiving the data items.
    Quote Originally Posted by Manual
    SERIN2 DataPin{\FlowPin},Mode,{ParityLabel,}{Timeout,Labe l,}[Item...]
    ‘ Wait until the character “A” is received
    serially on Pin1 and put next character into B0
    SERIN2 1,16780,[WAIT(“A”),B0]
    Either way, I'd try to send a qualifier down. Either the Serin format or as noted in the manual with Serin2.
    Last edited by rhino; - 22nd December 2006 at 18:40.
    Wisdom is knowing what path to take next... Integrity is taking it.
    Ryan Miller

  7. #7
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by lerameur View Post

    AND RECEIVING:
    .......................................
    pause 500

    lcdout $FE,1 - put this above your main loop, you don't need to 'home' the LCD, you already do that with $FE,$C0.

    loop:
    '36
    serin portB.3, n2400,[ encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE]

    LCDOUT "datain: ", BIN 5 ------------- ???? what's this for?

    lcdout $FE,$C0, "datain2: ", bin encoded22.HighBYTE , ".", dec datain2," ",$DF,"C" ---------- where is datain2 getting set at?

    Pause 500

    For counter=0 TO 7 'decoding
    encoded1.0[counter]=encoded11.0[counter*2]
    encoded2.0[counter]=encoded22.0[counter*2]
    Next counter

    temperature= encoded1 ' putting back together as the original temperature
    For counter=0 TO 7
    temperature.0[counter+8]=encoded2.0[counter+8]
    Next counter

    goto loop

    End



    No LCD_RWREG or LCD_RWBIT defines in either transmit or receive sections.

    Add:
    DEFINE LCD_COMMANDUS 2500
    DEFINE LCD_DATAUS 250
    to both sections.

    Increase initial pause to 1000 or higher as needed.

    Where is datain2 getting it's value from?

    You don't do your decoding/etc until after you've displayed it. Change that around.

    Check the listing above for other notes.

  8. #8
    Join Date
    Sep 2006
    Posts
    747


    Did you find this post helpful? Yes | No

    Default

    LCDOUT "datain: ", BIN 5 ------------- ???? what's this for?
    I was just testing my LCDout

    lcdout $FE,$C0, "datain2: ", bin encoded22.HighBYTE , ".", dec datain2," ",$DF,"C" ---------- where is datain2 getting set at?
    Past program , forgot to remove it, was just using the first line for LCDout


    In the receiving chip, nothing is happening, its going in but not recognizing it.
    This is the code I have, nothing is going to the lcd screen. If I remove the SERIN line, then the LCDOUT work, but gives me all 1. (thats normal its not seeing anything)
    How do i output this on the lcd ?
    It seems that i cannot use the command SERIN and LCDOUT in the same program...


    serin portB.2, n2400,[ encoded22.HighBYTE, encoded22.LowBYTE, encoded11.HighBYTE, encoded11.LowBYTE]

    LCDOUT "d: ", BIN encoded22.HighBYTE ,".",bin encoded22.LowBYTE ---------------------not outputting what i want
    lcdout $FE,$C0, "datain2: ", bin encoded22.HighBYTE , ".", bin encoded22.HighBYTE," ",$DF,"C"
    Pause 500
    Last edited by lerameur; - 23rd December 2006 at 06:50.

Similar Threads

  1. A Serial GLCD 128x64 Simple Project
    By Oldspring in forum Off Topic
    Replies: 0
    Last Post: - 8th March 2010, 20:58
  2. PIC16f877 code crosses boundary @800h
    By inventosrl in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 6th April 2009, 22:03
  3. serout and serin problem
    By nicolelawsc in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 11th April 2006, 19:44
  4. Replies: 11
    Last Post: - 13th July 2005, 19:26
  5. SerIn and SerOut
    By Dwayne in forum FAQ - Frequently Asked Questions
    Replies: 0
    Last Post: - 21st July 2004, 15:54

Members who have read this thread : 1

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