An example for using mydsc facilities for sampling a signal.

Dependencies:   mbed mydsc

Dependents:   mydsc_sampling_example

Committer:
ghsalazar
Date:
Wed Oct 30 17:32:19 2019 +0000
Revision:
0:b7c05aca6d5f
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ghsalazar 0:b7c05aca6d5f 1 /* Sampling example for My Digital Signal Controller library
ghsalazar 0:b7c05aca6d5f 2 * Copyright (c) 2019, Gastón H. SALAZAR-SILVA
ghsalazar 0:b7c05aca6d5f 3 * SPDX-License-Identifier: Apache-2.0
ghsalazar 0:b7c05aca6d5f 4 *
ghsalazar 0:b7c05aca6d5f 5 * Licensed under the Apache License, Version 2.0 (the "License");
ghsalazar 0:b7c05aca6d5f 6 * you may not use this file except in compliance with the License.
ghsalazar 0:b7c05aca6d5f 7 *
ghsalazar 0:b7c05aca6d5f 8 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
ghsalazar 0:b7c05aca6d5f 9 *
ghsalazar 0:b7c05aca6d5f 10 * Unless required by applicable law or agreed to in writing, software
ghsalazar 0:b7c05aca6d5f 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
ghsalazar 0:b7c05aca6d5f 12 * either express or implied.
ghsalazar 0:b7c05aca6d5f 13 *
ghsalazar 0:b7c05aca6d5f 14 * See the License for the specific language governing permissions and limitations under the License.
ghsalazar 0:b7c05aca6d5f 15 */
ghsalazar 0:b7c05aca6d5f 16
ghsalazar 0:b7c05aca6d5f 17 /*
ghsalazar 0:b7c05aca6d5f 18 * This program is an example of how to sample an analog input.
ghsalazar 0:b7c05aca6d5f 19 *
ghsalazar 0:b7c05aca6d5f 20 * # Interface #
ghsalazar 0:b7c05aca6d5f 21 *
ghsalazar 0:b7c05aca6d5f 22 * The connections are for a Nucleo f446re board. PC_1 and PA_4 should be physically connected.
ghsalazar 0:b7c05aca6d5f 23 * PC_1 (A4) <---> PA_4 (A2)
ghsalazar 0:b7c05aca6d5f 24 */
ghsalazar 0:b7c05aca6d5f 25
ghsalazar 0:b7c05aca6d5f 26 #include "mbed.h"
ghsalazar 0:b7c05aca6d5f 27 #include "mydsc_ring_buffer.h"
ghsalazar 0:b7c05aca6d5f 28
ghsalazar 0:b7c05aca6d5f 29 AnalogOut analog_out_1(PA_4); ///< Generated signal by the own board. Assigned to the pin PA_4.
ghsalazar 0:b7c05aca6d5f 30 AnalogIn analog_in(PC_1); ///< Input to be sampled, assigned to the pin PC_1. PC_1 and PA_4 should be physically connected.
ghsalazar 0:b7c05aca6d5f 31 AnalogOut analog_out_2(PA_5); ///< Analog output 2, connected to the pin PA_5, which is also connected to USER_LED.
ghsalazar 0:b7c05aca6d5f 32
ghsalazar 0:b7c05aca6d5f 33 const double PI = 3.14159265358979323846;
ghsalazar 0:b7c05aca6d5f 34 const uint32_t SIZE = 1024; ///< Buffer size - 1
ghsalazar 0:b7c05aca6d5f 35 const float H = 1.0/(SIZE); ///< Sampling period
ghsalazar 0:b7c05aca6d5f 36 const int32_t PHI = -256; ///< Phase shift
ghsalazar 0:b7c05aca6d5f 37
ghsalazar 0:b7c05aca6d5f 38 mydsc_ring_buffer_t rb; ///< circular queue or ring buffer.
ghsalazar 0:b7c05aca6d5f 39 Ticker ticker;
ghsalazar 0:b7c05aca6d5f 40
ghsalazar 0:b7c05aca6d5f 41 void ticker_isr() {
ghsalazar 0:b7c05aca6d5f 42 static unsigned int k = 0;
ghsalazar 0:b7c05aca6d5f 43
ghsalazar 0:b7c05aca6d5f 44 analog_out_1 = ( 1.0 + sin(2*PI*k*H)) / 2.0;
ghsalazar 0:b7c05aca6d5f 45 mydsc_ring_buffer_push(&rb, analog_in);
ghsalazar 0:b7c05aca6d5f 46 analog_out_2 = *mydsc_ring_buffer_sample(&rb, PHI);
ghsalazar 0:b7c05aca6d5f 47 k++;
ghsalazar 0:b7c05aca6d5f 48 }
ghsalazar 0:b7c05aca6d5f 49
ghsalazar 0:b7c05aca6d5f 50 int main() {
ghsalazar 0:b7c05aca6d5f 51 // Setup
ghsalazar 0:b7c05aca6d5f 52 Serial tty(USBTX, USBRX);
ghsalazar 0:b7c05aca6d5f 53
ghsalazar 0:b7c05aca6d5f 54 mydsc_ring_buffer_init(&rb, SIZE);
ghsalazar 0:b7c05aca6d5f 55 ticker.attach(&ticker_isr, H);
ghsalazar 0:b7c05aca6d5f 56 tty.baud(115200);
ghsalazar 0:b7c05aca6d5f 57
ghsalazar 0:b7c05aca6d5f 58 while(1) {
ghsalazar 0:b7c05aca6d5f 59 // Loop
ghsalazar 0:b7c05aca6d5f 60 tty.printf("%f\t%f\n", (*mydsc_ring_buffer_sample(&rb, 0)),(*mydsc_ring_buffer_sample(&rb, PHI)));
ghsalazar 0:b7c05aca6d5f 61 }
ghsalazar 0:b7c05aca6d5f 62 }
ghsalazar 0:b7c05aca6d5f 63