PCA9955A test program

Dependencies:   mbed

Committer:
okano
Date:
Fri Jul 18 01:42:51 2014 +0000
Revision:
3:dbe7902d4335
Parent:
2:ead3652b6fd2
Child:
4:507e37f8008d
blink/dimming switch added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:a173ba5ecb1a 1 #include "mbed.h"
okano 0:a173ba5ecb1a 2
okano 0:a173ba5ecb1a 3 I2C i2c( p28, p27 ); // SDA, SCL
okano 0:a173ba5ecb1a 4
okano 0:a173ba5ecb1a 5 #define SLAVE_ADDR 0x02
okano 0:a173ba5ecb1a 6
okano 0:a173ba5ecb1a 7 #define AUTO_INCREMENT 0x80
okano 0:a173ba5ecb1a 8 #define REGISTER_START 0x00
okano 0:a173ba5ecb1a 9 #define LEDOUT_REGISTER_START 0x02
okano 0:a173ba5ecb1a 10 #define PWM_REGISTER_START 0x08
okano 0:a173ba5ecb1a 11 #define IREF_REGISTER_START 0x18
okano 0:a173ba5ecb1a 12 #define PWMALL_REGISTER_ADDR 0x44
okano 0:a173ba5ecb1a 13 #define IREFALL_REGISTER_ADDR 0x45
okano 0:a173ba5ecb1a 14
okano 1:0a5e299bf3ef 15 void register_write( char addr, char data );
okano 2:ead3652b6fd2 16 void manual_control( void );
okano 2:ead3652b6fd2 17
okano 0:a173ba5ecb1a 18
okano 0:a173ba5ecb1a 19 int main()
okano 0:a173ba5ecb1a 20 {
okano 2:ead3652b6fd2 21 char init_data0[] = { AUTO_INCREMENT | REGISTER_START, 0x00, 0x25, 0xAA, 0xAA, 0xAA, 0xAA };
okano 0:a173ba5ecb1a 22 char init_data1[] = { IREFALL_REGISTER_ADDR, 0x10 };
okano 0:a173ba5ecb1a 23
okano 0:a173ba5ecb1a 24 i2c.write( SLAVE_ADDR, init_data0, sizeof( init_data0 ) );
okano 0:a173ba5ecb1a 25 i2c.write( SLAVE_ADDR, init_data1, sizeof( init_data1 ) );
okano 0:a173ba5ecb1a 26
okano 1:0a5e299bf3ef 27 for ( int i = 0; i < 256; i++ ) {
okano 1:0a5e299bf3ef 28 register_write( PWMALL_REGISTER_ADDR, i );
okano 1:0a5e299bf3ef 29 wait( 0.01 );
okano 1:0a5e299bf3ef 30 }
okano 1:0a5e299bf3ef 31
okano 1:0a5e299bf3ef 32
okano 1:0a5e299bf3ef 33 #if 1
okano 1:0a5e299bf3ef 34
okano 0:a173ba5ecb1a 35 while(1) {
okano 2:ead3652b6fd2 36 manual_control();
okano 0:a173ba5ecb1a 37 }
okano 1:0a5e299bf3ef 38
okano 1:0a5e299bf3ef 39 #endif
okano 1:0a5e299bf3ef 40
okano 0:a173ba5ecb1a 41 }
okano 1:0a5e299bf3ef 42
okano 1:0a5e299bf3ef 43 void register_write( char addr, char data )
okano 1:0a5e299bf3ef 44 {
okano 1:0a5e299bf3ef 45 char d[ 2 ];
okano 2:ead3652b6fd2 46
okano 1:0a5e299bf3ef 47 d[ 0 ] = addr;
okano 1:0a5e299bf3ef 48 d[ 1 ] = data;
okano 1:0a5e299bf3ef 49 i2c.write( SLAVE_ADDR, d, 2 );
okano 1:0a5e299bf3ef 50 }
okano 1:0a5e299bf3ef 51
okano 2:ead3652b6fd2 52
okano 2:ead3652b6fd2 53
okano 2:ead3652b6fd2 54 Serial pc(USBTX, USBRX); // tx, rx
okano 2:ead3652b6fd2 55
okano 2:ead3652b6fd2 56 void manual_control( void )
okano 2:ead3652b6fd2 57 {
okano 2:ead3652b6fd2 58 static char duty = 0xFF;
okano 2:ead3652b6fd2 59 static char freq = 0x00;
okano 2:ead3652b6fd2 60
okano 2:ead3652b6fd2 61 if ( pc.readable() ) {
okano 2:ead3652b6fd2 62 switch ( pc.getc() ) {
okano 2:ead3652b6fd2 63 case 'b' :
okano 2:ead3652b6fd2 64 printf( " [b] : blink on\r\n" );
okano 3:dbe7902d4335 65 register_write( 1, 0x25 );
okano 2:ead3652b6fd2 66 register_write( LEDOUT_REGISTER_START, 0xFF );
okano 2:ead3652b6fd2 67 register_write( LEDOUT_REGISTER_START + 2, 0xFF );
okano 2:ead3652b6fd2 68 break;
okano 2:ead3652b6fd2 69 case 'd' :
okano 2:ead3652b6fd2 70 printf( " [d] : blink off\r\n" );
okano 3:dbe7902d4335 71 register_write( 1, 0x05 );
okano 3:dbe7902d4335 72 register_write( LEDOUT_REGISTER_START, 0xFF );
okano 3:dbe7902d4335 73 register_write( LEDOUT_REGISTER_START + 2, 0xFF );
okano 2:ead3652b6fd2 74 break;
okano 2:ead3652b6fd2 75 case 'x' :
okano 2:ead3652b6fd2 76 duty = (duty == 0xFF) ? 0xFF : duty + 1;
okano 2:ead3652b6fd2 77 register_write( 0x06, duty );
okano 2:ead3652b6fd2 78 break;
okano 2:ead3652b6fd2 79 case 'z' :
okano 2:ead3652b6fd2 80 duty = (duty == 0x00) ? 0x00 : duty - 1;
okano 2:ead3652b6fd2 81 register_write( 0x06, duty );
okano 2:ead3652b6fd2 82 break;
okano 2:ead3652b6fd2 83 case '.' :
okano 2:ead3652b6fd2 84 freq = (freq == 0xFF) ? 0xFF : freq + 1;
okano 2:ead3652b6fd2 85 register_write( 0x07, freq );
okano 2:ead3652b6fd2 86 break;
okano 2:ead3652b6fd2 87 case ',' :
okano 2:ead3652b6fd2 88 freq = (freq == 0x00) ? 0x00 : freq - 1;
okano 2:ead3652b6fd2 89 register_write( 0x07, freq );
okano 2:ead3652b6fd2 90 break;
okano 2:ead3652b6fd2 91 }
okano 2:ead3652b6fd2 92 printf( " GRPPWM=0x%02X, GRPFREQ=0x%02X (period=%.3f)\r", duty, freq, (float)(freq + 1)/15.26 );
okano 2:ead3652b6fd2 93 }
okano 2:ead3652b6fd2 94 }