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@1:284229960d6a, 2018-01-24 (annotated)
- Committer:
- WilliamMarshQMUL
- Date:
- Wed Jan 24 22:59:37 2018 +0000
- Revision:
- 1:284229960d6a
- Parent:
- 0:5307f49cd305
- Child:
- 2:4857a7cbb9da
Revised for mbed 5
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| WilliamMarshQMUL | 0:5307f49cd305 | 1 | // Lab 3 Example Program 2 |
| WilliamMarshQMUL | 0:5307f49cd305 | 2 | // ----------------------- |
| WilliamMarshQMUL | 0:5307f49cd305 | 3 | // Periodically write to the AnalogOut to create a sine wave |
| WilliamMarshQMUL | 0:5307f49cd305 | 4 | // Alternate between two fixed frequencies every 5 sec |
| WilliamMarshQMUL | 0:5307f49cd305 | 5 | // |
| WilliamMarshQMUL | 0:5307f49cd305 | 6 | // THIS VERSION HAS DEBUGGING CODE USING THE SERIAL PORT |
| WilliamMarshQMUL | 0:5307f49cd305 | 7 | |
| WilliamMarshQMUL | 1:284229960d6a | 8 | // Revised for mbed 5 |
| WilliamMarshQMUL | 1:284229960d6a | 9 | |
| WilliamMarshQMUL | 0:5307f49cd305 | 10 | #include "mbed.h" |
| WilliamMarshQMUL | 0:5307f49cd305 | 11 | #include "sineTable.h" |
| WilliamMarshQMUL | 0:5307f49cd305 | 12 | |
| WilliamMarshQMUL | 0:5307f49cd305 | 13 | Ticker tick ; // Creates periodic interrupt |
| WilliamMarshQMUL | 0:5307f49cd305 | 14 | AnalogOut ao(PTE30) ; // Analog output |
| WilliamMarshQMUL | 0:5307f49cd305 | 15 | |
| WilliamMarshQMUL | 0:5307f49cd305 | 16 | // --- following code for debugging --- |
| WilliamMarshQMUL | 0:5307f49cd305 | 17 | Thread debugT ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 18 | Serial pc(USBTX, USBRX); // tx, rx, useful for debugging |
| WilliamMarshQMUL | 0:5307f49cd305 | 19 | |
| WilliamMarshQMUL | 0:5307f49cd305 | 20 | // Put a simple reprsentation of the sine wave |
| WilliamMarshQMUL | 0:5307f49cd305 | 21 | // to the serial output. ONLY at low frequency |
| WilliamMarshQMUL | 0:5307f49cd305 | 22 | void debug(int index) { |
| WilliamMarshQMUL | 0:5307f49cd305 | 23 | int sine4 = sine[index] >> 11 ; // get top 5 bits |
| WilliamMarshQMUL | 0:5307f49cd305 | 24 | pc.putc('*') ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 25 | while (sine4--) pc.putc('*') ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 26 | pc.putc('\n') ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 27 | //pc.putc('\r') ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 28 | } |
| WilliamMarshQMUL | 0:5307f49cd305 | 29 | |
| WilliamMarshQMUL | 0:5307f49cd305 | 30 | volatile int index = 0 ; // this variable is not just for debugging!! |
| WilliamMarshQMUL | 0:5307f49cd305 | 31 | |
| WilliamMarshQMUL | 0:5307f49cd305 | 32 | void debugCallback() { |
| WilliamMarshQMUL | 0:5307f49cd305 | 33 | while (true) { |
| WilliamMarshQMUL | 0:5307f49cd305 | 34 | Thread::signal_wait(0x1) ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 35 | debug(index) ; // there is a race condition here |
| WilliamMarshQMUL | 0:5307f49cd305 | 36 | } |
| WilliamMarshQMUL | 0:5307f49cd305 | 37 | } |
| WilliamMarshQMUL | 0:5307f49cd305 | 38 | // ---- end of debugging code --------- |
| WilliamMarshQMUL | 0:5307f49cd305 | 39 | |
| WilliamMarshQMUL | 0:5307f49cd305 | 40 | // Function called every periodically |
| WilliamMarshQMUL | 0:5307f49cd305 | 41 | // Write new value to AnalogOut |
| WilliamMarshQMUL | 0:5307f49cd305 | 42 | void writeAout() { |
| WilliamMarshQMUL | 0:5307f49cd305 | 43 | ao.write_u16(sine[index]) ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 44 | debugT.signal_set(0x1) ; // DEBUGGING low frequency only |
| WilliamMarshQMUL | 0:5307f49cd305 | 45 | index = (index + 1) % 64 ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 46 | } |
| WilliamMarshQMUL | 0:5307f49cd305 | 47 | |
| WilliamMarshQMUL | 0:5307f49cd305 | 48 | // Control the frequency of updates |
| WilliamMarshQMUL | 0:5307f49cd305 | 49 | // Alternative between two frequencies |
| WilliamMarshQMUL | 0:5307f49cd305 | 50 | int main() { |
| WilliamMarshQMUL | 0:5307f49cd305 | 51 | int update_us = 100000 ; // 100ms |
| WilliamMarshQMUL | 0:5307f49cd305 | 52 | debugT.start(&debugCallback) ; |
| WilliamMarshQMUL | 0:5307f49cd305 | 53 | while (true) { |
| WilliamMarshQMUL | 0:5307f49cd305 | 54 | pc.printf("Update at 64 x 100ms giving about 0.15Hz\n"); |
| WilliamMarshQMUL | 0:5307f49cd305 | 55 | tick.attach_us(callback(&writeAout), update_us); // setup ticker to write to AnalogOut |
| WilliamMarshQMUL | 0:5307f49cd305 | 56 | Thread::wait(30000) ; // wait 30 sec - 30000ms |
| WilliamMarshQMUL | 0:5307f49cd305 | 57 | update_us = 150000 ; // 150ms |
| WilliamMarshQMUL | 0:5307f49cd305 | 58 | pc.printf("Update at 64 x 150ms giving about 0.1Hz\n"); |
| WilliamMarshQMUL | 0:5307f49cd305 | 59 | tick.attach_us(callback(&writeAout), update_us); // setup ticker to write to AnalogOut |
| WilliamMarshQMUL | 0:5307f49cd305 | 60 | Thread::wait(30000) ; // wait 30 sec - 30000ms |
| WilliamMarshQMUL | 0:5307f49cd305 | 61 | update_us = 100000 ; // 100ms |
| WilliamMarshQMUL | 0:5307f49cd305 | 62 | } |
| WilliamMarshQMUL | 0:5307f49cd305 | 63 | } |