Giter Site home page Giter Site logo

dekunukem / exixe Goto Github PK

View Code? Open in Web Editor NEW
229.0 20.0 40.0 198.01 MB

Miniature driver modules for IN-12 and IN-14 Nixie tubes

License: MIT License

Shell 0.01% C 94.76% C++ 0.16% Makefile 1.61% HTML 1.94% Assembly 0.30% CSS 1.07% Game Maker Language 0.01% Python 0.15%

exixe's Introduction

exixe: Low-cost miniature Nixie tube driver modules

Get exixe | User manual

Alt text

Alt text

Alt text

Alt text

exixe is a miniature driver module for IN-12 and IN-14 Nixie tubes.

It aims to simplify Nixie tube related projects by eliminating the need for obscure vintage driver chips and multiplexing circuits. Instead, you can control every digit and the RGB backlight via SPI using only 3 wires and 1 line of code.

exixe is cheap, small and modular for easy integration. It is compatible with Arduino, Raspberry Pi, and virtually all embedded dev boards today.

Buy exixe on Tindie!

I did a small production run of exixe modules, and now you can buy them directly on Tindie:

https://www.tindie.com/products/dekuNukem/exixe-miniture-nixie-tube-driver-modules/

Features

Compared to the traditional approach, exixe modules offers significant advantages:

Small and modular

  • 2x4 cm (0.79x1.57 inches)
  • Breadboard friendly
  • Easy integration
  • Reusable

SPI interface

  • High speed, up to 24MHz SCLK
  • Simple 16-byte command packet
  • Available on virtually all embedded systems including Arduino and Raspberry Pi

Advanced control

  • RGB backlight
  • 128 brightness levels
  • Hardware PWM on all cathodes and LEDs for smooth dimming and animations

Tube overdrive

  • Optionally allows twice the cathode current
  • For poisoned cathodes in second-hand tubes
  • Before and after.

No multiplexing

  • Brighter display
  • Longer tube life
  • Simpler design
  • Lower power consumption

Getting started

Please see getting_started.md

Arduino Library

Please click here

Raspberry Pi/Python Library

Please click here

Pinout, SPI command format and technical details

Please see technical_details.md

Supported tubes

exixe-14 module is primarily designed for IN-14 Nixie tubes, but will also work with IN-16 and IN-19 tubes.

exixe-12 module is primarily designed for IN-12 Nixie tubes, but works with IN-15 tubes as well.

Using other tubes

You can also use exixe module with unsupported tubes, with some modification.

Please see unsupported_tubes.md

Making some yourself

Please see making_some.md

Contact

Questions? Feel free to open an issue. This is the preferred way since it helps other people too.

You can also email me at dekunukem gmail com for inquires.

More photos

exixe-12 working with an Arduino Micro, showing a smooth crossfade animation:

Alt text

exixe-14 in action on a finished clock:

Alt text

Alt text

exixe's People

Contributors

acorbin3 avatar dekunukem avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

exixe's Issues

sourcing STM32F042K6T6

Are there any requirements for the type of STM32F being used?
Availability of these chips is still bad. From what I can see, it needs to support the SPI bus and be in 32-LQFP footprint?

SPI pins

Hi,are the green & blue addresses (spi_buf[14] and [15]) reversed in the Arduino 0_LED sketch? I find they are so I'm wondering if my boards have an issue. Tested 2x boards so far with the same results. exixe12. Thanks.

Exixe14 BOM not matching PCB

Hi,
The labels on the pcb goes up to R28 while the BOM only goes to R25.
This means that i don't know the values for the bottom of pcb.

Thank you

STM32 ST-LINK Utility Error (Can not connect to target!)

I'm new to building and SMD components to pcb and have run into a problem trying to load the firmware to the STM-32 module. Attached is a photo of the error I'm running into, plus the front and back of the Exixe-12 board I soldered the components onto (maybe I messed that up).

Hoping someone can help me out or point me in the right direction.

Exixe-12 Back
Exixe-12 Front
ST-LINK Utility Error

Windows 10 & STM32 ST-LINK

STM32 ST-LINK Utility (STSW-LINK004) doesn't seem to work on Windows 10.
I had the PCB's made, did an excellent job reflowing the PCB with solder paste, but couldn't connect with the programmer to the STM32. I used exactly the same software, programmer and settings.
After 2-3 hours of fiddling around I looked for another programmer, since the software looked quite old. STM32CubeProgrammer immediately connected to the STM32 and my board is working just fine.

Arduino library: Initialising multiple tubes doesn't seem to work

I'm finding that initialising multiple exixe instances stops them all from working. For example,

exixe_1 = exixe(cs_pin_1);
exixe_2 = exixe(cs_pin_2);

Individually each exixe works, but together, they do not.

I believe this is because the SPI initialisation is performed in the exixe method, and therefore called twice. This bit:

  SPI.begin();
  SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));

Removing this code, and performing it explicitly, just once, beforehand seems to work for me.

I propose introducing a new method, perhaps begin, or setup, which wraps the SPI setup and means that developers can still benefit from the convenience of using just the exixe library, but can also configure this all themselves if they want to.

Inconsistent behavior with multiple exixe

I'm trying to drive 4 nixie tubes (with the goal of driving 6 for a clock)

I'm seeing inconsistent behavior. I see either 0, 1, 2 or 3 tubes changing digits. Even when 2 tubes are running, sometimes a digit might not flip.

Based on the documentation, I'm guessing this might be due to a lack of power but the 4 exixe are getting the 3.3V from my power supply directly (3.3V rated at 800mA max) I do have a GPS module connected to the same supply and it is able to run and get a fix.

IMG_1207

My code currently stores the last digit and calls show_digit when the digit changes for that particular tube

if (digit != tube_digit) {
    tube.clear();
    tube.show_digit(digit, 127, 0);
    tube_digit = digit;
}

tube.spi_init() is only called once in setup()

If I use the first 2 exixe for seconds then I am able to see them count up based on GPS time. But the next 2 tubes which are hooked up to minutes aren't showing anything, even though I can see in the logs that I am calling show_digit.

I had followed the getting started guide and tested tubes and ran the LED test on the exixe board by themselves.

Any idea on how to debug the issue here? Thank you

LED does not stay lit

I think when you zero out the buffer in exixe::set_led and then spi_write() out that buffer, the LED gets turned off. Maybe unrelated, the LED does not light at all when set_led() is called in arduino's setup().

Mounting methods

Is there a preferred method of mounting the exixe board to something other than a breadboard?

Random blinking numbers and inconsistent LED behaviour

Hello there,

i got myself some nixie tubes and the IN14 driver boards.
I tried hooking up the cables as shown in the getting started page and double checked the connections.
Then I tried running the LED-test code as prescribed. I could change the colour of the LED, but it also happened, that the LED changed randomly from bright to low white(ish) and to purple. So no consistent behaviour here.
When I tried the digit loop, the LED start blinking random, changing colour between purple and red and the digits of the Nixie tube show up, but in a random way and definetly not all 0.5s.
What could be possibly wrong and what else could I try to get this thing working?

I figured out several things what could be, but I´m not sure how to fix this.
What do you mean with RST must be high/low and how can I change this?

Should i attach a video with my current setup?

I´m not an electronic expert and I´m just starting to dive in the world of Arduino & Co, but I still want to figure out whats wrong and get this thing working. Unfortunately I dont own a logic analyzer yet. Would such a thing help figuring out the issue?

As a result i want 6 Nixie tubes showing a clock and changing to user defined values whenever i want it.
Its maybe still a long and bumpy road till there, but I think I can make it with some help.

Crossfade issue on ESP8266

Hi,
I'm having issues getting the crossfade function to work correctly on my ESP8266 based device.
It keeps on going into software watchdog reset because of the while loop.
Adding yield(); in the while loop hasn't helped either.
Do you have any experience on running this successfully on these devices?

image

This is my loop code with the yield as required by ESP8266:

void loop()
{
  count = (count + 1) % 10; // keep count between 0 to 9

  my_tube1.crossfade_init(count, 15, 127, 0);
  my_tube2.crossfade_init(10-count, 15, 127, 0);
  // my_tube3.crossfade_init(count, 15, 127, 0);
  // my_tube4.crossfade_init(10-count, 15, 127, 0);

  /*
      again, crossfade_run() is non-blocking, that means
    you can run other tasks in the loop.
      just make sure to call it at least every 33ms
    and check its return value to see if it's finished.
  */
  while(1)
  {
    yield();
    unsigned char result1 = my_tube1.crossfade_run();
    unsigned char result2 = my_tube2.crossfade_run();
    // unsigned char result3 = my_tube2.crossfade_run();
    // unsigned char result4 = my_tube2.crossfade_run();
    // exit when both animations are finished 
    if(result1 == EXIXE_ANIMATION_FINISHED && result2 == EXIXE_ANIMATION_FINISHED)
      break;
  }

  my_tube1.set_led(127, 40, 0); // orange;
  my_tube2.set_led(127, 0, 127); // purple;
  my_tube3.set_led(127, 40, 0); // orange;
  my_tube4.set_led(127, 0, 127); // purple;
  
  delay(500);
}

The exixe 2018 boards not working

I have two exixe 2017 boards that work just fine, but when i tested the exixe 2018 boards with the same set-up, they didn't work.

Overdrive doesn't seem to do anything

I'm enjoying working with my boards. I have some tubes where certain digits are slightly faded in areas, which I thought the overdrive function could help with.

I've tried enabling it (I'm using the Python library on a Raspberry Pi), but don't seem to see any difference. I don't notice any increase in brightness or any help with the faded areas, so I question if I'm using it correctly. I'm doing exixe.Exixe(cs_pin_m, spi, overdrive=True) when initializing. I have 3 tubes next to each other and the one with overdrive turned on looks no different to the others.

So, am I using it incorrectly, or just expecting too much? TIA for any help!

Arduino library: memset not defined

I found that the library (used with the examples) wouldn't compile for me when targeting my Adafruit Huzzah32 ESP32-based board.

The specific issue appears to be that it can't find memset. I'm still not very familiar with Arduino and its idiosyncrasies, but some Googlging reveals that this can be fixed by importing Arduino.h.

I've added the following to the top of exixe.cpp and everything works fine:

#include "Arduino.h"

This could be an issue with my setup but it is, as far as I can tell, the default configuration for the ESP32 boards and I'm not aware I've done anything strange.

Created and assembled board, connected to ST Link V2

Hi @dekuNukem,

so, firstly a massive thanks for the project; this is exactly what I’m looking for !

I’m also a beginner in electronics. But am a very quick learner. Before starting this I have done research and practiced using various boards etc.
so I believe my soldering job is half decent.

I’ve had the boards printed (Exixe-14)
I’ve assembled 1 board so far using the BOM provided and attached a working (and tested) IN-14 Nixie Tube.

I’ve soldered pins to pads :
3.3v
GND
DIO
CLK

from here I’ve attached the four pins via jumper wires to a ST LINK V2 as suggested. With the suggested software.

I click the button to link to the STM32 via the software but an error appears showing : no st link found ( I’m writing this from memory so will double check the wording of this when next at the pc! )

I also checked the voltage across the GND and 3.3v pins when connected to the ST LINK V2 with a multimeter; this only showed around 0.1volts.
but once disconnected the ST LINK V2 showed 3,3volts again. Seems odd ?

Any helps would be great!!

Unable to completely turn of the LED

Hello!

I am unable to turn of the LED completely. When sending

my_tube.set_led(0, 0, 0);

I still get a weak white glow from the LED.

I get the same weak white glow from the LED when I first power a fresh board without connecting it to an arduino.

Is there anyway to fix this besides desoldering R14, R15 & R16.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.