色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用DS2790生成隨機數

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-06-26 09:14 ? 次閱讀

本應用筆記介紹如何利用DS4溫度寄存器的最低2790位產生16位隨機值。本說明還提供了用于生成 16 位隨機值的示例 C 代碼。

介紹

隨機數用于許多加密和身份驗證方案。隨機數的生成涉及查找隨機行為并使用此行為生成隨機值。因此,使用微控制器生成隨機數可能是一項艱巨的任務,因為微控制器經常表現出重復行為。

幸運的是,DS2790允許設計人員使用溫度寄存器的最低4位來產生16位隨機值。雖然數據手冊中只有溫度寄存器的最高11位被定義為溫度信息,但所有16位都被報告。此功能,加上寄存器的最低4位是高度隨機的,使其成為生成16位隨機值的理想選擇。

擴展溫度數據是隨機的嗎?

表1是將DS2790浸入受控溫度浴中得出的。將器件放置在如此嚴格控制的溫度環境中會迅速暴露非隨機溫度值。下面的數據顯示了內存中存儲溫度的地址的最低 4 位。

表 1.DS2790的擴展溫度數據

價值 計數 增量計數 三角洲平均
0 23657 -453.625 -1.8814%
1 23822 -288.625 -1.1971%
2 24422 311.375 1.2914%
3 24091 -19.625 -0.0814%
4 24222 111.375 0.4619%
5 23994 -116.625 -0.4837%
6 24218 107.375 0.4453%
7 24258 147.375 0.6112%
8 24612 501.375 2.0795%
9 23984 -126.625 -0.5252%
一個 23974 -136.625 -0.5667%
B 24005 -105.625 -0.4381%
C 24178 67.375 0.2794%
D 24066 -44.625 -0.1851%
E 23954 -156.625 -0.6496%
F 24313 202.375 0.8394%
共計數: 385770
總數的 1/16: 24110.625

值列以十六進制顯示溫度寄存器最低 4 位的值。“計數”列顯示每個值在大約 24 小時內出現的次數。在完全隨機的系統中,給定無限的時間來監測DS2790的行為,我們會看到每個值在1/16的時間內出現。增量計數列顯示與理想 1/16 值相比,每個值出現的次數的絕對誤差。Delta-Avg 列顯示的誤差與理想 1/16 值的百分比相同,即理想隨機行為與 1/16 時間發生的值之間的百分比差異。非常低的百分比值表明溫度寄存器的最低4位是高度隨機的。

生成 16 位隨機數

為了確保在需要時隨機數可用,該示例會在每次完成溫度轉換結果時更新隨機值。若要生成 16 位隨機數,請使用以下步驟。

將DS2790配置為在溫度轉換完成時產生中斷。

注意溫度中斷發生的時間。

發生中斷時,將溫度寄存器的最低4位移入變量。

這些步驟導致DS2790每220ms (標稱值)產生一個溫度轉換中斷。由于每次溫度轉換提供 4 位,并且我們正在生成一個 16 位數字,因此每 880ms(標稱值)提供一個全新的隨機數。

示例 C 代碼

下面的示例 C 代碼生成一個 16 位隨機值,該值可用作全局變量rand_num。請注意,必須初始化該器件,以便在溫度中斷完成時啟用中斷。溫度中斷在代碼中定義為EINT_ti

unsigned short rand_num;                /* Global random number */

/* This is the main Interrupt Service Routine*/
void FuelGaugeISR(void) __interrupt
{
char temp_low4bits;                     /* Store the low 4 bits of temperature here */

        /* Stay in the loop if there is an interrupt. */
        while (IIR & IMR_IM0 || IIR & IMR_IM1)
        {
                /* The IIR signifies if a Module 0 or Module 1 interrupt has occured.*/
                /* Module 0 will be treated with priority. */
                
                if (IIR & IMR_IM0) /* Module 0 Interrupt */
                {
                        /* Detect and Service Higher Priority Module 0 Interrupts here. */

                        if (EINT & EINT_ti) /* A temperature conversion completion int occurs every 220ms. */
                        {
                                EINT &= ~EINT_ti; /* Reset the temperature interrupt bit. */
                                
                                /* This code builds a new 16 bit random number every 4 temperature interrupts */
                                /* The global variable rand_num is fully updated every 880ms */
                                /* Next statement clears all but low 4 bits of the temperature register */
                                temp_low4bits = (char)((pADC->TEMPERATURE) & 0x000F);
                                
                                /* Next statement shifts the old random number left by 4 bits. */
                                rand_num = rand_num << 4;
                                
                                /* Next statement "shifts" the new bits in by adding them. */
                                rand_num = rand_num + temp_low4bits;            
                        }
                }
                else /* This is a module 1 interrupt. */
                {
                        /* Handle module 1 interrupts here. */
                }
        }
}

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7542

    瀏覽量

    151316
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120231
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68525
收藏 人收藏

    評論

    相關推薦

    什么是隨機數

    做開發的工程師們應該或多或少都接觸過隨機數,可能認為它就是一個隨機生成的數字嘛,使用時也很簡單,只要調用開發語言提供的函數即可。但實際上隨機數后面還是有著比較復雜但也有趣的知識點的。根
    發表于 07-22 09:42

    DS2790可編程、1 節鋰離子電池電量計與保護器

    DS2790可編程、1 節鋰離子電池電量計與保護器 DS2790為單節鋰離子電池提供完整的電池電量計和保護器解決方案。DS2790具有低功耗16位MAXQ20微控制器、大容量程序和數據存儲
    發表于 04-12 16:01 ?52次下載

    像計算機這類完全按邏輯運行的機器是如何生成隨機數的?

    像計算機這類完全按邏輯運行的機器是如何生成隨機數的? 計算機有兩種方式可以生成隨機數: 您可以制造某種設備,用其監視完全隨機的自然
    發表于 07-31 12:25 ?1475次閱讀

    神經網絡的偽隨機數生成方法

    為了克服有限精度效應對混沌系統的退化影響,改善所生成隨機序列的統計性能,設計了一種新的基于六維CNN(細胞神經網絡)的64 bit偽隨機數生成方法。在該方法中,通過控制六維CNN在每次
    發表于 02-02 15:49 ?0次下載

    C語言中隨機數生成代碼

    C語言中隨機數生成完整代碼:
    的頭像 發表于 02-20 09:21 ?1w次閱讀

    如何在C語言中使用隨機數

    通常情況下,使用最多的方法的就是使用rand函數隨機生成隨機數來完成隨機數生成工作。注意這里的偽隨機
    的頭像 發表于 11-09 16:46 ?5170次閱讀

    如何使用隨機數生成器來生成私鑰

    ,尤其重要。 說到隨機,有兩個必須要搞清楚的概念:“真隨機數生成器”(TRNG)和偽隨機數生成器(PRNG)
    發表于 03-18 10:40 ?5061次閱讀
    如何使用<b class='flag-5'>隨機數</b><b class='flag-5'>生成</b>器來<b class='flag-5'>生成</b>私鑰

    如何利用SystemVerilog仿真生成隨機數

    采用SystemVerilog進行仿真則更容易生成隨機數,而且對隨機數具有更強的可控性。對于隨機變量,在SystemVerilog中可通過rand或randc加數據類型的方式定義。ra
    的頭像 發表于 10-30 10:33 ?1.1w次閱讀
    如何利用SystemVerilog仿真<b class='flag-5'>生成</b><b class='flag-5'>隨機數</b>

    YIE002開發探索10-隨機數生成

    生成器1 隨機數生成器構建2 YIE002-STM32的隨機數生成器編程2.1 隨機數
    發表于 01-17 13:06 ?2次下載
    YIE002開發探索10-<b class='flag-5'>隨機數</b><b class='flag-5'>生成</b>器

    用于生成隨機數的電子骰子

    電子發燒友網站提供《用于生成隨機數的電子骰子.zip》資料免費下載
    發表于 07-06 10:58 ?4次下載
    用于<b class='flag-5'>生成</b><b class='flag-5'>隨機數</b>的電子骰子

    Arduino Lotto隨機數生成

    電子發燒友網站提供《Arduino Lotto隨機數生成器.zip》資料免費下載
    發表于 11-02 10:59 ?0次下載
    Arduino Lotto<b class='flag-5'>隨機數</b><b class='flag-5'>生成</b>器

    隨機數生成器開源分享

    電子發燒友網站提供《隨機數生成器開源分享.zip》資料免費下載
    發表于 11-11 11:57 ?0次下載
    <b class='flag-5'>隨機數</b><b class='flag-5'>生成</b>器開源分享

    如何在200 smart中生成隨機數

    上文寫了博途中生成隨機數的幾種辦法,現在試著使用其中簡單的線性同余法實現在200 smart中完成類似功能。
    的頭像 發表于 03-23 13:51 ?6768次閱讀
    如何在200 smart中<b class='flag-5'>生成</b>偽<b class='flag-5'>隨機數</b>

    技術分享 | 隨機數生成過慢導致系統阻塞怎么辦?

    /dev/random和/dev/urandom是linux上的隨機數生成器,是個字符設備,為系統提供隨機數隨機數主要應用在加密方面,沒有加密的操作都是可預測且不安全的。linux上
    的頭像 發表于 08-15 09:20 ?2283次閱讀
    技術分享 | <b class='flag-5'>隨機數</b><b class='flag-5'>生成</b>過慢導致系統阻塞怎么辦?

    如何使用雪花算法生成真正的隨機數

    以前用rand和srand生成過偽隨機數,偽隨機數的序列是固定的,今天學習生成真正的隨機數生成
    的頭像 發表于 10-09 10:05 ?1333次閱讀
    主站蜘蛛池模板: 99久久精品免费国产一区二区三区| 国产精品自在拍在线播放| 户外插BBBBB| 日本免费一区二区三区四区五六区 | 欧美高清vivoesosexo18| 亚洲成片在线看| qvod 在线| 老师的玉足高跟鞋满足我| 邪恶肉肉全彩色无遮盖| 不卡无线在一二三区| 猛烈抽插H1V1| 一抽一出BGM免费50分动漫| 国产叼嘿久久精品久久| 欧美亚洲日韩欧洲不卡| 最近中文字幕2019免费版日本| 黑人巨茎vide抽搐| 挺进老师的紧窄小肉六电影完整版| 99热这里只有精品| 麻豆免费高清完整版| 夜色视频社区| 黑色丝袜美女被网站| 午夜在线播放免费人成无| 国产360激情盗摄全集| 欧美一夜爽爽爽爽爽爽| 97se se| 美女也烦恼主题曲| 张津瑜的9分58秒7段免费| 精品无码一区二区三区不卡| 午夜片无码区在线观看| 囯产精品一品二区三区| 日本人奶水中文影片| www.久久久| 欧美亚洲日韩自拍高清中文| 99re在这里只有精品| 美女扒开尿口让男生添动态图| 永久免费看A片无码网站四虎| 精品亚洲国产成AV人片传媒| 亚洲理论在线a中文字幕| 国产亚洲美女精品久久久2020| 午夜影视不用充钱的免费| 国产精品99亚发布|