Help PLEASE - Stuck on a project! 16F877A


Closed Thread
Results 1 to 17 of 17

Hybrid View

  1. #1
    Join Date
    Nov 2009
    Location
    London
    Posts
    251


    Did you find this post helpful? Yes | No

    Default

    Thanks Dave, I am very thankful to many members here, because I have learnt a lot from this forum and now the checksum method, which you have explained very simply.

    I have taken the advises above and changed the code and freed the MCRoom's ISR.
    During my earlier attempts, I tried to make the code work by sending an 1 string byte, but it didnt worked so I changed it, but left the receiving string variable as it is.

    It is not working currently, but it seems I am near as ISR is not handling much complicated stuff like pause or DEBUG.
    The code at machine now (MCH1.txt), keeps sending signals and waits for the answer from the MCroom.
    The MCroom should switch the LED ON and buzzer ON when mch reports a problem. I have tried to put everything in a loop, but it is not working.
    Is it ok to put things in loop like I have done?
    I am attaching the codes I have amended.
    Attached Files Attached Files

  2. #2
    Join Date
    Nov 2009
    Location
    London
    Posts
    251


    Did you find this post helpful? Yes | No

    Default Start with HSERIN

    I was looking into the PIC calculator. I would like to incorporate USART into the code as advised.
    I have got few statements from the PIC calculator which are:

    Code:
    DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
    DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
    DEFINE HSER_SPBRG 12  ' 4800 Baud @ 4MHz, 0.17%
    DEFINE HSER_CLROERR 1 ' Clear overflow automatically
    and also
    Code:
    RCSTA = $90 ' Enable serial port & continuous receive
    TXSTA = $20 ' Enable transmit, BRGH = 0
    SPBRG = 12  ' 4800 Baud @ 4MHz, 0.17%
    I would like to ask, if these are the only statements which I need to put in the code and then replace DEBUG with HSERIN & HSEROUT and also use my simple RF modules on TX & RX pins of my PIC instead of the ones I am using now?
    I mean would these statements be correct?
    Code:
    HSEROUT "MT3",code,"S" & HSERIN [WAIT("MT3"),code,STR string\1\10]
    Also Dave, to answer your question -
    If you are using radio modules like the ones found at rentron.com then they need to be "trained" to receive data.
    . I am using simple RF modules and not any special kind.

  3. #3
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Is it ok to put things in loop like I have done?
    The code in the ISR still looks a bit long. Maybe put that stuff in the START label being you are looping back to it. Have a GOSUB in there to TOGGLE FAST.
    In the end I think the only thing you want in the ISR is the serial receive.


    From the PicMultiCalc program the copy defines is what you want at the beginning of your code for this.

    Your HESER statement is not quite right. Look at SERIN2/SEROUT2 for examples on the syntax, it is the same as HSERin/out. Basically you need [ ] at the beginning and end.

    Now I am going to suggest that you leave your code for a bit and and work on some simple test codes to make sure you have everything working. I am sure you did that at the beginning of this project but several things are changing now, adding new "stuff" and restructuring the code.

    RF is difficult at best so start with wires. Do the HSERIN in the ISR and just simply have it do one thing, light an LED. Then work on feed back from the receiver.

    Which brings up another thing. If I am following this correctly the RF is two way. ZUnless you have a two way module you will want to kill the power to the transmitter when you are receiving. I do not see this in the code but maybe it is there.
    Dave
    Always wear safety glasses while programming.

  4. #4
    Join Date
    Nov 2009
    Location
    London
    Posts
    251


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    The code in the ISR still looks a bit long. Maybe put that stuff in the START label being you are looping back to it. Have a GOSUB in there to TOGGLE FAST.
    In the end I think the only thing you want in the ISR is the serial receive.
    I didn't knew about this. I just want to confirm again, that I can put gosub kind of statements in the ISR, where it can point to labels outside the ISR?
    Which brings up another thing. If I am following this correctly the RF is two way. ZUnless you have a two way module you will want to kill the power to the transmitter when you are receiving. I do not see this in the code but maybe it is there.
    I have tried to give enough pause to the TX before transmitting, so that Rx can finish listening to the code.

    One more question for now, any advise as to why this stament in the code (MCroom) is not working when code received is 1:
    Code:
    	for x=1 to 4
    		if code=x then
    			High PortC[x+3] : Y=1 : buzzer[x]=1: goto snd
    		endif
    Port C.4 should get high when code is 1, but it is not.

  5. #5
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    I didn't knew about this. I just want to confirm again, that I can put gosub kind of statements in the ISR, where it can point to labels outside the ISR?
    That is not what I was trying to say.
    Your code loops back to START: regularly, have a GOSUB in there that will take you to the routine that WAS in the ISR. Looks like that routine is for setting the LEDs and I bet your code will run fast enough that if the LEDs are set/changed through every loop it will be fine.

    Some of the transmitters are transmitting a carrier wave all of the time when they are powered up. Could be "jamming" the receiver.


    High PortC[x+3]
    That is interesting... never tried that but I do not think it will work.
    Maybe if the . is put in after C ???
    Dave
    Always wear safety glasses while programming.

  6. #6
    Join Date
    Nov 2009
    Location
    London
    Posts
    251


    Did you find this post helpful? Yes | No

    Default

    Back to scratch now. Just trying to do it for one machine with new approach. MCH reports the problem, LED goes high at MCroom, along with the buzzer, Ackn... signal is sent and led blinks at MCH as well.
    BUT only for few seconds and then it goes off. I also put a statement High BUzz: pause 100 : low buzz to see if valid signal comes, it does keeps comming at mcroom.
    Looking at my new code will explain better what I am trying to do. Any advise?
    Attached Files Attached Files

  7. #7
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Any advise?
    Re-read post 4 and 9 ???
    Dave
    Always wear safety glasses while programming.

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