介紹了基于Xilinx Spartan- 3E FPGA XC3S250E 來完成分辨率為738×575 的PAL 制數字視頻信號到800×600 的VGA 格式轉換的實現方法。關鍵詞: 圖像放大; PAL; VGA; FPGA
目前, 絕大多數監控系統中采用的高解析度攝像機均由47 萬像素的CCD 圖像傳感器采集圖像, 經DSP 處理后輸出的PAL 制數字視頻信號不能直接在VGA 顯示器上顯示, 而在許多場合需要在VGA 顯示器上實時監視, 這就需要將隔行PAL 制數字視頻轉換為逐行視頻并提高幀頻, 再將每幀圖像放大到800×600 或1 024×768。常用的圖像放大的方法有很多種, 如最臨近賦值法、雙線性插值法、樣條插值法等[ 1] 。由于要對圖像進行實時顯示, 本文采用一種近似的雙線性插值方法對圖像進行放大。隨著微電子技術及其制造工藝的發展, 可編程邏輯器件的邏輯門密度有了很大提高, 現場可編程邏輯門陣列( FPGA) 有著邏輯資源豐富和可重復以及系統配置的靈活性, 同時隨著微處理器、專用邏輯器件以及DSP 算法以IP Core 的形式嵌入到FPGA 中[ 2] , FPGA 的功能越來越強, 因此FPGA 在現代電子系統設計中發揮著越來越重要的作用。本課題的設計就是采用VHDL 描述, 基于FPGA 來實現的。
標簽:
PAL-VGA
FPGA
轉換器
上傳時間:
2014-02-22
上傳用戶:a1054751988
ISIS 有一個很完善的圖形系統允許你自定義原理圖所包含項目的外觀比如線條格式,填充色,文本的字體,文本的效果等等… 這個系統非常強大并且允許你自己定義部分或者全部的原理圖的全部外觀,同時允許加載某些對象到你本地的外觀屬性.
在ISIS中所有的圖形對象都是根據圖形格式所畫出. 圖形格式(graphics style)是一個完整的描述,關于怎樣去畫出和填充一個圖形(比如一條線條,一個方框,圓或別的)并且包含線條的格式(實心線,點線,虛線等等),寬度,顏色,填充格式,填充的前臺色和背景色,等等..同樣,所有的標號(label)和文字塊(cript blocks)在ISIS(終端標號,管腳名,等等)都是根據文本格式所畫出來.文本格式(text style)是一個完整的描述,關于怎樣去畫出一些文本和包含字體的屬性(比如:亞洲字體,羅馬字體,等等),字符的高度,寬度,顏色,等等…
在ISIS 中,大多數的對象,例如2D圖形,線條,終端標號,等等…每一個都有屬于自己的格式以便他們能被定義,也就是說,比如,一條線條和另外一條線條有不同的外觀. 這些項目作為這個對象的格式被設定,別的對象比如管腳名,子電路體,等等 是早已經被預先定義好的格式,因此這些對象只能定義要么全有要么全無的特性,也就是說,比如,子電路體可以有不同的你所想要的外觀,但是所有的子電路體必須有相同的外觀.
標簽:
Proteus
教程
圖形
上傳時間:
2013-12-24
上傳用戶:uuuuuuu
注:1.這篇文章斷斷續續寫了很久,畫圖技術也不精,難免錯漏,大家湊合看.有問題可以留言.
2.論壇排版把我的代碼縮進全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服.
一、什么是PWM
PWM 即Pulse Wavelength Modulation 脈寬調制波,通過調整輸出信號占空比,從而達到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。
二、Arduino 軟件模擬PWM
Arduino PWM 調壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現難度限制,一般 使用周期恒定,占空比變化的單極性PWM。
通過調整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。
如圖所示,假設PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始:
const int PWMPin = 13;
int bright = 0;
void setup()
{
pinMode(PWMPin, OUTPUT);
}
void loop()
{
if((bright++) == 255) bright = 0;
for(int i = 0; i < 255; i++)
{
if(i < bright)
{
digitalWrite(PWMPin, HIGH);
delayMicroseconds(30);
}
else
{
digitalWrite(PWMPin, LOW);
delayMicroseconds(30);
}
}
}
這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環可以看出,完成一個PWM 周期,共循環255 次。
假設bright=100 時候,在第0~100 次循環中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平;
然后第100 到255 次循環里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。
那么說,如果bright=100 的話,就有100 次循環是高電平,155 次循環是低電平。 如果忽略指令執行時間的話,這次的PWM 波形占空比為100/255,如果調整bright 的值, 就能改變接在D13 的LED 的亮度。
這里設置了每次for 循環之后,將bright 加一,并且當bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應該是大家想的比較多的想法。
然后介紹一個簡單一點的。思維風格完全不同。不過對于驅動一個LED 來說,效果與上面 的程序一樣。
const int PWMPin = 13;
int bright = 0;
void setup()
{
pinMode(PWMPin, OUTPUT);
}
void loop()
{
digitalWrite(PWMPin, HIGH);
delayMicroseconds(bright*30);
digitalWrite(PWMPin, LOW);
delayMicroseconds((255 - bright)*30);
if((bright++) == 255) bright = 0;
}
可以看出,這段代碼少了一個For 循環。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。
三、多引腳PWM
Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數字IO 口變成PWM 引腳。
當一片Arduino 要同時控制多個PWM,并且沒有其他重任務的時候,就要用軟件PWM 了。
多引腳PWM 有一種下面的方式:
int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設置
int StartPWMPin = 0, EndPWMPin = 13; //設置D0~D13為PWM 引腳
int PWMResolution = 255; //設置PWM 占空比分辨率
void setup()
{
//定義所有IO 端輸出
for(int i = StartPWMPin; i <= EndPWMPin; i++)
{
pinMode(i, OUTPUT);
//隨便定義個初始亮度,便于觀察
brights[ i ] = random(0, 255);
}
}
void loop()
{
//這for 循環是為14盞燈做漸亮的。每次Arduino loop()循環,
//brights 自增一次。直到brights=255時候,將brights 置零重新計數。
for(int i = StartPWMPin; i <= EndPWMPin; i++)
{
if((brights[i]++) == PWMResolution) brights[i] = 0;
}
for(int i = 0; i <= PWMResolution; i++) //i 是計數一個PWM 周期
{
for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳
{
if(i < brights[j])\
所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
標簽:
Arduino
PWM
軟件模擬
上傳時間:
2013-10-23
上傳用戶:mqien