Jump to content

Search the Community

Showing results for tags 'zyboz720'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News
    • New Users Introduction
    • Announcements
  • Digilent Technical Forums
    • FPGA
    • Test and Measurement
    • Measurement Computing (MCC)
    • Add-on Boards
    • Digilent Microcontroller Boards
    • Non-Digilent Microcontrollers
    • LabVIEW
    • FRC
    • Other
  • General Discussion
    • Project Vault
    • Learn
    • Suggestions & Feedback
    • Buy, Sell, Trade
    • Sales Questions
    • Off Topic
    • Educators
    • Technical Based Off-Topic Discussions
    • Archived

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 13 results

  1. Hello everbody, I built petalinux 2021.2 for zybo z7-20, but I want to develop some opencv and QT project on petalinux so, I need see petalinux desktop environment. I plug in HDMI kable but I couldnt see anything on screen. How can I set up desktop environment zybo z7-20 petalinux.
  2. I need a urgent help regarding this, Please help me, I booted my board with 5V wall connector and when i connect micro usb to laptop com port is not detected, i tried with different laptops too still did not work. I have added USB 0 in my design and it seems petalinux booted just fine since i can see PGOOD and DONE LEDs are on and my counter is running. I even tried different cables install drivers manually, I can see my petalinux booted and as soon as i turn on my RX led blinks for some time and then stops and board LED and Switches works as i configured. But COM port is not detected. I Tried different PC as well. nothing works. Please let me know the solution. Please do help.
  3. Hi there, I am working on a project which requires DDR access through PL (i.e, no PS is part of the project) targeted on Zybo Z7-20 FPGA SoC board. As a part of this implementation, I was looking out for Xilinx MIG wizard settings specific to this board. I couldn't find this information anywhere in the Zybo Z7-20 Technical Reference Manual. I went through the datasheet of DDR component available on this board (i.e., MT41K256M16HA-125) but it's very difficult to search for the information required by Xilinx MIG Generator IP. Could anyone please help me out with the suitable resources for this..? The Arty FPGA board Technical Reference Manual clearly specifies the MIG wizard settings. I am exactly looking for the same information for Zybo Z7-20. Any help in this regard is extremely appreciated! Thanks.
  4. I followed this forum and changed the constraint files of the Zybo Z720 in Vivado and successfully generate bitstream and the xsa file to import into Vitis. https://forum.digilentinc.com/topic/8943-pmod-as-input-and-output-gpio/ #Pmod Header JE set_property -dict { PACKAGE_PIN V12 IOSTANDARD LVCMOS33 } [get_ports { je_pin1_io }]; set_property -dict { PACKAGE_PIN W16 IOSTANDARD LVCMOS33 } [get_ports { je_pin2_io }]; set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports { je_pin3_io }]; set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { je_pin4_io }]; set_property -dict { PACKAGE_PIN V13 IOSTANDARD LVCMOS33 } [get_ports { je_pin7_io }]; set_property -dict { PACKAGE_PIN U17 IOSTANDARD LVCMOS33 } [get_ports { je_pin8_io }]; set_property -dict { PACKAGE_PIN T17 IOSTANDARD LVCMOS33 } [get_ports { je_pin9_io }]; set_property -dict { PACKAGE_PIN Y17 IOSTANDARD LVCMOS33 } [get_ports { je_pin10_io }]; I am able to control the GPIO pins of port JF on the Zybo Z720 using the following code, how do I edit this so that I am able to turn on/off LEDs using the Pmod port JE instead. #include "xil_cache.h" #include "xparameters.h" #include "stdio.h" #include "xparameters.h" #include "xuartps.h" #include "xtime_l.h" #include "xgpiops.h" #include "sleep.h" #include "xil_io.h" #include "xil_types.h" #include "xil_printf.h" #include "sleep.h" #include "stdlib.h" #include "string.h" #define HOST_UART_DEVICE_ID XPAR_PS7_UART_1_DEVICE_ID #define HostUart XUartPs #define HostUart_Config XUartPs_Config #define HostUart_CfgInitialize XUartPs_CfgInitialize #define HostUart_LookupConfig XUartPs_LookupConfig #define HostUart_Recv XUartPs_Recv #define HostUartConfig_GetBaseAddr(CfgPtr) (CfgPtr->BaseAddress) #define PMODESP32_UART_BASEADDR XPAR_PMODESP32_0_AXI_LITE_UART_BASEADDR #define PMODESP32_GPIO_BASEADDR XPAR_PMODESP32_0_AXI_LITE_GPIO_BASEADDR #define COUNTS_PER_SECOND (XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ /2) #define TIMER_FREQ_HZ 100000000 #define MAX_WIDTH 320 #define MAX_HEIGHT 240 #define MAX_BUTTON 16 #ifdef __MICROBLAZE__ #define HOST_UART_DEVICE_ID XPAR_AXI_UARTLITE_0_BASEADDR #define HostUart XUartLite #define HostUart_Config XUartLite_Config #define HostUart_CfgInitialize XUartLite_CfgInitialize #define HostUart_LookupConfig XUartLite_LookupConfig #define HostUart_Recv XUartLite_Recv #define HostUartConfig_GetBaseAddr(CfgPtr) (CfgPtr->RegBaseAddr) #include "xuartlite.h" #include "xil_cache.h" #else #define HOST_UART_DEVICE_ID XPAR_PS7_UART_1_DEVICE_ID #define HostUart XUartPs #define HostUart_Config XUartPs_Config #define HostUart_CfgInitialize XUartPs_CfgInitialize #define HostUart_LookupConfig XUartPs_LookupConfig #define HostUart_Recv XUartPs_Recv #define HostUartConfig_GetBaseAddr(CfgPtr) (CfgPtr->BaseAddress) #include "xuartps.h" #endif #define PMODESP32_UART_BASEADDR XPAR_PMODESP32_0_AXI_LITE_UART_BASEADDR #define PMODESP32_GPIO_BASEADDR XPAR_PMODESP32_0_AXI_LITE_GPIO_BASEADDR #define BLOCK_SIZE 40 void startup(); XGpioPs_Config *ConfigPtr; XGpioPs output; int main() { startup(); while(1) { XGpioPs_WritePin(&output, 13, 1); //led on (pin 1,2,3,4) XGpioPs_WritePin(&output, 10, 1); XGpioPs_WritePin(&output, 11, 1); XGpioPs_WritePin(&output, 12, 1); } void startup(){ //initialize pins for JF ConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID); XGpioPs_CfgInitialize(&output, ConfigPtr, ConfigPtr->BaseAddr); XGpioPs_SetDirectionPin(&output, 13, 1); XGpioPs_SetOutputEnablePin(&output, 13,1); //pin1 JF1 XGpioPs_SetDirectionPin(&output, 10, 1); XGpioPs_SetOutputEnablePin(&output, 10,1); //pin2 JF2 XGpioPs_SetDirectionPin(&output, 11, 1); XGpioPs_SetOutputEnablePin(&output, 11,1); //pin3 JF3 XGpioPs_SetDirectionPin(&output, 12, 1); XGpioPs_SetOutputEnablePin(&output, 12,1); //pin4 JF4 }
  5. Hello, I'm using a Zybo Z7-20 board together with the Pcam 5C camera module and I have a question regarding the MIPI D-PHY settings in the Zybo-Z7-20-pcam-5c project. I want to replace the Digilent MIPI_D_PHY_RX with the Xilinx MIPI D-DPHY. My issue is, that the Xilinx MIPI D-PHY does not output any AXI-Stream signals and that I see permanent 'Start-of-Transmission (SoT) Error' (errsoths = '1') reported on the output port of the Xilinx MIPI D-PHY. This error occurs, according to the Xilinx MIPI D-PHY datasheet, when the HS_SETTLE parameter is not matching. The standard HS_SETTLE parameter in the Xilinx MIPI D-PHY is 145ns. The DPHY_LaneSFEN.vhd file, which is part of the Digilent MIPI D-PHY, uses a constant named 'kTHSSettle' which is set to 85ns. Even if I setup the Xilinx MIPI D-PHY to use a HS_SETTLE time of 85ns, I still see the 'Start-of-Transmission Error' reported by the Xilinx MIPI D-PHY. The camera setup is done by the Digilent pcam_vdma_hdmi application which configures the camera to run in the standard 1080p30 setup mode (2-MIPI lanes, with 420 Mbps/lane). What are the settings for the Xilinx MIPI D-PHY to decode the 2-lane MIPI signal received from the PCAM 5c camera board?
  6. Previously I have asked this question in the forum, however, my explanation was not so clear and may result in confusion. Hence, I decided to rephrase my question in this new post. Currently, I have been researching on how to allow my Zybo z720 board to receive data from Thingspeak channel through using Pmod ESP32 and control the status of the LED according to the data of Thingspeak. I have already known how to send the data (collected from ALS, AQS and HYGRO) from the zybo board to Thingspeak by using the AT command. I will show the code below. void receiveData(XTime time){ XTime tEnd, tCur; u8 recv_buffer=0; u32 num_received=0; XTime_GetTime(&tCur); tEnd = tCur + (time * COUNTS_PER_SECOND); do { num_received = ESP32_Recv(&ESP32, &recv_buffer,1); if(num_received >0){ num_received = ESP32_Recv(&ESP32, &recv_buffer,1); xil_printf("%c", recv_buffer); } if(tCur == tCur + COUNTS_PER_SECOND){ countdown = countdown -1; } else XTime_GetTime(&tCur); } while (tCur < tEnd); } void setWifiMode(void){ u8 tx[]="AT+CWMODE=3\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); usleep(100); receiveData(3); } void connectWifi(void){ u8 tx[] = "AT+CWJAP=\"xxxxx\",\"xxxxxx"\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); usleep(100); receiveData(30); } void establishConnection(void){ u8 tx[] = "AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); receiveData(10); } void cipsend(float temp, u16 co2, u8 light, float humidity){ u8 command[150]; u8 finalcmd[50]; //field1 Ph field2 Temp field3 co2 field4 humidity field5 light sprintf((char*)command, "GET http://api.thingspeak.com/update?api_key=xxxxxxxxxxxxx&field1=0&field2=%d.%02d&field3=%d&field4=%d.%02d&field5=%d\r\n" ,(int) temp_degc,((int) (temp_degc * 100)) % 100,co2,(int) hum_perrh,((int) (hum_perrh * 100)) % 100,light); u32 length = strlen((char*)command); sprintf((char*)finalcmd, "AT+CIPSEND=%d\r\n", (int)length); u32 cmdlength =strlen((char*)finalcmd); xil_printf("Length %d\r\n", length); xil_printf((char *)finalcmd); ESP32_SendBuffer(&ESP32, finalcmd, cmdlength); sleep(1); xil_printf((char *)command); ESP32_SendBuffer(&ESP32, command, length); receiveData(4); } Beforehand, I have tried this project with the NodeMCU since I thought the code I used for NodeMCU should be similar to ESP32. It worked perfectly. As I changed the thingspeak data link and updated the data, I can see my LED light up or light off. However, while I analysed the NodeMCU code, it does not use AT command and it also does not have any relationship with the code I used for sending data to Thingspeak. So, do I need to use the same AT command, or I need to use something like Json parsing to accomplish that? I will show all my work I have done below. Thanks Cpp Code Update 1.txt Arduino IoT Control.txt
  7. Hi, I am using Pmod ESP32 and figure out the possibilities to receive data from Thingspeak. Based on my research, I found this link may help me to get Thingspeak data via using AT command. The link is here: https://allaboutfpga.com/remote-monitoring-and-control-of-home-appliances-from-cloud-using-edge-artix-7-fpga-board/ Remote Monitoring and control of Home appliances from cloud using EDGE Artix 7 FPGA board (allaboutfpga.com). This picture (picture is from the link above) tells me what AT command I should use for receiving data from Thingspeak Cloud. I used the above-mentioned AT comments like "AT+CIPSEND=69" and "GET /channels/xxxxxxx/fields/1.json?results=1" to do the job. But I can't get the result I want. I expect there will be +IPD, <num of bits>:data rather than "Send OK" and "Recv xx bytes". These are the code: #include "xil_cache.h" #include "xparameters.h" #include "stdio.h" #include "xparameters.h" #include "xuartps.h" #include "xtime_l.h" #include "xgpiops.h" extern "C"{ #include "PmodESP32.h" } /******************************************************************************/ /* */ /* Defines */ /* */ /******************************************************************************/ #define HOST_UART_DEVICE_ID XPAR_PS7_UART_1_DEVICE_ID #define HostUart XUartPs #define HostUart_Config XUartPs_Config #define HostUart_CfgInitialize XUartPs_CfgInitialize #define HostUart_LookupConfig XUartPs_LookupConfig #define HostUart_Recv XUartPs_Recv #define HostUartConfig_GetBaseAddr(CfgPtr) (CfgPtr->BaseAddress) #define PMODESP32_UART_BASEADDR XPAR_PMODESP32_0_AXI_LITE_UART_BASEADDR #define PMODESP32_GPIO_BASEADDR XPAR_PMODESP32_0_AXI_LITE_GPIO_BASEADDR #define COUNTS_PER_SECOND (XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ /2) #define TIMER_FREQ_HZ 100000000 #define MAX_WIDTH 320 #define MAX_HEIGHT 240 #define MAX_BUTTON 16 /******************************************************************************/ /* */ /* Function Declarations */ /* */ /******************************************************************************/ void EnableCaches(); void DisableCaches(); void startup(); void receiveData(XTime time); void setWifiMode(void); void connectWifi(void); void establishConnection(void); void cipsend(void); /******************************************************************************/ /* */ /* Variables */ /* */ /******************************************************************************/ HostUart myHostUart; XGpioPs_Config *ConfigPtr; XGpioPs output; XTime TimeStart; XTime TimeEnd; PmodESP32 ESP32; int countdown =60; char counter[20]; int main() { EnableCaches(); startup(); setWifiMode(); xil_printf("Init Started\n\r"); connectWifi(); xil_printf("Wifi Done\n\r"); // sleep(2); XTime_GetTime(&TimeStart); TimeEnd = TimeStart + ((XTime)COUNTS_PER_SECOND); establishConnection(); cipsend(); DisableCaches(); return 0; } void startup(){ //Init ESP32 HostUart_Config *CfgPtr; ESP32_Initialize(&ESP32, PMODESP32_UART_BASEADDR, PMODESP32_GPIO_BASEADDR); CfgPtr = HostUart_LookupConfig(HOST_UART_DEVICE_ID); HostUart_CfgInitialize(&myHostUart, CfgPtr, HostUartConfig_GetBaseAddr(CfgPtr)); } void receiveData(XTime time){ XTime tEnd, tCur; u8 recv_buffer=0; u32 num_received=0; XTime_GetTime(&tCur); tEnd = tCur + (time * COUNTS_PER_SECOND); do { num_received = ESP32_Recv(&ESP32, &recv_buffer,1); if(num_received >0){ num_received = ESP32_Recv(&ESP32, &recv_buffer,1); xil_printf("%c", recv_buffer); } if(tCur == tCur + COUNTS_PER_SECOND){ countdown = countdown -1; } else XTime_GetTime(&tCur); } while (tCur < tEnd); } void setWifiMode(void){ u8 tx[]="AT+CWMODE=3\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); //usleep(100); receiveData(3); } void connectWifi(void){ u8 tx[] = "AT+CWJAP=\"SSID\",\"Password\"\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); //usleep(100); receiveData(30); } void establishConnection(void){ u8 tx[] = "AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); receiveData(10); } void cipsend(void){ u8 command[150]; u8 finalcmd[50]; sprintf((char*)command, "GET https://api.thingspeak.com/channels/"ThingSpeak_Channel_Num"/fields/1.json?results=1" ); u32 length = strlen((char*)command); sprintf((char*)finalcmd, "AT+CIPSEND=%d\r\n", (int)length); u32 cmdlength =strlen((char*)finalcmd); xil_printf("Length %d\r\n", length); xil_printf((char *)finalcmd); ESP32_SendBuffer(&ESP32, finalcmd, cmdlength); //sleep(1); xil_printf((char *)command); ESP32_SendBuffer(&ESP32, command, length); receiveData(10); } void EnableCaches() { #ifdef __MICROBLAZE__ #ifdef XPAR_MICROBLAZE_USE_ICACHE Xil_ICacheEnable(); #endif #ifdef XPAR_MICROBLAZE_USE_DCACHE Xil_DCacheEnable(); #endif #endif } void DisableCaches() { #ifdef __MICROBLAZE__ #ifdef XPAR_MICROBLAZE_USE_ICACHE Xil_ICacheDisable(); #endif #ifdef XPAR_MICROBLAZE_USE_DCACHE Xil_DCacheDisable(); #endif #endif } Here is the result from Vitis Serial Terminal. No IPD response and Json Script included. AT+CWMODE=3 AT+CWMODE=3 OK Init Started AT+CWJAP="ssid","password" AT+CWJAP="ssid","password" WIFI DISCONNECT WIFI CONNECTED WIFI GOT IP OK Wifi Done AT+CIPSTART="TCP","api.thingspeak.com",80 AT+CIPSTART="TCP","api.thingspeak.com",80 CONNECT OK Length 71 AT+CIPSEND=71 GET https://api.thingspeak.com/channels/xxxxxxx/fields/1.json?results=1TCPED7 Recv 71 bytes SEND OK CLOSED Meanwhile, I tried the AT command in the Arduino and ESP01S. I can receive the IPD command and Java Script like following: 19:19:52.989 -> AT+CWMODE=3 19:19:52.989 -> 19:19:52.989 -> OK 19:20:02.336 -> AT+CWJAP="ssid","password" 19:20:02.336 -> WIFI DISCONNECT 19:20:04.486 -> WIFI CONNECTED 19:20:05.468 -> WIFI GOT IP 19:20:07.338 -> 19:20:07.338 -> OK 19:20:16.096 -> AT+CIPSTART="TCP","184.106.153.149",80 19:20:16.331 -> CONNECT 19:20:16.331 -> 19:20:16.331 -> OK 19:20:23.943 -> AT+CIPSEND=69 19:20:23.943 -> 19:20:23.943 -> OK 19:20:23.943 -> > fields/1.json?results=1 19:20:39.376 -> busy s... 19:20:39.376 -> 19:20:39.376 -> Recv 69 bytes 19:20:39.611 -> 19:20:39.611 -> SEND OK 19:20:40.207 -> 19:20:40.207 -> +IPD,296:{"channel": {"id":xxxxxxx,"name":"xxxxxxx","latitude":"0.0","longitude":"0.0","field1":"led1","field2":"led2","field3":"led3", "created_at":"2021-04-30T00:36:29Z","updated_at":"2021-04-30T00:37:05Z","last_entry_id":18}, "feeds":[{"created_at":"2021-06-07T11:13:39Z","entry_id":18,"field1":"0"}]}CLOSED For updating data from Zybo board to Thingspeak, I can receive the IPD command like following: AT+CIPSTART="TCP","api.thingspeak.com",80 AT+CIPSTART="TCP","api.thingspeak.com",80 CONNECT OK Length 135 AT+CIPSEND=135 GET http://api.thingspeak.com/update?api_key=xxxxxxxxxxxxxxxxxx &field1=0.64&field2=29.84&field3=488&field4=47.47&field5=139&field6=6.31 TCPED15 Recv 135 bytes SEND OK +IPD,3:420CLOSED Can anyone tell me how can allow Pmod ESP32 to receive the Java Script like how Arduino does. Thanks
  8. Hi, I have been trying to use the zybo board timer interrupt functions to control my water pump while running other program, kind of like multitasking. The program goes like this, when the my other programs are running in the while(true) loop (running forever), the water pump will turn on for 12 hours and turn off for 12 hours. Before jumping into actual program, I made some simple testing. While the Pmod HYGRO is getting value, the led 4bits will have a loop of turning on for 100s and turning off 100s (like led toggling) Here is what I have tried with built-in led: #include <stdio.h> #include "platform.h" #include "xil_printf.h" #include "xparameters.h"; #include "xgpio.h"; #include "xtmrctr.h"; #include "xscugic.h"; #include "xil_exception.h"; #include "PmodHYGRO.h" #include "sleep.h" #include "xil_cache.h" #ifdef __MICROBLAZE__ #define TIMER_FREQ_HZ XPAR_CPU_M_AXI_DP_FREQ_HZ #else #define TIMER_FREQ_HZ 100000000 #endif PmodHYGRO myDevice; void DemoInitialize(); void DemoRun(); void DemoCleanup(); void EnableCaches(); void DisableCaches(); // Parameter definitions #define INTC_DEVICE_ID XPAR_PS7_SCUGIC_0_DEVICE_ID #define TMR_DEVICE_ID XPAR_TMRCTR_0_DEVICE_ID #define LEDS_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID #define INTC_TMR_INTERRUPT_ID XPAR_FABRIC_AXI_TIMER_0_INTERRUPT_INTR #define TMR_LOAD 0xF8000000 XGpio LEDInst; XScuGic INTCInst; XTmrCtr TMRInst; static int led_data; static int tmr_count; //void print (char *str); static void TMR_Intr_Handler(void *baseaddr_p); static int IntcInitFunction (u16 DeviceId, XTmrCtr *TmrInstancePtr); void TMR_Intr_Handler(void *data){ if (XTmrCtr_IsExpired(&TMRInst,0)){ // Once timer has expired 3 times, stop, increase counter //reset timer and start running again if(tmr_count==3){ XTmrCtr_Stop(&TMRInst,0); tmr_count=0; //led_data++; led_data=~led_data; XGpio_DiscreteWrite(&LEDInst,1,led_data); XTmrCtr_Reset(&TMRInst,0); XTmrCtr_Start(&TMRInst,0); }else tmr_count++; } } // Initial Setup Functions int InterruptSystemSetup(XScuGic *XScuGicInstancePtr){ // Enable Interrupt Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler) XScuGic_InterruptHandler, XScuGicInstancePtr); Xil_ExceptionEnable(); return XST_SUCCESS; } int IntcInitFunction (u16 DeviceId, XTmrCtr *TmrInstancePtr){ XScuGic_Config *IntcConfig; int status; //Interrupt controller initialisation IntcConfig=XScuGic_LookupConfig(DeviceId); status= XScuGic_CfgInitialize(&INTCInst, IntcConfig, IntcConfig->CpuBaseAddress); if (status!= XST_SUCCESS) return XST_FAILURE; //Call to interrupt setup status= InterruptSystemSetup(&INTCInst); if (status != XST_SUCCESS) return XST_FAILURE; // Connect timer interrupt to handler status= XScuGic_Connect(&INTCInst, INTC_TMR_INTERRUPT_ID, (Xil_ExceptionHandler) TMR_Intr_Handler, (void*) TmrInstancePtr); if (status != XST_SUCCESS) return XST_FAILURE; // Enable timer interrupts in the controller XScuGic_Enable(&INTCInst, INTC_TMR_INTERRUPT_ID); return XST_SUCCESS; } int main() { init_platform(); led_data=0; int status; // INITIALISE THE PERIPHERALS & SET DIRECTIONS OF GPIO // Initialise LEDs status=XGpio_Initialize(&LEDInst, LEDS_DEVICE_ID); ; if (status != XST_SUCCESS) return XST_FAILURE; // Set LEDs direction to outputs XGpio_SetDataDirection(&LEDInst, 1,0x00); //Initilise interrupt controller status=IntcInitFunction(INTC_DEVICE_ID, &TMRInst); if (status != XST_SUCCESS) return XST_FAILURE; // Set the TIMER status= XTmrCtr_Initialize(&TMRInst, TMR_DEVICE_ID); if (status != XST_SUCCESS) return XST_FAILURE; XTmrCtr_SetHandler(&TMRInst, (XTmrCtr_Handler) TMR_Intr_Handler, &TMRInst); XTmrCtr_SetResetValue(&TMRInst,0,TMR_LOAD); XTmrCtr_SetOptions(&TMRInst,0, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION); XTmrCtr_Start(&TMRInst,0); while(1) DemoInitialize(); DemoRun(); DemoCleanup(); return 0; } void DemoInitialize() { EnableCaches(); xil_printf("Init Started\n\r"); HYGRO_begin( &myDevice, XPAR_PMODHYGRO_0_AXI_LITE_IIC_BASEADDR, 0x40, // Chip address of PmodHYGRO IIC XPAR_PMODHYGRO_0_AXI_LITE_TMR_BASEADDR, XPAR_PMODHYGRO_0_DEVICE_ID, TIMER_FREQ_HZ // Clock frequency of AXI bus, used to convert timer data ); xil_printf("Init Done\n\r"); } void DemoCleanup() { DisableCaches(); } void DemoRun() { float temp_degc, hum_perrh, temp_degf; while (1) { temp_degc = HYGRO_getTemperature(&myDevice); temp_degf = HYGRO_tempC2F(temp_degc); hum_perrh = HYGRO_getHumidity(&myDevice); xil_printf( "Temperature: %d.%02d deg F Humidity: %d.%02d RH\n\r", (int) temp_degf, ((int) (temp_degf * 100)) % 100, (int) hum_perrh, ((int) (hum_perrh * 100)) % 100 ); // %f does not work with xil_printf // instead, converting float to a pair of ints to display %.2f. // 1 sample per second maximum, as per 9.2.1 in HDC1080 reference manual sleep(1); } } void EnableCaches() { #ifdef __MICROBLAZE__ #ifdef XPAR_MICROBLAZE_USE_ICACHE Xil_ICacheEnable(); #endif #ifdef XPAR_MICROBLAZE_USE_DCACHE Xil_DCacheEnable(); #endif #endif } void DisableCaches() { #ifdef __MICROBLAZE__ #ifdef XPAR_MICROBLAZE_USE_ICACHE Xil_ICacheDisable(); #endif #ifdef XPAR_MICROBLAZE_USE_DCACHE Xil_DCacheDisable(); #endif #endif } Here is Vivado block diagram: Here are some issues faced: 1) when i change value in "if(tmr_count==3)" to a large value, the time of toggling is still within 3s. (if there is no HYGRO code) 2) the led does not function, but the HYGRO functions when there is code for HYGRO If anyone can also help me or give me suggestion on water pump timer control, I will be so much appreciate it. I will upload my Vivado block design and Vitis code below for your reference. Thanks Luke Louyu. New Code V1.0.txt
  9. Hi, everyone here. Now, I have tried with my Pmod AD1. I used the demo code provided by the Digilent, but the value shown in the Vitis Serial Terminal is different from the value I have seen in the multimeter. For example, when I insert my sensor A into the channel A0, the value shown in 2.56. The value shown in the multimeter is 2.9V. When I insert my sensor B into the channel A1, the value shown in the Vitis Serial Terminal is 1.08. The value shown in the multimeter is about 2.1V. When the sensor induced voltage exceeds 1.8V, the AD1 value returns back to 0. I think this diagram might tell me the reason. But I am not sure since I am new to FPGA & electronic and I don't quite understand the datasheet. (Link: https://www.analog.com/media/cn/technical-documentation/evaluation-documentation/AD7476A_7477A_7478A.pdf?_ga=2.196220652.1995249494.1621070558-1887244704.1616928603) Through comparing with the AD1 reading voltage and the multimeter voltage, i found there is an linear relationship between them. I made an excel file to show you guys the relationship. I suspected i need to add an additional voltage source but not sure as well. When I connects the Vcc to the D0 or D1, the serial terminal said 3.3V. I did not change anything in the demo code, is there anyway to allow the AD1 reading to be the same as the reading in the multimeter. Thanks Luke
  10. Hi to everyone. I have successfully tried to use Pmod ESP32 to upload the other Pmod sensors data into the Thingspeak and used GPIO inside the zybo board to control the LED when some Pmod sensor value is too high or too low. Now, my supervisor asked me and my team to do IoT control. For example, an user pressed the button in the webpage or mobile app, the LED which connected to zybo board can turn on or turn off. My teammate now can send the 1 or 0 data to Thingspeak. Now, I want to use my Zybo baord to receive the Thingspeak data that my teammate has made. I have been searching some tutorials on the website but they all that Arduino based project. Here is the resource I found: And below are what I have tired to create. Here is the block diagram and Vitis code I have write Here are my questions For Zybo baord to achieve the IoT control, should I modify the code I have written, or modify the arduino code shown in the Youtube video above. And how can I integrate together? I think I need to change/modify this part of code (this code is to send the data to thingspeak) in order to allow the zybo to receive the data from thingspeak and achieve the IoT control. But I am not sure. void receiveData(XTime time){ XTime tEnd, tCur; u8 recv_buffer=0; u32 num_received=0; XTime_GetTime(&tCur); tEnd = tCur + (time * COUNTS_PER_SECOND); do { num_received = ESP32_Recv(&ESP32, &recv_buffer,1); if(num_received >0){ num_received = ESP32_Recv(&ESP32, &recv_buffer,1); xil_printf("%c", recv_buffer); } if(tCur == tCur + COUNTS_PER_SECOND){ countdown = countdown -1; } else XTime_GetTime(&tCur); } while (tCur < tEnd); } void setWifiMode(void){ u8 tx[]="AT+CWMODE=3\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); usleep(100); receiveData(3); } void connectWifi(void){ u8 tx[] = "AT+CWJAP=\"xxxxxxxxxxx\",\"xxxxxxxxxxxxxxx\"\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); usleep(100); receiveData(30); } void establishConnection(void){ u8 tx[] = "AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80\r\n"; u32 num = strlen((char *) tx); xil_printf((char *) tx); ESP32_SendBuffer(&ESP32, tx, num); receiveData(10); } void cipsend(float temp, u16 co2, u8 light, float humidity){ u8 command[150]; u8 finalcmd[50]; //field1 Ph field2 Temp field3 co2 field4 humidity field5 light sprintf((char*)command, "GET http://api.thingspeak.com/update?api_key=CE8VFL1E8ZJNGZM8&field1=0&field2=%d.%02d&field3=%d&field4=%d.%02d&field5=%d\r\n" ,(int) temp_degc,((int) (temp_degc * 100)) % 100,co2,(int) hum_perrh,((int) (hum_perrh * 100)) % 100,light); u32 length = strlen((char*)command); sprintf((char*)finalcmd, "AT+CIPSEND=%d\r\n", (int)length); u32 cmdlength =strlen((char*)finalcmd); xil_printf("Length %d\r\n", length); xil_printf((char *)finalcmd); ESP32_SendBuffer(&ESP32, finalcmd, cmdlength); sleep(1); xil_printf((char *)command); ESP32_SendBuffer(&ESP32, command, length); receiveData(4); } Thanks helloworld1029. Cpp Code Update 1.txt
  11. hi, I have been facing issue and I want to figure out what type of reasons can cause it? Connection issue? Or sth else? For installing my program into the zybo board, it sometimes works while sometimes pop up this error message. Like intermittently working. Here are some error message: targets -set -filter {jtag_cable_name =~ "Digilent Zybo Z7 210351AD668FA" && level==0} -index 1 fpga -file C:/Users/lukel/workspace8/test_3/_ide/bitstream/design_7_wrapper.bit targets -set -nocase -filter {name =~"APU*"} loadhw -hw C:/Users/lukel/workspace8/design_7_wrapper/export/design_7_wrapper/hw/design_7_wrapper.xsa -mem-ranges [list {0x40000000 0xbfffffff}] configparams force-mem-access 1 targets -set -nocase -filter {name =~"APU*"} source C:/Users/lukel/workspace8/test_3/_ide/psinit/ps7_init.tcl ps7_init ----------------End of Script---------------- 15:56:02 ERROR : Memory read error at 0xF8006050. Invalid DAP IDCODE. Invalid DAP ACK value: 0 Thanks Luke
  12. I am currently doing the vertical farming project. And I want to put my Pmod HYGRO and Pmod AQS sensor into the same port JC. I have tried to put my Pmod HYGRO and Pmod AQS into different Pmod ports successfully. Now, I just want to combine these two sensors into one port. For example, for port JC. I want the top layer of the port connect to Pmod AQS and the bottom layer of the port to the Pmod HYGRO. So what is my first step to do when comes to vivado block design and how am I going to write my Cpp code into Vitis IDE? I did some primary research on this topic before. I may need to use AXI IIC or something else. Is that true? Also, if using AXI IIC, how am I going to connect the Pmod to the AXI IIC and connect the specific pin of Pmod to the specific pin of the port? Thanks in advance. Below is my vivado block design so far?
  13. Hi! I'm using a PCAM5C with Zybo Z720 revision platform on SDSoC. Right now I'm using filter2D for PCam5C and I've seen that the default format is a multi-planar, two-plane version of the YUV 4:2:2 format, and when they apply the filter2d they just use the Y plane. I wanted to know if anyone could help me with changing this format into RGB because I want to use in the filter2d.cpp the cvtColor to transform the RGB 3channels into 1 grayscale. Or if maybe there's a conversion between YUV4:2:2 and RGB by using the two planes? Thanks so much!!
×
×
  • Create New...