PDA

View Full Version : Trisb problem



Ramius
- 23rd June 2017, 17:37
Hi All!
I have a confusion. If I use a single TRISB Statement TRISB = %10000100 the program will stop dead at the next line of code.

If I use single TRISB statements:

TRISB.4 = 0 ' Make B.4 an OUTPUT
TRISB.6 = 0 ' Make B.6 an output
TRISB.5 = 0 ' Make B.5 an output
TRISB.7 = 1 ' Make B.7 an INPUT
TRISB.3 = 0 ' Make B.3 an OUTPUT

The code will run!
chip is a 16F628A




'************************************************* ***************
'* Name : STV-SYNCHS RELEASE *
'* Author : BOB LEGGETT *
'* Notice : Copyright (c) 2009 *
'* : All Rights Reserved *
'* Date : around 2009 or so rehashed now '17 *
'* Version : 1.0 *
'* Notes : VIDEO IDENT *
'* : *
'************************************************* ***************

' WORKS USES SYNC FOR SWITCHING BETWEEN MIXED AND FULL TEXT MODE
' GOING FROM VID IN TO TEXT AND BACK TO VID IN

' INCLUDE "ALLDIGITAL.pbp"

define OSC 20

#CONFIG
__config _HS_OSC & _WDT_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF
#ENDCONFIG

'TV CHIP CONNECTIONS

'---------------------------------------------------------------

'16f628a

TVSDA VAR PORTB.4 '0 OUTPUT pin 11 stv was b.1
CS0 VAR PORTB.6 '0 OUTPUT pin 13 stv was b.0
TVSCL VAR PORTB.5 '0 OUTPUT pin 12 stv was b.5
SYNCH0 VAR PORTB.7 '1 'INPUT to pin 7 stvchip was b.2
HEARTBEAT VAR PORTB.3 'OUTPUT 0 led was b.6
'---------------------------------------------------------------

ZOOMREG CON %0000000011001100 ' 12 ZOOM REGISTER
COLREG CON %0000000011001101 ' 13 COLOUR REGISTER
CONREG CON %0000000011001110 ' 14 CONTROL REGISTER
POSREG CON %0000000011001111 ' 15 POSITION REGISTER
MODEREG CON %0000000011010000 ' 16 MODE REGISTER


ICOUNT VAR BYTE
BITCOUNTER VAR BYTE
WDATA VAR WORD
CHARCOUNTER VAR BYTE '
LINECOUNTER VAR BYTE '

STVCHAR VAR BYTE
ASCCHAR VAR BYTE
CHARS VAR BYTE
CHARS2 VAR BYTE
TEMP VAR BYTE
TEMP1 VAR BYTE
COUNTER VAR BYTE
PULSES VAR BYTE
CURRENTMODE0 VAR BYTE

'----------------------------------------------------------------
' TOPLEFT CON 0
' TOPMIDDLE CON 5
' TOPRIGHT CON 10
' BOTLEFT CON 2560 '10*256
' BOTMIDDLE CON 2565 '(10*256)+ 5
' BOTRIGHT CON 2570 '(10*256)+ 10
'----------------------------------------------------------------

DATA @0,"TEST.",$FF,"NO SYNCHS RECEIVED",$FF

TRISB.4 = 0 ' Make B.4 an OUTPUT
TRISB.6 = 0 ' Make B.6 an output
TRISB.5 = 0 ' Make B.5 an output
TRISB.7 = 1 ' Make B.7 an INPUT
TRISB.3 = 0 ' Make B.3 an OUTPUT
'----------------------------------------------------------------
'628
' TRISB = %10000100
'----------------------------------------------------------------

PAUSE 500

HIGH HEARTBEAT


GOSUB Init

PAUSE 500
GOSUB Init

CURRENTMODE0=255 ' FORCES TRYSYNCHS TO SET MODE FIRST TIME


Demo:

CHARCOUNTER = 0
LINECOUNTER = 0
' CURRENTMODE0 = 0 '0 = MIXED 1 = TEXT
gosub CLS
GOSUB TRYSYNCHS '==================================


TEMP = 0


LOOPER:
GOSUB HEADER ' LINE 3 RIGHT HAND SIDE TEST.
IF CURRENTMODE0=1 THEN
GOSUB NOVIDEO ' DISPLAYS NO VIDEO IF NO INCOMING SYNCHS
ENDIF


GOSUB TRYSYNCHS '===========================


PAUSE 500 'I/2 SECOND DELAY
TOGGLE HEARTBEAT ' LED
GOTO LOOPER 'DO IT FOREVER


DISPLAYCHAR:

WDATA = %0001011100000000 + STVCHAR
GOSUB SEND
RETURN
SETLINE:
WDATA = LINECOUNTER*256 + CHARCOUNTER
GOSUB Send 'position cursor
RETURN



WasteTime: ' WORKS WITH LESS NOPS



pauseus 20 ' was 20 nops

RETURN

StartCommunication:
TVSCL = 1 'HIGH TVSCL
GOSUB WasteTime

CS0 = 0 'LOW CS0

GOSUB WasteTime
TVSCL = 0 'LOW TVSCL
GOSUB WasteTime
RETURN

StopCommunication:
TVSCL = 1 'HIGH TVSCL
GOSUB WasteTime
CS0 = 1 'HIGH CS0

GOSUB WasteTime
RETURN

SendOne:
TVSDA = 1 'HIGH TVSDA
GOSUB WasteTime
TVSCL = 0 'LOW TVSCL
GOSUB WasteTime
TVSCL = 1 'HIGH TVSCL
GOSUB WasteTime
RETURN

SendZero:
TVSDA = 0 'LOW TVSDA
GOSUB WasteTime
TVSCL = 0 ' LOW TVSCL
GOSUB WasteTime
TVSCL = 1 'HIGH TVSCL
GOSUB WasteTime
TVSDA = 1 'HIGH TVSDA
GOSUB WasteTime
RETURN

OutByte:
FOR BITCOUNTER = 1 TO 16
IF WDATA.15 = 1 THEN
GOSUB SendOne
ELSE
GOSUB SendZero
ENDIF
WDATA = WDATA << 1
NEXT BITCOUNTER
RETURN

Send:
GOSUB StartCommunication
GOSUB OutByte
GOSUB StopCommunication
RETURN

'-------------------------------------------------------------

Init: ' PAUSE 50 added - seems to improve reliability of init

TVSCL = 1 'HIGH TVSCL
TVSDA = 1 'HIGH TVSDA
CS0 = 1 'HIGH CS0

WDATA = $3000 '%110000 00000000
GOSUB Send ' Init STV5730
PAUSE 50
WDATA = $3000
GOSUB Send
PAUSE 50
WDATA = $00DB '%00000000 11011011
GOSUB Send
PAUSE 50
WDATA = $1000 '%00010000 00000000
GOSUB Send
PAUSE 50
'-------------------------------------------------------------
WDATA = %0000000011001100
GOSUB Send ' Init registers (point to register 12)
PAUSE 50
'-------------------------------------------------------------
WDATA = %0001000000000000 'NORMAL
' WDATA = %0001000011110000 '4 PIXELS HORIZ AND VERT
GOSUB Send ' Zoom ADDRESS 12
PAUSE 50
'-------------------------------------------------------------
WDATA = %0001001000000000

' WDATA = %0001001000000100
GOSUB Send ' Color ADDRESS 13
PAUSE 50
'--------------------------------------------------------

WDATA= %0001101011010100
'CHANGE BIT 0 TO 1 FOR TEXT ONLY
GOSUB Send ' Control ADDRESS 14
'-------------------------------------------------------------
WDATA = %0001011111001111
GOSUB Send ' Position ADDRESS 15
'-------------------------------------------------------------


WDATA = %0001000100101110 '$183E BIT 11 CHANGED TO 0 M4 = 0

GOSUB Send ' Mode ADDRESS 16 %0001100000111110

'-------------------------------------------------------------

WDATA = $00C0 '%00000000 11000000
GOSUB Send ' Set row attributes

FOR ICOUNT = 0 TO 10
WDATA = $10C4 '%00010000 11000100
' WDATA =%0001000010000111
GOSUB Send
NEXT ICOUNT
RETURN

CLS:
'character=$0B 'SPACE
TEMP1=0 ' LINECOUNTER
TEMP =0 'CHARCOUNTER
loop2:

WDATA = 0 ' LINECOUNTER*256 + CHARCOUNTER ADDRESS
GOSUB Send


LOOP3: ' :CHARACTERS
WDATA = %0001011100001011 ' 1011 0BH SPACECHARACTER
GOSUB Send
TEMP = TEMP + 1
IF TEMP >= 28 THEN
TEMP = 0
TEMP1=TEMP1 + 1
ENDIF
IF TEMP1 >= 11 THEN SCREENBLANK

GOTO LOOP3

SCREENBLANK:
RETURN

GETSTVCHAR: 'CONVERT ASCII TO STV
STVCHAR =$7F ' FORCES CLOCK PICTURE IF ERROR
LOOKDOWN ASCCHAR,["0123456789- ABCDEFGHIJKLMNOPQRSTUVWXYZ:./'abcdefghijklmnopqrstuvwxyz"],STVCHAR
RETURN

HEADER:
LINECOUNTER=2 'SET START POSITION
CHARCOUNTER=23 'SET CURSOR POSITION
GOSUB SETLINE
FOR CHARS2=0 TO 4
READ CHARS2, ASCCHAR
gosub GETSTVCHAR 'CONVERT ASCII TO STV
GOSUB DISPLAYCHAR
NEXT
RETURN

NOVIDEO:
LINECOUNTER=5 'SET START POSITION
CHARCOUNTER=4 'SET CURSOR POSITION
GOSUB SETLINE
FOR CHARS2=6 TO 23 ' FROM EEPROM DATA
READ CHARS2, ASCCHAR
gosub GETSTVCHAR 'CONVERT ASCII TO STV
GOSUB DISPLAYCHAR
NEXT
RETURN

TRYSYNCHS:

PULSES=0

COUNT SYNCH0,4,PULSES '3MS SHOULD COUNT TO 2 OR 3
IF PULSES > 0 THEN MIXED0
FULL0:

IF CURRENTMODE0=1 THEN RETURN

WDATA= %0000000011001110 'CONTROL REGISTER
GOSUB SEND
WDATA= %0001101011010101 ' was 0001101111010101
'CHANGE BIT 0 TO 1 FOR TEXT ONLY OTIGINAL

'WDATA= %0001101111010100
'CHANGE BIT 0 TO 1 FOR TEXT ONLY
GOSUB SEND

STAYHERE02:

CURRENTMODE0=1
GOSUB CLS
GOBACK0:
RETURN


MIXED0:
IF CURRENTMODE0=0 THEN RETURN
WDATA= %0000000011001110 'CONTROL REGISTER
GOSUB SEND
WDATA= %0001101011010101 'was 0001101111010100
GOSUB SEND

STAYHERE01:

CURRENTMODE0=0
GOSUB CLS
RETURN



Do I need a CMCON = 7 or an ADCON or ???:confused:

Just in my normal confused state!:confused:

Thanks, Ed