テストサンプル

Dependencies:   mbed

Committer:
nxpj0
Date:
Thu Oct 10 07:10:35 2013 +0000
Revision:
0:4d5d59b9fba0
test sample

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxpj0 0:4d5d59b9fba0 1 /*
nxpj0 0:4d5d59b9fba0 2 * PCA9955 (I2C N_OF_PORTS channel LED driver) demo application
nxpj0 0:4d5d59b9fba0 3 *
nxpj0 0:4d5d59b9fba0 4 * Released under the MIT License: http://mbed.org/license/mit
nxpj0 0:4d5d59b9fba0 5 *
nxpj0 0:4d5d59b9fba0 6 * revision 1.0 15-June-2011 / 10-Aug-2012
nxpj0 0:4d5d59b9fba0 7 */
nxpj0 0:4d5d59b9fba0 8
nxpj0 0:4d5d59b9fba0 9 #include "mbed.h"
nxpj0 0:4d5d59b9fba0 10 #include "PCA9955.h"
nxpj0 0:4d5d59b9fba0 11 #include "PCA9956A.h"
nxpj0 0:4d5d59b9fba0 12
nxpj0 0:4d5d59b9fba0 13 #define MAX_IREF 0x20
nxpj0 0:4d5d59b9fba0 14
nxpj0 0:4d5d59b9fba0 15 #define PI 3.14159265
nxpj0 0:4d5d59b9fba0 16 #define LOOP 100
nxpj0 0:4d5d59b9fba0 17 #define CYCLE 1.0
nxpj0 0:4d5d59b9fba0 18
nxpj0 0:4d5d59b9fba0 19 #define N_OF_PORTS 24
nxpj0 0:4d5d59b9fba0 20
nxpj0 0:4d5d59b9fba0 21 //PCA9955 led_driver( p28, p27, 0xC0 ); // SDA, SCL, I2C_slave_sddress
nxpj0 0:4d5d59b9fba0 22 PCA9956A led_driver( p28, p27, 0x02 ); // SDA, SCL, I2C_slave_sddress
nxpj0 0:4d5d59b9fba0 23 //PCA995x led_driver( p28, p27, 0xC0, N_OF_PORTS ); // SDA, SCL, I2C_slave_sddress
nxpj0 0:4d5d59b9fba0 24 DigitalOut syncpin( p21 );
nxpj0 0:4d5d59b9fba0 25
nxpj0 0:4d5d59b9fba0 26 void demo_0( void );
nxpj0 0:4d5d59b9fba0 27 void demo_1( void );
nxpj0 0:4d5d59b9fba0 28 void demo_2( void );
nxpj0 0:4d5d59b9fba0 29 void demo_FF( void );
nxpj0 0:4d5d59b9fba0 30
nxpj0 0:4d5d59b9fba0 31 main()
nxpj0 0:4d5d59b9fba0 32 {
nxpj0 0:4d5d59b9fba0 33
nxpj0 0:4d5d59b9fba0 34 while ( 1 ) {
nxpj0 0:4d5d59b9fba0 35 demo_2();
nxpj0 0:4d5d59b9fba0 36 demo_0();
nxpj0 0:4d5d59b9fba0 37 demo_1();
nxpj0 0:4d5d59b9fba0 38 //demo_FF();
nxpj0 0:4d5d59b9fba0 39 }
nxpj0 0:4d5d59b9fba0 40 }
nxpj0 0:4d5d59b9fba0 41
nxpj0 0:4d5d59b9fba0 42 void demo_0( void )
nxpj0 0:4d5d59b9fba0 43 {
nxpj0 0:4d5d59b9fba0 44 int i;
nxpj0 0:4d5d59b9fba0 45
nxpj0 0:4d5d59b9fba0 46 srand( 0xFF00 );
nxpj0 0:4d5d59b9fba0 47
nxpj0 0:4d5d59b9fba0 48 led_driver = (int)0x0000;
nxpj0 0:4d5d59b9fba0 49 led_driver.set_all_intensity( 0xFF ); // PWM
nxpj0 0:4d5d59b9fba0 50 led_driver.set_all_intensity( MAX_IREF, true ); // IREF
nxpj0 0:4d5d59b9fba0 51
nxpj0 0:4d5d59b9fba0 52 for ( i = 0; i < 128; i++ ) {
nxpj0 0:4d5d59b9fba0 53 led_driver = 0x0001 << (rand() % N_OF_PORTS);
nxpj0 0:4d5d59b9fba0 54 wait( 0.05 );
nxpj0 0:4d5d59b9fba0 55 }
nxpj0 0:4d5d59b9fba0 56 }
nxpj0 0:4d5d59b9fba0 57
nxpj0 0:4d5d59b9fba0 58 void demo_1( void )
nxpj0 0:4d5d59b9fba0 59 {
nxpj0 0:4d5d59b9fba0 60 char v[ N_OF_PORTS ] = { 0xFF };
nxpj0 0:4d5d59b9fba0 61 int sel;
nxpj0 0:4d5d59b9fba0 62 int i;
nxpj0 0:4d5d59b9fba0 63
nxpj0 0:4d5d59b9fba0 64 srand( 0xFF00 );
nxpj0 0:4d5d59b9fba0 65
nxpj0 0:4d5d59b9fba0 66 led_driver = 0xFFFFFF;
nxpj0 0:4d5d59b9fba0 67 led_driver.set_all_intensity( v ); // PWM
nxpj0 0:4d5d59b9fba0 68 led_driver.set_all_intensity( MAX_IREF, true ); // IREF
nxpj0 0:4d5d59b9fba0 69
nxpj0 0:4d5d59b9fba0 70 for ( i = 0; i < 256; i++ ) {
nxpj0 0:4d5d59b9fba0 71 for ( sel = 0; sel < N_OF_PORTS; sel++ ) {
nxpj0 0:4d5d59b9fba0 72 v[ sel ] = (char)((float)(v[ sel ]) * 0.8);
nxpj0 0:4d5d59b9fba0 73 }
nxpj0 0:4d5d59b9fba0 74
nxpj0 0:4d5d59b9fba0 75 v[ rand() % N_OF_PORTS ] = 0xFF;
nxpj0 0:4d5d59b9fba0 76
nxpj0 0:4d5d59b9fba0 77 led_driver.set_all_intensity( v ); // PWM
nxpj0 0:4d5d59b9fba0 78 wait( 0.05 );
nxpj0 0:4d5d59b9fba0 79 }
nxpj0 0:4d5d59b9fba0 80 }
nxpj0 0:4d5d59b9fba0 81
nxpj0 0:4d5d59b9fba0 82 void demo_2( void )
nxpj0 0:4d5d59b9fba0 83 {
nxpj0 0:4d5d59b9fba0 84 int demo_loop;
nxpj0 0:4d5d59b9fba0 85 char intensity[ 3 ];
nxpj0 0:4d5d59b9fba0 86 char pwms[ N_OF_PORTS ];
nxpj0 0:4d5d59b9fba0 87 int color;
nxpj0 0:4d5d59b9fba0 88 int sel;
nxpj0 0:4d5d59b9fba0 89 int i;
nxpj0 0:4d5d59b9fba0 90
nxpj0 0:4d5d59b9fba0 91 led_driver = 0xFFFFFF;
nxpj0 0:4d5d59b9fba0 92 led_driver.set_all_intensity( (char)0x00 ); // PWM
nxpj0 0:4d5d59b9fba0 93 led_driver.set_all_intensity( MAX_IREF, true ); // IREF
nxpj0 0:4d5d59b9fba0 94
nxpj0 0:4d5d59b9fba0 95 #if 0
nxpj0 0:4d5d59b9fba0 96 for ( i = 0; i < 10; i++ ) {
nxpj0 0:4d5d59b9fba0 97 led_driver.write( PCA9956A::LEDOUT0, i & 1 ? (char)0x55 : (char)0x00 );
nxpj0 0:4d5d59b9fba0 98 wait( 0.2 );
nxpj0 0:4d5d59b9fba0 99 }
nxpj0 0:4d5d59b9fba0 100 #endif
nxpj0 0:4d5d59b9fba0 101
nxpj0 0:4d5d59b9fba0 102 for ( demo_loop = 0; demo_loop < 10; demo_loop++ ) {
nxpj0 0:4d5d59b9fba0 103 for ( i = 0; i < 100; i++ ) {
nxpj0 0:4d5d59b9fba0 104 for ( color = 0; color < 3; color++ ) {
nxpj0 0:4d5d59b9fba0 105 intensity[ color ] = (char)(pow(sin( (((float)i * PI) / (float)LOOP) + (color * (PI / 3.0))), 4) * 0xFF);
nxpj0 0:4d5d59b9fba0 106 }
nxpj0 0:4d5d59b9fba0 107 for ( sel = 0; sel < N_OF_PORTS; sel++ ) {
nxpj0 0:4d5d59b9fba0 108 pwms[ sel ] = intensity[ sel % 3 ];
nxpj0 0:4d5d59b9fba0 109 led_driver.set_all_intensity( pwms );
nxpj0 0:4d5d59b9fba0 110 }
nxpj0 0:4d5d59b9fba0 111 wait( (float)CYCLE / (float)LOOP );
nxpj0 0:4d5d59b9fba0 112 }
nxpj0 0:4d5d59b9fba0 113 }
nxpj0 0:4d5d59b9fba0 114 }
nxpj0 0:4d5d59b9fba0 115
nxpj0 0:4d5d59b9fba0 116 #if 0
nxpj0 0:4d5d59b9fba0 117 void demo_FF( void )
nxpj0 0:4d5d59b9fba0 118 {
nxpj0 0:4d5d59b9fba0 119 unsigned short flags;
nxpj0 0:4d5d59b9fba0 120 unsigned int i;
nxpj0 0:4d5d59b9fba0 121
nxpj0 0:4d5d59b9fba0 122 syncpin = 1;
nxpj0 0:4d5d59b9fba0 123
nxpj0 0:4d5d59b9fba0 124 led_driver = 0xFFFF;
nxpj0 0:4d5d59b9fba0 125 led_driver.set_all_intensity( 0x7F ); // PWM
nxpj0 0:4d5d59b9fba0 126
nxpj0 0:4d5d59b9fba0 127 printf( "\r\n\r\nFAULTTEST\r\n" );
nxpj0 0:4d5d59b9fba0 128
nxpj0 0:4d5d59b9fba0 129 while ( 1 ) {
nxpj0 0:4d5d59b9fba0 130 for ( i = 0; i < 256; i++ ) {
nxpj0 0:4d5d59b9fba0 131 led_driver.set_all_intensity( (char)i, true ); // IREF
nxpj0 0:4d5d59b9fba0 132 syncpin = 0;
nxpj0 0:4d5d59b9fba0 133 flags = led_driver.fault_test();
nxpj0 0:4d5d59b9fba0 134 syncpin = 1;
nxpj0 0:4d5d59b9fba0 135
nxpj0 0:4d5d59b9fba0 136 // printf( "IREF=0x%02X : flags = 0x%04X\r\n", i, flags );
nxpj0 0:4d5d59b9fba0 137 printf( "IREF=0x%02X : flags = 0x%04X\r", i, flags );
nxpj0 0:4d5d59b9fba0 138 //wait_ms( 100 );
nxpj0 0:4d5d59b9fba0 139 }
nxpj0 0:4d5d59b9fba0 140 }
nxpj0 0:4d5d59b9fba0 141 }
nxpj0 0:4d5d59b9fba0 142 #endif
nxpj0 0:4d5d59b9fba0 143
nxpj0 0:4d5d59b9fba0 144
nxpj0 0:4d5d59b9fba0 145 #if 0
nxpj0 0:4d5d59b9fba0 146 main()
nxpj0 0:4d5d59b9fba0 147 {
nxpj0 0:4d5d59b9fba0 148 char v[ N_OF_PORTS ] = { 0xFF };
nxpj0 0:4d5d59b9fba0 149 int sel;
nxpj0 0:4d5d59b9fba0 150
nxpj0 0:4d5d59b9fba0 151 srand( 0 );
nxpj0 0:4d5d59b9fba0 152
nxpj0 0:4d5d59b9fba0 153 led_driver = 0xFFFFFF;
nxpj0 0:4d5d59b9fba0 154 led_driver.set_all_intensity( v ); // PWM
nxpj0 0:4d5d59b9fba0 155 led_driver.set_all_intensity( MAX_IREF, true ); // IREF
nxpj0 0:4d5d59b9fba0 156
nxpj0 0:4d5d59b9fba0 157 while ( 1 ) {
nxpj0 0:4d5d59b9fba0 158 for ( sel = 0; sel < N_OF_PORTS; sel++ ) {
nxpj0 0:4d5d59b9fba0 159 v[ sel ] = (char)((float)(v[ sel ]) * 0.8);
nxpj0 0:4d5d59b9fba0 160 }
nxpj0 0:4d5d59b9fba0 161
nxpj0 0:4d5d59b9fba0 162 v[ rand() % N_OF_PORTS ] = 0xFF;
nxpj0 0:4d5d59b9fba0 163
nxpj0 0:4d5d59b9fba0 164 led_driver.set_all_intensity( v ); // PWM
nxpj0 0:4d5d59b9fba0 165 wait( 0.05 );
nxpj0 0:4d5d59b9fba0 166 }
nxpj0 0:4d5d59b9fba0 167 }
nxpj0 0:4d5d59b9fba0 168 #endif