Chirp Signal Generator

Dependencies:   mbed

Fork of TAU_ZOOLOG_Playback_Rev1_1 by Yossi_Students

Committer:
Arkadi
Date:
Mon Aug 21 11:58:40 2017 +0000
Revision:
16:8274b4ad84ee
Parent:
main_filter3.cpp@13:24d8512fc722
Child:
17:c0c17da42990
Chirp Signal Generator

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TauZoolog 3:25cd717ad782 1 /*
Arkadi 16:8274b4ad84ee 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Arkadi 16:8274b4ad84ee 3 % Generate Chirp Signal - 21/08/2017 %
Arkadi 16:8274b4ad84ee 4 % Arkadi Rafalovich - % Arkadiraf@gmail.com %
Arkadi 16:8274b4ad84ee 5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TauZoolog 3:25cd717ad782 6
TauZoolog 3:25cd717ad782 7 Pinout:
TauZoolog 3:25cd717ad782 8 DAC -- PA_4 -- A2
TauZoolog 3:25cd717ad782 9
TauZoolog 3:25cd717ad782 10 I/O -- PA_5 -- D13 (Status LED, Condition)
TauZoolog 3:25cd717ad782 11 I/O -- PA_6 -- D12 (Toggle Pin, Loop Freq)
TauZoolog 3:25cd717ad782 12
TauZoolog 3:25cd717ad782 13 */
TauZoolog 3:25cd717ad782 14 #include "mbed.h"
Arkadi 16:8274b4ad84ee 15 #include "chirp.h"
TauZoolog 3:25cd717ad782 16
Arkadi 16:8274b4ad84ee 17 // Serial over USB as input device
Arkadi 16:8274b4ad84ee 18 Serial pc(SERIAL_TX, SERIAL_RX);
TauZoolog 3:25cd717ad782 19
TauZoolog 3:25cd717ad782 20 // mbed variables, Settings
TauZoolog 3:25cd717ad782 21 AnalogOut out(PA_4);
TauZoolog 3:25cd717ad782 22
Arkadi 4:85dbf3e4d432 23 // digital pins
Arkadi 4:85dbf3e4d432 24 DigitalOut led(LED1);
Arkadi 16:8274b4ad84ee 25 DigitalOut outPulse(PA_6); // Toggle pin, Loop Freq
TauZoolog 3:25cd717ad782 26
TauZoolog 3:25cd717ad782 27 // User Button as interrupt
Arkadi 16:8274b4ad84ee 28 DigitalIn mybutton(USER_BUTTON);
TauZoolog 3:25cd717ad782 29
Arkadi 16:8274b4ad84ee 30 //DAC declarations
TauZoolog 3:25cd717ad782 31 DAC_HandleTypeDef hdac1;
TauZoolog 3:25cd717ad782 32
TauZoolog 3:25cd717ad782 33 // Dac Register for direct method of setting DAC value`s
TauZoolog 3:25cd717ad782 34 __IO uint32_t Dac_Reg = 0;
TauZoolog 3:25cd717ad782 35
TauZoolog 3:25cd717ad782 36 // Variables
Arkadi 16:8274b4ad84ee 37 bool toggle_state=0;
Arkadi 8:4a9979fe0122 38
Arkadi 8:4a9979fe0122 39 // nop operation
TauZoolog 3:25cd717ad782 40 inline void NOP()
TauZoolog 3:25cd717ad782 41 {
TauZoolog 3:25cd717ad782 42 __ASM volatile ("nop"); // one tick operation, Use to adjust frequency by slowing down the proccess
TauZoolog 3:25cd717ad782 43 }
TauZoolog 3:25cd717ad782 44
Arkadi 16:8274b4ad84ee 45 /* DAC1 init function */
Arkadi 16:8274b4ad84ee 46 void DAC1_Init(void);
TauZoolog 3:25cd717ad782 47
TauZoolog 3:25cd717ad782 48 // Main procedure
Arkadi 4:85dbf3e4d432 49 int main()
Arkadi 4:85dbf3e4d432 50 {
Arkadi 4:85dbf3e4d432 51 DAC1_Init();
TauZoolog 3:25cd717ad782 52
Arkadi 4:85dbf3e4d432 53 HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
TauZoolog 3:25cd717ad782 54
Arkadi 4:85dbf3e4d432 55 // define Dac Register for direct method of setting DAC value`s
Arkadi 4:85dbf3e4d432 56 Dac_Reg = (uint32_t) (hdac1.Instance);
Arkadi 4:85dbf3e4d432 57 Dac_Reg += __HAL_DHR12R1_ALIGNEMENT(DAC_ALIGN_12B_R);
TauZoolog 3:25cd717ad782 58
Arkadi 16:8274b4ad84ee 59 // set outputs
Arkadi 12:e2b4a11ebe5a 60 outPulse.write(0);
Arkadi 16:8274b4ad84ee 61 led.write(0);
Arkadi 16:8274b4ad84ee 62 // Output value using DAC
Arkadi 16:8274b4ad84ee 63 // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut);
Arkadi 16:8274b4ad84ee 64 *(__IO uint32_t *) Dac_Reg = (uint16_t)(4095/2);
TauZoolog 3:25cd717ad782 65
Arkadi 4:85dbf3e4d432 66 // Infinite loop
Arkadi 4:85dbf3e4d432 67 while(true) {
Arkadi 16:8274b4ad84ee 68 if (mybutton.read()==0) { // if button pressed, generate pulse out
Arkadi 16:8274b4ad84ee 69 led.write(1);
Arkadi 16:8274b4ad84ee 70 wait(0.005);
Arkadi 16:8274b4ad84ee 71 // generate chirp out
Arkadi 16:8274b4ad84ee 72 for (int ii=0; ii<NUM_SAMPLES; ii++) {
Arkadi 16:8274b4ad84ee 73 // toogle io for loop frequency
Arkadi 16:8274b4ad84ee 74 toggle_state=!toggle_state;
Arkadi 16:8274b4ad84ee 75 outPulse.write(toggle_state);
Arkadi 16:8274b4ad84ee 76 // generate delay for 1MHz Sample rate
Arkadi 16:8274b4ad84ee 77 for (int jj=0; jj<32; jj++) {
Arkadi 16:8274b4ad84ee 78 NOP();
Arkadi 16:8274b4ad84ee 79 }
Arkadi 16:8274b4ad84ee 80 NOP();
Arkadi 16:8274b4ad84ee 81 NOP();
Arkadi 16:8274b4ad84ee 82 NOP();
Arkadi 16:8274b4ad84ee 83 NOP();
Arkadi 16:8274b4ad84ee 84 // Output value using DAC
Arkadi 16:8274b4ad84ee 85 // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut);
Arkadi 16:8274b4ad84ee 86 *(__IO uint32_t *) Dac_Reg = chirpData[ii];
Arkadi 4:85dbf3e4d432 87 }
Arkadi 16:8274b4ad84ee 88 // Output value using DAC
Arkadi 16:8274b4ad84ee 89 // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut);
Arkadi 16:8274b4ad84ee 90 *(__IO uint32_t *) Dac_Reg = (uint16_t)(4095/2);
Arkadi 16:8274b4ad84ee 91 led.write(0);
Arkadi 16:8274b4ad84ee 92 wait(1);
Arkadi 16:8274b4ad84ee 93 } // end button press
Arkadi 16:8274b4ad84ee 94 led.write(0);
Arkadi 16:8274b4ad84ee 95 }// end while(True)
Arkadi 16:8274b4ad84ee 96 }
Arkadi 8:4a9979fe0122 97
Arkadi 8:4a9979fe0122 98
Arkadi 16:8274b4ad84ee 99 // init dac
Arkadi 16:8274b4ad84ee 100
Arkadi 16:8274b4ad84ee 101 /* DAC1 init function */
Arkadi 16:8274b4ad84ee 102 void DAC1_Init(void)
Arkadi 16:8274b4ad84ee 103 {
Arkadi 16:8274b4ad84ee 104 DAC_ChannelConfTypeDef sConfig;
TauZoolog 3:25cd717ad782 105
Arkadi 16:8274b4ad84ee 106 // DAC Initialization
Arkadi 16:8274b4ad84ee 107 hdac1.Instance = DAC;
Arkadi 16:8274b4ad84ee 108 if(HAL_DAC_Init(&hdac1) != HAL_OK) {
Arkadi 16:8274b4ad84ee 109 printf("!!! Error in DAC initialization !!!\n");
Arkadi 16:8274b4ad84ee 110 }
Arkadi 16:8274b4ad84ee 111
Arkadi 16:8274b4ad84ee 112 // DAC channel OUT1 config
Arkadi 16:8274b4ad84ee 113 sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
Arkadi 16:8274b4ad84ee 114 sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
Arkadi 16:8274b4ad84ee 115 if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK) {
Arkadi 16:8274b4ad84ee 116 printf("!!! Error in DAC channel initialization !!!\n");
Arkadi 5:65833e8cf4cf 117 }
Arkadi 4:85dbf3e4d432 118 }