@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, <[email protected]> 
>>>>>>>>> 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 [email protected].
>>>>>>>>>> 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 [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/neonixie-l/f9cd29b8-08a2-4f39-a55e-f2286bae05dbn%40googlegroups.com.

Reply via email to