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.
main.cpp
00001 #include "mbed.h" 00002 00003 00004 Ticker tick; // 00005 00006 AnalogIn linear_position(A0); //sets an analog input to receive the linear position 00007 AnalogIn linear_velocity(A1); //sets an analog input to receive the linear velocity 00008 00009 Serial pc(USBTX, USBRX); //enable usb serial communication 00010 //Serial encoder(PTE0, PTE1); 00011 DigitalOut red(LED_RED); //set the red LED as red 00012 DigitalOut green(LED_GREEN); //set the green LED as green 00013 DigitalOut blue(LED_BLUE); //set the blue LED as blue 00014 DigitalOut ms(PTD1); //set the transceiver mode selection (0=receiver mode and 1=transmiter mode) 00015 00016 volatile uint8_t received1, received2; //angle components variables 00017 volatile uint16_t angle = 0; //encoder angle 00018 00019 void isr() //interrupution routine 00020 { 00021 pc.printf("0x%04X",linear_position.read_u16()); //send linear position, obs: 6 chars needed 00022 pc.printf("0x%04X",linear_velocity.read_u16()); //send linear velocity 00023 pc.printf("0x%04X",angle); //send angle 00024 pc.printf("OMEGA "); //send angular velocity 00025 } 00026 00027 int main() //main function 00028 { 00029 00030 //PC serial communication 00031 pc.baud(115200); //set baud rate 00032 //encoder.baud(115200); 00033 tick.attach(&isr, 1); //setup ticker to call isr every 0.1s seconds 00034 00035 //Encoder serial communication 00036 SIM->SCGC5 |= 0x00002000; //enable PORTE clock 00037 PORTE->PCR[0] |= 0x00000300; //PTE0 as ALT3 (UART1) 00038 PORTE->PCR[1] |= 0x00000300; //PTE1 as ALT3 (UART1) 00039 SIM->SCGC4 |= 0x00000800; //enable UART1 clock 00040 SIM->SOPT5 &= ~0x00000070; //select UART1 TX pin as UART1 TX source and UART1 RX pin as UART1 RX source 00041 00042 00043 /*baud rate divider setting: 00044 BAUD = Bus_Clock/(16 x BR) = 24M/ (16 x 13) ~ 115200 00045 baud rate values: 115200, 39400, 19200, 9600 00046 respective BDL values: 0x0D, 0x27, 0x4E, 0x9C*/ 00047 00048 UART1->BDH = 0x00; //set the highest bits of the baud rate divider 00049 UART1->BDL = 0x0D; //set the lowest bits of the baud rate divider 00050 UART1->C1 = 0x00; //sets a 8N1 configuration 00051 UART1->C2 = 0x0C; //enables Tx and Rx/ Interrupts disabled 00052 00053 red = 1; //turn off the red LED 00054 green = 1; //turn off the green LED 00055 blue = 1; //turn off the blue LED 00056 while (true) //infinite loop 00057 { 00058 00059 if (((UART1->S1&0xC0)>>6)==0x03) //if the ucontroller transmiter buffer is free 00060 { 00061 ms = 1; //put the transceiver in the transmiter mode 00062 UART1->D = 0x54; //send the encoder's address 00063 while(!(((UART1->S1&0xC0)>>6)==0x03)); //wait 'til the message has been completely sent 00064 ms = 0; //put the transceiver in the receiver mode 00065 } 00066 00067 wait_us(10); //turnaround time: 3us 10us 30us 56us 100us 00068 //baud rate: 115200(default) 115200(adjustable) 38400 19200 9600 00069 00070 if(((UART1->S1&0x20)>>5)==0x01) //if the ucontroller transmiter buffer is full 00071 { 00072 received1 = UART1->D; //stores the first Byte in the received1 variable 00073 while(!(((UART1->S1&0x20)>>5)==0x01)); //wait 'til the next has been received 00074 if(((UART1->S1&0x20)>>5)==0x01) //if the ucontroller transmiter buffer is full 00075 { 00076 received2 = UART1->D; //stores the second Byte in the received2 variable 00077 angle = ((received1)|(((received2)&0x3F)<<8)); //assembly the angle using the components 00078 } 00079 } 00080 /* 00081 if (((UART1->S1&0x20)>>5)==0x01) 00082 { 00083 received = UART1->D; 00084 angle = (received<<2); 00085 red = !red; 00086 } 00087 */ 00088 } 00089 } 00090 //TO DO: Program the readings
Generated on Wed Nov 16 2022 22:43:21 by
1.7.2