Provides class structure for simple control of Nixie Tubes using custom PCB

Committer:
fischk08
Date:
Wed Dec 14 05:27:15 2016 +0000
Revision:
1:0470cc006ce7
Parent:
0:34f3e0f37c55
Child:
2:bb85bae1c1de
Updated Library to use ticker rather than mbedrtos. Added Debug output messages

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fischk08 0:34f3e0f37c55 1 #include "NixieTube.h"
fischk08 0:34f3e0f37c55 2 /* Not Currently Implmented
fischk08 0:34f3e0f37c55 3 #define TUBE_1_LED 0x00800
fischk08 0:34f3e0f37c55 4 #define TUBE_2_LED 0x01000
fischk08 0:34f3e0f37c55 5 #define TUBE_3_LED 0x02000
fischk08 0:34f3e0f37c55 6 #define TUBE_4_LED 0x04000
fischk08 0:34f3e0f37c55 7 #define TUBE_5_LED 0x08000
fischk08 0:34f3e0f37c55 8 #define TUBE_6_LED 0x10000
fischk08 0:34f3e0f37c55 9 */
fischk08 0:34f3e0f37c55 10 #define TUBE_1_CATH 0x20000
fischk08 0:34f3e0f37c55 11 #define TUBE_2_CATH 0x40000
fischk08 0:34f3e0f37c55 12 #define TUBE_3_CATH 0x80000
fischk08 0:34f3e0f37c55 13 #define TUBE_4_CATH 0x100000
fischk08 0:34f3e0f37c55 14 #define TUBE_5_CATH 0x200000
fischk08 0:34f3e0f37c55 15 #define TUBE_6_CATH 0x400000
fischk08 0:34f3e0f37c55 16
fischk08 1:0470cc006ce7 17 NixieTube::NixieTube(PinName sdi, PinName scl, PinName rcl, PinName cen): _sdi(sdi), _scl(scl), _rcl(rcl), _cen(cen){
fischk08 0:34f3e0f37c55 18 digit1 = 1;
fischk08 0:34f3e0f37c55 19 digit2 = 2;
fischk08 0:34f3e0f37c55 20 digit3 = 3;
fischk08 0:34f3e0f37c55 21 digit4 = 4;
fischk08 0:34f3e0f37c55 22 delay1 = 0.0005;
fischk08 0:34f3e0f37c55 23 delay2 = 0.0045;
fischk08 0:34f3e0f37c55 24 brightness = 0;
fischk08 1:0470cc006ce7 25 curr_tube = 1;
fischk08 0:34f3e0f37c55 26 _cen.write(1.0);
fischk08 0:34f3e0f37c55 27 _cen.period_us(10000);
fischk08 1:0470cc006ce7 28 std::printf("Starting Object\r\n");
fischk08 1:0470cc006ce7 29 tickSeq.attach(this, &NixieTube::nixie_shiftout, 0.001 );
fischk08 1:0470cc006ce7 30 std::printf("Sucess Ticker Started\r\n");
fischk08 0:34f3e0f37c55 31 }
fischk08 0:34f3e0f37c55 32
fischk08 0:34f3e0f37c55 33 NixieTube::~NixieTube()
fischk08 0:34f3e0f37c55 34 {
fischk08 0:34f3e0f37c55 35 }
fischk08 1:0470cc006ce7 36
fischk08 1:0470cc006ce7 37 void NixieTube::nixie_shiftout() {
fischk08 1:0470cc006ce7 38
fischk08 1:0470cc006ce7 39
fischk08 1:0470cc006ce7 40 switch (curr_tube) {
fischk08 1:0470cc006ce7 41 case 1:
fischk08 1:0470cc006ce7 42 send_nixie_shiftreg(nixie_id_convert(digit1), 0, TUBE_1_CATH);
fischk08 1:0470cc006ce7 43 break;
fischk08 1:0470cc006ce7 44 case 2:
fischk08 1:0470cc006ce7 45 send_nixie_shiftreg(nixie_id_convert(digit2), 0, TUBE_2_CATH);
fischk08 1:0470cc006ce7 46 break;
fischk08 1:0470cc006ce7 47 case 3:
fischk08 1:0470cc006ce7 48 send_nixie_shiftreg(nixie_id_convert(digit3), 0, TUBE_3_CATH);
fischk08 1:0470cc006ce7 49 break;
fischk08 1:0470cc006ce7 50 case 4:
fischk08 1:0470cc006ce7 51 send_nixie_shiftreg(nixie_id_convert(digit4), 0, TUBE_4_CATH);
fischk08 1:0470cc006ce7 52 break;
fischk08 1:0470cc006ce7 53 default:
fischk08 1:0470cc006ce7 54 curr_tube = 1;
fischk08 1:0470cc006ce7 55 }
fischk08 1:0470cc006ce7 56 curr_tube++;
fischk08 1:0470cc006ce7 57 if (curr_tube == 5) {
fischk08 1:0470cc006ce7 58 curr_tube = 1;
fischk08 1:0470cc006ce7 59 }
fischk08 1:0470cc006ce7 60 }
fischk08 1:0470cc006ce7 61
fischk08 0:34f3e0f37c55 62 int NixieTube::nixie_id_convert(int digit) {
fischk08 0:34f3e0f37c55 63 if (digit == 0 || digit == -1) {
fischk08 0:34f3e0f37c55 64 return digit + 1;
fischk08 0:34f3e0f37c55 65 }
fischk08 0:34f3e0f37c55 66 if (digit < 10) {
fischk08 0:34f3e0f37c55 67 return 11 - digit;
fischk08 0:34f3e0f37c55 68 }
fischk08 0:34f3e0f37c55 69 if (digit == 10) {
fischk08 0:34f3e0f37c55 70 return 11;
fischk08 0:34f3e0f37c55 71 }
fischk08 0:34f3e0f37c55 72 return 0;
fischk08 0:34f3e0f37c55 73 }
fischk08 0:34f3e0f37c55 74
fischk08 0:34f3e0f37c55 75 void NixieTube::send_nixie_shiftreg(int cathode_id, int led_bitfield, int tube_bitfield) {
fischk08 0:34f3e0f37c55 76
fischk08 0:34f3e0f37c55 77 int buffer = 0;
fischk08 0:34f3e0f37c55 78 buffer = 1 << (cathode_id-1) | led_bitfield | tube_bitfield;
fischk08 0:34f3e0f37c55 79
fischk08 0:34f3e0f37c55 80 for (int i=23; i >= 0; i--) {
fischk08 0:34f3e0f37c55 81 _sdi = buffer & (1 << i);
fischk08 0:34f3e0f37c55 82 _scl = 1;
fischk08 1:0470cc006ce7 83 _scl = 0;
fischk08 0:34f3e0f37c55 84 }
fischk08 0:34f3e0f37c55 85 _rcl = 1;
fischk08 1:0470cc006ce7 86 _rcl = 0;
fischk08 0:34f3e0f37c55 87
fischk08 0:34f3e0f37c55 88 }
fischk08 1:0470cc006ce7 89 void NixieTube::update_individual_nixie_tube(int ref,int val){
fischk08 0:34f3e0f37c55 90 switch(ref){
fischk08 0:34f3e0f37c55 91 case(1):
fischk08 0:34f3e0f37c55 92 digit1 = val;
fischk08 0:34f3e0f37c55 93 case(2):
fischk08 0:34f3e0f37c55 94 digit2 = val;
fischk08 0:34f3e0f37c55 95 case(3):
fischk08 0:34f3e0f37c55 96 digit3 = val;
fischk08 0:34f3e0f37c55 97 case(4):
fischk08 0:34f3e0f37c55 98 digit4 = val;
fischk08 0:34f3e0f37c55 99 }
fischk08 0:34f3e0f37c55 100 }
fischk08 1:0470cc006ce7 101
fischk08 1:0470cc006ce7 102 void NixieTube::update_all_nixie_tube(int val1,int val2,int val3,int val4){
fischk08 1:0470cc006ce7 103 digit1 = val1;
fischk08 1:0470cc006ce7 104 digit2 = val2;
fischk08 1:0470cc006ce7 105 digit3 = val3;
fischk08 1:0470cc006ce7 106 digit4 = val4;
fischk08 1:0470cc006ce7 107 }
fischk08 0:34f3e0f37c55 108 void NixieTube::set_dim(float duty,int pulsewidth){
fischk08 0:34f3e0f37c55 109 _cen.write(duty);
fischk08 0:34f3e0f37c55 110 _cen.period_us(pulsewidth);
fischk08 1:0470cc006ce7 111 }
fischk08 1:0470cc006ce7 112 void NixieTube::debug_digits(){
fischk08 1:0470cc006ce7 113 std::printf("Tube1: %d,Tube2: %d,Tube3: %d,Tube4: %d\r\n",digit1,digit2,digit3,digit4);
fischk08 1:0470cc006ce7 114 }