Tedd OKANO
/
PCA9955A_simple
PCA9955A test program
Diff: main.cpp
- Revision:
- 4:507e37f8008d
- Parent:
- 3:dbe7902d4335
- Child:
- 5:b93b28e126fe
--- a/main.cpp Fri Jul 18 01:42:51 2014 +0000 +++ b/main.cpp Fri Aug 01 07:11:31 2014 +0000 @@ -1,43 +1,38 @@ #include "mbed.h" +#include "PCA9955A_registers.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 }; + // initialization + + register_write( MODE1, 0x00 ); + register_write( MODE2, 0x25 ); + register_write( LEDOUT0, 0xAA ); + register_write( LEDOUT1, 0xAA ); + register_write( LEDOUT2, 0xAA ); + register_write( LEDOUT3, 0xAA ); + register_write( IREFALL, 0x10 ); + + // operation loop - i2c.write( SLAVE_ADDR, init_data0, sizeof( init_data0 ) ); - i2c.write( SLAVE_ADDR, init_data1, sizeof( init_data1 ) ); + while ( 1 ) { + + for ( int i = 0; i < 256; i++ ) { + register_write( PWM0, i ); + wait( 0.01 ); + } - for ( int i = 0; i < 256; i++ ) { - register_write( PWMALL_REGISTER_ADDR, i ); - wait( 0.01 ); + for ( int i = 255; i >= 0; i-- ) { + register_write( PWM0, i ); + wait( 0.01 ); + } } - - -#if 1 - - while(1) { - manual_control(); - } - -#endif - } void register_write( char addr, char data ) @@ -49,46 +44,3 @@ 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 ); - } -}