步驟1:什么是AVR,為什么要使用IC是?
AVR是一個微控制器,可用于使用軟件控制電流。它可用于切換設備,使用脈沖寬度調制控制它們,從傳感器讀取值以及處理數據以與其環境交互。
例如,ATMega328的尺寸不到1平方厘米,但包含23個IO引腳。它也僅需要1.8-5.5V即可運行。
這可以幫助您縮小Arduino項目,以創建可穿戴技術或更小巧,更美觀的機器人。
AVR芯片可以使用多種硬件進行編程,從簡單的串行電纜到專用的AVR編程器和開發站。
雖然每種方法都有其自身的優勢缺點和缺點,我將重點介紹使用Arduino。
Arduino是一個大型的微控制器原型開發平臺。 Arduino Uno的IO引腳已斷開,并連接了插頭。它完全包含運行板載微控制器所需的所有部件,例如晶體和電源調節。它還具有自己的IDE和與C十分相似的編程語言。使用該程序,可以將新軟件刷新到AVR芯片上。
IDE包含一個名為ArduinoISP的程序,該程序應該做到這一點。不幸的是,它非常挑剔,很少與Arduino的某些型號一起使用。在該位置可以找到Adafruit制作的程序的變體,其工作更加一致。
如果您使用的是Arduino Uno,那么我建議使用后者,因為我對官方程序有很多麻煩。/p》
第3步:編程
可以用各種不同的方式對AVR芯片進行編程。
安裝Arduino Bootloader使用IDE和語言
使用程序集。盡管這可能很難讀取和寫入,但它可能非常有效。
使用Atmel的官方IDE Atmel Studio,但僅適用于Windows,不適用于Linux或Mac
在您喜歡的C或文本編輯器中創建程序,然后使用avr-gcc進行編譯和刷新和avrdude。
這在可讀性和效率之間以及所有平臺上都實現了很好的折衷。
我將詳細介紹第四個也是最后一個選項。
許多編輯器都將為此工作,因為您只需編寫C程序即可:Eclipse,notepad ++,vi以及更多其他程序
請下載附件中的led_flash.c文件和makefile。
我為此項目使用了ATTiny 85。
我將首先解釋代碼。
第一行代碼是:
#include
這會將與您的AVR芯片有關的常數導入程序。編譯程序時,必須指定要使用的AVR芯片的類型。
下一次導入:
#include
這包括
下一步是一些定義:
#define shift_light_up(port) port 《《 1 #define shift_light_down(port) port 》》 1
定義宏以在鏈上上下移動光。
#define register_set_output(register) register = 0b11111111
#define enable_first_light(port) port = 0b00000001
定義宏以設置要輸出的整個寄存器并啟用第一盞燈。
這些定義實質上是創建宏,因此我們不需要稍后再使用代碼。可以使代碼比以前更具可讀性。
將寄存器設置為二進制全1會導致所有引腳成為輸出而不是輸入。
然后,端口設置引腳的值是高還是低。
端口《《1將使能的引腳移位1位。端口》》 1沿相反方向移動它。
boolean is_last_pin(uint8_t *port){
if((*port & 0b00010000) 》 0)
return true;
else return false;
}
boolean is_first_pin(uint8_t *port){
if((*port & 0b00000001) 》 0)
return true;
else return true;
}
兩個功能可以輕松測試當前燈是否使用第一個或最后一個引腳。
int main (void){
register_set_output(DDRB); // Set it all to output
enable_first_light(PORTB); // Set the first light to on
boolean up = true;
while(true){
_delay_ms(100); // Dependent on the chip‘s clock speed, speed must be set
if(is_first_pin(&PORTB) == true) //check if it is at the start
up = true;
else if(is_last_pin(&PORTB) == true) // check if it is at the end
up = false;
if(up == true)
PORTB = shift_light_up(PORTB); // Shift our light up
else
PORTB = shift_light_down(PORTB); // Shift our light down
}
}
這是我們函數的主要部分。芯片啟動時會調用int main(void)函數。我們首先使寄存器B為所有輸出。然后,我們打開第一個指示燈,并聲明一個布爾值,該布爾值記住要走的方向。每個循環首先延遲0.2秒,然后檢查方向是否需要更改。最終,它會沿給定的方向移動光并重復循環。
就是這樣!
上一步:makefile自動執行編譯和刷新過程
第4步: Makefile
Make用于自動生成程序。您可以設置一個makefile以使整個過程成為一個命令,即“ make program”。
使用make create宏可以輕松運行與構建項目有關的命令集合。
第一個命令是默認調用的命令,因此首先擁有一個幫助宏可能會很有用。
help:
@echo ’Help details:‘
@echo ’hex: compile hex file‘
@echo ’flash: install hex file‘
@echo ’program: compile hex and install‘
這總是提醒您如何設置程序,而不需要
此makefile的下一部分是十六進制。
hex:
avr-gcc -Os -DF_CPU=8000000 -mmcu=attiny85 -c led_flash.c
avr-gcc -DF_CPU=8000000 -mmcu=attiny85 -o led_flash.elf led_flash.o
avr-objcopy -O ihex led_flash.elf led_flash.hex
rm led_flash.o
rm led_flash.elf
這完成了編譯芯片的整個過程。為AVR編譯程序的過程有點困難且漫長,但是這部分使您無需記住過程的每個部分。該編譯過程中要記住的最重要的部分是--mmcu = attiny85和led_flash。這些將需要根據您自己的項目進行更改。如果您使用不同的AVR芯片,只需將attiny85更改為您使用的類型。如果您的文件未命名為led_flash.c,則使用文件名更改led_flash的所有實例。
最后,DF_CPU = 8000000定義了微控制器中的時鐘速度。除非將其設置為正確的值,否則許多項目(例如延遲)將無法正常工作。如果您使用其他芯片,或以任何方式修改速度,請查閱AVR芯片的數據表。
flash:
avrdude -c arduino -p attiny85 -P /dev/tty.usbmodemfd121 -U flash:w:led_flash.hex
這會將程序安裝到AVR芯片上。請注意:
-c arduino -p attiny85 -P/dev/tty.usbmodemfd121
這將設置pro的類型
步驟5:刷新和編譯
現在您已經有了makefile設置以及編程硬件設置,只需鍵入
make program
,這將編譯代碼并在AVR上安裝該程序。
恭喜!
步驟6:最終電路
最終電路使用許多電阻器和LED,但僅一步之遙,即可將芯片放入實際電路中。
只需將5V +連接到VCC引腳,將地連接到GND,然后將IO引腳連接到一排LED
將電路焊接到原型板并構建一個一個有趣的容器,向您的朋友和同事展示您的新技能。
責任編輯:wv
-
AVR-GCC
+關注
關注
0文章
4瀏覽量
8556 -
Arduino
+關注
關注
187文章
6464瀏覽量
186655
發布評論請先 登錄
相關推薦
評論