RCtech
- 11th March 2011, 02:49
Hi all.
I want to finish this very simple PIC 16F628A code but I have a mistake I don't understand :
What I need is to read the PortB value (0 - 255) but PortB.3 and PortB.4 return zero everytime.
8 Dipswitches are connected on PortB to VCC and the total value is reported on an serial LCD screen.
I don't use X-tal and nothing else my LCD is connected on the PIC for the moment except 2 resistors between VCC and PortA.2 / PortA.3 for a future I2C use.
My serial transmission is okay @9600 without X-tal and my issue is not there.
I try since 3 days and now all my hairs are on the floor ;O)
I think I need something to add in the head of the code but what ?
Any help is welcome.
Thanx a lot and cheers from France.
Here is my code :
@ device PIC16F628A, INTRC_OSC_NOCLKOUT, wdt_off, pwrt_on, mclr_off, protect_off 'Utilisable avec PM
Include "modedefs.bas" ' Mode definitions for Serout
CMCON = 7 ' Turn OFF all analog features, all is now digital
; VRCON = 0 ' Disable A/D Voltage reference, I don't need that in this code
; INTCON.7 = 0 ' Disable interrupts, I don't need that in this code
Define OSC 4 ' Set Xtal Frequency
DEFINE I2C_SCLOUT 1 ' I'll use I2C communication
Clear
TRISA = 0 ' All Port A output
TRISB = 255 ' All PortB input
LOW PORTA '
SYMBOL SDA = PORTA.2 ' I2C SDA (R 10k to VCC)
SYMBOL SCL = PORTA.3 ' I2C SCL (R 10K to VCC)
SYMBOL DIP1 = PORTB.0
SYMBOL DIP2 = PORTB.1
SYMBOL DIP3 = PORTB.2
SYMBOL DIP4 = PORTB.3
SYMBOL DIP5 = PORTB.4
SYMBOL DIP6 = PORTB.5
SYMBOL DIP7 = PORTB.6
SYMBOL DIP8 = PORTB.7
LCDPIN Var PORTA.1 ' Serial LCD
ADDR1 VAR BYTE
ADDR1 = $C2 ' Fixed I2C address for PLL 5055
PLLBASE VAR WORD
TMP VAR WORD
PLL VAR WORD
PLLLO VAR PLL.LOWBYTE
PLLHI VAR PLL.HIGHBYTE
FMHZ var WORD
FKHZ var WORD
PLLBASE = 19200 ' Lowest freq
BAUDRATE CON N9600 ' For use with LCD
pause 1000 ' wait for the LCD to startup
MAIN:
TMP = PORTB * 2
PLL = PLLBASE + TMP
I2CWrite SDA,SCL,ADDR1,[PLLHI,PLLLO,$8E] ' send command to PLL
Serout LCDPIN, BAUDRATE,[12] ' Clear screen
Serout LCDPIN, BAUDRATE,["PortB= ", #PORTB] ' Print PortB value (0-255)
Pause 1000
GoTo MAIN
I want to finish this very simple PIC 16F628A code but I have a mistake I don't understand :
What I need is to read the PortB value (0 - 255) but PortB.3 and PortB.4 return zero everytime.
8 Dipswitches are connected on PortB to VCC and the total value is reported on an serial LCD screen.
I don't use X-tal and nothing else my LCD is connected on the PIC for the moment except 2 resistors between VCC and PortA.2 / PortA.3 for a future I2C use.
My serial transmission is okay @9600 without X-tal and my issue is not there.
I try since 3 days and now all my hairs are on the floor ;O)
I think I need something to add in the head of the code but what ?
Any help is welcome.
Thanx a lot and cheers from France.
Here is my code :
@ device PIC16F628A, INTRC_OSC_NOCLKOUT, wdt_off, pwrt_on, mclr_off, protect_off 'Utilisable avec PM
Include "modedefs.bas" ' Mode definitions for Serout
CMCON = 7 ' Turn OFF all analog features, all is now digital
; VRCON = 0 ' Disable A/D Voltage reference, I don't need that in this code
; INTCON.7 = 0 ' Disable interrupts, I don't need that in this code
Define OSC 4 ' Set Xtal Frequency
DEFINE I2C_SCLOUT 1 ' I'll use I2C communication
Clear
TRISA = 0 ' All Port A output
TRISB = 255 ' All PortB input
LOW PORTA '
SYMBOL SDA = PORTA.2 ' I2C SDA (R 10k to VCC)
SYMBOL SCL = PORTA.3 ' I2C SCL (R 10K to VCC)
SYMBOL DIP1 = PORTB.0
SYMBOL DIP2 = PORTB.1
SYMBOL DIP3 = PORTB.2
SYMBOL DIP4 = PORTB.3
SYMBOL DIP5 = PORTB.4
SYMBOL DIP6 = PORTB.5
SYMBOL DIP7 = PORTB.6
SYMBOL DIP8 = PORTB.7
LCDPIN Var PORTA.1 ' Serial LCD
ADDR1 VAR BYTE
ADDR1 = $C2 ' Fixed I2C address for PLL 5055
PLLBASE VAR WORD
TMP VAR WORD
PLL VAR WORD
PLLLO VAR PLL.LOWBYTE
PLLHI VAR PLL.HIGHBYTE
FMHZ var WORD
FKHZ var WORD
PLLBASE = 19200 ' Lowest freq
BAUDRATE CON N9600 ' For use with LCD
pause 1000 ' wait for the LCD to startup
MAIN:
TMP = PORTB * 2
PLL = PLLBASE + TMP
I2CWrite SDA,SCL,ADDR1,[PLLHI,PLLLO,$8E] ' send command to PLL
Serout LCDPIN, BAUDRATE,[12] ' Clear screen
Serout LCDPIN, BAUDRATE,["PortB= ", #PORTB] ' Print PortB value (0-255)
Pause 1000
GoTo MAIN