MiZ702學習筆記9——XADC採集片上數據PS版

来源:http://www.cnblogs.com/douzi2/archive/2016/01/04/5097727.html
-Advertisement-
Play Games

這次藉助zynq的內嵌的XADC來採集zynq內部的一些參數:•VCCINT:內部PL核心電壓•VCCAUX:輔助PL電壓•VREFP:XADC正參考電壓•VREFN:XADC負參考電壓•VCCBram:PL BRAM電壓•VCCPInt:PS內部核心電壓•VCCPAux:PS輔助電壓•VCCDdr...


這次藉助zynq的內嵌的XADC來採集zynq內部的一些參數:

•VCCINT:內部PL核心電壓

•VCCAUX:輔助PL電壓

•VREFP:XADC正參考電壓

•VREFN:XADC負參考電壓

•VCCBram:PL BRAM電壓

•VCCPInt:PS內部核心電壓

•VCCPAux:PS輔助電壓

•VCCDdr:DDR RAM的工作電壓

這次這個程式的開發流程和之前講的別無二致,希望大家能夠完全的熟悉這個流程~~

還是和往常一樣,新建一個Block Design,並且向其中添加zynq核以及XADC IP。

wps85C2.tmp

對XADC核進行設置

wps8611.tmp

依次執行這兩項:wps8612.tmp

執行之後如下圖所示:

wps874B.tmp

依次執行Generate Output Products 和 Create HDL Wrapper

wps874C.tmp

最後編譯,直到生成bit文件。

導出硬體,並通過vivado打開SDK。

wps875C.tmp

進入SDK,如何新建工程,就不再次啰嗦了,請參考之前的章節。新建main.c之後為其添加代碼如下~~(這段代碼是參考國外的一個大神Adam寫的,向大神致敬~~)

#include <stdio.h>
//#include "platform.h"
#include "xadcps.h"
#include "xil_types.h"
#define XPAR_AXI_XADC_0_DEVICE_ID 0


//void print(char *str);

static XAdcPs XADCMonInst;

int main()
{

  XAdcPs_Config *ConfigPtr;
  XAdcPs *XADCInstPtr = &XADCMonInst;

  //status of initialisation
  int Status_ADC;

  //temperature readings
  u32 TempRawData;
  float TempData;

  //Vcc Int readings
  u32 VccIntRawData;
  float VccIntData;

  //Vcc Aux readings
  u32 VccAuxRawData;
  float VccAuxData;

  //Vbram readings
  u32 VBramRawData;
  float VBramData;

  //VccPInt readings
  u32 VccPIntRawData;
  float VccPIntData;

  //VccPAux readings
  u32 VccPAuxRawData;
  float VccPAuxData;

  //Vddr readings
  u32 VDDRRawData;
  float VDDRData;

 // init_platform();

    //printf("Adam Edition MicroZed Using Vivado How To Printf \n\r");
    printf("新年快樂~~!!!2015-12-31 \n\r");
    //XADC initilization

     ConfigPtr = XAdcPs_LookupConfig(XPAR_AXI_XADC_0_DEVICE_ID);
       if (ConfigPtr == NULL) {
           return XST_FAILURE;
         }

       Status_ADC = XAdcPs_CfgInitialize(XADCInstPtr,ConfigPtr,ConfigPtr->BaseAddress);
       if(XST_SUCCESS != Status_ADC){
           print("ADC INIT FAILED\n\r");
           return XST_FAILURE;
        }

       //self test
       Status_ADC = XAdcPs_SelfTest(XADCInstPtr);
     if (Status_ADC != XST_SUCCESS) {
       return XST_FAILURE;
     }

        //stop sequencer
        XAdcPs_SetSequencerMode(XADCInstPtr,XADCPS_SEQ_MODE_SINGCHAN);

        //disable alarms
        XAdcPs_SetAlarmEnables(XADCInstPtr, 0x0);

        //configure sequencer to just sample internal on chip parameters
        XAdcPs_SetSeqInputMode(XADCInstPtr, XADCPS_SEQ_MODE_SAFE);


        //configure the channel enables we want to monitor

        XAdcPs_SetSeqChEnables(XADCInstPtr,XADCPS_CH_TEMP|XADCPS_CH_VCCINT|XADCPS_CH_VCCAUX|XADCPS_CH_VBRAM|XADCPS_CH_VCCPINT| XADCPS_CH_VCCPAUX|XADCPS_CH_VCCPDRO);

        while(1)
        {
            TempRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_TEMP);
            TempData = XAdcPs_RawToTemperature(TempRawData);
            printf("Raw Temp %lu Real Temp %f \n\r", TempRawData, TempData);

            VccIntRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCINT);
            VccIntData = XAdcPs_RawToVoltage(VccIntRawData);
            printf("Raw VccInt %lu Real VccInt %f \n\r", VccIntRawData,VccIntData);

            VccAuxRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCAUX);
            VccAuxData = XAdcPs_RawToVoltage(VccAuxRawData);
            printf("Raw VccAux %lu Real VccAux %f \n\r", VccAuxRawData,VccAuxData);


            VBramRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VBRAM);
            VBramData = XAdcPs_RawToVoltage(VBramRawData);
            printf("Raw VccBram %lu Real VccBram %f \n\r", VBramRawData, VBramData);

            VccPIntRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCPINT);
            VccPIntData = XAdcPs_RawToVoltage(VccPIntRawData);
            printf("Raw VccPInt %lu Real VccPInt %f \n\r", VccPIntRawData, VccPIntData);

            VccPAuxRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCPAUX);
            VccPAuxData = XAdcPs_RawToVoltage(VccPAuxRawData);
            printf("Raw VccPAux %lu Real VccPAux %f \n\r", VccPAuxRawData, VccPAuxData);

            VDDRRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCPDRO);
            VDDRData = XAdcPs_RawToVoltage(VDDRRawData);
            printf("Raw VccDDR %lu Real VccDDR %f \n\r", VDDRRawData, VDDRData);
         }

        return 0;
}

 

1.  Use the "XAdcPs_SelfTest()"   這個自檢就不用說了

2.  Use "XAdcPs_SetSequencerMode()"  這個是設置採樣模式。

3.  Use "XAdcPs_SetAlarmEnables()"   這個是設置採樣值報警的,直接關閉,不需要報警

4.  Use "XAdcPs_SetSeqInputMode()"   這個是設置輸入模式的

5.  Use "XAdcPs_SetSeqChEnables()    這個是使能採樣通道的

編譯之後,記得先下載bit文件~~連上串口,然後就可以執行程式了:

wps875D.tmp

於是乎,通過打開串口調試助手,便能看見列印出如下信息~~

wps876E.tmp

新年新氣象~~從這篇文章開始,vivado升級到2015.2版本~~如果你需要下載,網盤地址如下~~

vivado 2015.2 http://yunpan.cn/c3I7aVCGVneEh  訪問密碼 7d64


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • GPIO庫的核心功能,當然就是操作GPIO了,GPIO就是“通用輸入/輸出”介面,比如點亮一個LED、繼電器等,或者通過iic spi 1-wire等協議,讀取、寫入數據,這都是GPIO的用處,可以說沒有GPIO,樹莓派只能當小電腦用,有了GPIO,就升級成一個控制器了。先來說說怎麼操作一個數字量(...
  • 對於我這樣的新人來說,因為是剛開始做項目,所以以前的技術不是用的很多,就比如springmvc來說,實際上使用的都是註解形式的,對於那些全部都是配置的來說,雖然也瞭解一些,但是實際上還是沒試用過的。 下麵就理一下註解的各種用法:@Controller:用於標識是處理器類;@RequestMappin...
  • 題目:Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the h...
  • 學過單片機的同學應該清楚,我們在編寫感測器驅動時,需要用到高精度的定時器、延時等功能,wiringpi提供了一組函數來實現這些功能,這些函數分別是:micros() #返回當前的微秒數,這個數在調用wiringPiSetup()後被清零並重新計時millis() #返回當前的毫秒數,同上,這個數在調...
  • 在應用Unix/Linux時,我們一般想讓某個程式在後臺運行,於是我們將常會用 & 在程式結尾來讓程式自動運行。比如我們要運行mysql在後臺: /usr/local/mysql/bin/mysqld_safe –user=mysql &。可是有很多程式並不想mysqld一樣,這樣我們就需要nohu...
  • 2月4日消息,微軟Windows 10消費者預覽版發佈後,許多Windows 7用戶都忍不住下載嘗鮮,但部分用戶升級前卻可能並未備份Windows 7。針對這種情況,微軟特地推出了一個Windows 7恢復網站,讓用戶能回到Windows 7。不過最新消息顯示,該Windows 7恢復網站目前無法....
  • 最新win7系統32位電腦城快速裝機穩定版 V2016年1月全能裝機版 V2016.1(32位)與之前的系統相比,更註重智能性,在安裝方式上也更加精簡,操作步驟簡便,更適合不會COMS設置和GHOST的用戶。最新更新的win7系統地址http://www.xitongma.com/Windows7/...
  • 標簽:mount,umount概述在上一章增加linux操作系統空間中已經使用過了mount命令對分區進行掛載,這一章詳細介紹掛載管理,該命令涉及的知識點也挺多的而且也還比較重要,是需要掌握的一個命令。掛載分區mount基本語法mount [參數] /dev/sdb1(需要掛載的分區) /sdb1....
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...