Popular Content

Showing content with the highest reputation since 09/17/14 in all areas

  1. 5 points

    Waveforms woks on Linux

    Hi All,I have an Analog Discovery, and I used to use it in VitualBox Xp. This was the only software I had to run on Windows. I decided to get rid ofWindows, so I had to make the Waveforms ready for Linux. It is a quite easy task to do: 1. Install 32bit wine. 2. export WINEARCH=win32 3. winetricks --gui dlls select msxml3 and dotnet35 4. Install Waveforms. Now the Waveforms must run in demo mode. 5. Install digilent.adept.runtime_2.15.3-i686 and digilent.waveforms_2.7.5-i386 6. cp dwf.dll.so dwf.def /usr/local/lib64/wine (in my case) you mustcheck your wine inst. dirs 7. cp dwf.dll.fake /usr/local/lib64/wine/fakedlls/ Enjoy your Linux Waveforms! Sanyi files.tar.gz
  2. 5 points


    My name is Mike, and I've developed a bit of an obsession with FPGAs. You might be able to find some project ideas or inspiration on my WIki at http://hamsterworks.co.nz/mediawiki/index.php/FPGA_Projects I'm always happy to talk FPGAs, so feel free to drop me an email sometime
  3. 4 points

    Analog Discovery troubleshooting

    During device opening internal chips are enabled and configured. This results in consumption increases, specially when the 100 MHz clock (PLL) is started. The needed current increases from 100mA to 500mA. In case the USB can't provide enough current the voltage drops below the minimal required for the device to operate and communication fails. In case you get “Device configuration failed (PLL 1)" or "Communication with the device failed.” error message: The device needs at least 2W/400mA from USB cable. To satisfy this: - Try to use different USB cable and computer plug. - Use the USB plug on the back of the PC, not the one on the front panel. - Use short cable, do not use long cable or cable extender. - Use powered USB-hub, avoid un-powered hub. - Use USB-Y cable to load power from two plugs. Device not detected by WaveForms: Open Windows Device Manager then connect the device and wait up to one minute for a device to appear: - USB Serial Converter, with warning - Connect the device directly to the computer's USB plug without using external hub. - Restart the computer. - Reinstall WaveForms, including the Adept Runtime section. - USB Serial Converter, without warning - Restart the computer. - Reinstall WaveForms, including the Adept Runtime section. - Other application might have erased the USB controller EEPROM (FT_Prog, programming cable drivers...) Use the "My device is not listed" button in WaveForms application Device Manager to reprogram the EEPROM. - Unknown Device Check the Hardware IDs under device Properties, Details tab - USBVID_0403&PID_6014 The USB driver is not installed. - Restart the computer. - Reinstall WaveForms, including the Adept Runtime section. - USBVID_0000&PID_0000 Device not identified or malfunction. See "Nothing shows up". - Nothing shows up: - Connect the device directly to the computer's USB plug without using external hub. - Try to use different USB cable and computer plug. The device or its plug might be damaged.
  4. 4 points

    FreeRTOS on Zybo

    Hello Everyone, This is just for reference. FreeRTOS running on the Zybo. I could not find any FreeRTOS based post on this forum so i thought this might help anyone trying to attempt the same... http://bit.ly/freertos-on-zybo
  5. 4 points

    HDMI input for Nexys Video.

    I've finally got my HDMI input project to a point where I have something to show. This little picture makes me really happy: This project does the following actions: Advertise HDMI support over EDID/DCCReceive the TMDS signalsDe-serialize them into 10-bit symbolsAlign the symbols using bitslipsTune the input delays for best receptionConvert the TMDS symbols into data valuesExtract CTL, Aux Data Periods (ADPs) and Video Data Periods (VDPs)Extract Video Infoframes from the ADP dataExtract Audio Samples from the ADP data.Extract Raw Pixels from the VDPsPerform 422 to 444 conversion, if required by video formatPerform YCbCr to RGB conversion, if required by video formatConvert Studio Level RGB to Full Range RGB, if required by video formatConvert Audio smaples to a relative db levelOverlay Audio level meters over the video streamConvert the video stream and sync signals back to TMDS symbolsSerialize them through a 10:1 serialisersTransmit the TMDS.I think that this is an awesome base for any video experimentation. I've even got to the trouble of making a GitHub repo for it: https://github.com/hamsternz/Artix-7-HDMI-processing Please feel free to fork and extend.
  6. 4 points

    Add board to ISE

    Hi, You can add your own board following the steps: 1. Go to ..\Xilinx\14.7\ISE_DS\EDK\board\Xilinx\boards 2. Create a folder board 3. In your folder board create "data" folder 4. Create a .xbd file 5. Open this file and edit with the necessary parameters For example, I add a Nexys4 board. The path for the Digilent_Nexys4.xbd file, in my case is: C:\Xilinx\14.7\ISE_DS\EDK\board\Xilinx\boards\Digilent_Nexys4\data The file content is: ATTRIBUTE VENDOR = Digilent ATTRIBUTE NAME = Nexys4 ATTRIBUTE REVISION = B ATTRIBUTE SPEC_URL = www.digilentinc.com ATTRIBUTE CONTACT_INFO_URL = http://www.digilentinc.com/Support/Support.cfm ATTRIBUTE DESC = Digilent Nexys4 Evaluation Platform ATTRIBUTE LONG_DESC = '-' BEGIN FPGA ATTRIBUTE INSTANCE = fpga_0 ATTRIBUTE FAMILY = artix7 ATTRIBUTE DEVICE = xc7a100t ATTRIBUTE PACKAGE = csg324 ATTRIBUTE SPEED_GRADE = -1 ATTRIBUTE JTAG_POSITION = 1 END Please see the result: Best regards, Cristian
  7. 4 points
    Hi Arvy, Here is some code I wrote tonight. It includes the XADC instance, set to measure channel 6 in unipolar mode. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; Library UNISIM; use UNISIM.vcomponents.all; entity xadc_test is Port ( clk100 : in STD_LOGIC; led : out STD_LOGIC_VECTOR (15 downto 0); JXADC : in STD_LOGIC_VECTOR (7 downto 0)); end xadc_test; architecture Behavioral of xadc_test is signal reading : std_logic_vector(15 downto 0) := (others => '0'); signal muxaddr : std_logic_vector( 4 downto 0) := (others => '0'); signal channel : std_logic_vector( 4 downto 0) := (others => '0'); signal vauxn : std_logic_vector(15 downto 0) := (others => '0'); signal vauxp : std_logic_vector(15 downto 0) := (others => '0'); begin led <= reading; ----------------------------------- -- Pass through the analogue inputs ----------------------------------- vauxp(6) <= jxadc(0); vauxn(6) <= jxadc(4); vauxp(14) <= jxadc(1); vauxn(14) <= jxadc(5); vauxp(7) <= jxadc(2); vauxn(7) <= jxadc(6); vauxp(15) <= jxadc(3); vauxn(15) <= jxadc(7); XADC_inst : XADC generic map ( -- INIT_40 - INIT_42: XADC configuration registers INIT_40 => X"9000", -- averaging of 16 selected for external channels INIT_41 => X"2ef0", -- Continuous Seq Mode, Disable unused ALMs, Enable calibration INIT_42 => X"0800", -- ACLK = DCLK/8 = 100MHz / 8 = 12.5 MHz -- INIT_48 - INIT_4F: Sequence Registers INIT_48 => X"4701", -- CHSEL1 - enable Temp VCCINT, VCCAUX, VCCBRAM, and calibration INIT_49 => X"000CC", -- CHSEL2 - enable aux analog channels 6,7,14,15 INIT_4A => X"0000", -- SEQAVG1 disabled all channels INIT_4B => X"0000", -- SEQAVG2 disabled all channels INIT_4C => X"0000", -- SEQINMODE0 - all channels unipolar INIT_4D => X"00CC", -- SEQINMODE1 - all channels unipolar INIT_4E => X"0000", -- SEQACQ0 - No extra settling time all channels INIT_4F => X"0000", -- SEQACQ1 - No extra settling time all channels -- INIT_50 - INIT_58, INIT5C: Alarm Limit Registers INIT_50 => X"b5ed", -- Temp upper alarm trigger 85°C INIT_51 => X"5999", -- Vccint upper alarm limit 1.05V INIT_52 => X"A147", -- Vccaux upper alarm limit 1.89V INIT_53 => X"dddd", -- OT upper alarm limit 125°C - see Thermal Management INIT_54 => X"a93a", -- Temp lower alarm reset 60°C INIT_55 => X"5111", -- Vccint lower alarm limit 0.95V INIT_56 => X"91Eb", -- Vccaux lower alarm limit 1.71V INIT_57 => X"ae4e", -- OT lower alarm reset 70°C - see Thermal Management INIT_58 => X"5999", -- VCCBRAM upper alarm limit 1.05V INIT_5C => X"5111", -- VCCBRAM lower alarm limit 0.95V -- Simulation attributes: Set for proper simulation behavior SIM_DEVICE => "7SERIES", -- Select target device (values) SIM_MONITOR_FILE => "design.txt" -- Analog simulation data file name ) port map ( -- ALARMS: 8-bit (each) output: ALM, OT ALM => open, -- 8-bit output: Output alarm for temp, Vccint, Vccaux and Vccbram OT => open, -- 1-bit output: Over-Temperature alarm -- STATUS: 1-bit (each) output: XADC status ports BUSY => open, -- 1-bit output: ADC busy output CHANNEL => channel, -- 5-bit output: Channel selection outputs EOC => open, -- 1-bit output: End of Conversion EOS => open, -- 1-bit output: End of Sequence JTAGBUSY => open, -- 1-bit output: JTAG DRP transaction in progress output JTAGLOCKED => open, -- 1-bit output: JTAG requested DRP port lock JTAGMODIFIED => open, -- 1-bit output: JTAG Write to the DRP has occurred MUXADDR => muxaddr, -- 5-bit output: External MUX channel decode -- Auxiliary Analog-Input Pairs: 16-bit (each) input: VAUXP[15:0], VAUXN[15:0] VAUXN => vauxn, -- 16-bit input: N-side auxiliary analog input VAUXP => vauxp, -- 16-bit input: P-side auxiliary analog input -- CONTROL and CLOCK: 1-bit (each) input: Reset, conversion start and clock inputs CONVST => '0', -- 1-bit input: Convert start input CONVSTCLK => '0', -- 1-bit input: Convert start input RESET => '0', -- 1-bit input: Active-high reset -- Dedicated Analog Input Pair: 1-bit (each) input: VP/VN VN => '0', -- 1-bit input: N-side analog input VP => '0', -- 1-bit input: P-side analog input -- Dynamic Reconfiguration Port (DRP) -- hard set to read channel 6 (XADC4/XADC0) DO => reading, DRDY => open, DADDR => "0010110", -- The address for reading AUX channel 6 DCLK => clk100, DEN => '1', DI => (others => '0'), DWE => '0' ); end Behavioral; And here is the XDC file for the Basys3: set_property PACKAGE_PIN W5 [get_ports clk100] set_property IOSTANDARD LVCMOS33 [get_ports clk100] create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports clk100] ## LEDs set_property PACKAGE_PIN U16 [get_ports {led[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}] set_property PACKAGE_PIN E19 [get_ports {led[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}] set_property PACKAGE_PIN U19 [get_ports {led[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}] set_property PACKAGE_PIN V19 [get_ports {led[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}] set_property PACKAGE_PIN W18 [get_ports {led[4]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}] set_property PACKAGE_PIN U15 [get_ports {led[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}] set_property PACKAGE_PIN U14 [get_ports {led[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}] set_property PACKAGE_PIN V14 [get_ports {led[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}] set_property PACKAGE_PIN V13 [get_ports {led[8]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[8]}] set_property PACKAGE_PIN V3 [get_ports {led[9]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[9]}] set_property PACKAGE_PIN W3 [get_ports {led[10]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[10]}] set_property PACKAGE_PIN U3 [get_ports {led[11]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[11]}] set_property PACKAGE_PIN P3 [get_ports {led[12]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[12]}] set_property PACKAGE_PIN N3 [get_ports {led[13]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[13]}] set_property PACKAGE_PIN P1 [get_ports {led[14]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[14]}] set_property PACKAGE_PIN L1 [get_ports {led[15]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[15]}] ##Pmod Header JXADC ##Sch name = XA1_P set_property PACKAGE_PIN J3 [get_ports {JXADC[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {JXADC[0]}] ##Sch name = XA2_P set_property PACKAGE_PIN L3 [get_ports {JXADC[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {JXADC[1]}] ##Sch name = XA3_P set_property PACKAGE_PIN M2 [get_ports {JXADC[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {JXADC[2]}] ##Sch name = XA4_P set_property PACKAGE_PIN N2 [get_ports {JXADC[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {JXADC[3]}] ##Sch name = XA1_N set_property PACKAGE_PIN K3 [get_ports {JXADC[4]}] set_property IOSTANDARD LVCMOS33 [get_ports {JXADC[4]}] ##Sch name = XA2_N set_property PACKAGE_PIN M3 [get_ports {JXADC[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {JXADC[5]}] ##Sch name = XA3_N set_property PACKAGE_PIN M1 [get_ports {JXADC[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {JXADC[6]}] ##Sch name = XA4_N set_property PACKAGE_PIN N1 [get_ports {JXADC[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {JXADC[7]}] When downloaded to your board, the value displayed in binary on the the LEDs should reflect the voltage on Pin 0 if the PXADC. I tested just by pushing some header pins into the PMOD and touching the pin - not exactly a complete test, but enough to show that it does something. NOTE: THE FULL SCALE VOLTAGE FOR THE XADC IS 1V, so some crafty planning might be required to interface to it.
  8. 4 points

    Zybo ZYNQ Beginners help

    I had the same problem and switching the "reset Processor" to "Reset entire system" worked like a charm! Love you guys at Digilent!
  9. 4 points

    Help With A Zybo Video Design

    Hey guy, I got it working with a little help from Sam. To simplify the whole thing, I trimmed out all of the zynq associated blocks since this is project isn't using the PS and removed the extra XDCs. The DDC channels on the dvi2rgb core need to assigned correctly and it is a bit of a pain. Delete all connectionsright-click DDC Select "make external" open the design wrapper and there should be two signals names "ddc_scl_io" and "ddc_sda_io"modify the Zybo master XDC to reflect those names in the HDMI group. Sam helped me fix the timing errors associated with timing. The fix was to comment out comment out this the create_clock line in "dvi2rgb.xdc". The new file should look like this: The issue is that the "create_clock" command is forcing the TMDS_Clk_p to be a frequency that cannot be supported by FPGA on the Zybo causing the timing error. Removing it allows the solution in the TMDS clock generate work. Finally, change the clocking wizard block to be in the PLL instead of the MMCM. The dvi2rgb core uses an MMCM and the clocking wizard wants to use a MMCM but there is only one MMCM in that section of the FPGA so tell the clocking wizard to use a PLL. I uploaded working directory to my github: here Hope this helps! Marshall
  10. 4 points

    Waveforms For Linux

    We are working on a new cross platform WaveForms software. The beta version of this, supporting Windows, OS X and Linux, will be published soon.
  11. 3 points


    Questions will not be answered here, start a new thread in the Technical Forum Welcome to the Diglent Forum! Our goal is to not only create a place where you can get support for our products, but also a community to share your projects. We are just getting started with our forum, so if there is anything you would like to see or if you would like to make any suggestions, please head over to the suggestions forum and let us know. My name is Sam, I am a web developer at Digilent.
  12. 3 points

    Adept SDK C# Library

    This is a little DLL I wrote using C++ Interop in Visual Studio to pull some of the functions from the Adept SDK into C#. I'm posting it here in the hopes this is useful to someone else. It's pretty rough as I am absolutely not a Windows developer and I make no guarantees as to how well it is written and/or works (it does do what I need it to do ). Only supports basic DEPP functions as that's all I needed, other functions shouldn't be too hard to add at this point. Released under the BSD license. https://bitbucket.org/orslmontana/digilent-adept-clr-dll/
  13. 3 points
    Hi! I've been playing with the low cost ESP8266 modules, that present a IP-over-WiFi as a serial device, and you use modem-like AT commands to control it. I've just put up a project that allows the FPGA to connect to my Wifi network, then send status message to a service that is listening on my Linux VM. It is all done using VHDL state machines (no software CPU), and could most probably be made a little more compact. Because the serial port is running at 9600 and the AT command based protocol overhead it is a pretty low bandwidth solution, but enough if you wanted to add some basic WiFi telemetry to a design. The ESP8266 module used was under $7 - http://www.seeedstudio.com/depot/WiFi-Serial-Transceiver-Module-w-ESP8266-p-1994.html You can find all the source on my Wiki at http://hamsterworks.co.nz/mediawiki/index.php/FPGA_ESP8266
  14. 3 points

    My Favorite Digilent Product...

    Prompted by Amber's blog post, https://blog.digilentinc.com/index.php/my-favorite-digilent-product-the-uno32/ here's mine - and it is most probably not the one you might expect. It is Part# 240-004P - the 6Pin Header & Gender Changer. I push them into breadboards for making solid off-board connections, They let me clip on scope probes onto PMOD sockets for debug outputs, I can attach the flying leads from my Logic Analyser to any 0.1" female connector. They they are multi-platform, working with nearly all dev boards from all suppliers. They are truly awesome. And they even act as gender changes for PMOD cables. I wish I could get millions of these, in nice 40-way long strips. At the moment they are like hen's teeth, as a lot of them have found semi-permanent use on projects around the place.
  15. 3 points
    Although this isn't using a Digilent FPGA board, here is how to drive a low-cost stepper motor and to count the steps taken. It is using a 5V stepper motor, but if you have 12V motor & driver board it may also work for you. http://hamsterworks.co.nz/mediawiki/index.php/Stepper
  16. 3 points
    I'm working on a design for receving HDMI video and decided to write up my method for tuning the IDELAY and ISERDES settings to sync with the incoming stream. If you are interested, you can find it at http://hamsterworks.co.nz/mediawiki/index.php/SERDES_symbol_locking
  17. 3 points

    Help With A Zybo Video Design

    Hey Run, Where did you get the demo? I would like to see what you are working from. 1. I suspect you just need to change the clocking wizard that feed the dvi2rgb core to 75MHz instead of 200MHz but I cannot be sure without poking around a little. Although, I have only ever used one ucf/xdc file per design so I am wondering if you are having issues with that. I could see how using multiple files could work but I don't have any experience with it. As for your errors, "[Common 17-55] 'set_property' expects at least one object. " error is caused by a mismatch between the defined port in Vivado and the xdc. In this case, I would get rid of the "dvi2rgb.xdc" and the "dvi2rgb_ooc.xdc" files and rely on the zybo master xdc. Then I would change the zybo xdc to match the port names that are attached to the dvi2rgb core. 2. I'll ask around but I think you should have one universal XDC. 3. Make sure to change the XDC to reflect the port names you used. 4. Do you mean you tied them by outputting them to a pin and using a wire to put them to VDD or GND? That isn't a good idea. Those pins are being driven as outputs and driving them to VDD or GND could short them and damage the pins. On inputs that would be fine but I like to tie the signals to a switch or button. On outputs, leave them unconnected. Hope this helps. Marshall
  18. 3 points
    All, First post, so may I say hi and introduce myself I've long been into electronics and good old DIY dabbling, took a course in "Applied Computing and Electronics" at Bournemouth Uni in the UK which was a bit of everything from VHDL, circuit layout/design and 8051 programming to some C++, Java and C#. Since then I've gone from creative fun programmer to boring paper pusher manager in the hunt for something to label a career. Along came the little Uno32 and the Motor Shield for some of that home hobby messing about I've so missed - boy is it good to be doing it again! :-D So some more background - many years ago my dad and I effectively retrofitted a highly accurate drive system to a telescope mount for astro-photography, this had a DC servo motor drive unit at the heart and back then (12 years now) that little magic box cost well into the triple figures. Before the days of my training, the insides of that box were simply black magic. Fast forward to now and just for fun I wanted to see what a sub £50 bit of kit, a la the Uno32 and some rusty knowledge could do to imitate that once mysterious and extortionately priced system. Well, its not exactly stellar, but I'm quite chuffed with what I've done so far. Lots of googling, lots of libraries downloaded and fiddled with and some slightly oddball approaches to the motor control and I have something that, despite the rambling, may be of interest to others. Basic Description: Uses the ChipKit Uno32, the Motor Shield, a 9V 3A supply for the shield and a Maxon 12V 3.8:1 gearmotor with 512CPT encoder (£25 off eBay). Just the one motor so far, though 2 should be simply a few extra lines in the sketch. Libraries that have been used include the SoftPWMServo, modified to run at 30KHz (20KHz still made some audible wine) and accept a range of 0-65535 (finer control, in theory). Checked the output on a scope at work and it looks pretty darn accurate for a software 30KHz PWM - I'm impressed :-) Not clear if I am allowed to post links here, but a google search will take you straight to the library. Another library was the Arduino PID Library, modified to match changes to SoftPWMServo accepting a range from 0-65535. A bit of code was stolen from one of the MPIDE examples to assist with serial data parsing so a few commands can be sent over the serial port to set either position or velocity. That came from the BasicSerialParser example in Communications. Motor Control: Control is somewhat odd, my own thinking but I completely expect by no means original! I drive the H Bridge completely backwards. By this I mean I keep the enable pin high, and send the PWM through the direction pin. This is probably considered completely mental, but it has a few interesting benefits (IMHO). Before PID, I was seeing how slow the motor would turn before stalling using just open loop PWM. This is of interest (to me) because having a large dynamic range is useful for telescopes - sloooow tracking but speedy slewing to an object. Driving the H Bridge in this alternate way definitely allowed me to drive it slower by about 3 fold compared to driving the H Bridge normally. Similarly, holding torque is improved since in 0 position the motor is not actually off, but oscillating constantly. The motor does obviously get hot though since it is constantly being driven at max duty cycle just in different directions all the time! No magic smoke released, so it seems the H Bridge copes with it OK - I'll let you know if it changes! Having said all that, the motor wasn't exactly great on torque (its only 22mm as it is and under driven at 9V for a 12V motor). The "steady state" PWM value for the motor is 32767 (effectively 50/50 duty cycle in forward/reverse resulting in 0 angular velocity), 0 sets max reverse speed and 65535 sets max forward speed. Now with PID thrown in the mix that forward/reverse control of the oddball H Bridge driving makes things really easy. Oh, PID is just brilliant by the way. Hopefully the sketch attached shows how simple it is to throw a PID algorithm in there, and it ends up allowing for some really cool control. Position (not worked out how to allow for going negative yet) is between 0 and _alot_. It is just a case of setting a "setpoint" of encoder pulses as the desired position, throwing in the current encoder pulses when you sample and letting it the PID do its thing. Its crazy, holding torque at any position is stupid - the thing feels alive and fights with you. The more you try and turn it, the more you are deviating it from the setpoint and so the more the PID injects as an offset to fight with you, really is quite cool. I've seen loads on how to do velocity online and people seemed to find it difficult, so I've probably done this completely wrong as all I do is keep count of the last encoder pulse sample value and sample time and then when you next sample you can work out how many pulses you are doing in a specified time frame. You use this and the desired value for the PID and it then ensures the speed is kept. The encoder counter is using an interrupt timer and set within the sketch. Pretty straight forward logic but I think it might be slightly floored, or I am missing counts or something as I can't quite yet get the thing to 0 at the same point repeatably. At fully chat its doing about 170KHz encoder pulses though so not bad going. The default PID values I'm using (20,400,0.2) are interesting but work well. The velocity goes down to about 20RPM smoothly, 10RPM it does but not happily - 4000RPM is the max it will do at 9V and it appears the encoder counting is keeping up (I had a poor(er) implementation before and when it started missing counts behavior went haywire). Pretty good dynamic range I think. Dialing in a position is great - snaps to it with no hesitation although need to work out why the lack of really precise repeatability. Next things to do are to try and work out how to do a position+velocity move which is proving a head scratcher. Then I think its time to tidy it up and put it into something a bit more manageable and start thinking about wrapping it with some stuff to make it useful for actual telescope mount control. Anyway, I must say apologies for such a rambling first post. It kind of befits my enthusiasm for this little thing, so nice to be back in the thick of a bit of hardware with wires hanging out of it and led's flashing away and the like. If anyone is genuinely interested in progress with this let me know and I'll keep this updated. PS: The sketch probably won't build! It requires the libraries mentioned above, but I did modify them a bit so some of the variables will have type changes. I could package the whole lot up as a zip but I honestly don't know where I'd stand with GPL licenses and the like so any problems shout and I can explain what I did. Hopefully there are some useful scraps in there for others to use if nothing else :-) ... UPDATE: I am not permitted to upload pde files, which is fine (not grumbling - just noticed the error when about to hit submit). I'll still post this so if anyone is interested for the sketch or the encoder counting code or whatnot let me know I guess I am allowed to post code snippets of my own in posts? Thanks all! Chris
  19. 3 points

    Nexys3 Best Practice for Unused Pins

    Hi! By default the tools configure all unused I/O pins are configured with a weak pull-down on them (I'm away from my laptop at the moment so can't verify what I am saying, but I am a little bit sure that it is pull-down) So you can either: * change the "Generate Bitstream" properties to change this default behaviour (IIRC the other options are either pull up, pull down or floating). * Define the anode pins and force them to turn the display off * Ignore it, and consider it a feature. Mike
  20. 3 points


    Hi all, My name is Serge, I work for MIPS (now Imagination Technologies) doing simulators for verification. Microcontrollers are my hobby, and I have several pet projects, like: RetroBSD, LiteBSD, QEMU for pic32, pic32sim, pic32prog and ejtagproxy. I use Max32, WF32 and WiFire boards, and some pmods. Thank you.
  21. 3 points


    Hi, all. My name is Matt and I am a hobbyist and also an electronics technician by trade. I own a Digilent Analog Discovery w/BNC adapter board, and a Nexys2-1200 w/parallel LCD, also from Digilent. I use TINA and Waveforms, and have the Analog Parts kit and Mastech DMM in your product line. I have worked through most of Real Analog, and all of Real Digital, and have both Digital Design books by Haskell, and the FPGA book listed on your website. I have used your products and worked through so many of your materials and recommended books because as I have tried each one, I have found it to be a top notch quality resource. My personal favorite *BY FAR* is Real Analog. I do not know the instructor's name, but kudos to that man for clarity of instruction. I have learned much from him. Give him a raise! I list all this out to give you a bit of background on me before I say this: Please continue making educational materials. Your Analog Discovery product is awesome, but it was Real Analog that elevated me as a technician and budding engineering student and made me want MORE. Real Digital was good, too. There are tons of "entry-level" educational materials on the internet, but they all share a common lack of depth and mathematical rigor. Real Analog was a massive breath of fresh air. As someone who has a casual understanding of calculus, and no idea what a differential equation was when I started Real Analog, I was impressed at the depth of material and simultaneously the ease of learning that the program provided. It made me Google and Youtube things like "Complex Impedance" and "Phasor Diagram" and "Solving Differential Equations", something I had never done before. For the marketing folks here, I would emphasize the value in having educational materials using your products, akin to the Real Analog-Analog Discovery dichotomy. Make a program teaching microcontrollers (with rigor!) using your ChipKit products. Make a digital course using Basys or Nexys products (or either/both!). That's why I got Haskell's books with my Nexys2, and also why I bought Pong P. Chu's book instead of another FPGA book. I had a lab in my hand that the *book used*. If you build it, they will come; and buy the accessories, to boot. P.S. Thanks for everything your company has done. You're awesome, and I recommend you to every amateur, student, hobbyist, ham radio operator, and some professionals that I know.
  22. 3 points
    I just got this up and running: http://youtu.be/dIAJrQxToCc It's a custom TFT LCD controller board using only two PMODs. The board controlling it is an FPGA devboard that communicates with the host computer using the FTDI's FT2232H in synchronous FIFO mode so that I can transfer data between the host and board at a rate of about 25MB/s using a simple protocol. I wrote a scripting tool that glues together wishbone cores to create an FPGA image using a simple configuration file. Editing configuration files are great but I thought it would be so much better if I could modify the FPGA image by using a GUI so I worked on an application that does that. Here is a screen shot of how I visually created the LCD controller. One of the big limitations of using USB 2.0 is the relatively large overhead to initiate a transaction, It's much faster if you send a large chunk of data. So instead of writing directly to the LCD controller I write to the SDRAM and then configure the LCD controller to read directly from the memory. This way I can write a new frame down to memory while the LCD controller is reading data out using a double buffer scheme (host writes to back, controller reads from front, then flip). The protocol to communicate with the FPGA is a really simple protocol abstracted away in Python to simply 'read' and 'write'. It was pretty cool to communicate with the FPGA using a python module but I thought it would be so much better if I could interface with an FPGA using a GUI. So I added a visual interface to communicate with it (That's what I was using in the video). If you're interested in the board here's the link: http://wiki.cospandesign.com/index.php?title=Dionysus the code to control the LCD is here: https://github.com/CospanDesign/nysa-verilog/tree/master/verilog/wishbone/slave/wb_nh_lcd The code is designed to be as generic as possible, so if you want to adapt it to your project it really just needs a wishbone bus but you can bypass Wishbone by just using the nh_lcd.v
  23. 3 points

    Pmod Tmp3 Pin Distances

    Find attached a drawing with the dimensions. PmodTMP3_mech.pdf
  24. 3 points


    Hi, my name is Gian I'm an hobbist. My Interest cover FPGA. I bought some of your products (basys2 to Nexys4) that I regular use. This forum is a good idea!!
  25. 3 points
    Hello! So here is my entry for Digilent's Halloween contest. This is my first time programming in MPIDE and doing something of this nature with microcontrollers, so I put a lot of hours into researching and getting it to work the way that I had planned (with quite a few setbacks along the way). A PIR sensor activates a servo attached to the doll's head, a digital voice recording module with a creepy audio clip, and some LEDs for the eyes. It's running on the chipKIT Max32. I will follow up with a link to an instrucable when I have time to hammer that out. I had a lot of fun doing this and learned quite a bit. Below are some different youtube vids displaying the doll! http://youtu.be/hjpHrV_7POU Here's a video of the completed doll. http://youtu.be/AHtMbCk0-c4 Gotta love slowmo http://youtu.be/1MZ9VPrGxOY Testing phase to make sure all of the parts are working as intended.