0
\$\begingroup\$

Background

I am trying to build a USB Bridge circuit as part of a larger project. What I mean by that is, I wish to control a parallel out circuit based on information transmitted by the host computer.

Application Details

The idea behind the project is to have a USB powered Nixie Clock. A Nixie Display unit has a high operating voltage of about 150V. The power supply part of the project will take care of stepping up 5V DC (up to 500mA due to USB limit) to 150 V (Vdc), 5mA (0.75W).

We want our initial design to have no onboard clock circuitry, instead, we want the time and date information to come over a server lookup from the USB host computer.

Parallel Pin requirement:

Due to a power limitation, our design will rapidly switch between the 6 Nixie Tubes (HH MM SS) such that only one is lit up at a time. This is where the parallel out requirement stems from.

We need 6 pins to select the tube whose anode is pulled up to Vdc and 10 pins to choose the digit that currently glows. These final outputs can come from a decoder, so there is a net requirement of 3 + 4 parallel out pins going into 2 decoders.

Solution of choice

I am trying to use the FT232R bit bang mode for this task as suggested by in this answer to a question I had asked earlier.

My Question

I am having some trouble going ahead with using the FT232R Bit-Bang mode. I referred to this application note by FTDI on using the Bit Bang mode. The notes mention that to use the synchronous and asynchronous Bit-Bang modes, only the D2XX drivers are required. So I visited this link to download the driver but was unable to do so since the linux 1.4.8 version refused to unzip on my system.

An alternative to the D2XX drivers for FTDI devices is the VCP driver (In built to linux) so I decided to use that.

Unlike the D2XX driver API which has functions to use the Bit Bang Mode, I could not find an equivalent API for the VCP drivers.

All I could do using the VCP drivers is to toggle individual pins one at a time using the IOCTL() system call of linux.

However, this will not be suitable for my application since I would be at the mercy of the Operating System as to when the toggling occurs. This could lead to unreliable and inconsistent timing which would not be suitable for my application.

Is there such an equivalent API based on VCP drivers that I could use? Feedback on the thought process will be appreciated.

\$\endgroup\$
3
  • 1
    \$\begingroup\$ You were specifically warned at your previous question that trying this oddball approach would result in a "host side driver mess" but you went ahead anyway and found exactly that difficulty. "Refused to unzip on my system" is not a meaningful report on an SE site. If you really want to go through with this look at something like the openocd build dependencies and see the library used for extra capabilities in ftdi chips. \$\endgroup\$ Commented Mar 6, 2019 at 14:24
  • \$\begingroup\$ What language are you writing your application in? There's PyFtdi for Python under linux and there are other libusb based approaches \$\endgroup\$
    – stiebrs
    Commented Mar 6, 2019 at 15:27
  • \$\begingroup\$ Yes, on Linux this is probably not going to be done (at least by open source or DIY projects) with a kernel driver, even one from FTDI, but rather by using a library that issues the needed USB transactions for alternate operating modes through libusb. Potentially that is even portable to other platforms. \$\endgroup\$ Commented Mar 6, 2019 at 15:40

1 Answer 1

1
\$\begingroup\$

Just asking: if you're not making a product, why don't just use something beginner-friendly (and very cheap)? Let's say, an Arduino Nano clone is around $2, already has plenty of pins (D2-D13 + A0-A5, 2 left besides your 6+10, but you can extend that by a couple of 595s), and - after installing CH340G driver (built-in on Linux), you can use it as a virtual serial port. The PC side could be written in around 10 lines in Python, the Arduino side isn't hard either (just decode the input and display it by bitbanging the pins).

The only tricky part is the 150V power supply, but you can also get a PWM signal from the Arduino to drive a transformer (and A6-A7 left unused for a feedback).

(posted as answer as it's too long for a comment.. but it answers the implied XY-question)

\$\endgroup\$
2
  • \$\begingroup\$ thank you for your feedback. I am not doing so since this is course project where we are required to work with and understand low level details. \$\endgroup\$
    – ijuneja
    Commented Mar 6, 2019 at 14:06
  • \$\begingroup\$ The proposal here still involves plenty of low level details. \$\endgroup\$ Commented Mar 6, 2019 at 15:09

Not the answer you're looking for? Browse other questions tagged or ask your own question.