I2Cの機能を持っているPICなのに、そのピンは使わずに2ピンと3ピンを使って、わざわざBit bangingでI2C接続のLCDを駆動させる。
Wikipediaによると
Bit banging is a technique for serial communications using software instead of dedicated hardware.
だって。
私の場合はただ単にI2Cの機能の使い方が分からないというだけのことだけど。
やったのは単純なことで、要するに「PIC12F675 — I2C —> AQM0802A とりあえず「Hello」」で作ったI2C機能の無いPIC12F675用のプログラムをPIC16F1823用に移植した。
Bit Bangingの利点はPICの機種に無関係に機能を移植できることだ、と素人考えでは思う。
main.c内のInitCCTは以下のように書き換えてInitPICとした。
1 2 3 4 5 6 7 8 |
void InitPIC(void){ OSCCONbits.IRCF = 0b1101;//4MHz HF ANSELA = 0x00;//Set ports as digital I/O, not analog input ADCON0 = 0x00;//Shut off the A/D Converter CM1CON0bits.C1ON = 0b0;//Comparator is disabled CM2CON0bits.C2ON = 0b0;//Comparator is disabled TRISA = 0b0001000;//PORTA pin configured as an input/output } |
I2C.hで変更のあったのは以下の部分
1 2 3 4 5 6 7 8 |
// Define i2c pins #define SDA RA4//Data pin for i2c #define SCK RA5//Clock pin for i2c #define SDA_DIR TRISA4//Data pin direction #define SCK_DIR TRISA5//Clock pin direction #define DataPinADCMask ANSELAbits.ANSA4//It is attached on RA4(AN3) pin #define ClockPinADCMask ANSELAbits.ANSA4//It is not attached on any ADC pin |