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.
TX_IR_NEC.h@0:d6c40db60579, 2017-02-09 (annotated)
- Committer:
- VicOnCampusGeel
- Date:
- Thu Feb 09 08:28:08 2017 +0000
- Revision:
- 0:d6c40db60579
start;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| VicOnCampusGeel | 0:d6c40db60579 | 1 | // -----------NEC Pulscode Timing ---------------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 2 | const float IR_Frequentie=38000.0; // 38kHZ IR frequentie |
| VicOnCampusGeel | 0:d6c40db60579 | 3 | const float IR_ON=0.5; // stuur dutycycle 50% vervangt IR=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 4 | const float IR_OFF=0.0; // stuur dutycycle 0% vervangt IR=1; |
| VicOnCampusGeel | 0:d6c40db60579 | 5 | // Dutycle aansturing via de basis van de transistor en PWM signaal |
| VicOnCampusGeel | 0:d6c40db60579 | 6 | // vervangt aansturing via de emittor via IR=0 of IR=1 via pin TX |
| VicOnCampusGeel | 0:d6c40db60579 | 7 | // D3 MOET wel als DigitalOut IR(D3) pin gedefinieerd worden |
| VicOnCampusGeel | 0:d6c40db60579 | 8 | // D3 MOET laag staan om te kunnen zenden |
| VicOnCampusGeel | 0:d6c40db60579 | 9 | // voor meer bereik, de extra testpin (anode van de diode) aan massa leggen |
| VicOnCampusGeel | 0:d6c40db60579 | 10 | |
| VicOnCampusGeel | 0:d6c40db60579 | 11 | const int NEC_Time=562; // in microsec |
| VicOnCampusGeel | 0:d6c40db60579 | 12 | const int NEC_Start_IRON=562*16;// in microsec |
| VicOnCampusGeel | 0:d6c40db60579 | 13 | const int NEC_Start_IROFF=562*8;// in microsec |
| VicOnCampusGeel | 0:d6c40db60579 | 14 | const int NEC_FrameTime=108; // ms |
| VicOnCampusGeel | 0:d6c40db60579 | 15 | |
| VicOnCampusGeel | 0:d6c40db60579 | 16 | unsigned int NEC_Code=0xFB04F708; // NEC center toets |
| VicOnCampusGeel | 0:d6c40db60579 | 17 | |
| VicOnCampusGeel | 0:d6c40db60579 | 18 | // FB04 High bytes = toetscode |
| VicOnCampusGeel | 0:d6c40db60579 | 19 | // F708 low Bytes Fabrikant code voor NEC |
| VicOnCampusGeel | 0:d6c40db60579 | 20 | // wordt low bit first en low byte first uitgezonden |
| VicOnCampusGeel | 0:d6c40db60579 | 21 | |
| VicOnCampusGeel | 0:d6c40db60579 | 22 | // IRLED=IR_OFF; // Stop sending IR Carrier. Zet PWM dutycycle op 0% |
| VicOnCampusGeel | 0:d6c40db60579 | 23 | // IRLED=IR_ON ; // Send IR Carrier. Zet PWM dutycycle op 50% |
| VicOnCampusGeel | 0:d6c40db60579 | 24 | |
| VicOnCampusGeel | 0:d6c40db60579 | 25 | // ----------------------------------------------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 26 | Timer Frame_timer; // Frame_timer voor frame timing |
| VicOnCampusGeel | 0:d6c40db60579 | 27 | Timer timer; // bittime counter |
| VicOnCampusGeel | 0:d6c40db60579 | 28 | |
| VicOnCampusGeel | 0:d6c40db60579 | 29 | //--------------------------------------------------------------------------------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 30 | void IR_Code_L0() // Logisch=0 IR Code van de fabrikant |
| VicOnCampusGeel | 0:d6c40db60579 | 31 | { |
| VicOnCampusGeel | 0:d6c40db60579 | 32 | timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 33 | IRLED=IR_ON ; // Send IR Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 34 | while (timer.read_us()< NEC_Time) { // Light on = 1TU for Nec |
| VicOnCampusGeel | 0:d6c40db60579 | 35 | /* Keep sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 36 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 37 | timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 38 | IRLED=IR_OFF ; // Stop sending IR Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 39 | while (timer.read_us()< NEC_Time) { // Light off = 1TU for Nec |
| VicOnCampusGeel | 0:d6c40db60579 | 40 | /* Stop sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 41 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 42 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 43 | //--------------------------------------------------------------------------------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 44 | void IR_Code_L1() // // Logisch=1 IR Code van de fabrikant |
| VicOnCampusGeel | 0:d6c40db60579 | 45 | { |
| VicOnCampusGeel | 0:d6c40db60579 | 46 | timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 47 | IRLED=IR_ON ; // Send IR Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 48 | while (timer.read_us()< NEC_Time) {// Light on = 1TU for Nec |
| VicOnCampusGeel | 0:d6c40db60579 | 49 | /* Keep sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 50 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 51 | timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 52 | IRLED=IR_OFF ; // Stop sending IR Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 53 | while (timer.read_us()< (NEC_Time*3)) { // Light off = 3TU for NEC |
| VicOnCampusGeel | 0:d6c40db60579 | 54 | /* Stop sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 55 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 56 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 57 | //--------------------------------------------------------------------------------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 58 | void stuur_Code( unsigned int NEC_Code) |
| VicOnCampusGeel | 0:d6c40db60579 | 59 | { |
| VicOnCampusGeel | 0:d6c40db60579 | 60 | // stuur de NEC_code, met NEC timing |
| VicOnCampusGeel | 0:d6c40db60579 | 61 | // inclusief Header frame |
| VicOnCampusGeel | 0:d6c40db60579 | 62 | // code + 1 extra bit |
| VicOnCampusGeel | 0:d6c40db60579 | 63 | // repeat code ( na de frame time) |
| VicOnCampusGeel | 0:d6c40db60579 | 64 | |
| VicOnCampusGeel | 0:d6c40db60579 | 65 | int bit=0; |
| VicOnCampusGeel | 0:d6c40db60579 | 66 | IR_disable=0 ; // om de emitter op massa te trekken |
| VicOnCampusGeel | 0:d6c40db60579 | 67 | // zodat via de basis verder kan gestuurd worden |
| VicOnCampusGeel | 0:d6c40db60579 | 68 | IRLED.period(1.0/IR_Frequentie); //Drive IR LED data pin with 38Khz PWM Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 69 | IRLED = IR_OFF; // Dutycycle 0% op basis van de transistor |
| VicOnCampusGeel | 0:d6c40db60579 | 70 | Frame_timer.start(); // Frametime counter |
| VicOnCampusGeel | 0:d6c40db60579 | 71 | timer.start(); // bittime counter |
| VicOnCampusGeel | 0:d6c40db60579 | 72 | |
| VicOnCampusGeel | 0:d6c40db60579 | 73 | // ----- Start sending Command frame -------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 74 | IRLED=IR_ON ; // Send IR Carrier. Op Basis van de transistor Dutycycle 50% |
| VicOnCampusGeel | 0:d6c40db60579 | 75 | Frame_timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 76 | timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 77 | while (timer.read_us()< NEC_Start_IRON) {// Light on |
| VicOnCampusGeel | 0:d6c40db60579 | 78 | /* Keep sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 79 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 80 | timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 81 | IRLED=IR_OFF ; // Stop sending IR Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 82 | while (timer.read_us()< NEC_Start_IROFF) { // Light off |
| VicOnCampusGeel | 0:d6c40db60579 | 83 | /* Stop sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 84 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 85 | // -- Start sending 32 NEC Code ------------------------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 86 | for (int i=0; i < 32; i++) { |
| VicOnCampusGeel | 0:d6c40db60579 | 87 | bit= (NEC_Code &1); // low bit first |
| VicOnCampusGeel | 0:d6c40db60579 | 88 | NEC_Code=(NEC_Code>>1); // volgende te versturen bit klaarzetten |
| VicOnCampusGeel | 0:d6c40db60579 | 89 | if (bit) { |
| VicOnCampusGeel | 0:d6c40db60579 | 90 | IR_Code_L1(); // stuur logisch 1 |
| VicOnCampusGeel | 0:d6c40db60579 | 91 | } else { |
| VicOnCampusGeel | 0:d6c40db60579 | 92 | IR_Code_L0(); // stuur logisch 0 |
| VicOnCampusGeel | 0:d6c40db60579 | 93 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 94 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 95 | IR_Code_L1(); // stuur logisch 1 send 1 trailing bit |
| VicOnCampusGeel | 0:d6c40db60579 | 96 | // --- Start sending IR=1 Frametime ----------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 97 | IRLED=IR_OFF; // Stop sending IR Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 98 | while (Frame_timer.read_ms()< NEC_FrameTime) { // Light off |
| VicOnCampusGeel | 0:d6c40db60579 | 99 | /* Stop sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 100 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 101 | // --- Start sending Repeat frame ----------------------------------------- |
| VicOnCampusGeel | 0:d6c40db60579 | 102 | timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 103 | IRLED=IR_ON ; // Send IR Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 104 | while (timer.read_us()< NEC_Start_IRON) {// Light on |
| VicOnCampusGeel | 0:d6c40db60579 | 105 | /* Keep sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 106 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 107 | timer.reset(); |
| VicOnCampusGeel | 0:d6c40db60579 | 108 | IRLED=IR_OFF ; // Stop sending IR Carrier |
| VicOnCampusGeel | 0:d6c40db60579 | 109 | while (timer.read_us()< (NEC_Start_IROFF/2)) { // Light off |
| VicOnCampusGeel | 0:d6c40db60579 | 110 | /* Stop sending Ir signaal */ |
| VicOnCampusGeel | 0:d6c40db60579 | 111 | } |
| VicOnCampusGeel | 0:d6c40db60579 | 112 | IR_Code_L0(); // stuur logisch 0 |
| VicOnCampusGeel | 0:d6c40db60579 | 113 | IR_disable=1 ; // om de emitter op 1 te trekken |
| VicOnCampusGeel | 0:d6c40db60579 | 114 | // IR transmitter valt af |
| VicOnCampusGeel | 0:d6c40db60579 | 115 | |
| VicOnCampusGeel | 0:d6c40db60579 | 116 | // --- Stop sending Repeat frame ------------------------------ |
| VicOnCampusGeel | 0:d6c40db60579 | 117 | Frame_timer.stop(); |
| VicOnCampusGeel | 0:d6c40db60579 | 118 | timer.stop(); |
| VicOnCampusGeel | 0:d6c40db60579 | 119 | } |