<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用Rowley CrossWorks和MAXQ3120評估板創(chuàng)建照度計應(yīng)用系統(tǒng)

          用Rowley CrossWorks和MAXQ3120評估板創(chuàng)建照度計應(yīng)用系統(tǒng)

          ——
          作者:圖5. 使用本ADC輸入電路可測量任何類型的電阻傳感器 時間:2007-01-26 來源:《Maxim》 收藏
          面向maxq (的crossworks為實現(xiàn)基于maxq平臺的c應(yīng)用程序開發(fā)提供了功能全面的開發(fā)環(huán)境。crossworks包含的ansi c編譯器、匯編器和連接器專為maxq架構(gòu)而優(yōu)化,同時包括一個可與硬件調(diào)試引擎和大多數(shù)maxq微控制器提供的jtag接口相連接的調(diào)試器。所有這些功能組件完全集成到基于工程的開發(fā)環(huán)境中,該開發(fā)環(huán)境提供全面的幫助系統(tǒng),并為maxq2000和maxq3120等maxq微控制器提供內(nèi)在支持和樣例程序。注意,目前面向maxq的rowley crossworks僅限于windows? (平臺。可下載30天試用版軟件。

          maxq3120評估板包含了演示maxq3120主要功能所需要的元件,用戶使用該評估板,可以在硬件設(shè)計的同時,立即進(jìn)行軟件開發(fā)。該評估板具有以下特征:

          本文引用地址:http://www.ex-cimer.com/article/21288.htm

          帶8mhz晶振的80引腳mqfp封裝maxq3120微控制器
          串口-jtag接口板,可以采用pc主機編程和調(diào)試
          3.3v線性調(diào)節(jié)器,直接通過jtag接口為maxq3120供電
          maxq3120直接驅(qū)動的靜態(tài)3.5位lcd顯示器
          復(fù)位和外部中斷按鈕
          對應(yīng)maxq3120串口1的rs-232接口和連接器
          包含模擬vdd和4個模數(shù)轉(zhuǎn)換器(adc)輸入引腳連接點的原型設(shè)計區(qū)
          本系統(tǒng)配合使用串口-jtag接口電路板(圖1),可以完全實現(xiàn)maxq3120的在系統(tǒng)引導(dǎo)裝入和調(diào)試功能。


          圖1. maxq3120評估板和串口-jtag電路板共同構(gòu)成完整的應(yīng)用開發(fā)系統(tǒng)。 在rowley crossworks中創(chuàng)建工程

          一旦激活產(chǎn)品(見rowley網(wǎng)站的"support:evaluating crossworks"),運行crossworks。選擇菜單中的file new new project,創(chuàng)建一個新工程。在new project options對話框中(圖2),選擇"c executable",輸入工程的名稱和存儲位置。在隨后的project setup對話框(見圖3),確認(rèn)"target processor"選項為maxq3120。其它選項可保留為缺省值。點擊finish創(chuàng)建新工程。

          圖2. 創(chuàng)建新工程的第一步:選擇可執(zhí)行程序類型。
          圖3. 該工程的目標(biāo)處理器為maxq3120。 應(yīng)用概要

          本maxq3120演示示例著重展示了處理器的三項關(guān)鍵特性:adc、lcd控制器和uart接口。使用這些外設(shè),我們可以創(chuàng)建完成以下功能的應(yīng)用系統(tǒng),該應(yīng)用精確測量電壓,在lcd上顯示這些電壓,并通過usart串行接口發(fā)送數(shù)據(jù)??上螺d本示例的完整代碼。

          maxq3120 adc接口的滿量程測量范圍可配置為-1v到+1v之間,并在兩個通道中任何一個通道的兩輸入引腳間進(jìn)行差分測量。要進(jìn)行光照強度測量,我們需要一種簡單方法來產(chǎn)生處于該量程范圍內(nèi)的隨周圍光線變化的電壓。

          光導(dǎo)式傳感器(圖4)的電阻隨光強度變化而變化。隨著光強度增加,傳感器電阻降低,可使傳感器流過的電流增大。本例的光傳感器采用了photonic detectors, inc.的pdv-p8001,最大電阻(完全黑暗情況下)約200k,最小電阻約3k。


          圖4. 光導(dǎo)式傳感器的阻抗隨光照強度增加而減小。 阻性傳感器的連接如圖5所示,該連接方式使我們可以將傳感器與maxq3120 adc的一個輸入通道連接,而不用考慮傳感器的最小和最大電阻。即使在完全短路(結(jié)果電壓為0v)或者開路(結(jié)果電壓為0.825v)的最壞情況下,輸入電壓也不會超出adc通道的允許范圍。


          圖5. 使用本adc輸入電路可測量任何類型的電阻傳感器 測量光照強度

          我們必須首先測量maxq3120 adc通道的輸入電壓。當(dāng)新的電壓采樣就緒后,adc 產(chǎn)生一個中斷,因此我們只需初始化adc并使能中斷。

          // initialize the adc

          adcn = 0x0030; // flush samples
          adcn = 0x0300; // power down
          adcn = 0x0200; // power up

          imr = 0x08; // enable interrupts from module 3
          ic = 0x01; // enable interrupts globally

          在crossworks中,任何函數(shù)都能通過在函數(shù)定義中增加_interrupt關(guān)鍵字,而被指定為中斷服務(wù)函數(shù)。因為maxq3120的所有中斷均指向iv寄存器內(nèi)包含的地址,所以我們只需要定義一個中斷服務(wù)函數(shù)。本應(yīng)用程序僅使用了一個中斷,如果我們想增加其他中斷,可以在中斷服務(wù)函數(shù)內(nèi)檢查其他寄存器,以確定哪個中斷觸發(fā)了中斷服務(wù)函數(shù)。


          void adc_interrupt(void) __interrupt
          {
          current_sample = (int)adc0;
          sample_count++;
          }

          void main(void)
          {
          setiv(adc_interrupt);
          ...

          中斷服務(wù)函數(shù)adc_interrupt求取adc通道0最后16個采樣結(jié)果的移動平均值。這可濾除輸入的高頻噪聲,并獲得大約2.4khz的輸出采樣率。由于顯示和傳輸采樣的頻率相當(dāng)?shù)?,所以本?yīng)用系統(tǒng)的性能不會受到影響。


          顯示采樣電壓

          為簡單起見,我們直接顯示從adc通道0讀出的原始電壓,來表示所測量的光照強度。該電壓在0到1v之間,能以0.001v的精度在所包含的lcd顯示器上顯示。
          maxq3120評估板上的lcd采用3.5位靜態(tài)lcd,帶有正/負(fù)和小數(shù)點指示,布局如圖6所示。與lcd接口的第一步是初始化maxq3120 lcd控制器。


          void lcd_init(void)
          {
          lcra = 0x02e0; // 0000 0010 1110 0000, static, 32khz, radj=0
          lcfg = 0xf3; // use all pins, enable display
          lcd0 = 0xff; // initialize all segments to on
          lcd1 = 0xff;
          lcd2 = 0xff;
          lcd3 = 0x0f;
          }


          圖6. maxq3120評估板為應(yīng)用提供3.5位靜態(tài)lcd。 lcd初始化完成后,我們即可增加代碼,設(shè)置顯示器的適當(dāng)段來顯示某特定的數(shù)值。lcd的各個段與各寄存器位一一對應(yīng)(表1),因此在顯示器上顯示字符只需簡單地向各寄存器寫入合適的數(shù)值。lcd控制器處理余下的問題。
          因為有些顯示位的各段分布在一個以上的lcd存儲器寄存器中,若要在不影響其他字符顯示的前提下改變某一特定字符,需要進(jìn)行兩個操作。首先,選出對應(yīng)該字符的所有寄存器位。其次,寫入新字符的寄存器位值。


          unsigned char lcd0_mask[] =
          {
          0xff, // digit 0 (rightmost)
          0x7f, // digit 1 (center)
          0x80 // digit 2 (leftmost)
          };

          ....

          unsigned char lcd0_table[] =
          {
          // digit 0
          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
          // digit 1
          0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80,
          // digit 2
          0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67
          };

          ....

          void lcd_display(int value, int digit)
          {
          int index;

          if ((digit == 0) || (digit == 1) || (digit == 2)) {
          index = digit * 10 + value;
          lcd0 &= lcd0_mask[digit];
          lcd1 &= lcd1_mask[digit];
          lcd2 &= lcd2_mask[digit];
          lcd0 |= lcd0_table[index];
          lcd1 |= lcd1_table[index];
          lcd2 |= lcd2_table[index];
          }
          }

          這些子程序準(zhǔn)備就緒后,所有剩下的問題就是將采樣平均值轉(zhuǎn)換成十進(jìn)位形式,并在lcd上顯示。因為采樣速率比lcd顯示采樣結(jié)果或人眼睛能看到的結(jié)果快得多,本應(yīng)用程序在各次lcd刷新之間加入一個延時循環(huán)。在中斷程序中獲得各采樣結(jié)果并連續(xù)求得平均值,但這些平均采樣值只是周期性地在lcd上顯示。


          while (1)
          {
          ic = 0; // clear interrupts to make sure we copy correctly
          ltemp = current_sample; // from our global variable to our local copy
          local_count = interrupts;
          ic = 1; // enable interrupts ends the critical section
          ltemp = ltemp * 100;
          // divide by 32k
          ltemp = ltemp >> 15;
          local_sample = (int) ltemp;

          sign = 0;
          if (local_sample < 0) {
          sign = 1;
          local_sample = local_sample * -1;
          }

          lcd_display(local_sample % 10, 0);
          local_sample = local_sample / 10;
          lcd_display(local_sample % 10, 1);
          local_sample = local_sample / 10;
          lcd_display(local_sample % 10, 2);
          local_sample = local_sample / 10;
          if (local_sample != 0) {
          // set leading 1
          lcd_set1000s();
          }

          if (sign == 1) {
          lcd_setnegative();
          } else {
          lcd_setpositive();
          }

          for (counter = 0; counter < 1000; counter++) {
          // just a simple delay loop
          }
          }

          每當(dāng)電平上升到0.5v以上(local_sample > 50)時,我們就點亮一只led (由端口引腳p0.6驅(qū)動),作為額外指示。環(huán)境光線強度一旦低于某一特定水平(如關(guān)掉房間電燈時),led的發(fā)光指示可產(chǎn)生一種“夜光”效果。

          if (local_sample > 50) {
          po0 = 0x8f;
          } else {
          po0 = 0xff;
          }


          向pc返回結(jié)果

          在可視化顯示的同時,我們可擴展本應(yīng)用程序的功能,將采樣值送到pc主機,用于后續(xù)處理和分析。最簡單的方法是向串口1寫ascii碼數(shù)據(jù),經(jīng)電平轉(zhuǎn)換并送入db9 rs-232連接器。然后, 只需簡單地將串口與pc連接,使用一個標(biāo)準(zhǔn)終端仿真程序獲取數(shù)據(jù)。

          crossworks提供標(biāo)準(zhǔn)的c printf()函數(shù),作為其基本庫的一部分,這樣,將數(shù)據(jù)格式轉(zhuǎn)換成ascii碼十進(jìn)制形式的大部分工作已經(jīng)完成。所有剩下的工作是初始化和控制傳送數(shù)據(jù)的串口。通過定義_putchar函數(shù)在串口輸出一個字符,實現(xiàn)與printf()的接口。這樣,printf()將在必要時自動調(diào)用此函數(shù)。


          int initserial(void)
          {
          scon1 = (1<<6)|(1<<4); // set to mode 1 (10-bit asynchronous) & enable
          smd1 = 2; // baud rate = 16 x baud clock
          pr1 = 0x095d; // p = 2^21 * 9600 / 8mhz crystal
          }

          int __putchar(int x)
          {
          sbuf1 = x;
          while (!(scon1 & 2));
          scon1 &= ~2;
          }

          為確定輸出采樣之間的時間間隔,本應(yīng)用程序在通過串口發(fā)送每個采樣時,同時發(fā)送原始的adc中斷次數(shù)。在9600波特率下,通過串口輸出10個字符約需100ms。

          只有在用戶請求時數(shù)據(jù)才寫入串口,通過按下maxq3120評估板上pb1-pb4中的任何一個按鈕實現(xiàn)該操作。


          if ((pi0 & 0x27) != 0x27) {
          printf("%dt%d
          ", local_count, local_sample);
          }

          為說明接收數(shù)據(jù)的時序,圖7給出了典型辦公室環(huán)境下打開/關(guān)閉電燈時的照度,以及照相機消除紅眼閃光燈的照度曲線。為檢測這類照相機所使用的雙閃光脈沖的特性,這種采樣速率和光傳感器響應(yīng)度已足夠高。注意,采樣值的減小(表示照度增加)幾乎與照度變化同時發(fā)生,采樣值的升高(表示照度降低)顯示了光傳感器在光強度下降時的調(diào)節(jié)特性曲線。


          圖7. 測量照相機消除紅眼閃光燈時得到這些光強采樣結(jié)果。 結(jié)語

          maxq3120集成了通用雙通道adc,其處理能力足以應(yīng)付復(fù)雜的信號分析任務(wù)。除此之外,maxq3120還具備充足的能力進(jìn)行顯示控制、與主機通訊以及完成數(shù)據(jù)采集系統(tǒng)需要的其他任務(wù)。再加上rowley associates的crossworks所提供的完備工具和開發(fā)環(huán)境鼎力相助,任何不具備maxq處理器架構(gòu)專門知識的人,都能很快使用標(biāo)準(zhǔn)ansi c開發(fā)和調(diào)試數(shù)據(jù)采集及處理應(yīng)用程序。



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();