rfPIC Serin problem


Closed Thread
Results 1 to 40 of 53

Hybrid View

  1. #1
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    in PBP, CON is used to define a software constant, in asm it should looks like

    YourConstantVariable = .25

    or
    #DEFINE YourConstantVariable .25

    Using pre-defined constant here and there, allow to have a better readable code, and also allow to do some changes without having to scroll the whole code.

    For a 12F675 asm example.. well, first google hit gave me
    http://www.jbgizmo.com/page29.htm
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  2. #2
    Join Date
    Nov 2007
    Posts
    11


    Did you find this post helpful? Yes | No

    Default stack overflow

    hi people,

    has anyone ever encountered a problem of stack overflow in their program?
    rite now im doing a program to transmit a stack of data which contain 16 bit + 64 bit +

    and the pic that im using is a pic12f675. what should i do to reduce this error?

  3. #3
    Join Date
    Sep 2004
    Location
    Mentor, Ohio
    Posts
    352


    Did you find this post helpful? Yes | No

    Smile

    Hi Medusa,

    I had this problem once and it turned out to be a subroutine that had a GOTO at the end of it instead of RETURN. Changed the word--solved the problem.

    HTH,

    BobK

  4. #4
    Join Date
    Nov 2007
    Posts
    11


    Did you find this post helpful? Yes | No

    Default

    thanks bobk..i tried that, put return at the end of each goto instruction i have, but still it has not succeeded. is it possible due to overflow stack?

    my program is supposed to have a stack of 8 byte output excluding the preamble and header and timeguard.

    does anyone ever write a program that has a subroutine as follows

    read input from port GPIO
    move data from GPIO to 'input' register
    take only data from bit 1
    store the input (bit 1)to bit 0 at another register

    repeat for eight times

    what i already have in mind

    movfw GPIO
    movwf input
    movlw 0000 0000
    xorwf input,f
    goto rotate

    rotate
    rrf input,f
    rrf input,f

    anyone has any idea to continue?

  5. #5
    Join Date
    Sep 2004
    Location
    Mentor, Ohio
    Posts
    352


    Did you find this post helpful? Yes | No

    Smile

    Hi Medusa,

    That's not what I meant. If you are calling a subroutine then at the end of the subroutine you put a RETURN. GOTO does not go at the end of a subroutine. This was the problem I had with one of my projects (18F452). The stack overflow was causing my project to hangup when it got to the subroutine after the stack overflowed. This was the only point I was trying to make.

    If you have both a GOTO and a RETURN then you might still be experiencing a problem.

    HTH,

    BobK

  6. #6
    Join Date
    Jun 2006
    Posts
    37


    Did you find this post helpful? Yes | No

    Default need help

    Hi Bruce!
    I have tried ur codes on RfPIC kit. i can see the data being sent by transmitter on GP2 and received on PORTC.1 on receiver side but the LED's are not blinking. what might be the problem.plz help me troubleshoot.
    thanks

  7. #7
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    That's hard to say. It works perfectly on my rfRXD0420 module installed in PICkit 1 board.

    Are you compiling the receiver code without any changes, and programming it into a
    PIC16F676 on the PICKit 1 board with the rfRXD0420 installed per the instructions?
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  8. #8
    Join Date
    Jun 2006
    Posts
    37


    Did you find this post helpful? Yes | No

    Default

    Hi
    U have not included modedefs.bas in ur program.is that an issue?
    I did that but to no avail.
    maybe config fuses are causing something.they seem ok.they are as under when i read them using PICkit 1 software:
    12F675
    config word:0x31D4
    osccal: 0x3480
    bandgap: 0x3000

    12F676
    config word:0x31C4
    osccal: 0x3440
    bandgap: 0x3000

  9. #9
    Join Date
    Nov 2007
    Posts
    9


    Did you find this post helpful? Yes | No

    Default rfrxd0420

    Hi there,

    I've altered the receiver_demo program to suit my application. - I took in the data from rfRxd0420 drom RC2 and try to take it out serially from RC0 of the pic16f676 so that I can
    probe the data transmitted.

    Currently, I'm simulating the program using MPLAB IDE. Pardon me if I'm wrong.
    The receive_demo program that I understand, will check for header. But,
    it does says that if the data is high before 6ms, therefore the header is valid.
    What if the data is also 'LOW'?
    I'm actually having problems with simulation coz it does not want to
    come out of the loop - unless I put '1' in between.

    When it came out of the loop, I should be able to record that and then output that
    to the RC0 but it seems that the program didn't even jump to search for a guard time,
    instead it continue the process to find for high or low pulse.

    I just altered the receive demo of the dev kit. Can anyone help me please?
    Or do you suggest a better way to simulate this program?

    MAIN
    call CLOCK ; to update TRMLOW and TMRHIGH
    ; TMRLOW ~=4us TMRHIGH ~=1ms

    movlw HIGH STATEM
    movwf PCLATH
    movf STATECNTR, W ; Mask out the high order bits of
    andlw B'00001111' ; STATECNTR (a noise guard)

    addwf PCL, F ; The program clock (PCL) is incre-
    STATEM
    ; check for possible start of data stream
    goto BEGIN ; mented by STATECNTR in order
    goto BEGIN1 ; to go to the appropiate routine
    goto HEADER ; header is being ignored
    goto HEADER1 ; just count up the time and then takes the data
    goto HIGHPLSE ; times the width of Hi Pulse
    goto LOWPULSE
    goto RECORD ; record the 8 byte data
    goto WAIT4END ; wait for guard time to be greater than 8ms

    goto FIRST0 ; check whether DATA0 of bit 0 is 0 or 1
    call SENDOUT ; to send out the serial data out through portc pin 0
    goto RESET ; These RESET commands correct
    goto RESET ; erroneous values of STATECNTR
    goto RESET ; not caught by the mask above.
    goto RESET
    goto RESET
    goto RESET

  10. #10
    Join Date
    Nov 2007
    Posts
    11


    Did you find this post helpful? Yes | No

    Default

    from the demo program, they used ASK modulation which use NRZ format modulation.
    in this format, when the input is zero it would give you a pulse of 110 while if the input is one, it would give pulse 011, which means it will still give you pulse high for whichever input.

  11. #11
    Join Date
    Nov 2007
    Posts
    11


    Did you find this post helpful? Yes | No

    Default

    im still experiencing this overflow stack error message..
    ive tried to change all goto to call instruction
    put return for every subroutine..but still it doesnot work
    can anyone help me

    i pasted my full program below

    Code:
    ;nur azrin hilmi
    ;gdp 17-telemetr 
    
    
        LIST   		P=RF675K       ; list directive to define processor
     	#include    <RF675K.INC>  ; processor specific variable definitions
    
    
    ;**************define variables*********************************
    
    	#define	sensor	GPIO, 1
    	#define txd     GPIO, 2             ; (Output) Transmit Data
    	#define pb3     GPIO, 3             ; (Input Only) Push button switch GP3
    	#define pb4     GPIO, 4             ; (Input) Push button switch GP4
    	#define rfena   GPIO, 5             ; (Output) RF Enable
    
     	; GPIO Pins =    xx543210
    ;	#define gptris b'00011011'
    
    	#define TGUARD  d'5'
    	#define exor 	b'00000000'	
    	#define	total d'8'
    ;	#define	rtime d'5'
    ;***************************************************************
    
    	org  0x00
    	goto initialize
    	
    	org  0x004
    	
    	movwf	w_temp
    	swapf	STATUS,W
    	bcf		STATUS, 5		;select bank 0
    	movwf	status_temp		;save status register
    ;***************************************************************
    
    ;	interrupt service routine (ISR)
    ;   interrupt on change on pin of gpio
    
    	movfw	GPIO
    	bcf		INTCON,0
    	
    ;**************************************************************
    
    	swapf	status_temp,w	;set bank into original state
    	movwf	STATUS
    	swapf	w_temp,F
    	swapf	w_temp,W
    	
    	retfie
    
    
    ;***************************************************************
    
    WaitxTE
            movwf   Count2      ; [1]
    
    waitxlp            
            movlw   D'30'       ; [1]
            movwf   Count       ; [1]
    
    wait400lp
          nop                 ; [1]
    
          nop                 ; [1]
        decfsz  Count,F     ; [1]
        goto    wait400lp  ; [2]
    ;                          --------
    ;                         79 x 5 = 395us
    
         decfsz  Count2,F    ; [1]
        goto    waitxlp    ; [2]
    
         retlw   0           ; [2]
    
    ;                       total 2 (call) + W x (395 + 5) + 2 (return)
    ;                       w = 1 -> 406us @4MHz
    ;                       w = 2 -> 806us @4MHz
    ;*************************************************************
    ;initialize pic
    ;*************************************************************
    
    initialize
    
    ;clearing all ports
    	CLRF	nobit
    	CLRF	nobit2
    	clrf	input
    	clrf	store
    	clrf	rotateright
    	clrf	Count
    	clrf	Count2
    	clrf	ltime
    	clrf	rtime
    ;disable global interrupts during initialization
    
    	bcf     INTCON,7
    
    ;calibrating the internal oscillator
    
    ;	bsf     STATUS,5		;select bank 1
    	call	0x3FF
    	movwf	OSCCAL		
    ;	bcf		STATUS,5
    	
    ;turn off the comparator
    	bsf		STATUS,5
    
    	clrf 	ANSEL			; clear ansel register
    	bcf		STATUS,5
    	
    	clrf 	GPIO			; initialize General Purpose Input Output to 0
    		
    ;setting gpio register to the cosrresponding io pin
    	bsf 	STATUS,5
    	
    	bsf		TRISIO,0
    	bsf		TRISIO,1
    	bsf		TRISIO,4
    	bcf		TRISIO,2
    	bCf		TRISIO,5
    
    	bcf     STATUS,5		;select bank 0
    
    ;set bit 0:2 at register cmcon	;setting gp2 as digital output |offkan comparator
    	bsf		STATUS,5
    	bsf		CMCON,0
    	bsf		CMCON,1
    	bsf		CMCON,2
    	BCF		STATUS,5
    ; VRCON	register ; CVref circuit powered down,no Idd drain
    
    	bsf		STATUS,5
    	bcf		VRCON, 7
    	bcf		STATUS,5
    
    
    ;****************************************************************
    ;****timer1 module gate control**********************************
    ; disabling timer1
    	bsf		STATUS, 5		; select Bank 1
    	movlw   b'01000100'		; disable TIMER1
    	movwf	T1CON		;
    	bcf		STATUS, 5		; select Bank 0
    
    ;****************************************************************
    ;weak pull-up register (wpu)
    ;each pull-up is automatically turned off when the pin is configured as an output
    	bsf     STATUS,5
    	movlw	b'00010000'
    	movwf	WPU
    	bcf     STATUS,5
    
    ;***************set pin for config_address regsiter
    
    ;OPTION Register 
    
    ;   OPTION_REG contains control bits to configure:
    ;   Weak pull-ups on GPIO (see also WPU Register above)
    ;   External GP2/INT interrupt
    ;   TMR0
    ;   TMR0/WDT prescaler
    
            bsf     STATUS,5	         	; ---- Select Bank 1 -----
    
            bcf     OPTION_REG, NOT_GPPU  	; GPIO pull-ups: enabled
    
            bsf     OPTION_REG, INTEDG  	; Interrupt Edge: on rising edge of GP2/INT pin
    
            bcf     OPTION_REG, T0CS    	; TMR0 Clock Source: internal instruction cycle (CLKOUT)
            bcf     OPTION_REG, T0SE    	; TMR0 Source Edge: increment low-to-high transition on GP2/T0CKI pin
    
            bcf     OPTION_REG, 3     		; Prescaler Assignment: assigned to TIMER0
    
            ; TMR0 Prescaler Rate: 1:2
            bcf     OPTION_REG, 2     		; Prescaler Rate Select bit 2
            bcf     OPTION_REG, 1     		; Prescaler Rate Select bit 1
            bcf     OPTION_REG, 0     		; Prescaler Rate Select bit 0
    
            bcf    STATUS, 5         		; ---- Select Bank 0 -----
    
    
    
    
    ;***************************************************************
    ;interrupt on-change register
    	bsf     STATUS,5
    	
    	movlw  	b'00011011'		;enable global interrupts in order for the individual pin to be configured(kalo switch
    	movwf	IOC
    
    	movlw	b'00000000'		;peripheral interrupt register; disable
    	movwf 	PIE1			
    
    	bcf    STATUS,5
    
    	movlw	b'00001000'		;enable interrupt control register 
    	movwf	INTCON
    	
    
    ;******************************************************************
    ;MAIN PROGRAM
    ;*****************************************************************8
    MAIN
    
                  
            bsf     INTCON,7  ; enable global interrupts
    	;	bsf		rfena     ; enable	transmitter
    		call    BITCHECK
    		
    ;*****************************************************************
    ;CHECK INPUT
    ;*****************************************************************
    
    	
    BITCHECK
    	btfsc	nobit2,3 
    	goto	TRANSMIT
    	
    	movfw	GPIO
    	movwf	input	
    	incf	nobit2,f
    	movfw	nobit2
    	movwf	nobit
    
    	
    	btfsc	nobit2,2
    	goto	checkleft	;for bit number 4,5,6,7
    	goto	checkright	;for bit number 1,2,3,8
    
    
    checkleft
    
    	btfsc	nobit2,1
    	goto	rleft
    	btfsc	nobit2,0
    	goto	bit5
    	goto	rright1
    	return;
    checkright
    	btfsc	nobit2,3
    	goto	rleft
    	return;
    rright1
    	movlw	d'5'
    	movwf	rtime
    	return;
    rright
    	
    	decf	rtime,f
    	decfsz	nobit
    	goto	rright
    ;	movwf	rtime
    rotater
    	rrf		input,f
    	decfsz	rtime
    	goto	rotater
    	movfw	input	
    	xorwf	store,w
    	movwf	store
    	goto    BITCHECK
    	return;
    bit5
    	movfw	input
    	xorwf	store,w
    	movwf	store
    	goto	BITCHECK
    	return;
    rleft
    
    	movfw	nobit
    	movwf	ltime
    	decf	ltime
    	decf	ltime
    	decf	ltime
    	decf	ltime	
    	decf	ltime
    	return
    rotatel
    	rlf		input,f
    
    	decfsz	ltime
    	goto	rotatel	
    	movfw	input	
    	xorwf	store,w
    	movwf	store
    	goto    BITCHECK	
        return;                                   
    TRANSMIT
    		bsf		GPIO,5
    ; send preamble (50% duty cycle)
    Preamble					;send 16 bit
          movlw   d'16'
          movwf   BitCount          ; init number of preamble bits
    
    PreL
            bsf     txd             ; ON
            movlw	1
    		call    WaitxTE           ; delay
            bcf     txd             ; OFF
           	movlw	1
    		call    WaitxTE             ; delay
            decfsz  BitCount,F      ; loop
            goto    PreL
                
    ; sync pause
    
    TXloop      
                    
           movlw d'10'
    	   call    WaitxTE         ; Theader = 10 x Te
                
    ; send 72 bit pattern
    
            movlw   store            ; lsb first 
            movwf   FSR
                
    TXNextByte
          movlw   D'8'
          movwf   BitCount
    
    TXNextBit
    		
            rrf     INDF,W           ; 8 bit rotate | rotate right f through carry
            rrf     INDF,F           ; Carry contain lsb
            BC      ONE				 ; branch on carry | goto ONE if bit is set
    ZERO    					;wave pattern if the bit is zero        
            movlw   2               ; 
    	    movwf   TimeHi          ;   +---+---+   +--
            movlw   1               ;   |       |   |
       		movwf   TimeLo          ;---+       +---+
            goto    Trasm_BIT       ;   |  2Te   Te |
    
    ONE							;wave pattern if the bit is one
            movlw   1              	;              
            movwf   TimeHi          ;   +---+       +--
            movlw   2               ;   |   |       |
            movwf   TimeLo          ;---+   +---+---+
                                    ;   | Te   2Te  |
    	
    Trasm_BIT
    
            bsf     txd             ; ON
            movf    TimeHi,W          
            call    WaitxTE
    		
            bcf     txd             ; OFF
            movf    TimeLo,W          
            call    WaitxTE
    
           	decfsz  BitCount,F
            goto    TXNextBit       ; loop on bits
    
       
    ; guard time
            movlw   TGUARD
            call    WaitxTE
    
           org     0x3ff
           retlw    0x80
    
    	
    ;----------------------------------------------------------------------
            end                         ; end of program directive
    ;----------------------------------------------------------------------

Similar Threads

  1. Serin Problem with 12F629/PBP
    By Flyingms in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 9th March 2009, 14:59
  2. Serin Problem 16f819
    By jjohannson in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 22nd March 2007, 22:50
  3. Serin serout problem
    By lerameur in forum mel PIC BASIC Pro
    Replies: 336
    Last Post: - 6th February 2007, 04:25
  4. Problem with PBP interrupt and Serin, please help
    By rgregor in forum mel PIC BASIC
    Replies: 0
    Last Post: - 22nd August 2006, 19:02
  5. serout and serin problem
    By nicolelawsc in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 11th April 2006, 19:44

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