Linux下AT90S8515單片機GCC編程點燈實驗紀實
唐鐵鑫
看著那發光二極管一閃一閃的,我的高興得又蹦又跳。成功啦!對於一個新手來說,這第一次太難忘了。
……
在CSDN的論壇聽說過AVR,下載編程之類的東東,在網上搜索相關資料時發現了Linux focus上有一篇Guido Socher寫的《AVR單片機GCC編程》,覺得有可操作性,於是把相關的資料、軟件下到了硬盤。
可是,跑遍了廣州的電子商店都找不到AT90S4433,只有AT90S8515,怎麼辦呢?從網上看到《AVR高速嵌入式單片機原理與應用(修訂版)》的介紹,到書店找來看了看,發現兩個片子下載編程的原理是一樣的,只是引腳有些不同,不如就……
硬件制作:
到電子城買來以下東東:AT90S8515單片機(比OTP的51片貴了n倍,n>5)一個,40腳普通鎖緊插座一個,30pf的陶式電容兩個(我找不到27pf的,不過就我所了解的,起振用10到30pf都行),4M晶振一個,聚酯板一塊,DB25並口一個,單排針、雙排針各一排(其實也可以不用),電阻、發光二極管我是從壞了的顯示器上卸下來的。電阻我沒有470歐的,用100歐加380歐串聯代替(其實250到700都可以,一般470),我把三節1.5V電池用導線串聯焊在一起做的電源。
一切都齊了,動手吧。按照Guido Socher在avrledtest-0.1.tar裡的原理圖,根據《AVR高速嵌入式單片機原理與應用(修訂版)》上AT90S8515的接腳,重畫了原理圖。很簡單,我描述一下吧:6腳PB5(MOSI)串聯480歐電阻接並口2針,7腳PB6(MISO)串聯220歐接電阻並口11針,8腳PB7(SCK)串聯480歐電阻接並口2針,9腳PB8(RESET)串聯480歐電阻接並口16針之外再連10千歐電阻接電源正極(VCC),15腳PD5串聯1千歐電阻和一個發光二極管(注意方向)後接電源正極(VCC),18腳XTAL2、19腳XTAL1接晶振和起振電容(標准接法),振蕩電路GND、單片機20腳(GND)、並口18針(GND)接到電源負極,單片機40腳(VCC)接電源正極。
做板子,你肯定要有焊錫、烙鐵、導線和萬用表等東西。做好後,檢查線路有沒接錯,用萬用表測測電路通不通,電阻、電容有沒壞,然後就搞定了。
軟件安裝:
軟件我開始想用我已經有的Redhat 7.0,結果沒有ppdev的補丁,於是裝Redhat 9.0(即7.3,Linux內核2.4.18)。這Redhat 9.0,在我的intel 810上裝了5、6遍我才明白,你不給810的顯卡分配4M以上的內存,Xfree86-4的Sever它就啟動不了,倒霉!
沒有gxtar的話,你要會用gzip、bzip2和tar解壓;都是源代碼安裝,你要會;另外,以root身份操作。安裝方法我不詳細講了,參照Guido Socher的《AVR單片機GCC編程》。提醒注意:1、裝完binutils-2.11.2後一定要添加/usr/local/atml/lib這行到/etc/ld.so.conf文件裡面,並運行/sbin/ldconfig命令重建連接器緩存,如果忘了,你要從這步開始往後重裝一遍;2、裝avr-libc-20020106前,有
export CC=avr-gcc
export AS=avr-as
export AR=avr-ar
export RANLIB=avr-ranlib
export PATH=/usr/local/atmel/bin:${PATH}
幾步,用export命令看看你的環境設置的path是什麼樣的,那就是這裡的 ${PATH}所指的,千萬不要直接輸入export PATH=/usr/local/atmel/bin:${PATH}後敲回車,那不對,或者到你的root目錄下,把隱藏文件顯示出來,配置你的.bash_profile文件,加入:/usr/local/atmel/bin路徑,重啟系統,這就一勞永逸了;3、千萬記住,Linux下是區分大小寫的,我在Win下解壓的uisp-20011025,到了Linux下就不能make,原來DAPA.C變成了dapa.c,真是氣死我了!折騰了半天。
安裝好後,解壓avrledtest-0.1.tar,因為我用的是AT90S8515,所以,把解壓後的avrledtest-0.1文件夾裡的avrledtest.hex和avrledtest_pre.hex刪了,那是AT90S4433的。用Gedit或其他文本編輯器打開makefile文件,把MCU=at90s4433改成MCU=at90s8515,把
# here is a pre-compiled version in case you have trouble with
# your development environment
load_pre: avrledtest_pre.hex
uisp -dlpt=/dev/parport0 --erase -dprog=dapa
uisp -dlpt=/dev/parport0 --upload if=avrledtest_pre.hex -dprog=dapa -dno-poll -v=3 --hash=32
#-------------------
這一段刪掉,因為我要重新編譯一個MCU=at90s8515的avrledtest.hex,如果development environment有麻煩,那就完成不了啦!
測試:
搞定makefile後,把硬件上的並口接到電腦打印口,接通電源;然後,打開linux的console,進到/sbin目錄下,lsmod看看有沒
parport_pc
ppdev
parport
如果沒有,要用
insmod parport_pc
insmod ppdev
insmod parport
可能這樣parport還不能加載,再insmod一次。用lsmod看看,確定都加載了,進到avrledtest-0.1目錄裡,輸入
make
順利的話avrledtest.hex就產生了,然後
make load
我make load了三四次,因為我的板子有毛病,檢查了好一會才搞好。我make load成功的畫面是console裡出現
uisp –dlpt=/dev/parpart0 –erase –dprog=dapa
Atmel AVR AT90S8515 is found.
Erasing Device
……
Uploading:flash
#####
(total 146 bytes transferred in 0.68s (216 bytes/s))
Polling:count=145,min/avg/max=3.00/3.14/12.08ms
OK,下載到芯片了,拿開並口,斷電,重新接通,片子就reset了,發光二極管一閃一閃的。點燈實驗成功了,以後就可以自己做其他的實驗了,AT90S8515的flash可以刷1000次。Cool!原來做單片機實驗也可以這麼便宜!仿真機、編程器都省了。(不過,十幾片AT90S8515多出來的錢,都可以買編程器了。開發產品還是要用仿真機、編程器)。
如果你做不出來,可以和我聯系,[email protected]。