Warning: Declaration of action_plugin_importoldchangelog::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/lib/plugins/importoldchangelog/action.php on line 24 Warning: Declaration of action_plugin_safefnrecode::register(Doku_Event_Handler &$controller) should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/lib/plugins/safefnrecode/action.php on line 16 Warning: Declaration of action_plugin_importoldindex::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/lib/plugins/importoldindex/action.php on line 21 Warning: Declaration of action_plugin_popularity::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/lib/plugins/popularity/action.php on line 21 Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/lib/plugins/importoldchangelog/action.php:8) in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/inc/auth.php on line 377 Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/inc/auth.php on line 656 Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/inc/auth.php on line 656 Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/inc/auth.php on line 656 Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/lib/plugins/importoldchangelog/action.php:8) in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/inc/actions.php on line 628 Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/lib/plugins/importoldchangelog/action.php:8) in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/inc/actions.php on line 628 Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/lib/plugins/importoldchangelog/action.php:8) in /home/httpd/vhosts/siliconretina.ini.uzh.ch/httpdocs/wiki/inc/actions.php on line 628 ====== User guides for DVS128 and DVS128_PAER Dynamic Vision Sensors ====== {{dvs128-032.jpg?w=400|DVS128 camera systems}} {{:20130918-135744.jpg?400|DVS128_PAER camera}} ===== Tmpdiff128 Vision Sensor Camera models ===== There are three camera models all built around the same **//Tmpdiff128//** dynamic vision sensor chip: The **//DVS128//**, the **//DVS128_PAER//**, and the **//eDVS128//**. * The **DVS128** camera has a high-speed USB2.0 interface capable of full speed (up to 2Meps) AER data capture and a strong plastic case with integrated tripod mount and camera sync connector pins. The DVS128 is intended for jAER-based PC applications. * The** DVS128_PAER** is a bare-board camera that offers parallel AER connectors for direct interfacing of the DVS sensor to other AER systems, supporting two connector standards (Rome and CAVIAR). It has a full-speed USB2.0 controller that allows configuration of the camera biases and sniffing of AER data up to 100keps. However, the USB function is only intended to monitor the camera output because the USB interface is designed to passively monitor the AER bus without affecting communication with other hardware. * The **eDVS128** camera is an embedded camera that integrates the Tmpdiff128 sensor chip with a 32-bit microcontoller. [[https://wiki.lsr.ei.tum.de/nst/programming/edvsgettingstarted|Please see here for the eDVS128 (embedded dynamic vision sensor).]] Most of the information on this userguide page applies to all three camera models. However, some features, such as firmware update and LED functionality, are specific to models. ===== Requirements, including driver and software installation ===== See the [[https://jaerproject.net|jAER project]]. Use the //ch.unizh.ini.jaer.chip.retina.DVS128// class with these //AEChip// objects. The jAER wiki at http://jaerproject.net has information on the host software. Biases are found in the [[http://jaer.svn.sourceforge.net/viewvc/jaer/trunk/biasgenSettings/|biasgenSettings folder]]. Use //tmpdiff128.xml// for the original bare boards and one of the //DVS128*.xml// for the new DVS128 sensors. ===== Optics ===== (This information applies to all camera models, but the eDVS has an M12x0.5mm lens) The [[http://www.ini.uzh.ch/~tobi/resources/|lens mount]] shown above for the integrated lens mount in the DVS128 camera and the DVS128_PAER is designed for **CS mount lenses**. If you have a C-mount lens (which can be identified from a marking on the lens), you need to use the C to CS converter adapter ring (normally supplied with the device) that moves the lens further from the chip. The chip requires lens designed for 1/2 inch imagers (die size is 6.0x6.3mm and active area is 5.12x5.12mm. In any case, the field of view is larger than that of common 1/3 inch imagers for which many lens are sold. The field of view (**FOV**) depends on the focal length **L** of the lens and the size **W** of the pixel array. The angular FOV (AFOV) is given by AFOV=2*atan(W/2/L) The linear FOV (LFOV) at a distance **D** from the lens is given simply by similar triangles LFOV=D*W/L The pixel array measures W=128 pixels x 40 um/pixel=5.12 mm. The following table shows the horizontal and vertical field of view in degrees and its size at various distances for different common focal lengths. ^ Computations of Tmpdiff128/DVS128 Field of View |||||| | pixel array dimension, x or y \\ (mm) | 5.12 | |||| ^ lens focal length \\ (mm) ^ AFOV\\ horizontal or vertical\\ (deg) ^ AFOV diagonal\\ (deg) ^ LFOV \\ (cm) ||| ^ | | | distance 10 cm | distance 30 cm | distance 100 cm | ^ 2.6 | 89.1 | 108.6 | 19.7 | 59.1 | 196.9 | ^ 3.6 | 70.8 | 90.3 | 14.2 | 42.7 | 142.2 | ^ 4 | 65.2 | 84.3 | 12.8 | 38.4 | 128.0 | ^ 4.5 | 59.3 | 77.6 | 11.4 | 34.1 | 113.7 | ^ 6 | 46.2 | 62.2 | 8.5 | 25.6 | 85.3 | ^ 8 | 35.5 | 48.7 | 6.4 | 19.2 | 64.0 | ^ 12 | 24.1 | 33.6 | 4.3 | 12.8 | 42.7 | ^ 25 | 11.7 | 16.5 | 2.0 | 6.1 | 20.5 | ===== Hints on biasing ===== (This information applies to all camera models.) The default biases //DVS128Slow.xml// or //Tmpdiff128.xml// (in the Biases are found in the [[http://jaer.svn.sourceforge.net/viewvc/jaer/trunk/biasgenSettings/|biasgenSettings folder]].) are suitable for many situations. These settings can be saved to a location of your choice and then opened from the Biasgen File/Load settings... dialog. After that the settings will be stored as your default preferences. Other settings are stored in files starting with the device class name in jAER. You can open the Biasgen window from the button at the bottom of the JAERViewer window or from the View menu. The most recent loaded or saved bias settings are persistent--the next time you start the jAERViewer application you will get the most recent saved bias values. If you wish to export these more permanently you can do so with the //File/Save settings...// dialog. **If you change biases without saving, then your changes will be lost.** The Biasgen control panel support unlimited Undo and Redo, including reversion to saved settings, so you can feel safe about playing with the settings. The View menu allows disabling unneeded views of the bias values, e.g. the bit values. ===== Controlling the biases ===== The biases control panel has two tabs: //Basic controls// and //Expert controls//. The Basic controls tab looks like this: {{:dvs128basiccontrols.png|Basic controls}} Using these controls you can vary the biases around the nominal values loaded from the settings file (e.g. //DVS128Fast.xml//). The Expert controls tab looks something like this: {{:dvs128expertcontrols.png|Expert controls}} These controls directly vary bias currents. For dark conditions, it may be helpful to reduce //Pr// and/or //foll// to slow the front end photoreceptor to prevent parasitic oscillations. For high speed operation, it may be helpful to increase //Pr//, //foll//, and //refr//. Hover over the bias name to get a tooltip hint as to its functionality. ==== To adjust thresholds ==== Sliding //diffOn// to left towards //diff// decreases ON event threshold. Sliding //diffOFF// to right towards //diff// decreases OFF event threshold. ===== Data Recording (logging) ===== To record camera data (recording is called //Logging// in jAER), see the [[http://jaer.wiki.sourceforge.net|jAER project wiki]] for more information, in particular [[http://jaer.wiki.sourceforge.net/jAER+with+Matlab|this page about loading logged AE data into matlab]]. ===== Stereo Camera configurations ===== By choosing the //AEChip// //DVS128StereoPair// as shown below, you can plug in two DVS128 by separate USB interfaces and they will be treated as a stereo pair. Recording, playback, control of biases, common filtering, etc are applied to the resulting stereo stream. //(This class name may change in the future.)// {{:stereopair.png|The stereo pair class}} The events are internally represented as objects of type //BinocularEvent//. Look for usages of this class for examples. The rendering of stereo recordings uses the convention red=Right, green=Left. (remember "red right"). However this choice is arbitrary. The assignment of left / right is made by lexicographic comparison of the serial number strings. //(This assignment is likely to be changed without notice.)// Internally, the raw stereo addresses presently use bit 15 to mark the right eye, i.e. 1=right, 0=left. However this assignment is also likely to change without notice. The hardware interface class for the stereo pair allows the optional ordering of incoming events so that time increases monotonically. This sorting has significant cost in computation and latency. See usages of the class //StereoHardwareInterface// for examples of the use of the //setIgnoreTimestampNonmonotincity()// flag. This option is controlled by the //File/Check for non-monotonic time in input streams// option, as shown below: {{:nonmonotonicinputstreams.png|Controlling timestamp mononotonicity in input streams}} ===== DVS128 Camera Specific Information ===== The information below about firmware updates and multi-camera synchronization apply to the DVS128 camera. ==== DVS128 Camera Firmware Updates ==== The DVS128 firmware (CypressFX2 software and CPLD configuration) can be updated easily (although firmware updates always have some element of risk). The [[https://sourceforge.net/apps/trac/jaer/browser/trunk/deviceFirmwarePCBLayout/CypressFX2/firmware_FX2LP_DVS128/CHANGELOG.txt|change log]] shows the firmware revision information. === IMPORTANT === - firmware updates were previously broken when running jAER using the standard JRE. Make sure you have updated your working copy before attempting firmware update! - Firmware updates have only been tested with a single DVS128 plugged in. You can check which firmware version you have and then optionally update. Do this by using the USB menu (with the DVS128 plugged in): {{:updatefirmware1.png|DVS128 firmware update}} {{:updatefirmware2.png|Version check}} The [[https://jaer.svn.sourceforge.net/svnroot/jaer/trunk/deviceFirmwarePCBLayout/CypressFX2/firmware_FX2LP_DVS128/CHANGELOG.txt|DVS128 firmware changelog]] records changes to DVS128 firmware. Updating firmware is always risky and if something goes wrong you may need to return the camera for a new EEPROM (for which we will charge.) If you elect to update, you should see a progress bar followed by success: {{:updatefirmware3.png|Firmware update progress}} {{:updatefirmware4.png|Firmware update success}} ==== DVS128 Camera synchronization ==== Multiple cameras can be synchronized to microsecond time-stamp precision. To connect cameras, you can use coax cables together with t-connectors and the Pomona Electronics 5069 coax breakout adaptor with 0.025" pin connectors (e.g. http://www.digikey.com/product-search/en?x=-1075&y=-87&lang=en&site=us&KeyWords=pomona+5069 or http://www.testpath.com/Items/Breakout-BNC-Female-to-0025-in-Square-Pin-Sockets-113-531.htm). The DVS128 cameras can be precisely synchronized so that simultaneous events from two cameras will receive exactly the same timestamps. The camera have the capability that one camera can be the master timestamp source which clocks the the other's timestamp counter. For synchronization, DVS128 cameras with a firmware version number >= 11 should be used, older firmware versions are not synchronized properly if the USB load is high. To enable this functionality, the cameras must be connected so that the **OUT** of the master is connected to the **IN** of the slave(s). If the cameras are connected to the same computer, the ground pins do not have to be connected (to avoid possible ground loops). If the cameras are connected to different computers, the ground pins should be connected as shown below. Starting from firmware version 11, the timestamp master camera has to be selected in software. In the jAER software, for the timestamp master (where the **OUT** is connected) the checkbox 'Timestamp master / enable sync event output' in the DVS128-menu has to be checked, for the slave(s), this checkbox has to be unchecked. The master camera keeps its bottom LED lit, while the slaves extinguish theirs. To synchronize the cameras after plugging them in, press '0' in the AEViewer window of the timestamp master to reset the timestamps of all the cameras. {{dvs128-120.jpg?w=600|Connecting DVS128 to synchronize timestamps}} === DVS128 External synchronization - e.g. from a different device === A capability of DVS128 firmware revision 7+ is the ability to inject synthetic events into the event stream on falling edges detected on the IN pin. In this mode, the function of the IN pin is modified so that instead of clocking the internal timestamp counter, it now injects a special event with bit 15 set on every falling edge of the IN pin. These //sync events// are generated on each falling edge at the IN pin. **The IN pin is not 5V tolerant.** High must not exceed 3.3V. To enable this mode, first check your camera firmware version. Then, while the DVS128 is plugged in, use the DVS128 menu to select the sync event enabled, as shown in the screen shot below: {{:synceventenable.png|Enabling sync events}} Falling edges of the IN pin should result in logging these special events: if((addresses[eventCounter]&SYNC_EVENT_BITMASK)!=0){ log.info("sync event at timestamp="+timestamps[eventCounter]); } ==== DVS128 LEDs and Sync Connectors ==== Close up photos of the DVS128 sensor (older prototype version shown here) are shown below. The blinking HB (heartbeat) LED shows that the cameras controller is running. The M (master) LED is ON as long as the DVS128 is time-stamp master, it turns off, if the DVS128 is clocked externally. The synchronization pin usage is explained above. {{dvs128-058.jpg?w=400|Front of DVS128}} {{dvs128-054.jpg?w=400|Back of DVS128}} ===== DVS128_PAER Documentation ===== {{:dvs128_paer-photo-annotated.png?300|DVS128_PAER front side}} {{:dvs128_paer-photo-backside-annotated.png?300|DVS128_PAER back side}} The DVS128_PAER uses a Silicon Laboratories C8051F320 microcontroller. On the host side, the same USB driver that communicates with the DVS128 is also used to communicate with the DVS128_PAER. However the DVS128_PAER USB communication bandwidth is much more limited (to a maximum of about 100keps) and the main use of the jAER USB interface is for sensor bias setting and "sniffing" the events sent on the AER bus to another device. To use the DVS128_PAER in jAER, use the AEChip **DVS128**, and load the biases **biasgenSettings/DVS128/DVS128_PAER.xml**. Make sure that the REQ/ACK jumper is shorted (see below). ==== DVS128_PAER LEDs and Jumpers ==== {{:dvs128_paer_pcbmodel-annotated-final.png?direct&600|3d DVS128_PAER PCB model}} There are two LEDs, L1 and L2 at the top center of the PCB. * **L2**: USB activity output, indicates USB control commands, e.g. biases * **L1**: AER activity output, blinks to indicate AER activity or transmission There are also two important jumpers. * **USB_PS/EXT_PS**: (left of the tmpdiff128 DVS sensor) This jumper powers the board from USB VBUS (5V) power or from the external power supply. * **REQ/ACK**: (top right of the tmpdiff128 DVS sensor) This jumper connects the AER request and acknowledge signals so that the DVS chip handshakes with itself. If this jumper is left unconnected, no data will appear in jAER. Disconnect the jumper if the DVS chip is handshaking with a receiver device. The AER header pins are documented in [[https://sourceforge.net/p/jaer/code/HEAD/tree/trunk/doc/AERHardwareAndCabling.pdf?format=raw|AERHardwareAndCabling.pdf]]. The 20 pin header uses the so-called Rome standard, and the 40-pin IDE header uses the so-called CAVIAR standard. ==== DVS128_PAER additional documentation ==== * [[http://sourceforge.net/p/jaer/code/HEAD/tree/trunk/doc/DVS128_PAER_PCB_2009.pdf?format=raw|DVS128_PAER PCB Schematics and Layout]] * [[https://sourceforge.net/p/jaer/code/HEAD/tree/trunk/deviceFirmwarePCBLayout/SiLabsC8051F320/DVS128_PAER_PCB_2009_Firmware/|DVS128_PAER firmware directory in jAER]]. * [[http://sourceforge.net/p/jaer/code/HEAD/tree/trunk/deviceFirmwarePCBLayout/SiLabsC8051F320/DVS128_PAER_PCB_2009_Firmware/USB_Main.c|USB_Main.c - the main firmware file]] ====== Specifications ====== ===== Tmpdiff128 Specifications ===== The specifications below apply to the vision sensor chip Tmpdiff128 that is used in all camera models. For detailed background on these specifications, see [[http://siliconretina.ini.uzh.ch/wiki/lib/exe/fetch.php?media=lichtsteiner_dvs_jssc08.pdf|this JSSC paper]]. | Functionality|Asynchronous temporal contrast | | Pixel size um (lambda)|40x40 (200x200) | | Fill factor (%)|9% (PD area 151μm2) | | Fabrication process|4M 2P 0.35um standard CMOS | | Pixel complexity|26 transistors (14 analog), 3 capacitors | | Array size|128x128, 16k pixels | | Die size mm2|6.0 x 6.3 | | Chip interface|15-bit word-parallel AER\\ active low Req and Ack 4-phase handshake| | Power consumption|Chip: 23mW @ 3.3V\\ 1.5mA core\\ 0.3mA logic\\ 5.5mA biases | | Dynamic range|120dB\\ 2 lux to > 100 klux scene illumination with f/1.2 lens with normal contrast objects\\ Moonlight (<0.1 lux) with high contrast scene | | Photodiode dark current at room temperature|4fA (~10nA/cm2)\\ Nwell photodiode | | Response latency|15μs @ 1 klux chip illumination | | Max events/sec|~1M events/sec | | Pixel matching|2.1% contrast\\ (The event threshold 1-sigma mismatch is 2.1% contrast) | | Board dimensions|Width: 49mm\\ Height: 36.25mm\\ Depth (OD from front to back of boards): 14mm\\ PGA 101 package: 33.6mm square | ===== DVS128 Specifications ===== These specifications apply to the DVS128 camera. | Computer interface|USB 2.0 standard B female connector, Windows XP/7/8 x32/x64, Linux x64, Mac OS drivers\\ [[http://jaerproject.net|Java API]] | | Power consumption, USB 5V VBUS| Low activity, 60mA, High activity, 100mA | | Optics|Standard CCTV CS-mount lenses for 1/2" format cameras | ====== Troubleshooting ====== This section will be added to as new problems are reported on the sourceforge help forum. Symptoms: jAER is running and a DVS is plugged in. Either there are no spikes coming out, or there are some spikes but they don't make sense. Possible solutions: 1) Check that all filters are disabled. 2) Check that the lens aperture is open.