Provides class structure for simple control of Nixie Tubes using custom PCB
Diff: NixieTube.cpp
- Revision:
- 1:0470cc006ce7
- Parent:
- 0:34f3e0f37c55
- Child:
- 2:bb85bae1c1de
--- a/NixieTube.cpp Mon Dec 05 21:35:57 2016 +0000 +++ b/NixieTube.cpp Wed Dec 14 05:27:15 2016 +0000 @@ -13,10 +13,8 @@ #define TUBE_4_CATH 0x100000 #define TUBE_5_CATH 0x200000 #define TUBE_6_CATH 0x400000 -#define START_THREAD 1 -Mutex nixie_mutex; -NixieTube::NixieTube(PinName sdi, PinName scl, PinName rcl, PinName cen): _thread(&NixieTube::threadStarter, this, osPriorityNormal,1024),_sdi(sdi), _scl(scl), _rcl(rcl), _cen(cen){ +NixieTube::NixieTube(PinName sdi, PinName scl, PinName rcl, PinName cen): _sdi(sdi), _scl(scl), _rcl(rcl), _cen(cen){ digit1 = 1; digit2 = 2; digit3 = 3; @@ -24,27 +22,43 @@ delay1 = 0.0005; delay2 = 0.0045; brightness = 0; + curr_tube = 1; _cen.write(1.0); _cen.period_us(10000); - _thread.signal_set(START_THREAD); -} - -void NixieTube::threadStarter(void const *p) { - NixieTube *instance = (NixieTube*)p; - instance->threadWorker(); + std::printf("Starting Object\r\n"); + tickSeq.attach(this, &NixieTube::nixie_shiftout, 0.001 ); + std::printf("Sucess Ticker Started\r\n"); } -void NixieTube::threadWorker() { - _thread.signal_wait(START_THREAD); - while(1) { - nixie_thread(); - } -} - NixieTube::~NixieTube() { } - + +void NixieTube::nixie_shiftout() { + + + switch (curr_tube) { + case 1: + send_nixie_shiftreg(nixie_id_convert(digit1), 0, TUBE_1_CATH); + break; + case 2: + send_nixie_shiftreg(nixie_id_convert(digit2), 0, TUBE_2_CATH); + break; + case 3: + send_nixie_shiftreg(nixie_id_convert(digit3), 0, TUBE_3_CATH); + break; + case 4: + send_nixie_shiftreg(nixie_id_convert(digit4), 0, TUBE_4_CATH); + break; + default: + curr_tube = 1; + } + curr_tube++; + if (curr_tube == 5) { + curr_tube = 1; + } +} + int NixieTube::nixie_id_convert(int digit) { if (digit == 0 || digit == -1) { return digit + 1; @@ -66,39 +80,13 @@ for (int i=23; i >= 0; i--) { _sdi = buffer & (1 << i); _scl = 1; - _scl = 0; // Whats going on here? + _scl = 0; } _rcl = 1; - _rcl = 0; // Whats going on here? + _rcl = 0; } - -void NixieTube::nixie_thread() { - while (1) { - nixie_mutex.lock(); - send_nixie_shiftreg(nixie_id_convert(digit1), 0, TUBE_1_CATH); - Thread::wait(1); - send_nixie_shiftreg(0, 0, 0); - Thread::wait(1); - send_nixie_shiftreg(nixie_id_convert(digit2), 0, TUBE_2_CATH); - Thread::wait(1); - send_nixie_shiftreg(0, 0, 0); - Thread::wait(1); - send_nixie_shiftreg(nixie_id_convert(digit3), 0, TUBE_3_CATH); - Thread::wait(1); - send_nixie_shiftreg(0, 0, 0); - Thread::wait(1); - send_nixie_shiftreg(nixie_id_convert(digit4), 0, TUBE_4_CATH); - Thread::wait(1); - send_nixie_shiftreg(0, 0, 0); - Thread::wait(1); - nixie_mutex.unlock(); - } -} -void NixieTube::start_nixie(){ - //thread = new Thread(nixie_thread, this); - } -void NixieTube::update_nixie_tube(int ref,int val){ +void NixieTube::update_individual_nixie_tube(int ref,int val){ switch(ref){ case(1): digit1 = val; @@ -110,7 +98,17 @@ digit4 = val; } } + +void NixieTube::update_all_nixie_tube(int val1,int val2,int val3,int val4){ + digit1 = val1; + digit2 = val2; + digit3 = val3; + digit4 = val4; + } void NixieTube::set_dim(float duty,int pulsewidth){ _cen.write(duty); _cen.period_us(pulsewidth); -} \ No newline at end of file +} +void NixieTube::debug_digits(){ + std::printf("Tube1: %d,Tube2: %d,Tube3: %d,Tube4: %d\r\n",digit1,digit2,digit3,digit4); + }