Tedd OKANO
/
PCA9955A_simple
PCA9955A test program
main.cpp
- Committer:
- okano
- Date:
- 2014-07-18
- Revision:
- 3:dbe7902d4335
- Parent:
- 2:ead3652b6fd2
- Child:
- 4:507e37f8008d
File content as of revision 3:dbe7902d4335:
#include "mbed.h" I2C i2c( p28, p27 ); // SDA, SCL #define SLAVE_ADDR 0x02 #define AUTO_INCREMENT 0x80 #define REGISTER_START 0x00 #define LEDOUT_REGISTER_START 0x02 #define PWM_REGISTER_START 0x08 #define IREF_REGISTER_START 0x18 #define PWMALL_REGISTER_ADDR 0x44 #define IREFALL_REGISTER_ADDR 0x45 void register_write( char addr, char data ); void manual_control( void ); int main() { char init_data0[] = { AUTO_INCREMENT | REGISTER_START, 0x00, 0x25, 0xAA, 0xAA, 0xAA, 0xAA }; char init_data1[] = { IREFALL_REGISTER_ADDR, 0x10 }; i2c.write( SLAVE_ADDR, init_data0, sizeof( init_data0 ) ); i2c.write( SLAVE_ADDR, init_data1, sizeof( init_data1 ) ); for ( int i = 0; i < 256; i++ ) { register_write( PWMALL_REGISTER_ADDR, i ); wait( 0.01 ); } #if 1 while(1) { manual_control(); } #endif } void register_write( char addr, char data ) { char d[ 2 ]; d[ 0 ] = addr; d[ 1 ] = data; i2c.write( SLAVE_ADDR, d, 2 ); } Serial pc(USBTX, USBRX); // tx, rx void manual_control( void ) { static char duty = 0xFF; static char freq = 0x00; if ( pc.readable() ) { switch ( pc.getc() ) { case 'b' : printf( " [b] : blink on\r\n" ); register_write( 1, 0x25 ); register_write( LEDOUT_REGISTER_START, 0xFF ); register_write( LEDOUT_REGISTER_START + 2, 0xFF ); break; case 'd' : printf( " [d] : blink off\r\n" ); register_write( 1, 0x05 ); register_write( LEDOUT_REGISTER_START, 0xFF ); register_write( LEDOUT_REGISTER_START + 2, 0xFF ); break; case 'x' : duty = (duty == 0xFF) ? 0xFF : duty + 1; register_write( 0x06, duty ); break; case 'z' : duty = (duty == 0x00) ? 0x00 : duty - 1; register_write( 0x06, duty ); break; case '.' : freq = (freq == 0xFF) ? 0xFF : freq + 1; register_write( 0x07, freq ); break; case ',' : freq = (freq == 0x00) ? 0x00 : freq - 1; register_write( 0x07, freq ); break; } printf( " GRPPWM=0x%02X, GRPFREQ=0x%02X (period=%.3f)\r", duty, freq, (float)(freq + 1)/15.26 ); } }