Akhil Nair
/
Lab3p2
Lab3 part2 with DAC
main.cpp@0:5307f49cd305, 2017-02-01 (annotated)
- Committer:
- WilliamMarshQMUL
- Date:
- Wed Feb 01 13:38:02 2017 +0000
- Revision:
- 0:5307f49cd305
- Child:
- 1:18e0f8aef32f
First version
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 | 0:5307f49cd305 | 8 | #include "mbed.h" |
WilliamMarshQMUL | 0:5307f49cd305 | 9 | #include "rtos.h" |
WilliamMarshQMUL | 0:5307f49cd305 | 10 | #include "sineTable.h" |
WilliamMarshQMUL | 0:5307f49cd305 | 11 | |
WilliamMarshQMUL | 0:5307f49cd305 | 12 | Ticker tick ; // Creates periodic interrupt |
WilliamMarshQMUL | 0:5307f49cd305 | 13 | AnalogOut ao(PTE30) ; // Analog output |
WilliamMarshQMUL | 0:5307f49cd305 | 14 | |
WilliamMarshQMUL | 0:5307f49cd305 | 15 | // --- following code for debugging --- |
WilliamMarshQMUL | 0:5307f49cd305 | 16 | Thread debugT ; |
WilliamMarshQMUL | 0:5307f49cd305 | 17 | Serial pc(USBTX, USBRX); // tx, rx, useful for debugging |
WilliamMarshQMUL | 0:5307f49cd305 | 18 | |
WilliamMarshQMUL | 0:5307f49cd305 | 19 | // Put a simple reprsentation of the sine wave |
WilliamMarshQMUL | 0:5307f49cd305 | 20 | // to the serial output. ONLY at low frequency |
WilliamMarshQMUL | 0:5307f49cd305 | 21 | void debug(int index) { |
WilliamMarshQMUL | 0:5307f49cd305 | 22 | int sine4 = sine[index] >> 11 ; // get top 5 bits |
WilliamMarshQMUL | 0:5307f49cd305 | 23 | pc.putc('*') ; |
WilliamMarshQMUL | 0:5307f49cd305 | 24 | while (sine4--) pc.putc('*') ; |
WilliamMarshQMUL | 0:5307f49cd305 | 25 | pc.putc('\n') ; |
WilliamMarshQMUL | 0:5307f49cd305 | 26 | //pc.putc('\r') ; |
WilliamMarshQMUL | 0:5307f49cd305 | 27 | } |
WilliamMarshQMUL | 0:5307f49cd305 | 28 | |
WilliamMarshQMUL | 0:5307f49cd305 | 29 | volatile int index = 0 ; // this variable is not just for debugging!! |
WilliamMarshQMUL | 0:5307f49cd305 | 30 | |
WilliamMarshQMUL | 0:5307f49cd305 | 31 | void debugCallback() { |
WilliamMarshQMUL | 0:5307f49cd305 | 32 | while (true) { |
WilliamMarshQMUL | 0:5307f49cd305 | 33 | Thread::signal_wait(0x1) ; |
WilliamMarshQMUL | 0:5307f49cd305 | 34 | debug(index) ; // there is a race condition here |
WilliamMarshQMUL | 0:5307f49cd305 | 35 | } |
WilliamMarshQMUL | 0:5307f49cd305 | 36 | } |
WilliamMarshQMUL | 0:5307f49cd305 | 37 | // ---- end of debugging code --------- |
WilliamMarshQMUL | 0:5307f49cd305 | 38 | |
WilliamMarshQMUL | 0:5307f49cd305 | 39 | // Function called every periodically |
WilliamMarshQMUL | 0:5307f49cd305 | 40 | // Write new value to AnalogOut |
WilliamMarshQMUL | 0:5307f49cd305 | 41 | void writeAout() { |
WilliamMarshQMUL | 0:5307f49cd305 | 42 | ao.write_u16(sine[index]) ; |
WilliamMarshQMUL | 0:5307f49cd305 | 43 | debugT.signal_set(0x1) ; // DEBUGGING low frequency only |
WilliamMarshQMUL | 0:5307f49cd305 | 44 | index = (index + 1) % 64 ; |
WilliamMarshQMUL | 0:5307f49cd305 | 45 | } |
WilliamMarshQMUL | 0:5307f49cd305 | 46 | |
WilliamMarshQMUL | 0:5307f49cd305 | 47 | // Control the frequency of updates |
WilliamMarshQMUL | 0:5307f49cd305 | 48 | // Alternative between two frequencies |
WilliamMarshQMUL | 0:5307f49cd305 | 49 | int main() { |
WilliamMarshQMUL | 0:5307f49cd305 | 50 | int update_us = 100000 ; // 100ms |
WilliamMarshQMUL | 0:5307f49cd305 | 51 | debugT.start(&debugCallback) ; |
WilliamMarshQMUL | 0:5307f49cd305 | 52 | while (true) { |
WilliamMarshQMUL | 0:5307f49cd305 | 53 | pc.printf("Update at 64 x 100ms giving about 0.15Hz\n"); |
WilliamMarshQMUL | 0:5307f49cd305 | 54 | tick.attach_us(callback(&writeAout), update_us); // setup ticker to write to AnalogOut |
WilliamMarshQMUL | 0:5307f49cd305 | 55 | Thread::wait(30000) ; // wait 30 sec - 30000ms |
WilliamMarshQMUL | 0:5307f49cd305 | 56 | update_us = 150000 ; // 150ms |
WilliamMarshQMUL | 0:5307f49cd305 | 57 | pc.printf("Update at 64 x 150ms giving about 0.1Hz\n"); |
WilliamMarshQMUL | 0:5307f49cd305 | 58 | tick.attach_us(callback(&writeAout), update_us); // setup ticker to write to AnalogOut |
WilliamMarshQMUL | 0:5307f49cd305 | 59 | Thread::wait(30000) ; // wait 30 sec - 30000ms |
WilliamMarshQMUL | 0:5307f49cd305 | 60 | update_us = 100000 ; // 100ms |
WilliamMarshQMUL | 0:5307f49cd305 | 61 | } |
WilliamMarshQMUL | 0:5307f49cd305 | 62 | } |