打印
[Atmel]

【秀出我的Atmel设计方案】+ATMEGA8A-PU

[复制链接]
5633|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mars4zhu|  楼主 | 2014-11-17 19:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mars4zhu 于 2014-11-17 19:52 编辑


由于有段时间迷恋于非常容易变成的ARduino单片机开发环境,也自己在淘宝上买了小板子,但是网上看到有人用面包板做的arduino最小系统,于是自己手痒也做了一块。记了应用笔记。

Arduino采用的都是Atmel的AVR系列单片机, 从Atmega8--Atmega2560, 基本上每种flash配置的都丝毫不拉下。




采用面包板搭建Arduino最小系统——Arduino-Nano开发板


目  录






插图索引




表格索引





1 概述
本文描述了采用面包板、双列直插元件、ATMEGA8A-PU芯片,搭建一个兼容Arduino的最小系统,命名为Arduino-Nano开发板。
Arduino-Nano已通过USB-ASP下载器将arduinobootloader下载至其中,因此日后运行只需要点击Arduino IDEupload,就可以运行编译后的sketch
1.1. 芯片性能
Arduino-Nano基于ATMEGA8A-PU芯片,具有如下特征:
l CPU性能
l 130 Powerful Instructions – Most Single-clock Cycle Execution
l 32 x 8 General Purpose Working Registers
l Fully Static Operation
l Up to 16MIPS Throughput at 16MHz
l On-chip 2-cycle Multiplier
l 存储空间
l 8KBytes of In-System Self-programmable Flash program memory,
l 512Bytes EEPROM
l 1KByte Internal SRAM
l 外设
l Two 8-bit Timer/Counters with Se parate Prescaler, one Compare Mode
l One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode
l Real Time Counter with Separate Oscillator
l Three PWM Channels
l 6-channel 10-bit Accuracy ADC in PDIP package
l Byte-oriented Two-wire Serial Interface
l Programmable Serial USART
l Master/Slave SPI Serial Interface
l Programmable Watchdog Timer with Separate On-chip Oscillator
l On-chip Analog Comparator
l 23 Programmable I/O Lines
芯片引脚定义如下:
图 11  ATMEGA8引脚和对应的arduino引脚定义图
1.2. 采用的软硬件平台与工具。
硬件工具:Arduino-Nano(见第2BOM列表 )、USB-ASP
软件工具:Arduino IDEFritzingProgISP
仪器仪表工具:万用表(BEST DT9205A)、示波器(Tek MSO-4104)、USBSER串口(CH341A)。





2 原理图与BOM
本着最小系统的原则,即电路最简单、连线最少、采用元件最少,根据ATMEGA8A-PUDatasheet描述,能省则省。
2.1. 原理图
采用最简单的电路结构,根据datasheet描述,在编程CKOPT熔丝后(CKOPT=0)可启用XTAL1XTAL2引脚自带的内部电容,故省略外部电容。采用Fritzing软件绘制示意图如下:
图 21  Arduino-Nano的原理图与面包板示意图
2.2. 元件清单
总结ArduinoBOM如下:
表 21 Arduino-NanoBOM元件清单

元件名


数量


规格/型号


备注


预计价格¥


IC1


1


ATMEGA8A-PU





6-8


R1


1


330Ω/直插型





0.05


LED1


1


Any Color


Uled1 + Iled1*R1 = 5V


0.5


XTAL1


1


16MHz/直插型





0.5


面包板


1


常见





2


插针线


若干





针脚适用于面包板


1


BOM成本总计:¥12



3 安装与运行
根据原理图安装后,实物图如下:
图 31 Arduino-Nano安装后的实物图
3.1. 设置ATMEGA8A的熔丝
由于Arduino对于频率和bootloader等设置有要求,因此必须对ATMEGA8A芯片的熔丝(Fuse)进行设置,才能利用Arduino开发。
熔丝设置必须采用编程器,本次使用的是编程器是USB-ASP,对应的编程软件是ProgISP
ATMEGA8A的出厂熔丝设置是Lfuse = 0xE1Hfuse = 0xD9,如下:
图 32 ATMEGA8A出厂熔丝设置
Arduino要求的熔丝设置为Lfuse = 0xDFHfuse = 0xCA,注意在修改熔丝设置中,前往不能讲SPIENRSTDISBL改变,否则无法使用串行编程器下载而只能采用特制的高压并行下载器下载。
图 33 ATMEGA8Aarduino熔丝设置
ProgISP软件中设置了上述熔丝后,即可开展开发工作。
3.2. 利用USB-ASP下载Arduino编译后的Sketch
打开Arduino-IDETools->Board选择Arduino NG or olderTools->Processor选择ATmega8Tools->Serial选择连接的串口号COMxTools->Programmer选择你所使用的编程器(本例采用的是USB-ASP)。
为测试多种功能,编写代码如下:

  int led = 9;           // the pin that the LED is attached to
  int pushButton = 2;
  int brightness = 0;    // how bright the LED is
  int fadeAmount = 1;    // how many points to fade the LED by  
  String inputString = "";         // a string to hold incoming data
   
  // the setup routine runs once when you press reset:
  void setup() {               
    // initialize the digital pin as an output.
    Serial.begin(9600);

    pinMode(pushButton, INPUT_PULLUP);

    pinMode(led, OUTPUT);   
  
    inputString.reserve(100);  
  }
  
  // the loop routine runs over and over again forever:
  void loop() {
   
   
      analogWrite(led, brightness);   
  
    // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;
  
    // reverse the direction of the fading at the ends of the fade:
    if (brightness == 0 || brightness == 255) {
      fadeAmount = -fadeAmount ;
      
      digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(1000);               // wait for a second
      digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
      delay(1000);
  
      int sensorValue = analogRead(A0);
      float voltage = sensorValue * (5.0 / 1023.0);
      // print out the value you read:

      Serial.print("Hello, SB!, voltage = ");
      Serial.print(voltage);
      
      int buttonState = digitalRead(pushButton);
      // print out the state of the button:
      Serial.print(", buttonState = ");
      Serial.println(buttonState);
  
      unsigned long currentMillis = millis();
      Serial.print("Current Mills = ");
      Serial.println(currentMillis);
    }     
    // wait for 30 milliseconds to see the dimming effect   
    delay(10);                           
  }
  
  
  void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n') {
      Serial.print("R:  ");
      Serial.println(inputString);
      inputString = "";
    }
  }
}

编译(verify)成功后,选择File->Upload Using Programmer,即可通过编程器将编译后的hex文件写入ATMEGA8A芯片。此时可以看到LED动作,同时串口可以接受并发送各种信号和字符串。
3.3. 下载arduinobootloader
为方便可以不用编程器而通过arduinoUART下载。只需要将arduinobootloader烧入芯片中即可。
ProgISP中,选择
arduino-1.5.2\hardware\arduino\avr\bootloaders\atmega8\ATmegaBOOT-prod-firmware-2009-11-07.hex,下载到ATMEGA8芯片中,后续即可使用arduinoupload功能下载hex文件。只需在点击upload后将芯片复位即可。


版本历史(Revision History


版本号


发布时间


内容


A0


2014-02-25


初次发布。


采用面包板搭建Arduino最小开发板——Arduino-Nano.pdf (528.72 KB)

相关帖子

沙发
ddllxxrr| | 2014-11-17 20:17 | 只看该作者
不错顶个

使用特权

评论回复
板凳
HuSir| | 2014-11-17 21:42 | 只看该作者
不错

使用特权

评论回复
地板
jancey| | 2014-11-21 15:16 | 只看该作者
楼主太给力了,感谢分享!

使用特权

评论回复
5
dorpan| | 2017-6-17 18:01 | 只看该作者
超级赞! 学习了!

使用特权

评论回复
6
eee987| | 2020-1-28 12:53 | 只看该作者
收藏下来,慢慢看

使用特权

评论回复
7
lihui567| | 2020-1-31 16:14 | 只看该作者
写的很详细

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

139

帖子

4

粉丝