Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:665a5dc5ab89
diff -r 000000000000 -r 665a5dc5ab89 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Sep 02 06:27:47 2016 +0000
@@ -0,0 +1,240 @@
+//------------------------------------------------------------------//
+//Supported MCU: RZ/A1H
+//File Contents: Servo center adjustment from the PC
+// (GR-PEACH version on the Micon Car)
+//Version number: Ver.1.00
+//Date: 2016.01.20
+//Copyright: Renesas Electronics Corporation
+//------------------------------------------------------------------//
+
+//This program supports the following boards:
+//* GR-PEACH(E version)
+//* Motor drive board Ver.5
+//* Camera module (SC-310)
+
+/*
+This is a program to check the servo adjustment of the micon car using keys.
+The action described takes place when one of the following keys is pressed.
+
+Z key: servo offset value +1
+X key: servo offset value -1
+A key: servo offset value +10
+S key: servo offset value -10
+*/
+
+//Include
+//------------------------------------------------------------------//
+#include "mbed.h"
+#include "iodefine.h"
+
+//Define
+//------------------------------------------------------------------//
+//Servo PWM cycle
+#define SERVO_PWM_CYCLE 33332 /* SERVO PWM period */
+ /* 16ms P0φ/16 = 0.48us */
+#define SERVO_CENTER 3124 /* 1.5ms / 0.48us - 1 = 3124*/
+#define HANDLE_STEP 18 /* 1 degree value */
+
+//Degrees
+#define DEGREEES_MAX 4791 /* Left 90° 2.3ms / 0.48us = 4791 */
+#define DEGREEES_MIN 1485 /* Right 90° 0.7ms / 0.48us = 1458 */
+
+//LED Color on GR-PEACH
+#define LED_OFF 0x00
+#define LED_RED 0x01
+#define LED_GREEN 0x02
+#define LED_YELLOW 0x03
+#define LED_BLUE 0x04
+#define LED_PURPLE 0x05
+#define LED_SKYBLUE 0x06
+#define LED_WHITE 0x07
+
+//Status
+#define RUN 0x00
+#define STOP 0x01
+#define ERROR 0xff
+
+//Constructor
+//------------------------------------------------------------------//
+Ticker interrput;
+Serial pc(USBTX, USBRX);
+DigitalOut LED_R(P6_13);
+DigitalOut LED_G(P6_14);
+DigitalOut LED_B(P6_15);
+
+//Prototype
+//------------------------------------------------------------------//
+void init_MTU2_PWM_Servo( void ); /* Initialize PWM functions */
+void intTimer( void ); /* Interrupt fanction */
+void timer( unsigned long timer_set );
+void handle( int angle );
+void led_status_process( int set ); /* Function for only interrupt */
+void led_rgb(int led);
+
+//Globle
+//------------------------------------------------------------------//
+volatile int status; /* Status */
+volatile unsigned int servo_offset; /* servo offset */
+
+//Main
+//------------------------------------------------------------------//
+int main( void )
+{
+ int i;
+ char c;
+
+ /* Initialize MCU functions */
+ init_MTU2_PWM_Servo();
+ interrput.attach(&intTimer, 0.001);
+ pc.baud(9600);
+
+ /* Initialize Micon Car state */
+ servo_offset = SERVO_CENTER;
+
+ pc.printf(
+ "Servo center adjustment from the PC\n\r"
+ "(Micon Car on GR-PEACH version)\n\r"
+ "\n\r"
+ "'Z' key : Center Value +1\n\r"
+ "'X' key : Center Value -1\n\r"
+ "\n\r"
+ "'A' key : Center Value +10\n\r"
+ "'S' key : Center Value -10\n\r"
+ "\n\r"
+ );
+
+ pc.printf( "%5d\r", servo_offset );
+
+ while( 1 ) {
+ status = RUN;
+
+ MTU2TGRD_0 = servo_offset;
+
+ i = pc.scanf( "%c", &c );
+ if( i == 1 ) {
+ switch( c ) {
+ case 'Z':
+ case 'z':
+ servo_offset += 1;
+ if( servo_offset > DEGREEES_MAX ) servo_offset = DEGREEES_MAX;
+ pc.printf( "%5d\r", servo_offset );
+ break;
+
+ case 'A':
+ case 'a':
+ servo_offset += 10;
+ if( servo_offset > DEGREEES_MAX ) servo_offset = DEGREEES_MAX;
+ pc.printf( "%5d\r", servo_offset );
+ break;
+
+ case 'X':
+ case 'x':
+ servo_offset -= 1;
+ if( servo_offset < DEGREEES_MIN ) servo_offset = DEGREEES_MIN;
+ pc.printf( "%5d\r", servo_offset );
+ break;
+
+ case 'S':
+ case 's':
+ servo_offset -= 10;
+ if( servo_offset < DEGREEES_MIN ) servo_offset = DEGREEES_MIN;
+ pc.printf( "%5d\r", servo_offset );
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+}
+
+//Initialize MTU2 PWM functions
+//------------------------------------------------------------------//
+//MTU2_0
+//PWM mode 1
+//TIOC0A(P4_0) :Servo-motor
+//------------------------------------------------------------------//
+void init_MTU2_PWM_Servo( void )
+{
+ /* Port setting for S/W I/O Contorol */
+ /* alternative mode */
+
+ /* MTU2_0 (P4_0) */
+ GPIOPBDC4 = 0x0000; /* Bidirection mode disabled*/
+ GPIOPFCAE4 &= 0xfffe; /* The alternative function of a pin */
+ GPIOPFCE4 &= 0xfffe; /* The alternative function of a pin */
+ GPIOPFC4 |= 0x0001; /* The alternative function of a pin */
+ /* 2nd alternative function/output */
+ GPIOP4 &= 0xfffe; /* */
+ GPIOPM4 &= 0xfffe; /* p4_0:output */
+ GPIOPMC4 |= 0x0001; /* P4_0:double */
+
+ /* Mosule stop 33(MTU2) canceling */
+ CPGSTBCR3 &= 0xf7;
+
+ /* MTU2_0 (Motor PWM) */
+ MTU2TCR_0 = 0x22; /* TCNT Clear(TGRA), P0φ/16 */
+ MTU2TIORH_0 = 0x52; /* TGRA L>H, TGRB H>L */
+ MTU2TMDR_0 = 0x32; /* TGRC and TGRD = Buff-mode*/
+ /* PWM-mode1 */
+ MTU2TCNT_0 = 0; /* TCNT0 Set 0 */
+ MTU2TGRA_0 = MTU2TGRC_0 = SERVO_PWM_CYCLE;
+ /* PWM-Cycle(16ms) */
+ MTU2TGRB_0 = MTU2TGRD_0 = 0; /* Servo-motor(P4_0) */
+ MTU2TSTR |= 0x01; /* TCNT_0 Start */
+}
+
+//Interrupt Timer
+//------------------------------------------------------------------//
+void intTimer( void )
+{
+ led_status_process( status );
+}
+
+//LED_Status(on GR-PEACH board) Function for only interrupt
+//------------------------------------------------------------------//
+void led_status_process( int set )
+{
+ static unsigned long led_timer;
+ int led_set;
+ int on_time;
+ int off_time;
+
+ /* setting */
+ switch( set ){
+ case RUN:
+ led_set = LED_GREEN;
+ on_time = 500;
+ off_time = 500;
+ break;
+ case STOP:
+ led_set = LED_RED;
+ on_time = 500;
+ off_time = 0;
+ break;
+ default:
+ led_set = LED_OFF;
+ on_time = 0;
+ off_time = 1;
+ break;
+ }
+
+ /* Display */
+ led_timer++;
+ if( led_timer < on_time ) led_rgb( led_set );
+ else if( led_timer < ( on_time + off_time ) ) led_rgb( LED_OFF );
+ else led_timer = 0;
+}
+
+//LED_RGB(on GR-PEACH board)
+//------------------------------------------------------------------//
+void led_rgb(int led)
+{
+ LED_R = led & 0x1;
+ LED_G = (led >> 1 ) & 0x1;
+ LED_B = (led >> 2 ) & 0x1;
+}
+
+//------------------------------------------------------------------//
+// End of file
+//------------------------------------------------------------------//
\ No newline at end of file