Embedded systems project

Dependencies:   LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI

Committer:
brianwei
Date:
Fri Dec 14 21:30:31 2018 +0000
Revision:
2:1d2abc38bae1
Parent:
1:37130d7a175f
fixed sawtooth

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brianwei 0:0fa4ebf14d9c 1 #include "mbed.h"
brianwei 0:0fa4ebf14d9c 2 #include "LCD_DISCO_F429ZI.h"
brianwei 0:0fa4ebf14d9c 3
brianwei 0:0fa4ebf14d9c 4 AnalogOut pinout(PA_4);
brianwei 0:0fa4ebf14d9c 5 LCD_DISCO_F429ZI lcd;
brianwei 0:0fa4ebf14d9c 6
brianwei 0:0fa4ebf14d9c 7 #define PI (3.141592653589793238462)
brianwei 0:0fa4ebf14d9c 8 #define AMPLITUDE (1.0) // x * 3.3V
brianwei 0:0fa4ebf14d9c 9 #define PHASE (PI * 1) // 2*pi is one period
brianwei 0:0fa4ebf14d9c 10 #define RANGE (0x7FFF)
brianwei 0:0fa4ebf14d9c 11 #define OFFSET (0x7FFF)
brianwei 0:0fa4ebf14d9c 12
brianwei 0:0fa4ebf14d9c 13 #define PERIOD (70000)
brianwei 0:0fa4ebf14d9c 14
brianwei 0:0fa4ebf14d9c 15 // Configuration for sinewave output
brianwei 0:0fa4ebf14d9c 16 #define BUFFER_SIZE (360)
brianwei 0:0fa4ebf14d9c 17 uint16_t buffer[BUFFER_SIZE];
brianwei 0:0fa4ebf14d9c 18 uint8_t text[30];
brianwei 0:0fa4ebf14d9c 19 int x = 0;
brianwei 1:37130d7a175f 20 int i;
brianwei 0:0fa4ebf14d9c 21
brianwei 0:0fa4ebf14d9c 22 InterruptIn user_button(USER_BUTTON);
brianwei 0:0fa4ebf14d9c 23
brianwei 0:0fa4ebf14d9c 24 void button_pressed(){
brianwei 0:0fa4ebf14d9c 25 x = (x+1)%4;
brianwei 0:0fa4ebf14d9c 26 }
brianwei 0:0fa4ebf14d9c 27
brianwei 0:0fa4ebf14d9c 28 void calculate_sinewave(void);
brianwei 0:0fa4ebf14d9c 29
brianwei 0:0fa4ebf14d9c 30 int main() {
brianwei 0:0fa4ebf14d9c 31 calculate_sinewave();
brianwei 0:0fa4ebf14d9c 32 while(1) {
brianwei 0:0fa4ebf14d9c 33 user_button.rise(&button_pressed);
brianwei 0:0fa4ebf14d9c 34 switch(x){
brianwei 0:0fa4ebf14d9c 35 // sinewave output
brianwei 0:0fa4ebf14d9c 36 case 0:
brianwei 1:37130d7a175f 37 for (i = 0; i < BUFFER_SIZE; i++) {
brianwei 0:0fa4ebf14d9c 38 pinout.write_u16(buffer[i]);
brianwei 0:0fa4ebf14d9c 39 }
brianwei 0:0fa4ebf14d9c 40 break;
brianwei 0:0fa4ebf14d9c 41
brianwei 0:0fa4ebf14d9c 42 // triangle output
brianwei 0:0fa4ebf14d9c 43 case 1:
brianwei 1:37130d7a175f 44 for (i = 0; i < PERIOD/2; i++) {
brianwei 0:0fa4ebf14d9c 45 pinout.write_u16(i);
brianwei 0:0fa4ebf14d9c 46 }
brianwei 0:0fa4ebf14d9c 47
brianwei 1:37130d7a175f 48 for (i = PERIOD/2; i>0; i--) {
brianwei 0:0fa4ebf14d9c 49 pinout.write_u16(i);
brianwei 0:0fa4ebf14d9c 50 }
brianwei 0:0fa4ebf14d9c 51 break;
brianwei 0:0fa4ebf14d9c 52
brianwei 0:0fa4ebf14d9c 53 //square output
brianwei 0:0fa4ebf14d9c 54 case 2:
brianwei 1:37130d7a175f 55 for (i = 0; i < PERIOD/2; i++) {
brianwei 0:0fa4ebf14d9c 56 pinout.write_u16(0);
brianwei 0:0fa4ebf14d9c 57 }
brianwei 0:0fa4ebf14d9c 58
brianwei 1:37130d7a175f 59 for (i = PERIOD/2; i>0; i--) {
brianwei 0:0fa4ebf14d9c 60 pinout.write_u16((uint16_t)(AMPLITUDE*RANGE+OFFSET));
brianwei 0:0fa4ebf14d9c 61 }
brianwei 0:0fa4ebf14d9c 62 break;
brianwei 0:0fa4ebf14d9c 63
brianwei 0:0fa4ebf14d9c 64 case 3:
brianwei 0:0fa4ebf14d9c 65 //sawtooth output
brianwei 2:1d2abc38bae1 66 for (i = 0; i < PERIOD/2; i++) {
brianwei 0:0fa4ebf14d9c 67 pinout.write_u16(i);
brianwei 0:0fa4ebf14d9c 68 }
brianwei 0:0fa4ebf14d9c 69 break;
brianwei 0:0fa4ebf14d9c 70
brianwei 0:0fa4ebf14d9c 71 default:
brianwei 0:0fa4ebf14d9c 72 lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Signal Generator", CENTER_MODE);
brianwei 0:0fa4ebf14d9c 73 }
brianwei 0:0fa4ebf14d9c 74 }
brianwei 0:0fa4ebf14d9c 75 }
brianwei 0:0fa4ebf14d9c 76
brianwei 0:0fa4ebf14d9c 77 // Create the sinewave buffer
brianwei 0:0fa4ebf14d9c 78 void calculate_sinewave(void){
brianwei 0:0fa4ebf14d9c 79 for (int i = 0; i < BUFFER_SIZE; i++) {
brianwei 0:0fa4ebf14d9c 80 double rads = (PI * i)/180.0; // Convert degree in radian
brianwei 0:0fa4ebf14d9c 81 buffer[i] = (uint16_t)(AMPLITUDE * (RANGE * (cos(rads + PHASE))) + OFFSET);
brianwei 0:0fa4ebf14d9c 82 }
brianwei 0:0fa4ebf14d9c 83 }