Is it worth reviving the PropScope OpenSource Project?
blittled2
Posts: 25
in Propeller 1
Hi, it's been awhile since I've posted anything. In fact due to technical issues with my old account I had to open another account.
I was involved in OBC's Propscope project way back when and was thinking of the software advances since that project was started. With Xamarin a cross platform project could be developed. I don't know Xamarin but as a software developer I know I could pick it up quickly.
I have all the documentation Parallax and Hanno put out for the project but sadly I don't have any of the pasm code that was posted on OBC's PropellerPowered site. I do believe somebody at least had code for interleave sampling of the ADC in the PropScope. With that site being long since shut down I was wondering if anyone on the forum had copies?
I also wonder with the PropScope being discontinued a long while ago and since most of the interest is now in the Propeller 2, there will be enough interest to make it worth attempting.
I was involved in OBC's Propscope project way back when and was thinking of the software advances since that project was started. With Xamarin a cross platform project could be developed. I don't know Xamarin but as a software developer I know I could pick it up quickly.
I have all the documentation Parallax and Hanno put out for the project but sadly I don't have any of the pasm code that was posted on OBC's PropellerPowered site. I do believe somebody at least had code for interleave sampling of the ADC in the PropScope. With that site being long since shut down I was wondering if anyone on the forum had copies?
I also wonder with the PropScope being discontinued a long while ago and since most of the interest is now in the Propeller 2, there will be enough interest to make it worth attempting.
Comments
And Hanno seems to be awol, sadly. I do not have any copies but I tested it at that time and it was quite simple, almost useless, except for getting the basics done.
I have a PropScope and use it very rarely, It is nice but quite slow. But a P2propScope might be a interesting product, since it would be faster and could work stand alone without a PC connected...
Enjoy!
Mike
It needs more work to support all the features and also use more cogs to be able to sample at higher rates, but it's got all the code including PASM to talk to the ADC chip. It also includes an application to run on your PC (with full source) that talks the new protocol this project uses instead of Hanno's old one.
That would be the place to start if you were to revive things. I would certainly like you to! I have 2 PropScopes, and Hanno's software is lacking in many ways, but the hardware is plenty fast and functional for a lot of use cases.
The links and GUI can be (largely) common to P2 and PropScope, so it is probably quite a good time to revive something that can support either hardware.
I have been doing some tests on FT232H, to see what bandwidths it can support in the various modes, with a view to faster data paths from P2.
In Async FIFO mode, PC-> FT232H, I get peak rates of ~15MB/s, sustained averages of ~10MB/s, and if you stipulate 'no gaps' in the data stream, that is ~ 3MB/s
I'd expect rates in the other direction to be largely similar.
Sync FIFO can go faster still, but I'm not sure P2 can manage that.
Even Async mode will need to consume a COG for the link, as the P2 Streamer lacks handshake abilities.
I also tested Fast Serial modes, PC -> FT232H, and derived these rate equations
You can see the char frame time creeps a little with FSCLK MHz, 7.5MHz can manage always 13 Clocks, 15MHz is mostly 13, rarely 14, and 30MHz is mostly 14, rarely 15.
This needs fewer pins than 245-FIFO mode, but can go quite a bit faster than ASYNC 12MBd limit.
For the existing PropScope it is limited to what it is already, and it can really only do the higher sample rates for a very short sample time that fits in the P1 internal memory. I think it can only reliable send 2Mbps over the serial, so you only get 200k bytes per second. which is only 160k 10 bit samples per second. The hardware setup is capable of 5Msps if using multiple cogs to read the ADC chip, but in that case you only get a very tiny fraction of a second worth of samples before it's filled available memory. It's still useful for capturing short bits of triggered stuff.
exactly my thoughts. the serial link to the PC is way to slow, especially if you capture more then 1 channel. But with 64 pins some fast external ram might be possible and still have serial,sd and maybe VGA and PS2 Mouse or Keyboard, maybe even HDMI, USB mouse/Keyboard. Or even both to connect it to older lab equipment.
the short sampling time made the propscope quite - hmm - restricted when I needed it.
Enjoy!
Yes, the SO-8 PSRAMs are quite cheap, LY68L6400SLIT is 59c/100 for 64Mb, so you might choose 2 or 3 of those, depending on the ADC chosen. That does ease serial link pressures.
Chip has some sort of scope mode worked into the next P2 rev, which may allow for many channels of moderate sample rates, or a Selected premium ADC could give more sps, on fewer channels.
interesting
Mike
Probably wouldn't need any external RAM, just setup a stream of samples going out to that chip in parallel (16bit or 32bit wide fifo). Most basic setup would be a P2, a FT600, and whatever is needed to attach probes properly.
Of course a more advanced model could include external high end ADC(s), but that's just going to make it cost a lot more.
Yes, the FT6xx series are appealing, but the lack of streamer handshakes may bite here, as those parts really need the TXE_N to be responded to in 1 CLK (66MHz or 100MHz)
The new software is from me. Currently it only uses one COG to sample data and thus is limited to about 1Msamples/s. I have not yet found the time to extend it. I am using it heavily as it mostly fits my needs. If someone is willing to work on it I can support. he PC software is based on Qt and QCustomPlot to create the waveform display. I am using a new protocol to transfer the data to the PC. This could be extended for higher speed.
The extension for higher sample rates (using several COGs) are currently something I have no time to implement (and no idea how to do it). Here help would be appreciated.
Reinhardt
Being inspired from PropScope, I am plannnig to make a simple, handy logic analyser based on P8X32A,
and trying finding method for very fast data acquisition.
Now I found some ideas:
- For full system clock rate acquisition ( 100Msps@6.25MHzXTAL ), use 5 cogs runnnig in differed phase, each cog acquire about 200 longword on cogram, and they construct 1000 longword ring buffer ( 10us ). It is required P31 is used for trigger.
- For half ( or quarter ) system clock rate acquisition ( 50Msps, 25Msps, resp. ), use all 8 ( or 4 ) cogs, directly store into hubram.
To use P31 as a trigger, you should use P31 in open-drain mannar.
For example, to realize 100Msps with trigger,
To store data into hubram directly with full hub clock rate,
use cog counter for generating hubram address, like this: ( these are not tested, sorry )
To constructing ring buffer, conditional jumps are not usable, so must use something like
By the way, Propeller manual datasheet says source operand is fetched at stage-2, and then destination at stage-3 ( section 4.8, page 9 ).
But through my experiments, it seems these are reversed, i.e. destination operand is fetched at stage-2, and then source at stage-3.
Excuse me for my english skill. Thanks.
A destination is where the answer goes, whilst a source supplies an operand. You cannot hope to place an answer, before you have the operand
ie I would say read/fetch is stage 2 and write/put is in stage 3.
Interesting work. Did you look at the new ISSI Serial SRAMs ? For a longer-storage scope, those could be address-written in armed state, and then start recording on trigger.
Another approach fro logic analyser is to store change+timestamps.
That gives a natural compression, and has very good dynamic range, but very top-end edge rate is lower, as you need to store Pinstate+time.
I did a data logger years ago that exploited 4 cogs to interleave samples.After doing so, I discovered that someone else had also done a similar thing. Just search the forum as it's been done before and code there is probably usable.
The instruction fetch mechanism has also been discussed. The 6 clock cycles are IIRC d=instruction decode but I think another letter is used. e=execute. Both of these have no memory access and so are used by the previous and next instruction.
I=instruction fetch, R=is the result write-back.
Finally I found it a document about execution timing,
and a site about PPLA ( Propeller Platform Logic Analyzer ) products w/ downloadable files ( support GUI app "Propalyzer" and firmware ), hosted by wulfden.
https://forums.parallax.com/discussion/download/123637/machinelanguage.pdf
See "Sidetrack F: How the instruction pipeline works" (page 23),
IdSDeR is the sequence that I recall. However, whether S or D is fetched first makes no difference.
Now, since you are talking about I/O, again IIRC, when you are doing an INA instruction the pin is gated late and directly feeds into the e clock.
All this can be found by looking at the P1V verilog code published by Parallax.
I am not good at HDL, but at last I saw what you mean.
I read Verilog code "cog.v" carefully, and I realize that, fetching read-only pseudo registers such as CNT, PHSx and INA, are delayed for 1 system clock, i.e. in such case, source and destination are simultaneously fetched. That makes sense for me very well.
Thanks all.
I am getting into messing with the QT developer side of things also....
I made a forum thread dedicated to doing raspberrypi/linux compiles of parallax tools and QT on debain.
--> https://forums.parallax.com/discussion/comment/1455388/#Comment_1455388
I also have started a propscope pcb replica design, in pcb artist (4pcb.com), which I can finish, make a 4 pcb order on, and then get the gerbers for.
So I can help with the pcb side of it, and perhaps the QT part.. (not much, yet)
This would definitely pave a way to then start a P2 scope....
Not the greatest but sufficiently portable for me. I would be willing to test code anytime as an outsider and try to break it for bugs.
Martin.
@"Roy Eltham"
will this https://github.com/rbehm-ibb/PropScope
run in windows
https://github.com/rbehm-ibb/PropScope
I would like to know prior to downloading.to check it out.
Thanks
Martin
also any others that might work.
Thanks
I have not tested this on Windows, but I expect it to work there too. The code contains nothing OS specific. The OS secifics will be handled by Qt.
Reinhardt
I'm getting errors when I "View Info". "timer.spin" throws errors in the CON section.
I wish they would turn off that feature fix this bug of the forums, it's so abuse-able and annoying.
Edit: to be clear, what I mean is that I don't want to be notified when someone quotes a message that I have been mentioned in. I do want to be notified when someone mentions me in a message.
In the above case, I was notified the both rbehm and Publison mentioned me in this thread. Neither of them actually did, they just quoted pilot0315's message in their replies and the system doesn't handle that properly. In my opinion, it's a bug that needs to be fixed.
I have compiled it with bstc without any complains from the compiler.
What errors do you see?
To pass here, commas following after identifiers are to be deleted:
In Timer.spin, identifier "time" has global scope, PropellerTool does not accept it as a parameter name:
So, some other name to be used:
Ok, I only use BST. I don't know about these problems with the PropellerTool. But it seem to be right about the commas in the enumeration. The Prop Manual does it the same way and BSTC alos accepts this.
The problem with parameters having the name of a global variable has bitten me this week too. Funny that BSTC had no problem here. When I have time I will fix this on github.
@"Roy Eltham"
Agree with you. It should be more specific to the quoter. But I think parallax will not fix. I will ask them.
All good.
BSTC isn't as strict about things as the official PropTool compiler. It also has features that don't work on PropTool.
Technically the problems are with BSTC and your code using unofficial things (like the comma's in the enum, or using a local variable with the same name as a global). These are not problems with PropTool.
The local vs global variable one is something that I would consider a bug in BSTC, because it makes the code confusing to read. Plus, how are you supposed to access the global variable from the function that has a local of the same name?
Of course, I'm sure BSTC regards it as a feature, but it's a bad one.