PIC Help! MY led Keeps Flashing and dimming when displaying the message HELP!


Closed Thread
Results 1 to 4 of 4
  1. #1
    jackd019's Avatar
    jackd019 Guest

    Unhappy PIC Help! MY led Keeps Flashing and dimming when displaying the message HELP!

    I cant seem to fix it
    like the numbers displayed or what not goes dim and some are fine but some arent

    Code:
    	list 	p=16f877	#include	<p16f877A.inc>	
    	__CONFIG 	_CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF	
    
    
    
    
    #define	LCD_RS		PORTE,0	;Define the pin for the LCD RS Control Line
    #define	LCD_RW		PORTE,1	;Define the pin for the LCD R/W Control Line
    #define	LCD_E		PORTE,2	;Define the pin for the LCD E Control Line
    #define	LCD_DATA	PORTD	;Define the pins for LCD Data Lines
    
    
    COUNTER1	EQU	0x020		;Memory address for Counter 1
    COUNTER2	EQU	0x021		;Memory address for Counter 2
    COUNTER3	EQU	0x022		;MEMORY ADDRESS FOR COUNTER 3
    	ORG	0x0000	
    RESET_V	goto	START		;Reset Vector
    	ORG	0x0005	
    START	clrf	PORTD		;Clear PORTD Output Latches.
    		clrf	PORTE		;Clear PORTE Output Latches.
    		bsf		STATUS,RP0	;Switch to Bank 1.
    		movlw	0x07		;Load W with 0x07
    		movwf	ADCON1		;Copy W into ADCON1 (Switch Port A and E into Digital Mode)
    	
    		clrf	TRISD		;Switch all Port D pins to output mode
    		clrf	TRISE		;Switch all Port E pins to output mode
    		bcf		STATUS,RP0	;Switch to Bank 0
    		
    	;	call	LOCKED_MODE
    	;	call	HOLD_LOCKED
    
    
    	;	call	UNLOCKED_MODE
    	;	call	HOLD_UNLOCKED
    
    
    	;	call	IDLE_MODE
    	;	call	HOLD_IDLE
    
    
    	;	call 	STEP_MODE
    	;	call	HOLD_STEP	
    
    
    	;	call	POS_MODE	
    	;	call	HOLD_POS
    
    
    
    
    LOCKED_MODE		bcf		LCD_RW		;Clear LCD_RW line to write data to the LCD
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'00111000' ;Load the function set command into working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00001110' ;Load the Display On command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000110' ;Load the Entry Mode Set command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000001'	;Load the Clear Screen command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		Call	LONG_DELAY	;Call the Long Delay Subroutine
    		
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw	'S'		;Load the first letter of your First Name into the Working Register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'Y'		;Write the remaining letters of your First Name to the screen
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'S'
    		Call 	LCD_WRITE
    		movlw	'T'
    		Call 	LCD_WRITE	
    		movlw	'E'
    		Call 	LCD_WRITE
    		movlw	'M'
    		Call 	LCD_WRITE
    		movlw	'_'
    		Call 	LCD_WRITE
    		movlw	'L'
    		Call 	LCD_WRITE
    		movlw	'O'
    		Call 	LCD_WRITE
    		movlw	'C'
    		Call 	LCD_WRITE
    		movlw	'K'
    		Call 	LCD_WRITE
    		movlw	'E'
    		Call 	LCD_WRITE
    		movlw	'D'
    		Call 	LCD_WRITE
    	
    
    
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'11000000'		;Load the command into the working register that places the cursor on the second line of the LCD
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw 	'1'		;Load the first letter of your Surname into the Working Register
    		Call 	LCD_WRITE	
    		movlw	'1'
    		Call 	LCD_WRITE
    		movlw	'4'
    		Call 	LCD_WRITE	
    		movlw 	'6'		
    		Call 	LCD_WRITE
    		movlw	'3'
    		Call 	LCD_WRITE
    		movlw	'3'
    		Call 	LCD_WRITE
    		movlw	'3'
    		Call 	LCD_WRITE
    		movlw	'2'
    		Call 	LCD_WRITE
    	;	return
    HOLD_LOCKED		btfsc	PORTB, 5 
    				goto 	HOLD_LOCKED
    		
    UNLOCKED_MODE		bcf		LCD_RW		;Clear LCD_RW line to write data to the LCD
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'00111000' ;Load the function set command into working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00001110' ;Load the Display On command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000110' ;Load the Entry Mode Set command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000001'	;Load the Clear Screen command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		Call	LONG_DELAY	;Call the Long Delay Subroutine
    		
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw	'S'		;Load the first letter of your First Name into the Working Register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'Y'		;Write the remaining letters of your First Name to the screen
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'S'
    		Call 	LCD_WRITE
    		movlw	'T'
    		Call 	LCD_WRITE	
    		movlw	'E'
    		Call 	LCD_WRITE
    		movlw	'M'
    		Call 	LCD_WRITE
    		movlw	'_'
    		Call 	LCD_WRITE
    		movlw	'U'
    		Call 	LCD_WRITE
    		movlw	'N'
    		Call 	LCD_WRITE
    		movlw	'L'
    		Call 	LCD_WRITE
    		movlw	'O'
    		Call 	LCD_WRITE
    		movlw	'C'
    		Call 	LCD_WRITE
    		movlw	'K'
    		Call 	LCD_WRITE
    		movlw	'E'
    		Call 	LCD_WRITE
    		movlw	'D'
    		Call 	LCD_WRITE
    	
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'11000000'		;Load the command into the working register that places the cursor on the second line of the LCD
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw 	'1'		;Load the first letter of your Surname into the Working Register
    		Call 	LCD_WRITE	
    		movlw	'1'
    		Call 	LCD_WRITE
    		movlw	'4'
    		Call 	LCD_WRITE	
    		movlw 	'6'		
    		Call 	LCD_WRITE
    		movlw	'3'
    		Call 	LCD_WRITE
    		movlw	'3'
    		Call 	LCD_WRITE
    		movlw	'3'
    		Call 	LCD_WRITE
    		movlw	'2'
    		Call 	LCD_WRITE
    	;	return
    HOLD_UNLOCKED	btfsc	PORTB, 4
    		goto 	HOLD_UNLOCKED
    
    
    IDLE_MODE		bcf		LCD_RW		;Clear LCD_RW line to write data to the LCD
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'00111000' ;Load the function set command into working register
    		call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00001110' ;Load the Display On command into the working register
    		call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000110' ;Load the Entry Mode Set command into the working register
    		call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000001'	;Load the Clear Screen command into the working register
    		call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		call	LONG_DELAY	;Call the Long Delay Subroutine
    		
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw	'I'		;Load the first letter of your First Name into the Working Register
    		call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'D'		;Write the remaining letters of your First Name to the screen
    		call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'L'
    		call 	LCD_WRITE
    		movlw	'E'
    		call 	LCD_WRITE	
    		movlw	'_'
    		call 	LCD_WRITE
    		movlw	'M'
    		call 	LCD_WRITE
    		movlw	'O'
    		call 	LCD_WRITE
    		movlw	'D'
    		call 	LCD_WRITE
    		movlw	'E'
    		call 	LCD_WRITE
    	
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'11000000'		;Load the command into the working register that places the cursor on the second line of the LCD
    		call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw 	'S'		;Load the first letter of your Surname into the Working Register
    		call 	LCD_WRITE	
    		movlw	'Y'
    		call 	LCD_WRITE
    		movlw	'S'
    		call 	LCD_WRITE	
    		movlw 	'T'		
    		call 	LCD_WRITE
    		movlw	'E'
    		call 	LCD_WRITE
    		movlw	'M'
    		call 	LCD_WRITE
    		movlw	'_'
    		call 	LCD_WRITE
    		movlw	'E'
    		call 	LCD_WRITE
    		movlw	'N'
    		call 	LCD_WRITE	
    		movlw 	'A'		
    		call 	LCD_WRITE
    		movlw	'B'
    		call 	LCD_WRITE
    		movlw	'L'
    		call 	LCD_WRITE
    		movlw	'E'
    		call 	LCD_WRITE
    		movlw	'D'
    		call 	LCD_WRITE
    	;	return
    
    
    HOLD_IDLE		btfsc	PORTB, 2
    				goto 	HOLD_IDLE
    
    
    STEP_MODE		bcf		LCD_RW		;Clear LCD_RW line to write data to the LCD
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'00111000' ;Load the function set command into working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00001110' ;Load the Display On command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000110' ;Load the Entry Mode Set command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000001'	;Load the Clear Screen command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		Call	LONG_DELAY	;Call the Long Delay Subroutine
    		
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw	'S'		;Load the first letter of your First Name into the Working Register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'T'		;Write the remaining letters of your First Name to the screen
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'E'
    		Call 	LCD_WRITE
    		movlw	'P'
    		Call 	LCD_WRITE	
    		movlw	'_'
    		Call 	LCD_WRITE
    		movlw	'M'
    		Call 	LCD_WRITE
    		movlw	'O'
    		Call 	LCD_WRITE
    		movlw	'D'
    		Call 	LCD_WRITE
    		movlw	'E'
    		Call 	LCD_WRITE
    	
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'11000000'		;Load the command into the working register that places the cursor on the second line of the LCD
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw 	'S'		;Load the first letter of your Surname into the Working Register
    		Call 	LCD_WRITE	
    		movlw	'T'
    		Call 	LCD_WRITE
    		movlw	'E'
    		Call 	LCD_WRITE	
    		movlw 	'P'		
    		Call 	LCD_WRITE
    		movlw	'S'
    		Call 	LCD_WRITE
    		movlw	':'
    		Call 	LCD_WRITE
    		movlw	'X'
    		Call 	LCD_WRITE
    		movlw	'X'
    		Call 	LCD_WRITE
    		movlw	'Y'
    		Call 	LCD_WRITE	
    		movlw 	'Y'		
    		Call 	LCD_WRITE
    		movlw	'Y'
    		Call 	LCD_WRITE
    	;	return
    HOLD_STEP		btfsc 	PORTB,2
    		goto 	STEP_MODE
    
    
    POS_MODE	bcf		LCD_RW		;Clear LCD_RW line to write data to the LCD
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'00111000' ;Load the function set command into working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00001110' ;Load the Display On command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000110' ;Load the Entry Mode Set command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	B'00000001'	;Load the Clear Screen command into the working register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		Call	LONG_DELAY	;Call the Long Delay Subroutine
    
    
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw	'P'		;Load the first letter of your First Name into the Working Register
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'O'		;Write the remaining letters of your First Name to the screen
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		movlw	'S'
    		Call 	LCD_WRITE
    		movlw	'I'
    		Call 	LCD_WRITE	
    		movlw	'O'
    		Call 	LCD_WRITE
    		movlw	'N'
    		Call 	LCD_WRITE
    		movlw	'_'
    		Call 	LCD_WRITE
    		movlw	'M'
    		Call 	LCD_WRITE
    		movlw	'O'
    		Call 	LCD_WRITE
    		movlw	'D'
    		Call 	LCD_WRITE
    		movlw	'E'
    		Call 	LCD_WRITE
    		
    		bcf		LCD_RS		;Clear LCD_RS line to write control commands
    		movlw	B'11000000'		;Load the command into the working register that places the cursor on the second line of the LCD
    		Call 	LCD_WRITE	;Call the LCD_Write Subroutine
    		bsf		LCD_RS		;Set the LCD_RS control line to write characters to the display
    		movlw 	'X'		;Load the first letter of your Surname into the Working Register
    		Call 	LCD_WRITE	
    		movlw	'X'
    		Call 	LCD_WRITE
    		movlw	'X'
    		Call 	LCD_WRITE	
    		movlw 	':'		
    		Call 	LCD_WRITE
    		movlw	'Y'
    		Call 	LCD_WRITE
    		movlw	'Y'
    		Call 	LCD_WRITE
    		movlw	'Y'
    		Call 	LCD_WRITE
    		movlw	':'
    		Call 	LCD_WRITE
    		movlw	'Z'
    		Call 	LCD_WRITE	
    		movlw 	'Z'		
    		Call 	LCD_WRITE
    		movlw	'Z'
    		Call 	LCD_WRITE		
    		movlw	':'
    		Call 	LCD_WRITE	
    		movlw 	'D'		
    		Call 	LCD_WRITE
    		movlw	'D'
    		Call 	LCD_WRITE
    		movlw	'D'
    		Call 	LCD_WRITE
    	;	return
    HOLD_POS		btfsc	PORTB,2
    		goto 	HOLD_POS
    		goto	IDLE_MODE
    ;********************************************************************************************************
    ; Subroutine Section
    ;********************************************************************************************************
    ; LCD Write - loads a command into the LCD Controller
    ;********************************************************************************************************
    LCD_WRITE	bsf		LCD_E		;Set the LCD Enable Pin
    	movwf 	LCD_DATA	;Write the command in the working register to the LCD Data Lines
    	nop					;No Operation
    	nop					;No Operation
    	bcf		LCD_E		;Clear the LCD Enable Pin
    	call	SHORT_DELAY	;Call the Short_Delay subroutine to Wait the minimum instruction execution time
    	return				;Return to where the routine was called from
    
    
    
    
    ;********************************************************************************************************
    ; Short Delay (approx 60us)
    ;********************************************************************************************************
    SHORT_DELAY	movlw	D'100'		;Load 100 into the Working register
    	movwf 	COUNTER1	;Copy the Working register into the Counter1 register
    C1_DEC	
    	decfsz	COUNTER1,F	;Decrement the Counter 1 register
    	goto	C1_DEC		;Goto C1_DEC
    	return				;Return to where the routine was called from
    
    
    ;********************************************************************************************************
    ; Long Delay (approx 6ms)
    ;********************************************************************************************************
    LONG_DELAY	movlw	D'100'		;Load 100 into the Working register
    	movwf 	COUNTER2	;Copy the Working register into the Counter2 register
    DLY_C2_DEC	
    	call 	SHORT_DELAY	;Call the SHORT_DELAY subroutine
    	decfsz	COUNTER2,F	;Decrement the Counter 2 register
    	goto	DLY_C2_DEC	;Goto DLY_C2_DEC
    	return				;Return to where the routine was called from
    
    
    
    
    END
    Thats the Code if someone can help me please

  2. #2
    Join Date
    Nov 2008
    Posts
    60


    Did you find this post helpful? Yes | No

    Default Re: PIC Help! MY led Keeps Flashing and dimming when displaying the message HELP!

    well this won't help,but whats the point of using a basic compiler if the code is in asm? you would get more help if it was in the pic basic language.
    Regards
    CharlieM
    Using PBP3
    MCSPX

  3. #3
    Join Date
    Jan 2012
    Location
    Grid EN19MV
    Posts
    157


    Did you find this post helpful? Yes | No

    Default Re: PIC Help! MY led Keeps Flashing and dimming when displaying the message HELP!

    Quote Originally Posted by c_moore View Post
    well this won't help,but whats the point of using a basic compiler if the code is in asm? you would get more help if it was in the pic basic language.
    I second that - the reason I bought PBP was because I never was very comfortable with ASM - just too dumb, I guess.

    BTW, I find it SO much easier to get things working now!

    Sorry for the hijacking - we now return you to your regularly scheduled thread!

  4. #4
    Join Date
    Mar 2011
    Location
    Los Angeles, California
    Posts
    322


    Did you find this post helpful? Yes | No

    Default Re: PIC Help! MY led Keeps Flashing and dimming when displaying the message HELP!

    Hi Jack,
    It sounds more like you may be experiencing "current limiting" where your power supply is not providing enough current (amps) to your circuit. Have you checked the voltage before you power everything up and then what the voltage is when the circuit is operating? A schematic of how things are wired would be helpful especially with what parts you are using. An alternate test would be to send fewer characters and there is also the possibility your LCD display is bad? Maybe just send the letters TEST? Flashing and dimming is typically an indication of a power or wiring problem. Best, Ed

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