Tedd OKANO
/
PCA9955A_simple
PCA9955A test program
main.cpp@3:dbe7902d4335, 2014-07-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |