產品發表 包羅萬象 模型拍賣 綜合討論 直昇機 飛機 同協會 回首頁

 找回密碼
 申請
樓主: ej189

打造CP值最高的跨廠牌發射機 Deviation - DEVO10【固定下載】

 火... [複製鏈接]
發表於 2012年12月19日 08:57 PM | 顯示全部樓層
原帖由 sonic7510 於 2012年12月19日 08:10 PM 發表
請問一下之前有更新到 2.0.0  接下來要更新的話
只需要刷  DFU檔嗎?  
還是其他的檔都要複製上去 @@?
template目录和language目录需要复制,其他目录不需要
回復 按讚

使用道具 舉報

發表於 2012年12月19日 09:00 PM | 顯示全部樓層

回復 421樓 suvsuvsuv 的帖子

喔喔  感謝囉
馬上來試試看
回復 按讚

使用道具 舉報

發表於 2012年12月19日 11:08 PM | 顯示全部樓層
SUV大,PhracturedBlue的原始碼少了一行指令!
(似乎是用來產生亂數供 "自動對碼" 使用的)
============\src\target\common_devo\adc.c=============
/* We want to read the temperature sensor, so we have to enable it. */
adc_enable_temperature_sensor(ADC1);
adc_set_conversion_time_on_all_channels(ADC1, ADC_SMPR_SMP_28DOT5CYC);
=================================================



我是在 使用UART1導出 溫度值 時發現的,
DEVO10_temp.jpg
回復 按讚

使用道具 舉報

發表於 2012年12月20日 01:18 AM | 顯示全部樓層

回復 423樓 hmjack2008 的帖子

這行應該是開啟溫度sensor(ADC1)的
回復 按讚

使用道具 舉報

發表於 2012年12月20日 08:35 AM | 顯示全部樓層
原帖由 hmjack2008 於 2012年12月19日 11:08 PM 發表
SUV大,PhracturedBlue的原始碼少了一行指令!
(似乎是用來產生亂數供 "自動對碼" 使用的)
============\src\target\common_devo\adc.c=============
/* We want to read the temperature sensor, so we have to enab ...


v2.1跟v2.0最大的改动就是取消了直接读取adc1的值的方式,只允许通过DMA获取adc,在ADC_Init()初始阶段还是直接读取adc,但是最后会启动DMA

//Build a RNG seed using ADC 14, 16, 17
    u32 seed = 0;
    for(int i = 0; i < 8; i++) {
        seed = seed << 4 | ((ADC1_Read(16) & 0x03) << 2) | (ADC1_Read(17) & 0x03); //Get 2bits of RNG from Temp and Vref
        seed ^= ADC1_Read(14) << i; //Get a couple more random bits from Voltage sensor
    }
    printf("RNG Seed: %08x\n", (int)seed);
    srand(seed);
。。。。


/* dma ready to go. waiting til the peripheral gives the first data */
    dma_enable_channel(DMA1, DMA_CHANNEL1);
    adc_enable_dma(ADC1);

不大明白为什么您会认为温度值给自动对频相关?此外,在deviation里面,自动对频用了cyrf发射芯片的manufacture ID作为ID,所以每次自动对频实际都是同一id而不是随机值

[ 本帖最後由 suvsuvsuv 於 2012年12月20日 08:38 AM 編輯 ]
回復 按讚

使用道具 舉報

發表於 2012年12月20日 11:01 AM | 顯示全部樓層
原帖由 suvsuvsuv 於 2012年12月20日 08:35 AM 發表

v2.1跟v2.0最大的改动就是取消了直接读取adc1的值的方式,只允许通过DMA获取adc,在ADC_Init()初始阶段还是直接读取adc,但是最后会启动DMA ...

其實,原本我只是想試著從 ADC-16讀出 STM32的內部溫度值, 對照 datasheet (文件DS5792) 看是否吻合, 結果每次都讀出 "1".

我有發現這段程式碼:
    //Build a RNG seed using ADC 14, 16, 17
    u32 seed = 0;
    for(int i = 0; i < 8; i++) {
        seed = seed << 4 | ((ADC1_Read(16) & 0x03) << 2) | (ADC1_Read(17) & 0x03); //Get 2bits of RNG from Temp and Vref
        seed ^= ADC1_Read(14) << i; //Get a couple more random bits from Voltage sensor
    }
    printf("RNG Seed: %08x\n", (int)seed);
    srand(seed);
原本, 我還認為此段程式碼無用可以刪除, 但搜尋所有程式碼中的 rand()後發現, srand() "似乎"是做為亂數的 種子(seed)之用.

因此, 我猜測是: (以下(1) (2)僅是我的猜測,我還沒驗證程式碼)
(1) 先以 ADC 14, 16, 17的 noise , 讓 srand()產生一段亂數值捨棄不用, 每台DEVO遙控器每次開機捨棄數量都不固定.
(2) 自動對ID(非固定ID)時 , 再用rand() 亂數  以便隨機產生ID.
(補充) 剛才 查了程式碼.........
(3) 不是 自動對ID 之用, 應是隨機選擇 "跳頻"使用.

當然, ADC-16固定輸出"1"也不會影響 DEVO遙控器使用, 因為還有 ADC-14(電池電壓) 及 ADC-17(Vrefint, 於CD00171190文件)參與計算.

後來, 我加了 "adc_enable_temperature_sensor(ADC1);" 後確實將ADC-16通過UART1讀出並計算成攝氏溫度(就是於"超級終端"的附圖).

參考文件:
DS5792: STM32F103xC High-density performance line ARM-based 32-bit MCU with 256 to 512KB Flash, USB, CAN, 11 timers, 3 ADCs, 13 communication interfaces
CD00171190: STM32F103xx_advanced ARM-based 32-bit MCUs
=========================================================

另, 之前我拆機時還以為這個是 製程上的瑕疵(SMT soldering short), 後來對照datasheet才知道 Vref+/- 即為VDD/GND.
ADC_Vref2.jpg

也因此理解: 電池電壓計算(tx_voltage.c : PWR_ReadVoltage) 會是"v = v * 324 / 100 + 421;"
Vbattery(or DC)= ADC-14 * (3.3v/4096) * (電阻分壓:1M-ohm+330K-ohm)/(330K-ohm) + Diode壓降



ADC_Vbatt1.jpg

ADC_Vbatt2.jpg

[ 本帖最後由 hmjack2008 於 2012年12月20日 04:48 PM 編輯 ]
ADC_Vref1.jpg
回復 按讚

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 申請

本版積分規則

世界各國訪RCTW統計

手機版|台灣遙控模型-RCTW

GMT+8, 2024年12月14日 05:28 PM

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回復 返回頂部 返回列表