I've decided to abandon 5 months of learning C++ so I could use Arduinos and going back to the superior PBP and PIC MCUs. Having said that, Arduino had the most fantastic libraries which made I2C and MCP23017 (port expander), tremendously easy to use. I have code running that accesses 5 PE (port expander) equipped boards with 16 RGB LEDs each and able to access each individually with only a few commands.
I'm now using my Lab X1, PBP, a single MCP23017 trying to light ONE LED. Yes, this is my Hello World experiment. I have the anode of a common anode RGB LED attached to portA.0, portC2 and portC3 connected to the port expander I2C connections. My R,G, B cathodes are connected to portA.0, porta.1 and porta.2 of the port expander.
My program is attached. I'm using a logic probe to test pins, and get pulsing on the SDA and SCL lines. I get pulsing on the anode of the LED. On the 3 PE output lines I get a high pulse, that never goes low. Therein lies the problem...it has to go low since it's attached to the cathodes.
I'm convinced it's more a configuration problem than hardware. I had the same setup for Arduino which worked fine.
I stole some of the code from another writer and modified for my own use since I was just starting and didn't want to have to go through all the fuse parameters and other setup.
Anyone out there have some insight into what's happening and how to fix? Once I get this hello world action going, I'll be homefree and be able to do all the other re-coding (from C++ to PBP).
Code:#config __CONFIG _CONFIG1, _HS_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _CPD_OFF & _BOR_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF __CONFIG _CONFIG2, _BOR40V & _WRT_OFF #endconfig DEFINE OSC 20 '20MHz crystal DEFINE I2C_SLOW 1 DEFINE I2C_SCLOUT 1 ANSEL = 000000 'no analog, all digital! ANSELH = 000000 TRISA = 000000 'all ports output TRISC = 000000 SDA VAR PORTC.4 'i2c data line bob changed needed pullup SCL VAR PORTC.3 'i2c clock line bob change led var porta.0 'led for testing addr var word ' INIT: I2CWRITE SDA,SCL,$20,[$05,%10111000] I2CWRITE SDA,SCL,$20,[$00,$00] addr = $00 MAIN: I2CWRITE SDA,SCL,$20,addr[$00] gosub blink goto main blink: led = 1 'blink led for feedback PAUSE 50 led = 0 pause 50 return




Bookmarks