2015年2月12日 星期四

[Chai's AVR 學習筆記]燒錄步驟說明-使用Progisp

燒錄步驟說明
一、寫好後build完產生.hex檔案

二、開啟progisp v1.72

三、選擇ATmega16A














四、點選Auto旁邊的”…”來設定熔絲













五、Load Flash選擇.hex檔案,再點選Auto即可燒錄完成


*備註:

1.PORTB 記得空接,因為ISP會用到其中的線路

2.若晶片鎖死,產生chip enable program error,使用訊號產生器產生clock訊號(我是使用10Mhz方波,振福5Vpp)接到XTAL1,然後共接地,同時接上ISP燒錄器,即可重新解鎖重燒fuse和程式

3.不使用內部1Mhz clk,改用外部晶振的fuse設定!!



[Chai's AVR 學習筆記] 02 LED基本控制

一、實驗介紹

因為這系列教學文主要是自己作為實驗筆記,所以理論的部分就不會太多說明,大家可以自己看書
(參考[Chai's AVR 學習筆記] 01)、看datasheet

其實搞懂常用的AVR Assembly指令,還有register的操作,就可以開始實驗了


二、硬體連接
首先是這個開發板將AVR晶片的PORT重新排了一下

原本(From Datasheet):



















(轉接板)



















轉接上去後,左右PORT排列好,晶振的腳位(XTAL1XTAL2)接到開發板的12.0Mhz上,然後Analog Reference5VJTAG的腳位也引出來,供debug或燒錄使用。



三、開發板LED模塊

















我們使用JP1 插座上的8LED 接到PORTB 上面 (PB0~PB7)

由於LED為共陰極,因此AVRpinOUTPUT模式下,輸出0sink電流進去,LED燈亮,輸出1(5V)則和Vcc電位同,LED燈暗

*AVR 控制IO 概念說明
ATmega 16 共有4PORT,每個PORT 8Pin
每個PORT38-Bits Register控制


PORTB
Register
功能
Set(=1)
Clear(=0)
DDRB
Data Direction Register
控制為Input Output
輸出模式
輸入模式
PORTB
Output下輸出的值
輸出High
輸出Low
PINB
Input下讀取的值
讀到High
讀到Low
接下來會有範例示範如何存取這些register



四、程式雜記

/*
 * LED1.asm
 *
 *  Created: 2015/2/11  10:35:12
 *   Author: Stanley Chai
 */ 
 .include "m16def.inc"
 //Initial Stack for subroutine
 ldi r16,HIGH(RAMEND)
 out SPH,r16
 ldi r16,LOW(RAMEND)
 out SPL,r16

 ldi r16,0xff
 out DDRB,r16
START:
  ldi r16,0b01010101
  out PORTB,r16
  call Delay_500ms
  ldi r16,0b10101010
  out PORTB,r16
  rcall Delay_500ms
  rjmp START

 Delay_500ms:  
 //for crystal oscillator freq=12Mhz  1 clock=0.083us =>need 6*10^6 clock cycle
 // 6*10^6=255*245*96
     ldi r17,255
    LOOP0:  ldi r18,161
    LOOP1:  ldi r19,48
    LOOP2:  dec r19      //1
      brne LOOP2   //2 / 1
   //143
   dec r18      //1
   brne LOOP1   //2 / 1
   //23505
   dec r17      //1
   brne LOOP0   //2 / 1
   //5994539
  ret          //4
//brne 成立(Z!=0)時為2 clk cycle, Z=0時為1 clk cycle

2015年2月11日 星期三

[Chai's AVR 學習筆記] 01 基本環境設定

一、安裝Atmel Studio 6

http://www.atmel.com/tools/atmelstudio.aspx
(安裝檔建議放在英文路徑下再安裝)
我是選擇Atmel Studio 6.2 sp2 (build 1548) Installer – with .NET

之前安裝過的記得移除時要再額外移除
Visual Studio 2010 Shell(Isolated)、Atmel Software Framework 然后才能重新安装

否則會出現 cannot find one or more components,please reinstall 的錯誤


二、準備好開發板或相關硬體

柴哥我是使用淘寶上的開板,AVR+8051+ARM平台都可以通用的
淘寶連結



價格約新台幣一千多元,台灣露天也可以找,有類似的的板子。

這系列筆記使用Atmega 16/32L 作為主要的範例晶片

三、Atmega 16 介紹&參考資料



我之所以會選用AVR來研究,主要是玩了一年的Arduino後,想要再深一層鑽研其中的道理
而學校裡也沒有開設AVR相關的課程(目前都是和8051相關的),所以就想說自己來研究一下吧!!

其中,主要的參考資料是 

AVR Microcontroller and Embedded Systems: Using Assembly and C

我是找電子書...恩...Google一下就知道了!!
這本書寫得非常棒,雖然其中有些部分的code有小錯誤,但大致上概念相當完整
比對岸很多"教程"清楚,有點像是帶你看datasheet的感覺,加上實際的code,初學者(ex我)建議datasheet搭配著看

補充:不錯的AVR Assembly 網站 Beginner's introduction to AVR assembly language

四、Atmel Studio 6 建立專案
安裝好後,點擊圖標開啟Atmel Studio
File-> New->Project
選擇AVR Assembler Project















選擇ATmega16 (或根據自己使用的晶片選擇)
點選OK,建立專案

















在此就完成建立專案的設定了