| Electronics > Projects, Designs, and Technical Stuff |
| Home Brew Analog Computer System |
| << < (35/66) > >> |
| GK:
--- Quote from: mamalala on August 07, 2013, 09:56:51 pm --- --- Quote from: GK on August 06, 2013, 02:37:52 am ---Hi Chris, Thanks for going through this in such detail - it's appreciated. I'd like to implement your recommendations and see how it compares to the current code, speed wise. However the electronic/firmware side of the project has been put aside for now as I work on installing and wiring it into its instrument case. Give me several days to get back to revising the code. --- End quote --- No problem, you're welcome. Just as a side-note, if you plan to use a lot of table lookups in the future, you might want to consider to use PIC18 instead of the PIC16 series chips. They allow a more direct access to the program memory especially for stuff like tables, strings, etc. On the PIC16, what actually happens is that you load the index in the W register and then call a subroutine. That will use the value in the W register to calculate the target address of a coputed goto, then jumps to that location, which in turn returns the actual value back in the W register. On PIC18 you have a dedicated set of registers to do that. You simply load the index value into those registers, and can immediately read back the result from another register. Much faster, and allows to keep large tables simple as well (PIC16 would need some extra code to access tables larger than 256 entries). It also has registers to directly access arrays and stuff in RAM. And all of those (for RAM and ROM) have various registers that define how the access happens. One register reads without changing the address pointed to. Another one increases the address, yet another one decreases it. And then there is one that allows you to access the address you set plus/minus an offset given by what is currently in W. Makes working with memory blocks and tables _much_ more performant. Greetings, Chris --- End quote --- OK, thanks for the pointers! I'm currently using a ~ 10 year old version of the CCS compiler, so am currently restricted to a ~10 year old list of supported devices. However I'll soon be upgrading to the latest and greatest version and will also be looking for new candidates for my "preferred devices" inventory. I've been using the 16F87X series for a long time now but it's a bit old hat now and time to move on. |
| GK:
Finally, here is the completed 3-D Projection unit. The red and white potentiometer knobs under the digital displays are the coarse and fine X axis and Y axis angle-of-rotation / perspective control knobs respectively. The X, Y and Z signal inputs all have identical 1/2/5 input attenuators and AC/GND/DC switching. Signal handling it up to 100V. Control legends are printed onto a laminated transparency. The two BNC's under the power switch are the horizontal and vertical drive signal outputs for the display (typically an X-Y oscilloscope). |
| baljemmett:
--- Quote from: GK on August 15, 2013, 02:03:43 pm ---Finally, here is the completed 3-D Projection unit. --- End quote --- That's a really nice looking build - many thumbs up, sir! |
| mamalala:
--- Quote from: GK on August 15, 2013, 01:56:08 pm ---OK, thanks for the pointers! I'm currently using a ~ 10 year old version of the CCS compiler, so am currently restricted to a ~10 year old list of supported devices. However I'll soon be upgrading to the latest and greatest version and will also be looking for new candidates for my "preferred devices" inventory. I've been using the 16F87X series for a long time now but it's a bit old hat now and time to move on. --- End quote --- Microchip's C18 does a nice job, and is still available if you look around on the Micochip website. Combine that with MPLab or MPLabX and you are good to go. Another alternative is SDCC. It may not have all the "chips" by default, but adding additional ones is just a matter of providing the right include file (after all, PIC16 are the same no matter what, just theperipherials are different, and the same applies for PIC18 parts). Here i am happily using C18 and MPLabX on Linux, before i used SDCC for my own projects and MPLab in a virtual Windows machine, but again with C18. MPLabX requires Java, and that makes it rather sloe, unless you have a good machine. Other than that, great work with your analogue computer! I wish i had the time and funds for that (the former would be not that much of a problem, but the latter definitively is....) Greetings, Chris |
| GK:
OK...... Have had a bit of a break from this project due to other stuff getting in the way, but am about to make some major construction progress in the near future as the coming Friday is my last day at work for the year, after which I'll be able to work on this more or less full time. The integrator (30), analogue multiplier (10) and variable diode function generator chassis's are well under way. However in the meanwhile......... For the digital section of this "hybrid" computer project, I'm developing a CRT readout device that will simultaneously display the status of the computers counters and registers. In keeping with the old school analog pretext, and inspired by the clever Fourier synthesis method described in this old paper: http://www.nixiebunny.com/crtgen/crtgen.html I've decided to base the design roughly on the same technique. With modern components and design techniques the unit will be much easier to implement than it was in 1958. I intend to make a 16-charachter alpha numeric ROM to reproduce the numbers 0 through 9 and the upper case letters A through F. This will permit Hexadecimal readouts of the computers counters and registers. The ROM will simply be a bank of 16 pairs of (op-amp based) summing amplifiers each with a unique resistor matrix for defining the Fourier composition of each character - much easier that winding a few dozen toroidal transformers! Some pics are attached of a preliminary design concept/evaluation conducted in SPICE. The harmonic generator will simply consist of a 5-stage binary ripple counter to produce the fundamental and harmonic frequency components. The sine fundamental and harmonic functions are produced by filtering the squarewaves with simple resistance-tuned multiple-feedback bandpass filters and the -cosine terms for each sine function are produced by simple resistance-tuned all-pass filters acting as unity gain 90 degree phase shifters. Not stuffing around with crusty inductors or trimmer capacitors here. Unlike in the 1958 design paper with its "shock-excited" resonant circuits, oscillation will be continuous with the gating and sequencing pulses/control signals derived appropriately from the harmonic generator clock source and ripple counters. The numbers 0 through 7 shown in the picture above were produced using the Fourier coefficient values given in the tables of Figure 3 in the linked-to paper. They're a bit wonky and could do with some tweaking, but that is good enough for now. In SPICE I simply used behavioral voltage sources to generate the X and Y deflection signals, summing the Fourier components with the polarities and amplitudes for each numeral as required. The LTspice plotter can't to Z-modulation, so to get a usable display I had to fudge in some vertical deflection "blanking". The article gives an explanation of the graphical method (Figure 1) for manually drawing out the character on Cartesian coordinates and then working out and plotting the X and Y waveforms required for reproduce the character. This is quite simple and straight forward enough, but the article does not then go on to explain or detail the "purely graphical" method for manually computing the Fourier components of the produced X and Y waveforms - though a reference is given: T.C. Blow, Graphical Fourier Analysis, Electronics, p194, Dec. 1947. Anyone have a stash of old copies of Electronics magazine?? I need to further compute the Fourier components for the numbers 8 and 9 and the letter A through F. Any other reference provided or insight into the technique would be appreciated! |
| Navigation |
| Message Index |
| Next page |
| Previous page |