220 likes | 377 Views
Lab 5 Signal Analyzer/Generator. Introduction. Create a client MFC application that samples a signal and displays wave using Windows GDI, Open GL, or DirectX. Digitally analyze and generate analog waveforms Reconstruct the waveform using the sampled signal . Spartan 3 board. Tutorial 1.
E N D
Introduction • Create a client MFC application that samples a signal and displays wave using Windows GDI, Open GL, or DirectX. • Digitally analyze and generate analog waveforms • Reconstruct the waveform using the sampled signal
Spartan 3 board Tutorial 1 Tutorial 2 Tutorial 3 http://www.digilentinc.com/Products/Detail.cfm?Prod=S3BOARD&Nav1=Products&Nav2=Programmable
Acquiring an Analog Signal • Input is a signal with peak to peak of 5 V • Voltage input in the range -2.5 to 2.5 V • Use Analog to Digital Converter ADC0820 • Input’s analog voltage 0 to 5 V • Requires adding 2.5 Volts to input signal before converted.
Voltage compatibility issue • Spartan 3 uses a 5 V adapter • Internal voltage levels are 3.3 V, 2.5 V and 1.2 V. • ADC0820 needs a 5V, Output levels are close to 5V • Inputs cannot handle 5 V without a current limiting resister. • Use R > 170 Ohms to limit current to 10 mA. • Alternately, since the FPGA I/O are TTL compatible, you may want to use TTL buffers to limit the voltage levels to about 3.4 V.
Sampling Signals on Serial Port • Max Baud Rate 115,200 • 115,200 bits per second • Max Sampling Frequency • 115,200 / 10 bits (8 data, 1 start, 1 stop) • Max Input Frequency to avoid aliasing • (Max Sampling Frequency) / 2 • = 5760 Hz
Discrete Fourier Transform (DFT) • Can be processor intensive thus use Fast Fourier Transform (FFT) to calculate DFT • Algorithm requires a sampling frequency as a power of 2 • Refer to FFT function on UL-99 (C++)
Windows GDI If you took 408 you probably already know this
Device context classes • CPaintDC - for drawing on windows client handlers (on paint only) • CClientDC - for drawing on windows client handlers (anytime other then on paint) • CWindowDC – for drawing anywhere in a window • CMetafileDC - Drawing to a GDI metafile
How to draw • Create paint object • Move to point • Draw line
How to draw • CClientDC DC(this) • DC.MoveTo(0,0); • DC.LineTo(100,100); • When the window calls on_paint the window will clear the area.
How to keep a drawing on a screen • Void draw(CDC* pDC,CRect rect) • { pDC->Rectangle(rect) • }
How to keep a drawing on screen • Onpaint() • { CRect rect; GetClientRect (&rect); CPaintDC dc(this); draw(&dc,rect); • }
Other draw functions • Rectangle • Arc • PolyLine • MoveTo • Pie • Ellipse • RoundRect
Coordinates • How to set • CClientDC dc(this) • dc.SetMapMode (MM_LOMETRIC);
Why you should use a pixel coordinate systems and pitfalls • There are only so many pixels on a screen, this is set by a screen resolution. • In a pixel coordinate system, how many pixels on a client window can be found by finding the size by using: • GetClientRect(CRect rect); • 1 pixel is the most accurate there is (no such thing as ½ pixel in GDI)
Changing Color • CPen pen; • pen.CreatePen (PS_SOLID, 1, RGB (255, 0, 0)); • CClientDC dc(this) • CPen *oldPen = dc.SelectObject(&pen);
Changing Color Taken from programming with MFC, Second Edition
Different Lines Taken from programming with MFC, Second Edition
Draw Text • CPaint dc(this) • dc.SetTextAlign(TA_RIGHT); • dc.TextOut(0,0,”hello”);
Anything else? • THERE IS MORE YOU CAN DO • This is just on the basics • Anything other details can be found on the MSDN.