Hello program for PCA9629A. Demonstrates basic operations of PCA9629A component library.

Dependencies:   PCA9629A mbed

Files at this revision

API Documentation at this revision

Comitter:
nxp_ip
Date:
Fri Sep 12 08:11:25 2014 +0000
Child:
1:0ff3203c6899
Commit message:
PCA9629 "A". Hello program.

Changed in this revision

PCA9629A.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCA9629A.lib	Fri Sep 12 08:11:25 2014 +0000
@@ -0,0 +1,1 @@
+PCA9629A#0c797805233b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Sep 12 08:11:25 2014 +0000
@@ -0,0 +1,165 @@
+/** A sample code for PCA9629A
+ *
+ *  @author  Akifumi (Tedd) OKANO, NXP Semiconductors
+ *  @version 1.1
+ *  @date    12-Sep-2012
+ *
+ *  revision history (PCA9629A)
+ *      version 0.1 (05-Jun-2013) : PCA9629"A" initial version
+ *      version 0.2 (05-Jun-2013) : register name fix, register description added
+ *      version 1.0 (23-Apr-2014) : sample code for revision 1.0 library
+ *      version 1.1 (12-Sep-2014) : sample code for revision 1.1 library
+ *
+ *  Released under the Apache 2 license License
+ *
+ *  An operation sample of PCU9629A stepper motor controller.
+ *  The mbed accesses the PCU9629A registers through I2C.
+ *
+ *  This sample code demonstrates 4 type of PCA9629A operation
+ *
+ *  About PCA9629A:
+ *    http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_bus_controller_and_bridge_ics/PCA9629APW.html
+ */
+
+#include "mbed.h"
+#include "PCA9629A.h"
+
+BusOut      leds( LED4, LED3, LED2, LED1 );
+
+PCA9629A    motor_controller( p28, p27, 0x42 );  //  SDA, SCL, Steps/rotation, I2C_address (option)
+
+void motor_action_0( void );
+void motor_action_1( void );
+void motor_action_2( void );
+void motor_action_3( void );
+void motor_action_CDE( void );
+
+int main()
+{
+    printf( "PCA9629A simple sample program\r\n" );
+
+    while ( 1 ) {
+        leds    = 0x1;
+        motor_action_0();   //  demo 0
+
+        leds    = 0x3;
+        motor_action_1();   //  demo 1
+
+        leds    = 0x7;
+        motor_action_2();   //  demo 2
+
+        leds    = 0xF;
+        motor_action_3();   //  demo 3
+    }
+}
+
+void motor_action_0( void )
+{
+    //  simple motor operation
+    //  the motor spins 2 times (200pps) for clockwise (CW), 1 time (100pps) for counter-clockwise.
+
+    motor_controller.stop();
+    motor_controller.init_registers();
+
+    motor_controller.pps( PCA9629A::CW, 200 );
+    motor_controller.steps( PCA9629A::CW, 96 );
+
+    motor_controller.pps( PCA9629A::CCW, 100 );
+    motor_controller.steps( PCA9629A::CCW, 48 );
+
+    for ( int i = 0; i < 2; i++ ) {
+        motor_controller.start( PCA9629A::CW );
+        wait( 2.0 );
+
+        motor_controller.start( PCA9629A::CCW );
+        wait( 2.0 );
+    }
+}
+
+void motor_action_1( void )
+{
+    //  ramp control demo
+
+    motor_controller.stop();
+    motor_controller.init_registers();
+
+    motor_controller.write( PCA9629A::RUCNTL, 0x27  );
+    motor_controller.write( PCA9629A::RDCNTL, 0x27  );
+    motor_controller.write( PCA9629A::CW__STEP_WIDTH, 1175  );
+    motor_controller.write( PCA9629A::CW__STEP_COUNT, 131  );
+
+    for ( int i = 0; i < 2; i++ ) {
+        motor_controller.start( PCA9629A::CW );  //  start
+        wait( 2.5 );
+    }
+}
+
+void motor_action_2( void )
+{
+    //  interrupt operation demo
+
+    motor_controller.stop();
+
+    //  this array is a sample for PCA9629A local interrupt operation
+    //  the P0 and P1 inputs enabled for interrupt in.
+    //  motor rotation will be reversed by interrupt signals.
+    //  the motor direction will be changed 12 steps after when the interrupt happened
+    //
+    //  CW = 40.69pps, CCW = 81.38pps
+
+    char init_array2[] = {    0x80,
+                              0x20, 0x0A, 0x00, 0x03, 0x13, 0x1C,             //  for registers MODE - MSK (0x00 - 0x07
+                              0x00, 0x00, 0x69, 0x00, 0x00,                   //  for registers INTSTAT - EXTRASTEPS1 (0x06, 0xA)
+                              0x10, 0x80,                                     //  for registers OP_CFG_PHS and OP_STAT_TO (0x0B - 0xC)
+                              0x09, 0x09, 0x00, 0x00, 0x00,                   //  for registers RUCNTL - LOOPDLY_CCW (0xD- 0x10)
+                              0x60, 0x00, 0x60, 0x00, 0x05, 0x0D, 0x05, 0x0D, //  for registers CWSCOUNTL - MCNTL (0x12 - 0x1A)
+                              0x82,                                           //  for register MCNTL (0x1A)
+                              0xE2, 0xE4, 0xE6, 0xE0                          //  for registers SUBADR1 - ALLCALLADR (0x1B - 0x1E)
+                         };
+
+    motor_controller.set_all_registers( init_array2, sizeof( init_array2 ));
+    wait( 5.0 );
+
+    motor_controller.stop();
+    wait( 0.5 );
+}
+
+void motor_action_3( void )
+{
+    //  speed change sample while the motor is running
+
+    motor_controller.stop();
+    motor_controller.init_registers();
+
+    motor_controller.steps( PCA9629A::CCW, 0xFFFF );
+
+    for ( int i = 0; i < 2; i++ ) {
+        for ( int s = 1; s <= 5; s++ ) {
+            motor_controller.pps( PCA9629A::CCW, 55 * s );
+            motor_controller.start( PCA9629A::CCW );
+            wait( 1.0 );
+        }
+    }
+}
+
+void motor_action_CDE( void )
+{
+    char    scale[ 8 ]  = { 4, 6, 8, 9, 11, 13, 15, 16 };  //   CDEFGABC (A=0)
+    float   freq[ 8 ];
+
+    for ( int i = 0; i < 8; i++ )
+        freq[ i ]   = (440.0 / 8.0) * pow( 2.0, (float)(scale[ i ]) / 12.0 );
+
+    motor_controller.stop();
+    motor_controller.init_registers();
+    motor_controller.steps( PCA9629A::CCW, 0xFFFF );
+
+    for ( int i = 0; i < 2; i++ ) {
+        motor_controller.stop();
+        for ( int s = 0; s < 8; s++ ) {
+            motor_controller.pps( PCA9629A::CCW, freq[ s ] );
+            motor_controller.start( PCA9629A::CCW );
+            wait( 1 );
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Sep 12 08:11:25 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9327015d4013
\ No newline at end of file