An example for using mydsc facilities for sampling a signal.
Dependents: mydsc_sampling_example
main.cpp@0:b7c05aca6d5f, 2019-10-30 (annotated)
- Committer:
- ghsalazar
- Date:
- Wed Oct 30 17:32:19 2019 +0000
- Revision:
- 0:b7c05aca6d5f
Initial commit
Who changed what in which revision?
User | Revision | Line number | New 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 |