Search the Community

Showing results for tags 'i2c'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News
    • New Users Introduction
    • Announcements
  • Digilent Technical Forums
    • FPGA
    • Digilent Microcontroller Boards
    • Non-Digilent Microcontrollers
    • Add-on Boards
    • Scopes & Instruments
    • LabVIEW
    • FRC
    • Other
  • General Discussion
    • Project Vault
    • Learn
    • Suggestions & Feedback
    • Buy, Sell, Trade
    • Sales Questions
    • Off Topic
    • Educators
    • Technical Based Off-Topic Discussions

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Found 40 results

  1. Hi all, This is a quick and dirty howto. This howto describes how to use I2C modules (onboard and through PMOD connector) under embedded Linux. I've chosen to build my own Linux distro based on Linux kernel source for MicroBlaze softcore and busybox project for the init RAM DISK. My board is the Nexys4 DDR board. If you respect the following requirements for the HW design compatible with Linux, you can use Petalinux too. HW Vivado requirements (according to Xilinx UG1144) design to boot Linux: MicroBlaze with MMU support by selecting either Linux with MMU or Low-end Linux with MMU configuration template in the MicroBlaze configuration wizard. External memory controller with at least 32 MB of memory. Dual channel timer with interrupt connected. UART with interrupt connected. Ethernet with interrupt connected. Note that all peripherals you use must be interrupt capable. For the UART peripheral, if you have not enabled interrupts, you have no Linux console outputs. For the Nexys4 DDR, you can follow this online tutorial: https://reference.digilentinc.com/learn/programmable-logic/tutorials/nexys-4-ddr-getting-started-with-microblaze-servers/start At this stage, for the Nexys4 DDR board, you can add the onboard i2C temperature sensor (ADT7420) that uses the AXI IIC IP block. I've added a second external temperature sensor (PMOD TMP3) connected to PMOD JA pins of the Nexys4 DDR board. I've chosen to connect SCL TMP3 pin to JA1 PMOD JA pin (C17 FPGA pin) and SDA MP3 pin to JA2 PMOD JA pin (D18 FPGA pin). You connect GND and 3V3 pins from PMOD JA connector to corresponding TMP3 pins. You have finally 4 pins to connect. You obtain the Vivado design shown below. Notice that both AXI IIC IP blocks have interrupts connected for Linux compatibility. For the TMP3 sensor, I have an external port named temp3_sensor. I've created a XDC file containing: set_property -dict { PACKAGE_PIN D5 IOSTANDARD LVCMOS33 } [get_ports { eth_ref_clk }]; # Sch=eth_ref_clk set_property -dict { PACKAGE_PIN C17 IOSTANDARD LVCMOS33 } [get_ports { tmp3_sensor_scl_io }]; set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 } [get_ports { tmp3_sensor_sda_io }]; You can see that: tmp3_sensor_scl_io signal is for SCL I2C signal. tmp3_sensor_sda_io signal is for SDA I2C signal Please respect notation: xxx external I2C port gives xxx_scl_io and xxx_sda_io signal names in the XDC file. Generate .bit file. Launch Vivado SDK tool, install the device tree plugin and generate Device Tree files. You can follow this link: https://numato.com/kb/neso-microblaze-linux-run-linux-neso-artix-7-fpga-module/ Copy the generated pl.dtsi file (under project_1/project_1.sdk/device_tree_bsp_0/ directory) into arch/microblaze/boot/dts/ Linux directory. Use the generated system-top.dts file (under project_1/project_1.sdk/device_tree_bsp_0/ directory) to create the xilinx.dts file into arch/microblaze/boot/dts/ Linux directory. Be carefull with stdout options in the xilinx.dts file if you want Linux output enabled. Mine is: /dts-v1/; /include/ "pl.dtsi" / { chosen { bootargs = "console=ttyUL0,9600"; linux,stdout-path = &axi_uartlite_0; stdout-path = &axi_uartlite_0; }; aliases { ethernet0 = &axi_ethernetlite_0; serial0 = &axi_uartlite_0; i2c0 = &axi_iic_0; i2c1 = &axi_iic_1; }; memory { device_type = "memory"; reg = <0x80000000 0x8000000>; }; }; &axi_ethernetlite_0 { local-mac-address = [00 0a 35 00 00 00]; }; Generate your init RAM Disk for root File sytem. I suppose that you can do this. Generate your Linux kernel. I suppose that you can do this: $ make ARCH=microblaze CROSS_COMPILE=microblazeel-xilinx-linux-gnu- simpleImage.xilinx -j 4 Program the FPGA device and download the simpleImage.xilinx file (kernel + init RAM Disk) under arch/microblaze/boot directory into RAM with the JTAG interface and finally execute. That's all folks! Ramdisk addr 0x00000000, Compiled-in FDT at c03ad4f8 Linux version 4.14.0-00493-gb68293ad2c93-dirty (kadionik@ipcchip) (gcc version 8 setup_cpuinfo: initialising setup_cpuinfo: Using full CPU PVR support wt_msr_noirq setup_memory: max_mapnr: 0x8000 setup_memory: min_low_pfn: 0x80000 setup_memory: max_low_pfn: 0x88000 setup_memory: max_pfn: 0x88000 Zone ranges: DMA [mem 0x0000000080000000-0x0000000087ffffff] Normal empty Movable zone start for each node Early memory node ranges node 0: [mem 0x0000000080000000-0x0000000087ffffff] Initmem setup node 0 [mem 0x0000000080000000-0x0000000087ffffff] On node 0 totalpages: 32768 free_area_init_node: node 0, pgdat c0525af4, node_mem_map c07a2000 DMA zone: 256 pages used for memmap DMA zone: 0 pages reserved DMA zone: 32768 pages, LIFO batch:7 pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768 pcpu-alloc: [0] 0 Built 1 zonelists, mobility grouping on. Total pages: 32512 Kernel command line: console=ttyUL0,9600 PID hash table entries: 512 (order: -1, 2048 bytes) Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) Memory: 121948K/131072K available (3765K kernel code, 121K rwdata, 1312K rodata) Kernel virtual memory layout: * 0xffffe000..0xfffff000 : fixmap * 0xffffe000..0xffffe000 : early ioremap * 0xf0000000..0xffffe000 : vmalloc & ioremap NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0 irq-xilinx: /amba_pl/interrupt-controller@41200000: num_irq=5, edge=0x6 /amba_pl/timer@41c00000: irq=1 clocksource: xilinx_clocksource: mask: 0xffffffff max_cycles: 0xffffffff, max_is xilinx_timer_shutdown xilinx_timer_set_periodic sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 21474836475ns Calibrating delay loop... 49.15 BogoMIPS (lpj=245760) pid_max: default: 4096 minimum: 301 Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) random: get_random_u32 called from bucket_table_alloc+0x2e4/0x35c with crng_ini0 clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 191s NET: Registered protocol family 16 clocksource: Switched to clocksource xilinx_clocksource NET: Registered protocol family 2 TCP established hash table entries: 1024 (order: 0, 4096 bytes) TCP bind hash table entries: 1024 (order: 2, 20480 bytes) TCP: Hash tables configured (established 1024 bind 1024) UDP hash table entries: 128 (order: 0, 6144 bytes) UDP-Lite hash table entries: 128 (order: 0, 6144 bytes) NET: Registered protocol family 1 RPC: Registered named UNIX socket transport module. RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. random: fast init done Skipping unavailable RESET gpio -2 (reset) workingset: timestamp_bits=30 max_order=15 bucket_order=0 io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) io scheduler mq-deadline registered io scheduler kyber registered Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled 40600000.serial: ttyUL0 at MMIO 0x40600000 (irq = 5, base_baud = 0) is a uartlie console [ttyUL0] enabled brd: module loaded libphy: Fixed MDIO Bus: probed xilinx_emaclite 40e00000.ethernet: Device Tree Probing xilinx_emaclite 40e00000.ethernet: Failed to register mdio bus. xilinx_emaclite 40e00000.ethernet: MAC address is now 00:0a:35:00:00:00 xilinx_emaclite 40e00000.ethernet: Xilinx EmacLite at 0x40E00000 mapped to 0xF02 i2c /dev entries driver NET: Registered protocol family 17 Freeing unused kernel memory: 2296K This architecture does not have kernel memory protection. Hostname : nexys4ddr Kernel release : Linux 4.14.0-00493-gb68293ad2c93-dirty Kernel version : #120 Thu Dec 6 16:51:57 CET 2018 Please press Enter to activate this console. nexys4ddr:/# For the first I2C sensor (onboard ADT7420 sensor of the Nexys4 DDR board), we must use the /dev/i2c/0 (or /dev/i2c/i2c-0) character driver file (Major=89 minor=0). For the second I2C sensor (external TCN75A PMOD TMP3 sensor), we must use the /dev/i2c/1 (or /dev/i2c/i2c-1) character driver file (Major=89 minor=1). nexys4ddr:/# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- 4b -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- nexys4ddr:/# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- You can now use the Linux API for reading the I2C sensors... Pat.
  2. Hi, I am relatively new to working with the Zedboard. I've managed to get an I2C/I2S audio example working (using bare-metal) , that i've downloaded from here. http://www.zynqbook.com/download-tuts.html Now, I would like to get the same example working using the Linux Kernel. However, I can't seem to be able to access the I2C bus. The bus appears to be there, but denies access. zynq> i2cdetect -l i2c-0 i2c Cadence I2C at e0004000 I2C adapter zynq> i2cdetect -y 0 Error: Can't use SMBus Quick Write command on this bus From looking at the SDK, the I2C appears to be at 0xe0004000 Has any one got any suggestions, or point me in the right direction to find the correct settings..? Everywhere I have googled seem to provide i2c solutions for different boards, or bespoke platform setups. What I don't understand is why it just doesn't work "out-of-the-box" with the default settings. Or perhaps, i have missed something. I am using Xilinx SDK 2018.3, and the Xilinx kernel My kernel settings are these: CONFIG_REGMAP_I2C=y CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=y CONFIG_I2C_MUX=y CONFIG_I2C_MUX_PCA954x=y CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_ALGOBIT=y CONFIG_I2C_CADENCE=y CONFIG_VIDEO_IR_I2C=y CONFIG_SND_SOC_I2C_AND_SPI=y CONFIG_RTC_I2C_AND_SPI=y My device tree looks like this: i2c@e0004000 { compatible = "cdns,i2c-r1p10"; clocks = <0x1 0x26>; interrupt-parent = <0x4>; /*interrupts = <0x0 0x25 0x4>;*/ interrupts = <0x0 0x19 0x4>; reg = <0xe0004000 0x1000>; i2c-clk = <0x61a80>; #address-cells = <0x1>; #size-cells = <0x0>; }; The default device tree entry for i2c was disabled, so i've tried different combinations. Any help would be gratefully received Dave
  3. Hello, I'm using waveforms to control some I2C communication. the first byte interpreted is wrong, waveforms should read 0xC0 but reads 0x60 instead. Other bytes are good. (see attached picture) Is there a setting I missed? Regards edit: I have waveforms 2015 for windows version 3.5.4
  4. I need to generate test data for evaluating I2C, SPI and CAN devices (only one test at a time, so multiple simultaneous patterns are not necessary). I've tried to get the Analog Discovery 2 to do that and it doesn't look like it will. I've looked at the Digital Discovery and it's not clear that it can do that either. I'm hoping I don't need a US$600+ device. Any recommendations would be appreciated. Thanks
  5. Hi all I would like to try the Protocol I2C function in WaveForms, and I set DIO7 as SCL, then I connect DIO7 to DIO15, and set Logic analyzer to watch I2C signal. After I clicking Write button on Protocol UI, the Logic UI didn't show the clock signal. Can't I do this? I tried UART also. It work fine. Thanks
  6. I need to read some data (a serialnumber to be specific) out of an eeprom. The eeprom I am using supports I2C. in additon to that I'm accessing the openscope mz via json-strings. So I got some questions/problems. Does the openscope mz support i2c? if yes how to I access this with json-commands If it doesn't support i2c I would use an bus-bridge (something like this) to convert it to spi. On the reference website it says the boards supports spi. But I can't find any solution on how to connect to this pins via http. Has anybody some information or recommended websites where I can look for solutions. (If anybody has already some tips I would like to hear them) thanks for your help.
  7. Hi all, I've built with the Nexyx4 DDR board a system running Linux. In my running HW design, I've added the onboard temperature sensor of the board and the PMOD A connector to connect a I2C TMP3 temperature sensor. The HW interface for the onboard temperature sensor is the AXI IIC interface. For the TMP3 sensor with the Digilent's vivado library (as explained in: https://reference.digilentinc.com/learn/programmable-logic/tutorials/pmod-ips/start), it's the AXI LITE IIC interface. With the Linux I2C tools, I see the onboard sensor: nexys4ddr:/# uname -r 4.14.0-00493-gb68293ad2c93-dirty nexys4ddr:/# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- 4b -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- And I can read temperature with the Linux I2C API: nexys4ddr:/# tsttemp TEMP=29.2 oC nexys4ddr:/# But I don't see the I2C TMP3 sensor. My questions are: - The vivado TMP3 instance has a I2C interface (AXI LITE IIC). Can I use the Linux I2C API? If yes, on the PMOD ja port, what are the pins of the connector corresponding to SCL, SDA (easy for ground and 3V3 ;-)? I didn't find this information in the Digilent's vivado library. - If I I can't use the Linux I2C API, I must generate by hand and by software the SCL and SDA signals and what is the role of AXI LITE IIC interface? In this case, would it better to use directly the IIC AXI interface as with the onboard sensor and precise after in a XDC file connexions between to the PMOD A port and TMP3 sensor? Thank you for your help. Pat.
  8. Hi there folks, great to meet you. Recently the company i work bought an Analog Discovery 2 to work with, and all I can say is - This is a great instrument, although I am using very small amount of its power. I have noticed something that lost me 2 days of work to discover that the problem is not my communication but in the way that the data is read by the AD2. The setup is like this - I have two boards communicating over I2C to each other and I am monitoring the messages in the Protocol part of the Waveforms. When i am sending large packets with more than 5 bytes of data there are some errors appearing on the tool but the messages actually are all right. My guess is that the discretization frequency is too small so it is getting errors in messages (i have seen this too when I have used the logic analyzer part of the software, although the I2C speed is 100kHz, when the scan frequency is smaller than 400kHz the protocol is not decoded in the right way.) There is no way(as far as I have tried) to adjust the frequency in Protocol mode. I am uploading pictures, hope it gets clear. Another thing is that the buffer that it stores the information from the protocol is quite large and the tool(waveforms) starts to work slowly, maybe it will be good to be able to adjust the size and flush the buffer more frequently. I will be glad to here from you is there a way to fix this issues. Thanks in advance.
  9. Greetings, Is there a toolkit, etc. for use with the AD2 and Labview for I2C or SPI? I would like to monitor and simulate if possible. I have download and looked at both the Waveforms toolkit and AD2 toolkit, but did not immediately see this functionality. I'm guessing no such bundled library exits. Thank you Cheers, JMA
  10. I am trying to access the audio codec SSM2603 on ZYBO over i2c interface from linux user-space for some register get and set, what i did so far I enabled in the device-tree PS I2C_0 in system-user.dtsi &i2c0 { ssm2603: ssm2603@1a{ #sound-dai-cells = <0>; compatible = "adi,ssm2603"; reg = <0x1a>; }; i2cdetect -l output i2c-1 i2c Cadence I2C at e0004000 I2C adapter i suppose i2c coec should appear on address 0x1a but nothing i2cdetect -y -r 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- if i add the codec drivers in my kernel snd_soc_ssm2602_i2c.ko and snd_soc_ssm2602.ko the i2cdetect -y -r 1 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- which means the i2c device is detected on 0x1a address but its been used by the driver. what i want to do is to make the raw i2c register get /set using i2cget/i2cset but the codec didn't appear without driver, any clue?
  11. Hi ! I am interested in using the Digital Discovery controlling multiple devices at the same time with different protocols. E.g. I would like to setup the UART on the digital discovery on DIO 28 as TX and 29 as RX while using SPI at the same time on the default setup DIOs as 24/CS, 25/CLK, 26/DQ0/MOSI, 27/DQ1/MISO. Using then I2C on e.g. 31/SCL and 30/SDA and CAN on 36/RX and 37/TX on top of that would be very nice as well. Is this possible from the user interface (which I would prefer) or do I need to create custom code for that?
  12. Hello, I want to use the AXI IIC bus Interface found in Vivado to read data from several MLX90393 sensors. My question is about the amount of AXI IIC interfaces needed for this. Is it enough to use only one, or is it necessary to use one for each sensor that will be used? Thanks in advance. MLX90393-Datasheet-Melexis.PDF
  13. Hello, I have an Analog Discovery (legacy) and the latest Waveforms app. I am trying to write a script that makes the protocol module write to a 24C16 eeprom, read it back, and print to the screen or window. I can access th I2C (can see on my scope), but I can't print anything. The print() function does nothing unless in debug mode, but then the app seems to hang. I tried Custom mode and Sensor mode. And I tried the ADXL345 example, with a known good breakout board, and it always returns the same thing, doesn't change with orientation of the chip (but my main concern is the eeproms) Why is the output window at the bottom of the script area only one line long. The only thing that shows up there is the results of return statements. How can I see the I2C and run the script at the same time ? The logic analyzer only shows the first two I2C bytes, so I'm using an external scope. What does the manual mean when it says the the I2C can only send when in debug ? Isn't that a show-stopper ? Am I missing some key piece of documentation ? The manual does not say much about how all of this stuff works. - Thanks
  14. Good evening! I am trying to use an Adafruit BNO055 breakout board with a ChipKit uC32 board, but there’s some kind of underlying bug causing the initialization code to fail. I’ve tracked it down to how the reset of the BNO055 is happening, but I’ve hit a wall at how to go deeper. Any advice would be welcome. Hardware used: Adafruit Feather Bluefruit LE Digilent ChipKit uC32 Adafruit BNO055 orientation board breakout Breadboard, wires, etc. Photos of hardware setup attached. To start, I tested using the BNO055 and the Adafruit sensorapi example sketch on an Adafruit Bluefruit LE via the I2C connection. This worked just fine. I've used it for other projects in the past, so that's old hat: https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/overview https://learn.adafruit.com/adafruit-bno055-absolute-orientation-sensor/overview Then, when I first tested the uC32 with the normal ChipKit-core distribution found via the ChipKit-core url, the I2C implementation was broken. None of the 3 different I2C sensors I had worked. After following the instructions to update ChipKit-core to 1.1.0-13 to fix I2C bug, as suggested below, I as able to connect to devices via I2C: http://chipkit.net/forum/viewtopic.php?t=3585 http://chipkitjenkins.wayneandlayne.com/job/chipKIT-core%20PR%20Builder/77/ Note: I did set JP6 and JP8 to enable the I2C interface on the uC32. Tested ChipKit uC32 using the I2C interfaces on the Adafruit BME280 and Si1145 breakout boards. Both worked just fine. Data was read and written properly. Unfortunately, when connecting the BNO055 orientation board from here: https://learn.adafruit.com/adafruit-bno055-absolute-orientation-sensor/overview The board is recognized (by the device ID of 0xA0), but then the ChipKit uC32 hangs after first println in the sensorapi example sketch. It goes into the bno.begin() call and never returns. Since I can’t do any deeper debugging in the main library, I copied out the BNO055 library (called it C_BNO055) and built against my version. Started with no changes other than the name of the library, include guards, and filenames. Worked just fine on Bluefruit LE, but exhibited the same issues on the uC32. My source code for the library modified for testing is attached to this post. I had combined the three breakout boards into a single program. This worked just fine on the Bleufruit LE, and it accessed all three sensors without issue, but the same bno.begin() call would hang everything. So, I stripped out the other sensors and tested with debugging messages in my custom bno.begin() definition found in C_BNO055.cpp. The code executes until the first BNO055 reset is attempted. Writing 0x20 to the BNO055_SYS_TRIGGER_ADDR resets the sensor. This loop then waits for the device to return 0xA0 for the chip ID, which indicates that it's ready to be used again. Serial.println(" [x] Doing a reset and waiting for the address to stabilize."); write8(BNO055_SYS_TRIGGER_ADDR, 0x20); while (read8(BNO055_CHIP_ID_ADDR) != BNO055_ID) { Serial.print(" [x] Waiting for BNO055 to reset. ADDR of: "); Serial.println(read8(BNO055_CHIP_ID_ADDR), HEX); delay(10); } delay(50); Serial.print(" [x] BNO055 address is now: "); Serial.println(read8(BNO055_CHIP_ID_ADDR), HEX); That loop runs about 8 times (see attached screenshot) for the ChipKit uC32, then just stops. Every read it gets an ID of 0x00 (zero). When the same code is run on the Bluefruit LE, it gets an ID of 0xFF until the board resets (see attached screenshot). Then it gets 0xA0 like it should and continues execution, and my larger program is able to read/write to the BNO055 and other sensors on the same I2C bus. I believe there’s some kind of issue in the ChipKit-core implementation for I2C that’s being exposed by the series of calls leading up to the reset of the BNO055 board. I’m not sure how to proceed at debugging or testing the system. Any advice or investigation would be welcome. I have: Changed the I2C address of the BNO055 by connecting the ADR pin to Vcc and changing the address in the .h file. Worked for Bluefruit, not for uC32. Commented out that address check and added in a delay(300) call. While the code progressed, it crashed when trying to access other I2C devices in loop(). Tried a similar test on a ChipKit MX3ck board with the same results. I’ve tried re-wiring the board/jumpers and testing my solder joints. I'm trying to get this board working on the uC32 as part of the sensor package we're building for the WSU Aerospace Club's rocket. If you'd like me to bring my hardware for testing to Digilent, just let me know via email and I'd gladly cross town to get some help. Thank you for your time. -- Aaron Crandall
  15. I'm writing an I2C interface in python in order to get a real-time stream from a peripheral device and do some additional processing. I have been able to get everything set up such that my peripheral ACKs my request. However, I'm curious for what your strategy is for handling the next packet depending on ACK/NACK. Originally I was just using a digital read at the start of the transmit (Start + Address) and processing the response to detect ACK, then setting up the device for the next transmit (data). However, the USB back/forth is way too slow, so I'm assuming you set everything up in advance in Waveforms I2C to trigger on an ACK. I tried a few methods of setting the output to trigger from I/O states, but I haven't been able to get it to work quite right (is there a way to force a trigger?). Can you briefly explain the general flow for how you set the AD2 up to handle I2C as master in Waveforms? Thanks, Kyle
  16. Hello, I am trying to initialize the ADV7611 Chip of the Digilent FMC-HDMI add-on Board. But I can't find the needed addresses for it (this doesn't help). I am using the xiic.h Driver from xilinx. The initalization of ADV7511 Chip of the zc702 was successfully. Have anyone a idea?? I am using the zc702 and the digilent FMC-HDMI Card.
  17. I'm using Waveforms with the AD2 device to do some I2C debug. I'm running into an issue where my slave device hangs because the AD2 master doesn't ACK the final data transmission before sending the STOP signal. I believe it is supposed to per the I2C spec.
  18. Hi everybody, thaks for your time. I'm a new Xilinx user and I'm learning about VHDL language and FPGA. In this opportunity, I want to establish a I2C communication between Zedboard and PmodACL. I'm implementing the tutorial "Getting Started with Digilent Pmod IPs", and I have some doubts: 1) I've installed the "vivado-library-2015.4-3", but when I search the info in board section about Pmod there is nothing: 2) When I click on "Generate Bitstream" I get this error: With this lines: Running DRC as a precondition to command write_bitstream INFO: [DRC 23-27] Running DRC with 2 threads ERROR: [DRC 23-20] Rule violation (NSTD-1) Unspecified I/O Standard - 8 out of 146 logical ports use I/O standard (IOSTANDARD) value 'DEFAULT', instead of a user assigned specific value. This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it is connected. To correct this violation, specify all I/O standards. This design will fail to generate a bitstream unless all logical ports have a user specified I/O standard value defined. To allow bitstream creation with unspecified I/O standard values (not recommended), use this command: set_property SEVERITY {Warning} [get_drc_checks NSTD-1]. NOTE: When using the Vivado Runs infrastructure (e.g. launch_runs Tcl command), add this command to a .tcl file and add that file as a pre-hook for write_bitstream step for the implementation run. Problem ports: pmod_out_pin10_io, pmod_out_pin1_io, pmod_out_pin2_io, pmod_out_pin3_io, pmod_out_pin4_io, pmod_out_pin7_io, pmod_out_pin8_io, pmod_out_pin9_io. ERROR: [DRC 23-20] Rule violation (UCIO-1) Unconstrained Logical Port - 8 out of 146 logical ports have no user assigned specific location constraint (LOC). This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it is connected. To correct this violation, specify all pin locations. This design will fail to generate a bitstream unless all logical ports have a user specified site LOC constraint defined. To allow bitstream creation with unspecified pin locations (not recommended), use this command: set_property SEVERITY {Warning} [get_drc_checks UCIO-1]. NOTE: When using the Vivado Runs infrastructure (e.g. launch_runs Tcl command), add this command to a .tcl file and add that file as a pre-hook for write_bitstream step for the implementation run. Problem ports: pmod_out_pin10_io, pmod_out_pin1_io, pmod_out_pin2_io, pmod_out_pin3_io, pmod_out_pin4_io, pmod_out_pin7_io, pmod_out_pin8_io, pmod_out_pin9_io. WARNING: [DRC 23-20] Rule violation (BUFC-1) Input Buffer Connections - Input buffer pmod_out_pin1_iobuf/IBUF (in pmod_out_pin1_iobuf macro) has no loads. An input buffer must drive an internal load. WARNING: [DRC 23-20] Rule violation (BUFC-1) Input Buffer Connections - Input buffer pmod_out_pin4_iobuf/IBUF (in pmod_out_pin4_iobuf macro) has no loads. An input buffer must drive an internal load. INFO: [Vivado 12-3199] DRC finished with 2 Errors, 2 Warnings INFO: [Vivado 12-3200] Please refer to the DRC report (report_drc) for more information. ERROR: [Vivado 12-1345] Error(s) found during DRC. Bitgen not run. INFO: [Common 17-83] Releasing license: Implementation ERROR: [Common 17-39] 'write_bitstream' failed due to earlier errors. I think it's because in the block design I could not open the Pmod corresponding to the Zedboard and then the pin assignment is not elaborated. So, how can i do to import the complete library for Zedboard pmod? Or, which is the order for Pmod pin assignment? Bests reggards, Oscar.
  19. Can someone please point me to a manual for the Protocol section of the Waveforms software? I would like to send an I2C command over a bus but I am getting an I2C bus error. Verify the signal pull-ups error. I do have the appropriate pullup resistor however. Also, it's not clear how the interface works. A manual would be useful. Thanks, Dave
  20. I have designed a board to program serial flash memories using the JTAG-SMT2-NC operated as an SPI master. This works fine but now I want to use the same board to program an I2C EEPROM (on a different target). FTDI's document "USB to I2C Example using the FT232H and FT201X devices" suggests that this should be possible and I belive that the JTAG-SMT2-NC uses the FT232H. Has anyone tried this? What would the mapping of the connections be? I imagine that it would be:- TMS - connect to Write Protect on the EEPROM TCK - connect to I2C's SCK TDI, TDO - tie together and connec to I2C's SDA alternatively I suppose that one could bit-bash the GPIO pins (GPIO0, GPIO1, and GPIO2) but this would require a hardware change to my adapter that I'd prefer to avoid.
  21. Hi, I've created a custom software program in C++ that uses analog discovery 2 and I have two questions. 1. I want to read some data using I2C interface, but I'm having trouble on the idea of how should I set up a "typical I2C" interface in C++. Is there an example anywhere on how exactly can this be accomplished in C++? 2. When reading the on-board temperature value in C++ I keep receiving a constant value if I'm doing multiple reads in a row. How can I fix it so that every time I read the AD2 on-board temp value I would get an updated temp value not the initial value? Thank you!
  22. david.600

    Zybo I2c Master

    Hi, I have the Zybo Zynq 7000 board (Z-7010). I also have a Ti Msp430G2 launchpad. I need the Zybo to be the Master I2c , send request data from the Ti Chip. In Zybo i'm Using the I2c_0 Built in controller on the ps, i've tried the following Examples with no success(test failed Everytime): xiicps_polled_master_example.c xiicps_slave_monitor_example.c then i tried to to troubleshoot the problem, i'v used the xiicps_polled_slave_example.c and on the Ti Chip i used the wire library, as I2c Master and a c program that Scans Addresses - this works Therefor all the connections and vivado config are fine. How can find a working Master Program for zybo?
  23. david.600

    Zybo I2C

    Hi, I have the Zybo Zynq 7000 board (Z-7010). I want to receive data from Multiple Devices via I2C protocol. In the PS there are 2 I2C Controllers. The Steps i made so far: 1) In vivado i created the ip : Zynq7 processing system. 2) i'v enables the I2C 0 controller and routed it to Emio. at this point i need 2 pins: clock and data, but instead i have 6 pins: where should i connect the pins? after Exploring this issue online i saw another option : using the Axi_IIc ip, With the same problem:
  24. I'm having problems printing data on-screen, when the program is about to write it, the board freezes, it won't even allow me to reset. In the module of the MAX30100, Vin is connected to 3,3v, GND to GND, SCL to RB8, SDA to RB9, there are also 4k7 resistances conected between SDA and 3,3v, the same goes for SCL and 3,3v. INT remains unplugged. The almost fully white screen is the result of using the ChipKit board. The image filled with data shows the results obtained with an Arduino UNO board, wich were proved right with a saturometer. The last image shows the module for the MAC30100. The files are the libraries used and the program. I tried changing the communication speed from 100kHz to 400kHz but there wasn't any changes. I also tried it with a pull-up resistence on the INT port of the MAX30100. examples.7z MAX30100.7z
  25. Hello, I am a new user of analog discovery. I have an Arduino talking to my sensor through a 5v to 3.3 V level converter using I2C protocol. The code works fine and gets me the desired output on the serial port but when I try to connect the SDA and SCL lines to the analog discovery on the pin 7 (Data) and Pin 15 (clock) lines, I dont see any signals getting recorded. I am interested in seeing the clock and data lines with the addresses and data that is being written on the lines. But it either gives me Error status or no result after getting triggered. The snapshot is attached below: I wanted to know if I am following all the necessary steps in initializing the analog discovery. 1. Connect the wires to the 2 digital lines of analog discovery ( Pin 7,15 here) 2. Assign the right DIO pins as data and clock lines in the waveforms software. 3. Click the Red T button to set the trigger option. --> Start signal as trigger is the condition I used in the image below. but I also tried different trigger settings like, SDA = Ignore and SCL = Rising edge. Both of them gives me the error blocks as below. 3. Click Run button 4. Reset the Arduino. 5. Stop. I am interested in seeing the start, addresses in hex, ACK/ NACK signals labeled. Can anybody tell me if there is some required program to be run before I able to see them? Thanks & Regards,