Interface Example PIC16F628 Reading TLC548 Serial ADC

The following program will read the 8-bit value from a TLC548 ADC and display the binary values on eight LEDs connected to PORTB.

TLC549 pin connections
;--------------------------------------
DATABIT  equ 0  ; DATA bit TLC548 pin 6 to RA0
CLK		 equ 1  ; CLK TLC548 pin 7 to RA1
CS 		 equ 2  ; select TLC548 pin 5 to RA2
;---------------------------------------

Above is the pin connections to the TLC548 serial analog-to-digital converter. This has three control pins labeled CS, Data Out, IO clock. They are connected RA0, RA1, and RA2 as shown above.

read_adc ; value returned in val

	clrf val
	bcf PORTA, CS ; LOW CS
	movlw 0x08
	movwf i
zz	bsf PORTA, CLK  ; HIGH CLK
	call delay_1ms
	btfss PORTA, DATABIT
	goto $+3  
   	movlw 0x01
	addwf val, F 
	bcf PORTA, CLK  ; LOW CLK
	decfsz i, F
	goto $+3
	goto $+4
	nop
	rlf val
	goto zz
 	bsf PORTA, CS  ; HIGH CS
	return

Above is the assembly language ADC subroutine. It uses a temp variable i is a counter index and returns the 8-bit value in val. It works as follows:

i = 8;
CS is taken LOW to select device;
CLK is taken HIGH - a LOW to HIGH transition shift out 1st MSB;
delay 1mSec ;
DATABIT either a HIGH or LOW is added to val
CLK goes LOW;
val is shifted left one position;
i is decremented by 1;
process repeats 8 times and exits when i = 0;
CS is set HIGH.



See the complete program: TLC548_binary.asm

main
	call read_adc 
	; value returned in val
	movf val, w
	movwf PORTB ; display val at PORTB LEDs
	call delay_100ms
goto main

Main program loop.

See tlc548.pdf

Pin connections PIC 16F628.

Related Videos, Links