Author Topic: equivalent of Raspberry Pi or other GPIOs on desktop PC hardware? (for timing)  (Read 5162 times)

0 Members and 1 Guest are viewing this topic.

Offline cdevTopic starter

  • Super Contributor
  • ***
  • !
  • Posts: 7350
  • Country: 00
The Raspberry Pi and other similar devices GPIOs seem to be so useful for timing, and fast (apart from their crippled Ethernet issue) that I am wondering if anything even remotely comparable exists now on modern PC hardware.

Of course, as we know, the standard ports on old PCs have largely gone away, to be replaced by USB.

Most PCs now are usually lacking both parallel and RS232 serial ports.. (my current desktop PC does have a single serial port on a header - after I added a board with a cable to allow it to be connected to.)

As fas as I know, no GPIOs.. except maybe the various LEDs(?) The smaller boards do expose GPIOs.

In the case of network time synchronization they have a kernel-PPS timestamping protocol which allows you to - if you can get access to a pin to toggle.. like Archimedes' lever moving the world, you can, measure the exact instant something occurred to very high levels of precision.

But, the hardware has to support it and because timing is involved the hardware must be simple and direct.

Of course, add-in cards can give you the older ports and their signals-  there are add in cards to add serial and parallel ports  and they could also be useful for EPROM programming.. Is that the best approach?   Limited in precision probably by the speed of the bus the card resides on.

Thank you.
« Last Edit: July 12, 2017, 07:47:15 pm by cdev »
"What the large print giveth, the small print taketh away."
 

Offline alm

  • Super Contributor
  • ***
  • Posts: 2881
  • Country: 00
One of the reasons SBCs like the Pi are popular is easy access to GPIO. So that seems the obvious answer. Why not a Raspberry Pi or BeagleBone Black? In the case of the BBB you might be able to use the programmable real-time units to lower latency. You can then control the SBC from a desktop computer using a higher latency protocol, like USB or ethernet. In the case of the 1 PPS signal, you could use NTP to get an accurate clock on the SBC, and generate the 1 PPS signal from there.

The most straightforward way to get GPIO in a standard desktop would be a USB connection to something like a LabJack. But for latency USB is not the best choice. The cheap way would probably be PCIe cards with parallel ports. If you want more ports, then a real digital I/O card would be better. But guaranteed latency will be tricky on a non-real-time OS.

Offline cdevTopic starter

  • Super Contributor
  • ***
  • !
  • Posts: 7350
  • Country: 00

This is interesting..

http://blog.dan.drown.org/pps-over-usb/



I have several RPIs and the two older ones are running NTP with kernel PPS now.

I also have an old Cobalt Qube 2 that I want to use as a triple use timing/logging host +/art object.

I hope to use its distinctive GPIO-connected LEDs for output I think there is at least one other GPIO, the "web LED" .. which I could use for the input for PPS, it seems appropriate. Maybe there are more on the motherboard.

The Qube 2 is a very cool looking cube shaped blue computer. It runs a 250 MHz MIPS CPU, its headless. It was very much ahead of its time.

I could in theory add many more outputs or inputs by adding USB to the Qube . but thats slower and has the aforementioned USB timing issues.

To get the timing pulse into the computer there really needs to be something much better than USB.

 GPIO would really be the only "right" way to do it.

The Qube 2 also has two DEC Tulip NICswhich for some reason dont seem to be getting the performance they should be capable of under Linux.
« Last Edit: July 12, 2017, 09:16:14 pm by cdev »
"What the large print giveth, the small print taketh away."
 

Offline rstofer

  • Super Contributor
  • ***
  • Posts: 9890
  • Country: us
See what you can get with USB HID.  The HID device is intended to interface external switches, knobs and dials to a PC.  Of course it is also used for the keyboard and mouse.

The throughput is limited to 512Kbps - 64 byte packet every 1 ms
 

Offline MarkS

  • Supporter
  • ****
  • Posts: 825
  • Country: us
This is an interesting thought.. I'd love to have a PCI card with GPIO. Maybe throw in an old serial port and parallel port.
 

Offline Jeroen3

  • Super Contributor
  • ***
  • Posts: 4078
  • Country: nl
  • Embedded Engineer
    • jeroen3.nl
To have "realtime"-ish* IO on a PC you will have to write a driver and use PCI.
You could also use hardware serial port, most motherboards still offer at least one of those. With an IRQ, which is important because USB has no IRQ.

*Obviously, you will also need the right operating system.
 

Offline cdevTopic starter

  • Super Contributor
  • ***
  • !
  • Posts: 7350
  • Country: 00
I'm pretty sure my old cobalt qube 2 has 6 "general processor interrupts" several of which are currently being used by its LEDs. Its 250 MHz RM5231 (MIPS IV architecture) isnt a speed demon but its reliable hardware that I hate letting go to waste. This is what the documentation for the CPU says.

Table 7 Interrupt Interface
Pin Name
Type
Description
Int[5:0]* Input Interrupt
Six general processor interrupts, bit-wise ORed with bits 5:0 of the
interrupt register.
NMI* Input Non-maskable interrupt
Non-maskable interrupt, ORed with bit 6 of the interrupt register.
"What the large print giveth, the small print taketh away."
 

Offline ivan747

  • Super Contributor
  • ***
  • Posts: 2045
  • Country: us
Would the PTP protocol suit you?


It is more than good enough to sincronize TDD-LTE networks, and some variations of it can synchronize phase, frequency and absolute time from a GPS module.

I'm confident there are network cards that support PTP on windows.
« Last Edit: July 15, 2017, 12:43:40 am by ivan747 »
 

Offline ivan747

  • Super Contributor
  • ***
  • Posts: 2045
  • Country: us
You would need a PTP slave software on the thing you want to sync. Then you would need a PTP master clock, which can be available even as small GPS modules that you can stick on a window. I believe the PTP master can be pricey but it is going to be very robust.

Good FAQ:
https://sourceforge.net/p/ptpd/wiki/Home/


Sent from my iPhone using Tapatalk
« Last Edit: July 15, 2017, 12:52:42 am by ivan747 »
 

Offline cdevTopic starter

  • Super Contributor
  • ***
  • !
  • Posts: 7350
  • Country: 00
Ive read about that - my raspberry pi supports it on receive.. The cobalt is very old, its almost 18 years old now.. so its a 250 MHz, (64 bit) machine using a MIPS CPU and two DEC tulip NICs. It has 256 MB RAM. So its less powerful than the RPI and much bigger. I could fit at least four, possibly as many as a half dozen RPIs inside it as its got a lot of empty space.  But I would actually like to keep it the way it is, because its a pretty neat machine, despite its age.

The little (Venus 8) GPS module I am using now supports PPS..  Its very small, the size of my fingernail. Its smaller than the smallest RTLSDR.

# ppstest /dev/pps0
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1500084226.195970675, sequence: 3332 - clear  0.000000000, sequence: 0
source 0 - assert 1500084227.196005675, sequence: 3333 - clear  0.000000000, sequence: 0
source 0 - assert 1500084228.196038675, sequence: 3334 - clear  0.000000000, sequence: 0
source 0 - assert 1500084229.196073675, sequence: 3335 - clear  0.000000000, sequence: 0
source 0 - assert 1500084230.196107675, sequence: 3336 - clear  0.000000000, sequence: 0
source 0 - assert 1500084231.196141675, sequence: 3337 - clear  0.000000000, sequence: 0
source 0 - assert 1500084232.196176675, sequence: 3338 - clear  0.000000000, sequence: 0
source 0 - assert 1500084233.196211675, sequence: 3339 - clear  0.000000000, sequence: 0
source 0 - assert 1500084234.196244675, sequence: 3340 - clear  0.000000000, sequence: 0
source 0 - assert 1500084235.196279675, sequence: 3341 - clear  0.000000000, sequence: 0
source 0 - assert 1500084236.196313675, sequence: 3342 - clear  0.000000000, sequence: 0
source 0 - assert 1500084237.196347675, sequence: 3343 - clear  0.000000000, sequence: 0
source 0 - assert 1500084238.196381675, sequence: 3344 - clear  0.000000000, sequence: 0
source 0 - assert 1500084239.196415675, sequence: 3345 - clear  0.000000000, sequence: 0
source 0 - assert 1500084240.196450675, sequence: 3346 - clear  0.000000000, sequence: 0
source 0 - assert 1500084241.196484675, sequence: 3347 - clear  0.000000000, sequence: 0
source 0 - assert 1500084242.196518675, sequence: 3348 - clear  0.000000000, sequence: 0
source 0 - assert 1500084243.196552675, sequence: 3349 - clear  0.000000000, sequence: 0
source 0 - assert 1500084244.196587675, sequence: 3350 - clear  0.000000000, sequence: 0
source 0 - assert 1500084245.196621675, sequence: 3351 - clear  0.000000000, sequence: 0
source 0 - assert 1500084246.196655675, sequence: 3352 - clear  0.000000000, sequence: 0
source 0 - assert 1500084247.196690675, sequence: 3353 - clear  0.000000000, sequence: 0
source 0 - assert 1500084248.196724675, sequence: 3354 - clear  0.000000000, sequence: 0
source 0 - assert 1500084249.196759675, sequence: 3355 - clear  0.000000000, sequence: 0
source 0 - assert 1500084250.196792675, sequence: 3356 - clear  0.000000000, sequence: 0
source 0 - assert 1500084251.196826675, sequence: 3357 - clear  0.000000000, sequence: 0
source 0 - assert 1500084252.196861675, sequence: 3358 - clear  0.000000000, sequence: 0
source 0 - assert 1500084253.196895675, sequence: 3359 - clear  0.000000000, sequence: 0

I'm still getting the bugs worked out of my pps setup. There would definitely be both the room and power inside the cobalt for a GPSDO.

I wonder how the cobalt compares to this Elan processor.

http://www.febo.com/time-freq/ntp/soekris/index.html
« Last Edit: July 15, 2017, 06:24:53 am by cdev »
"What the large print giveth, the small print taketh away."
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf