PIC Microchip Microcontroller LED Turn Signal Flasher PIC16F872

This project we will make a LED turn signal flasher. I made this because I installed LED light bulbs in my car to save ware and tare on the alternator but a normal flasher will not flash LED bulbs. You can use whatever processor you want but I used a PIC16F872 because at work we discontinued using them at work and we upgraded to PIC16F886 so I can get these at a discounted price.

It’s a really simple circuit and it can be built differently but this is how I built it. The switch allows for two different modes on for normal flash and one for a quick triple flash. The connections are made at the flasher plug and a ground connection the output of the P-channel mosfet goes to the turn signal canceler side of the plug and the 12 volt power comes from the other side of the flasher plug and the a ground.

The MPASM Assembly code:

; 872-TurnSignal 5-3-16 
; LED Turn Signal Flasher
; by Pete01507 
; RB7 low = normal flash
; RB7 high = TFF flash "triple flash fast"
	include "p16f872.inc"
	__CONFIG _FOSC_EXTRC & _WDTE_OFF & _PWRTE_OFF & _CP_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF               
	errorlevel-302   	;removes error 302 during build               
bank0   EQU  0x00
bank1	EQU  0x80
bank2	EQU  0x100
bank3   EQU  0x180
	cblock 20h
delay1        			; Define 8-bit variables for the
delay2       			; delay loop: Delay1 and Delay2
	endc
	org 0h
 	banksel	bank1		; same as STATUS,5
	movlw	b'00000000'	; configure PORT C as output (1=input,0=output) bit order='76543210'
	movwf	TRISC		; moves your configuration of PORT C
	movlw	b'11111111'
	movwf	TRISB
	banksel	bank0		; same as bcf STATUS,5
	clrf    PORTC
	clrf	PORTB
start
	btfsc	PORTB,7
	goto	ff
reg
	bsf     PORTC,0		; sets PORTC,0 high
	call    delay		; call subroutine delay
	call	delay
	call	delay
	bcf     PORTC,0		; sets PORTC,0 low 
	call    delay		; call subroutine delay
	call	delay
	call	delay
	goto    start		; continous loop
ff
	bsf	PORTC,0
	call	delays
	bcf	PORTC,0
	call	delays
	bsf	PORTC,0
	call	delays
	bcf	PORTC,0
	call	delays
	bsf	PORTC,0
	call	delays
	bcf	PORTC,0
	call	delays
	call	delay
	call	delay
	call	delay
	call	delay
	call	delay
	goto	start
delay
	movlw	.255		; use value .1 to .255 low numbers = fast large numbers = slower
	movwf	delay2
delayloop1
	movlw	.255		; 255 is the maximum number
	movwf	delay1
delayloop2
	decfsz	delay1,f	; decrease file size skip if zero loops until 0 then skips next instruction
	goto	delayloop2	; this is skipped until delay1 reaches 0 then this instruction is followed
	decfsz	delay2,f
	goto	delayloop1
	return			; return from subroutine
delays
	movlw	.100		; use value .1 to .255 low numbers = fast large numbers = slower
	movwf	delay2
delayloop11
	movlw	.100		; 255 is the maximum number
	movwf	delay1
delayloop22
	decfsz	delay1,f	; decrease file size skip if zero loops until 0 then skips next instruction
	goto	delayloop22	; this is skipped until delay1 reaches 0 then this instruction is followed
	decfsz	delay2,f
	goto	delayloop11
	return			; return from subroutine	
	end

The components you will need. Most of the these can be substituted for equivalent components.

  • Processor
  • Processor socket
  • PCB board
  • 7805 voltage regulator
  • 10uf capacitor
  • 22pf capacitor
  • PCB switch
  • IRFBC40 N-channel MOSFET
  • IRF9Z34 P-channel MOSFET
  • 2- 100k resistors
  • 1- 4.7k resistor
  • 1- 47k resistor to pin 1 reset switch & 470 optional
  • 2- male 1/4″ PCB spade connectors
  • 1- 20ga wire for ground

Pete

Chief Editor for Pete01507.com --------- Author, Publisher, Blogger, Amateur Astronomer, Content Creator, Hobbyist, Welder/Fabricator, Dirt Track Racer, Patriot.

Leave a Reply

Your email address will not be published. Required fields are marked *