Very nice work - a lot more sophisticated than I dare to dream to achieve!
 - Richard


On Tuesday 9 January 2024 at 08:55:39 UTC Jon wrote:

> >For the hardware I was thinking that one of the 595's would connect to 
> low sided drivers (MPSA42 etc) to ground the required cathodes whilst the 
> other 595 would connect to high sided drivers (MPSA42+MPSA92 etc) to 
> connect the >desired anode to the HV supply
>
> Yes, that approach works really well. See this clock from a few years 
> back: https://youtu.be/4FnxWsp58EM
>
> Each six tube row is a 2 x 3 multiplex controlled by a pair of 595s 
> driving discrete transistor high-side drivers for the anodes, low side 
> drivers for the decimal points and a pair of Russian K155ID1 (near 
> equivalents of the 141) to decode and low side drive the digits. The 
> K155ID1 route was chosen instead of a regular logic decoder and discrete 
> low side drivers to save board space without getting into lots of fiddly 
> SMD stuff. And then each of the seven rows simply have their pairs of 595s 
> hooked up to make a 14 device total daisychain that controls the whole 
> display. There's a single PIC18 running the show which bit blasts display 
> refreshes down the daisychain  as well as managing USB comms, talking to a 
> DS3232 RTC - plenty of compute time and power to do that. The nice thing is 
> that this approach reduces all the display composition and management to 
> software - multiplexing, cross-fading, all the funky display animations 
> shown in the video; it's all just a matter of figuring out what bits to set 
> when in the 144 bit output stream. Took me right back to my programming 
> roots writing for bit-mapped displays on 8 bit micros in the early 80s! :)
>
> Jon.
>
>
> On Tuesday, January 9, 2024 at 5:03:52 AM UTC Richard Scales wrote:
>
>> @ David - that is an interesting idea - I did that already in another 
>> design  where I wanted to reduce the workload on an ESP8266 so I used a 
>> Teensy running a state machine based piece of code to do the heavy lifting 
>> - the ESP8266 just fed data to the Teensy over a serial connection - I kid 
>> you not - it works really well - though that is all running a lot slower 
>> than what I need for this multiplexed display project.
>> I am actually hoping to do it all on ESP8266 this time round with a 
>> couple of 595's driven via SPI transfers and some state-machine based code 
>> which manages the display.
>>
>> The next part of my planning is to gain the understanding of what delays 
>> are required and where.
>>
>> I am broadly assuming that I need to do things in the following order:
>>
>> {
>> Set the cathodes for the number to be displayed
>> Delay before turning on anode
>> Set the desired anode on
>> Wait for the desired 'anode on' time
>> Set the anode off
>> Wait for the desired 'anode off ' time
>> Increment the current anode number (reset to 0 if we got past the max)
>> }
>>
>> In this way, the anode on and off times can be set - thus controlling 
>> fading etc
>>
>> My next question is - do I need to wait at all after setting the cathodes 
>> up and before turning the required anode on?
>>
>> For the hardware I was thinking that one of the 595's would connect to 
>> low sided drivers (MPSA42 etc) to ground the required cathodes whilst the 
>> other 595 would connect to high sided drivers (MPSA42+MPSA92 etc) to 
>> connect the desired anode to the HV supply.
>>
>> I was then thinking that all anodes and cathodes would connect to 
>> something like 80V via a suitable resistance - as per the Bally schematic 
>> for driving multiplexed panaplex displays in pinball machines.
>>
>> As detailed here: bally_as2518_15_6digit.pdf (pinitech.com) 
>> <https://www.pinitech.com/retrofit/schematics/bally_as2518_15_6digit.pdf>
>>
>> Am I anywhere near the right track on any of this?
>>
>> - Richard
>>
>>
>> On Friday 3 November 2023 at 12:12:03 UTC David Pye wrote:
>>
>>> Hi,
>>>
>>> Next time I do a clock, I am going to separate my hw into 2:
>>>
>>> A cheap ARM based MCU using SPI/DMA to do multiplexing and dimming, with 
>>> enough IO to drive anodes and cathodes via individual transistors, with 
>>> Comms to the main MCU via spi or i2c.
>>>
>>> An esp32 or esp8266 to provide application logic
>>>
>>> Using the ARM MCU and transistors solves the issues with the HV driver 
>>> ICs needing 9v and both the STM32 and the esp8266 can communicate with 3v3 
>>> signal levels and will be cheaper albeit with higher component count.
>>>
>>> David
>>>
>>> On Fri, 3 Nov 2023, 11:15 Mike Mitchell, <mmit...@gmail.com> wrote:
>>>
>>>> That's basically what I'm doing for my simple case.  The upkeep work is 
>>>> done after tubes are energized, where I have significantly more time 
>>>> before 
>>>> the next event.  The off time is only 200us so I don't do anything during 
>>>> the off time.  With the fast processors of today you could do "quick" 
>>>> things in the off time, but any complex computation I'd put in the longer 
>>>> on time.  I'm using the FastLED module to drive a short string of LEDs 
>>>> during my "DISP_EVEN" time, but calculate what to put into the LEDs in the 
>>>> "DISP_ODD" time.
>>>>
>>>> On Friday, November 3, 2023 at 12:43:40 AM UTC-4 Richard Scales wrote:
>>>>
>>>>> @Mike
>>>>> So, I have been getting my head around the whole state-machine 
>>>>> concept. I have one I did before - curiously also running on  a Teensy 
>>>>> but 
>>>>> that was because I was worried about speed (I had no idea!).
>>>>> Regardless.
>>>>>
>>>>> Here is what I think my state-machine might look like:
>>>>>
>>>>> Set State to 'Turn Off Displays'
>>>>>
>>>>> :Main program loop
>>>>> If state = 'Turn off Displays' then turn off all the anodes and change 
>>>>> state to 'Delay before turn on'
>>>>>
>>>>> //This state exists to allow the injection of any required delay 
>>>>> between display of each digit / group of digits 
>>>>> if state = 'Delay before turn on' then if there there has been 
>>>>> sufficient delay, change state to 'Turn on desired display'
>>>>>
>>>>> //This state works out which cathodes and anodes to set and turns them 
>>>>> on
>>>>> if state = 'Turn on desired display' then set the required cathodes 
>>>>> and anodes and turn them on and change state to 'Display is on'
>>>>>
>>>>> //This state works out whether the display has been on long enough
>>>>> if state = 'Display is on' then has it been on long enough? If so, 
>>>>> change state to 'Turn off Displays'
>>>>>
>>>>>
>>>>> Rest of clock code goes here - and by that I mean the business of 
>>>>> working out what to display be it time, date, temp, pressure etc.
>>>>> Obviously everything must be non-blocking so if I want to do fancy 
>>>>> things like scrolling messages then I assume that I will need to 
>>>>> introduce 
>>>>> more 'states' to control all that
>>>>>
>>>>> :End of main program loop
>>>>>
>>>>> I think this differs from yours in as much as I have lumped all the 
>>>>> 'rest of clock code' into one place on the basis that it should not be 
>>>>> blocking anything and execute quickly.
>>>>>
>>>>> Is this at all wise?
>>>>>
>>>>>  - Richard
>>>>>
>>>>>
>>>>> On Thursday, 2 November 2023 at 13:32:57 UTC Richard Scales wrote:
>>>>>
>>>>>> @Mike, many thanks.
>>>>>>
>>>>>> I'll work through that.
>>>>>>
>>>>>>  - Richard
>>>>>>
>>>>>>
>>>>>> On Thursday, 2 November 2023 at 12:20:53 UTC Mike Mitchell wrote:
>>>>>>
>>>>>>> My most recent Nixie project uses ZM1032 tubes.  They are a 9-pin 
>>>>>>> tube, with five cathode pins and two anodes.  I'm using direct-drive on 
>>>>>>> all 
>>>>>>> the cathodes, but skimp on the tens-of-hours digit where I only drive 
>>>>>>> three 
>>>>>>> cathodes instead of all five.  I'm using four SN75468 darlington arrays 
>>>>>>> to 
>>>>>>> drive the cathodes and two opto-isolators to drive the anodes, 
>>>>>>> multiplexing 
>>>>>>> the anodes as all evens and all odds.
>>>>>>> I'm using a Teensy 4.1 processor to control everything, though I 
>>>>>>> could have used an ESP32.  I just wanted something with a lot of pins 
>>>>>>> to 
>>>>>>> handle driving the 28 cathodes.  I'm not using a timing interrupt at 
>>>>>>> all. 
>>>>>>> In the main loop I use the built-in arduino "micros()" call to keep 
>>>>>>> track 
>>>>>>> of the time and compare it to the time of the next event.  I use a 
>>>>>>> state 
>>>>>>> variable to keep track of what to do next.  Here's some pseudo code:
>>>>>>>
>>>>>>> if (long)(micros() - timeNextDisp) >= 0 {
>>>>>>>   switch(dispstate) {
>>>>>>>     case DISP_DELAY_EVEN:
>>>>>>>       timeNextDisp = micros() + 200
>>>>>>>       turn off all anodes, turn on all cathodes
>>>>>>>       dispstate = DISP_EVEN
>>>>>>>       break;
>>>>>>>     case DISP_EVEN:
>>>>>>>       timeNextDisp = micros() + disp_even_time
>>>>>>>       turn off all cathodes
>>>>>>>       turn on appropriate cathodes
>>>>>>>       turn on even anode
>>>>>>>       dispstate = DISP_DELAY_ODD
>>>>>>>       /* split work between even/odd anodes */
>>>>>>>       read PIR
>>>>>>>       read GPS
>>>>>>>       break;
>>>>>>>     case DISP_DELAY_ODD:
>>>>>>>       timeNextDisp = micros() + 200
>>>>>>>       turn off all anodes, turn on all cathodes
>>>>>>>       dispstate = DISP_EVEN
>>>>>>>       break;
>>>>>>>     case DISP_ODD:
>>>>>>>       timeNextDisp = micros() + disp_odd_time
>>>>>>>       turn off all cathodes
>>>>>>>       turn on appropriate cathodes
>>>>>>>       turn on odd anode
>>>>>>>       dispstate = DISP_DELAY_EVEN
>>>>>>>       /* split work between even/odd anodes */
>>>>>>>       read RTC
>>>>>>>       read ADC
>>>>>>>       calculate time display values
>>>>>>>       break;
>>>>>>> }
>>>>>>>
>>>>>>> In my case the even digits are behind a screen electrode which 
>>>>>>> blocks their light.  I keep the even digits on for about twice as long 
>>>>>>> as 
>>>>>>> the odd digits to even out the brightness.  I could have increased the 
>>>>>>> even 
>>>>>>> digit's current by reducing the even's anode resistor, but I decided to 
>>>>>>> keep the current the same for even/odd and just increase the "on" time. 
>>>>>>>  My 
>>>>>>> timings are roughly 10.1ms on for even, 0.2 ms for dead time, 5.1ms on 
>>>>>>> for 
>>>>>>> odd, 0.2 ms dead time, for 15.625 ms per cycle (64 times a second).
>>>>>>> A more typical multiplexing scheme could have two state variables, 
>>>>>>> one selects either displaying a digit or discharging the tube, the 
>>>>>>> other 
>>>>>>> selects what tube to display.
>>>>>>> On Thursday, November 2, 2023 at 12:56:33 AM UTC-4 gregebert wrote:
>>>>>>>
>>>>>>>> Where it all leads to, I think, is that you no longer need to do 
>>>>>>>> custom logic design, and you can skip the need for certain ICs such as 
>>>>>>>> realtime clocks, by switching to a software-based design, whether it's 
>>>>>>>> RasPi, Arduino, or any other embedded controller.
>>>>>>>>
>>>>>>>> It's gotten so "bad" that I rarely need to use a scope or logic 
>>>>>>>> analyzer to hunt down a bug. Several years ago I literally logged-in 
>>>>>>>> remotely to the RasPi controlling my NIMO clock and did quite a bit of 
>>>>>>>> software development and debug from thousands of miles away.
>>>>>>>>
>>>>>>>> Even now, I'm too lazy to get out of my chair, and go out into the 
>>>>>>>> chilly garage to work on my Pi+FPGA board. Instead, I will write a new 
>>>>>>>> test 
>>>>>>>> and run/debug logic simulations rather than push new (untested) code 
>>>>>>>> onto 
>>>>>>>> the FPGA to see if it works.
>>>>>>>>
>>>>>>>> On Wednesday, November 1, 2023 at 9:23:25 PM UTC-7 Richard Scales 
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Dual Core Processors - now my head really hurts - I mean - I love 
>>>>>>>>> the idea but don't think my programming skills are ever going to 
>>>>>>>>> stretch 
>>>>>>>>> that far!
>>>>>>>>> Just woke early (03.13) - still full of Covid and had a wrestles 
>>>>>>>>> thinking session on this during which I reminded myself of all the 
>>>>>>>>> success 
>>>>>>>>> that I have had with B-7971/ZM1350 Smart sockets - can you see where 
>>>>>>>>> this 
>>>>>>>>> might be going?
>>>>>>>>>  - Richard
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wednesday, 1 November 2023 at 16:29:32 UTC Craig Garnett wrote:
>>>>>>>>>
>>>>>>>>>> I'm using a Pico in my project, I run the tube driving routine on 
>>>>>>>>>> one core and everything else on the rest so it doesn't suffer from 
>>>>>>>>>> slowdowns.
>>>>>>>>>> I've had to introduce a delay to slow it down to a 1ms refresh!
>>>>>>>>>>
>>>>>>>>>> Craig
>>>>>>>>>> On Wednesday, 1 November 2023 at 15:47:33 UTC gregebert wrote:
>>>>>>>>>>
>>>>>>>>>>> Multiplexing might not be possible in certain software 
>>>>>>>>>>> environments. Several years ago I switched to Linux-based Raspberry 
>>>>>>>>>>> Pi 
>>>>>>>>>>> systems in my projects, and with the unpredictable overhead of 
>>>>>>>>>>> Linux I cant 
>>>>>>>>>>> rely on the CPU being available every millisecond to update the 
>>>>>>>>>>> display. 
>>>>>>>>>>> Instead of using Arduino or a custom OS, I add an FPGA or CPLD to 
>>>>>>>>>>> handle 
>>>>>>>>>>> the time- critical tasks.
>>>>>>>>>>>
>>>>>>>>>>> Just by coincidence, I'm putting the final touches on the 
>>>>>>>>>>> software and RTL code for a board I recently had fabbed to do this. 
>>>>>>>>>>> I know 
>>>>>>>>>>> it's blasphemy, but the first project using this is LED-based...I 
>>>>>>>>>>> got a 
>>>>>>>>>>> bunch of large 8x8 red/green LED arrays for just under 1 USD apiece 
>>>>>>>>>>> and the 
>>>>>>>>>>> need a multiplexed driver. Dont worry, there are several nixie and 
>>>>>>>>>>> nixie-ish projects in the pipeline that will use this board.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> [image: raspi_fpga.JPG]
>>>>>>>>>>>
>>>>>>>>>>> On Wednesday, November 1, 2023 at 8:19:48 AM UTC-7 Richard 
>>>>>>>>>>> Scales wrote:
>>>>>>>>>>>
>>>>>>>>>>>> @Paul - I have no idea of the sense of scale and the relative 
>>>>>>>>>>>> times taken. If I were to hang another HV driver on the chain with 
>>>>>>>>>>>> associated electronics to switch the HV, is there going to be 
>>>>>>>>>>>> enough time 
>>>>>>>>>>>> to do the following:
>>>>>>>>>>>>
>>>>>>>>>>>> Set the bits for the segments required- I add this step just in 
>>>>>>>>>>>> case any settling time might be be required
>>>>>>>>>>>> Set the bits for the segments required and the anode(s) on
>>>>>>>>>>>> Wait for 400us (typical on time for the panaplex segments I 
>>>>>>>>>>>> have in mind
>>>>>>>>>>>> Set the digits and anode(s) off again
>>>>>>>>>>>> Loop to the next set of digits
>>>>>>>>>>>>
>>>>>>>>>>>> With 12 individual anodes - there would be 12 passes - one for 
>>>>>>>>>>>> each anode that needed to be switched on
>>>>>>>>>>>> If I used 2 drivers (using 3 x 16 bits for cathodes, I could 
>>>>>>>>>>>> use bits from the remaining 16 to control the anodes. Thus there 
>>>>>>>>>>>> would be 
>>>>>>>>>>>> only 3 passes.
>>>>>>>>>>>>
>>>>>>>>>>>> Please stop me when I've gone off the scent (still mid-covid) 
>>>>>>>>>>>> :-(
>>>>>>>>>>>>
>>>>>>>>>>>> In Summary:
>>>>>>>>>>>> Using the HV55xx for cathodes AND anodes
>>>>>>>>>>>> Given i want 12 characters:
>>>>>>>>>>>> with 1 driver I have 16 segments and 16 spare for the 12 anodes 
>>>>>>>>>>>> - easy but slowest
>>>>>>>>>>>> with 2 drivers I have 3 lots of 16 segments and then group the 
>>>>>>>>>>>> displays into lumps of 4 (12 characters/3) and still have 16 bits 
>>>>>>>>>>>> to 
>>>>>>>>>>>> control the anodes, of which there will now only be 3)
>>>>>>>>>>>>
>>>>>>>>>>>> Am I anywhere near close with the driver split and the 
>>>>>>>>>>>> pseudocode for the ISR?
>>>>>>>>>>>> I was thinking that there should be some uS delays either 
>>>>>>>>>>>> before and/or after lighting the segments
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> - Richard
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Wednesday, 1 November 2023 at 15:01:20 UTC Richard Scales 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> @David - many thanks for that caution though there will not be 
>>>>>>>>>>>>> (nor ever will there be!) any LEDS for this project!
>>>>>>>>>>>>> @Pauld - thank you - I had thought of that but I was 
>>>>>>>>>>>>> endeavouring to keep the code inside the ISR to an absolute 
>>>>>>>>>>>>> minimum so 
>>>>>>>>>>>>> thought that it would be best handled outside of it and hence 
>>>>>>>>>>>>> separate from 
>>>>>>>>>>>>> the HV chain. Using SPI.Transfer  to send 32, 64 or 96 bits - I 
>>>>>>>>>>>>> guess it 
>>>>>>>>>>>>> all happens fairly quickly!
>>>>>>>>>>>>> @Benoit - I will look at that - ESP32 - another bridge thus 
>>>>>>>>>>>>> far uncrossed!
>>>>>>>>>>>>>  - Richard
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wednesday, 1 November 2023 at 14:54:53 UTC Benoit Tourret 
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hello, 
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> if an ESP8266 is not enough powerful, the ESP32 will do the 
>>>>>>>>>>>>>> job.
>>>>>>>>>>>>>> the ESP_WROVER can be a good platfom.
>>>>>>>>>>>>>> you should have a look to Mose's work on 
>>>>>>>>>>>>>> https://neonixie.com/Z57XM6DV2/
>>>>>>>>>>>>>> the code is a bit "strong" as it can be used both on an 6 
>>>>>>>>>>>>>> IV-9 clock and a more traditional  6 digits Z57, superb clocks, 
>>>>>>>>>>>>>> all they 
>>>>>>>>>>>>>> need is addressable LEDs for a more colorful background. and 
>>>>>>>>>>>>>> deactivable.
>>>>>>>>>>>>>> the BH1750 luxmeter does a great job and is more sensible 
>>>>>>>>>>>>>> than a standard photoresistor.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Le mercredi 1 novembre 2023 à 14:38:44 UTC+1, David Pye a 
>>>>>>>>>>>>>> écrit :
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I offer you one caution with the ESP8266 boards - almost 
>>>>>>>>>>>>>>> everything is implemented in the libraries in software rather 
>>>>>>>>>>>>>>> than onchip 
>>>>>>>>>>>>>>> hw. 
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> That means doing things like updating addressable LEDs can 
>>>>>>>>>>>>>>> cause the multiplexing to glitch slightly because of the need 
>>>>>>>>>>>>>>> to send LED 
>>>>>>>>>>>>>>> data at strict timings.   (Or, if you sacrifice led timings to 
>>>>>>>>>>>>>>> run your 
>>>>>>>>>>>>>>> multiplex interrupt routine, it can glitch the LEDs.  ).  Chips 
>>>>>>>>>>>>>>> which have 
>>>>>>>>>>>>>>> DMA/more complex peripherals might avoid this.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> You might get away with it with certain combinations of 
>>>>>>>>>>>>>>> things but it was a bit of a pain for me.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> David
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Wed, 1 Nov 2023, 11:54 Richard Scales, <
>>>>>>>>>>>>>>> ric...@scalesweb.co.uk> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Many thanks Nick. 
>>>>>>>>>>>>>>>> Unless anything else comes to light I think I will forge 
>>>>>>>>>>>>>>>> ahead on that basis. I want to drive 15 segment panaplex 
>>>>>>>>>>>>>>>> displays (16 
>>>>>>>>>>>>>>>> including the DP) so plan to use HV5530 or similar driver for 
>>>>>>>>>>>>>>>> the segments, 
>>>>>>>>>>>>>>>> probably two of them. Then the same MPSA42/MPSA92 driver 
>>>>>>>>>>>>>>>> arrangement for 
>>>>>>>>>>>>>>>> the HV though there are going to be 5 of those - I might be 
>>>>>>>>>>>>>>>> running low on 
>>>>>>>>>>>>>>>> pins it using a Wemos - I might consider a port expander for 
>>>>>>>>>>>>>>>> the extra pins 
>>>>>>>>>>>>>>>> needed - I need to check pins required - I think 4 for the HV 
>>>>>>>>>>>>>>>> register 
>>>>>>>>>>>>>>>> chain, 6 for the Anode switching (two drivers driving a 12 
>>>>>>>>>>>>>>>> digit device - 
>>>>>>>>>>>>>>>> perhaps 5 for a 10 digit device) plus I want to read a PIR and 
>>>>>>>>>>>>>>>> talk to a 
>>>>>>>>>>>>>>>> BMP-280 sensor. Certainly a Wemos + port expander would do it 
>>>>>>>>>>>>>>>> - might get 
>>>>>>>>>>>>>>>> away with a Node MCU or similar.
>>>>>>>>>>>>>>>> OK, I just realised that I can use a single 32 bit driver  
>>>>>>>>>>>>>>>> with two sets of 16 bits, one going to each bank of displays.
>>>>>>>>>>>>>>>> It still has the same pin requirements of the processor I 
>>>>>>>>>>>>>>>> think. That will be a juggling excersise!
>>>>>>>>>>>>>>>>  - Richard
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Wednesday, 1 November 2023 at 11:10:02 UTC Nick Sargeant 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi, 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> It’s not difficult. My fumbling attempts at a Nixie clock 
>>>>>>>>>>>>>>>>> some time ago used a 4:1 multiplex ratio, using four digits 
>>>>>>>>>>>>>>>>> and only one 
>>>>>>>>>>>>>>>>> decoder. I used the same MPSA42/MPSA92 driver as your 
>>>>>>>>>>>>>>>>> example. My multiplex 
>>>>>>>>>>>>>>>>> function was called at 100Hz, so each digit was refreshing at 
>>>>>>>>>>>>>>>>> 25Hz. It 
>>>>>>>>>>>>>>>>> doesn’t flicker, and (whoa!) it is working 15 years later. 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The only mod I had was when switching between digits, I 
>>>>>>>>>>>>>>>>> turned the cathode drive off for a period of 20 microseconds, 
>>>>>>>>>>>>>>>>> before 
>>>>>>>>>>>>>>>>> selecting the correct anode and turning on the next digit. 
>>>>>>>>>>>>>>>>> This helped 
>>>>>>>>>>>>>>>>> prevent ghosting. 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Wednesday, 1 November 2023 at 10:14:25 UTC Richard 
>>>>>>>>>>>>>>>>> Scales wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Actually - I just looked through an example over at: 
>>>>>>>>>>>>>>>>>> https://www.hackster.io/doug-domke/multiplexed-nixie-tube-clock-759ff5
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ... and it all seems fairly understandable, have I 
>>>>>>>>>>>>>>>>>> overthought this?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>  - Richard
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Wednesday, 1 November 2023 at 09:22:03 UTC Richard 
>>>>>>>>>>>>>>>>>> Scales wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> The time has come when I need to get a handle the dark 
>>>>>>>>>>>>>>>>>>> and mysterious art of multiplexing.
>>>>>>>>>>>>>>>>>>> I have an understanding of what needs to happen though 
>>>>>>>>>>>>>>>>>>> am mostly at a loss of how to implement it.
>>>>>>>>>>>>>>>>>>> I am broadly assuming that I should be using some kind 
>>>>>>>>>>>>>>>>>>> of interrupt routine to make the actual display work whilst 
>>>>>>>>>>>>>>>>>>> the rest of the 
>>>>>>>>>>>>>>>>>>> code gets on with the job of working out what to display 
>>>>>>>>>>>>>>>>>>> and when to 
>>>>>>>>>>>>>>>>>>> display it.
>>>>>>>>>>>>>>>>>>> Is it even going to be feasible to have some kind of 
>>>>>>>>>>>>>>>>>>> interrupt routine that decides what digits to light - set 
>>>>>>>>>>>>>>>>>>> all the bits and 
>>>>>>>>>>>>>>>>>>> then sets the right anode(s) on and then off again giving 
>>>>>>>>>>>>>>>>>>> enough time for 
>>>>>>>>>>>>>>>>>>> the persistence of vision to produce a non flickering 
>>>>>>>>>>>>>>>>>>> display when using 
>>>>>>>>>>>>>>>>>>> something like a wemos D1?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I am thinking that the interrupt routine needs to 
>>>>>>>>>>>>>>>>>>> increment which digit(s) is/are being illuminated - set up 
>>>>>>>>>>>>>>>>>>> the right bit 
>>>>>>>>>>>>>>>>>>> pattern for the cathodes and turn on the relevant anode(s) 
>>>>>>>>>>>>>>>>>>> - wait a little 
>>>>>>>>>>>>>>>>>>> and then turn them off again. 
>>>>>>>>>>>>>>>>>>> My worry is that the amount of time that the displays 
>>>>>>>>>>>>>>>>>>> should be left on might be a little too long for the ISR as 
>>>>>>>>>>>>>>>>>>> my 
>>>>>>>>>>>>>>>>>>> understanding is that these should be kept as lean as 
>>>>>>>>>>>>>>>>>>> possible.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Do I even need multiple interrupts (my covid addled 
>>>>>>>>>>>>>>>>>>> brain is struggling to type let alone contemplate multiple 
>>>>>>>>>>>>>>>>>>> ISR's!)?
>>>>>>>>>>>>>>>>>>> Can the rest of my code run in a non time critical 
>>>>>>>>>>>>>>>>>>> manner as it works out what it wants to display where 
>>>>>>>>>>>>>>>>>>> whilst the interrupt 
>>>>>>>>>>>>>>>>>>> routine merryly illuminates digits based on values which I 
>>>>>>>>>>>>>>>>>>> store in a 
>>>>>>>>>>>>>>>>>>> buffer somewhere? 
>>>>>>>>>>>>>>>>>>> ... or does the rest of my code have to work in come 
>>>>>>>>>>>>>>>>>>> kind of state-machine fashion?
>>>>>>>>>>>>>>>>>>> I would expect (hope) to handle display brightness via 
>>>>>>>>>>>>>>>>>>> PWM signals to HV Drivers. 
>>>>>>>>>>>>>>>>>>> I have no need for cross fade effects either - just 
>>>>>>>>>>>>>>>>>>> basic multiplexing of say 10 different multi segment 
>>>>>>>>>>>>>>>>>>> displays. I am more 
>>>>>>>>>>>>>>>>>>> than happy to break up the displays into say 2 (or more) 
>>>>>>>>>>>>>>>>>>> groups in order to 
>>>>>>>>>>>>>>>>>>> makes things a little easier.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Can anyone point me in the right direction - ideally 
>>>>>>>>>>>>>>>>>>> with some code snippets that I can use as a foundation?
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Just to confirm, it is only the general implementation  
>>>>>>>>>>>>>>>>>>> to drive the displays that eludes me - the rest of the 
>>>>>>>>>>>>>>>>>>> clock code is well 
>>>>>>>>>>>>>>>>>>> defined and working well in a direct drive capacity.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> The desire to move to multiplexed operation is born out 
>>>>>>>>>>>>>>>>>>> the the desire to drive a greater number of displays with a 
>>>>>>>>>>>>>>>>>>> greater number 
>>>>>>>>>>>>>>>>>>> of segments which could be done via direct drive but I 
>>>>>>>>>>>>>>>>>>> foresee that 
>>>>>>>>>>>>>>>>>>> multiplexing the displays will simplify the electronics 
>>>>>>>>>>>>>>>>>>> required.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> So many questions I know. I would be grateful for any 
>>>>>>>>>>>>>>>>>>> pointers, thank you.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>  - Richard
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> -- 
>>>>>>>>>>>>>>>> You received this message because you are subscribed to the 
>>>>>>>>>>>>>>>> Google Groups "neonixie-l" group.
>>>>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails 
>>>>>>>>>>>>>>>> from it, send an email to neonixie-l+...@googlegroups.com.
>>>>>>>>>>>>>>>> To view this discussion on the web, visit 
>>>>>>>>>>>>>>>> https://groups.google.com/d/msgid/neonixie-l/e576bff1-8d65-4d53-b0cc-2ba5ba574232n%40googlegroups.com
>>>>>>>>>>>>>>>>  
>>>>>>>>>>>>>>>> <https://groups.google.com/d/msgid/neonixie-l/e576bff1-8d65-4d53-b0cc-2ba5ba574232n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>>>>>>> .
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "neonixie-l" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to neonixie-l+...@googlegroups.com.
>>>>
>>> To view this discussion on the web, visit 
>>>> https://groups.google.com/d/msgid/neonixie-l/1bc508d5-1f0c-4b6e-af2f-3f9a0092ecc6n%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/neonixie-l/1bc508d5-1f0c-4b6e-af2f-3f9a0092ecc6n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"neonixie-l" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to neonixie-l+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/neonixie-l/0c018277-a937-4dd8-9ddc-db23d4bb86edn%40googlegroups.com.

Reply via email to