画个板子玩玩最便宜的Arduino,Atmega8A 的使用

发布者:psi33最新更新时间:2022-07-20 来源: csdn关键字:Arduino  Atmega8A  快速开发 手机看文章 扫描二维码
随时随地手机看文章

前言

我们日常如果是走Arduino这种快速开发的方向,那肯定会用那几种处理器Atmega328P,Atmega32U4,这里的话后者相比前者提供了原生的全速USB2.0支持。


而Atmega的系列如果往328P之前看,还有Atmega8,Atmega48,Atmega88,Atmega168,Atmega162,AtmegaA8U2等等


这一次这一次我就试着玩了一下这一块处理器,但是和以往一样,也都遇到了一些设计上的问题。那么整个流程是什么样的?一起来看一下

这一款处理器具有以下特点

No. of Pins 28

CPU 8-Bit AVR

Operating Voltage 2.7 to 5.5 V

Program Memory 8K

Program Memory Type Flash

RAM 1K Bytes

EEPROM 512 Bytes

ADCNumber of ADC Channels 10-Bit6 in PDIP, 8 in TQFP and QFN

Comparator 1

PWM Channels 3

Oscillator up to 16 MHz

Timer (3) 16-Bit Timer (1)8-Bit Timer (2)

Packages (3) PDIP (28-Pins)TQFP (32-Pins)QFN (32)

Power Up Timer Yes

I/O Pins 23

Manufacturer Microchip

SPI Yes

I2C Yes

Watchdog Timer Yes

Brown out Detection (BOD) Yes

USART Yes

Sleep Modes 5

Minimum Operating Temperature -55 C

Maximum Operating


Temperature


125 C


这一款有多个封装,我购买的是Atmega8A-AU,和老早前的Atmega8相比较没有管脚差别,只要一些输出电流差异

 

设计和最终打样

 


在基本功能上我设计了四个模块,主控,降压,按键,串口,和以前相比这样的设计也让板子大了很多。


按键设计:四个轻触开关,上拉接VCC


串口设计:CH340G,缺点是需要外接晶振,优点是便宜


稳压电路:作为最容易使用的降压电路,AMS1117缺点是压差不能超过10V,也就是理论上电压输入不能超过15V,但是因为品质所以最大耐受10V左右


主控:主控用的是Atmega8A-16AU,晶振实际选用的是16Mhz的,这个就按照具体芯片来变化吧


旧版的原理图


新版,经过查错修改后的版本,主要改了CH340G部分和按键以及PWR灯



完成原理图后我快速开始着手PCB的设计,按键配置在左侧,然后配了两条VCC和GND的线路用于外接设备,因为空间紧俏,所以我把CH340G芯片放在下层,如果把电阻器改成0402或许布线可以更方便许多,但是焊接难度就大太多了。


最终效果,大概这样子,丝印部分我在AltiumDesign中进行了调整,接口设计了5组,分别是:


CH340G的接口,包括有RTS和DTR下载电路,用于自动复位一些芯片


USB接口,连接到CH340G上面


DC输入接口,最大9V


Atmega8的所有引脚

经过一些时间后我拿到了板子,并进行了焊接,焊接方法试了一些新的做法比如回流焊,不过我在早些时候是没有用回流焊接0806器件经验,所以锡膏明显涂多了点儿。

涂了锡膏后,把零件一个一个摆放上去

板子的测试

我从仓库里面掏出了一个USB-A公口,然后焊接上2.54插针,继而就可以用杜邦线连接到新造的Atmega8A板子上


打开设备管理器可以看到,CH340G正常的运行了,可以被USB接口识别出来


默认的情况下,在Atmega8内已经有烧写一个出厂的测试程序

这个出厂的测试程序应该还带有LED闪烁,而在串口这一边,会提示3个选项,d,t,e,其中e会回复可能是固件时间的日期,而t没有任何回复,e会回复d++++++|pr然后串口就不再有回应了

不过这个程序不知道是不是抽测,我做了两块,另一块就没有出现这些代码,只能后再测试了。


然后我发现RX和TX灯不亮,检查后发觉到手VCC没有加上,所以设计时候DRC检查以及引脚的检测真的很重要。(下图是加上后) 另外还有一个电容器在初版设计时候和按键撞了,但还好工艺不错没有连一起。

如何烧录Bootloader

我想要在Arduino IDE上用UART烧写,而实现这个功能的前提是有安装Bootloader,常用的烧写工具有AVR ISP,USBtinyISP等等

但是,因为我没有AVRISP这类烧写器,现在买还要再过好几天,那么有没有更简便的方案?

所以我想着使用Arduino UNO板子来烧写程序,这个操作在七八年前还是很流行的不过我其实还没干过,很有趣的一个事情是,我还找到了专门的烧写AVR芯片的盾板,插在Arduino UNO上面就可以。

打开Arduino IDE,然后选择文件---示例,选这个ArduinoISP

烧写到UNO里面,事实上只要是AVR的MCU应该都可以,只是说32U4这类自带USB的会有一些区别。

事实上这个程序还有一些提示功能,比如说,在7,8,9Pin上都设计有指示灯功能。7是表示ISP正在受到上位机的控制(也就是我们的电脑),8表示出现了错误,9是烧写中


// Put an LED (with resistor) on the following pins:

// 9: Heartbeat   - shows the programmer is running

// 8: Error       - Lights up if something goes wrong (use red if that makes sense)

// 7: Programming - In communication with the slave

和我们要烧录的Atmega8A的连线方法如下

image.png

我没有预留出ISP的接口,因为在整个使用中实在是非常少用。

在连线完成后,当前我们的IDE选项是这样的

需要把开发板改成Atmega8,可以选择Arduino NG or older,但是只支持两种ATmega的芯片。

而如果要使用48,88等那就要用到MiniCore这个。

如何获得MiniCore?在附加开发版管理器网址中加入   https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json  

之后开始烧写吧,如果出现这个提示,那么说明一切OK,恭喜你这个现在可以正常的使用了

Atmega8A引脚号 Arduino中编号

PD1 1

PD2 2

PD3 3

PD4 4

PD5 5

PD6 6

PD7 7

PD8 8

PB1 9

PB2 10

PB3 11

PB4 12

PB5 13

PC0 14

PC1 15

PC2 16

PC3 17

PC4 18

PC5 19


需要注意的是,MiniCore和官方的Arduino NG在Bootloader以及avrdude的配置有所不同,所以烧写时候不能通用,换句话说就是Arduino NG的Bootloader烧写的Atmega8不能被MiniCore的烧写配置识别


MiniCore可以有更多配置,而Arduino NG的配置会有更好的兼容性,具体的由个人进行抉择

遭遇串口不能烧写的问题

当然我这边一切并不是那么顺利,首先遇到的问题就是串口烧写不能正常的识别

考虑到Bootloader是在复位后首先启动,所以如果烧写肯定要先复位,那么,这大概率就是由于复位电路设计上的原因了,一个方法是连续的按RESET按键。

当然这样效率很低,所以试着学学官方设计,Arduino UNO设计了一个0.1uf的电容器接到Reset(PC6)和串口转USB芯片的DTR脚位上来自动进行复位,也就是信号过来后会有一个脉冲。

而我们初版设计上并没有,所以把DTR和RESET拿一个短线接起来,中间串联一个0.1uf的电容器,另外就是把复位电路进行调整,去除掉这一个0.1uf的C1电容器。


修改前

修改后

除了这边的修改,另外就是简化掉CH340G这边的三极管电路,因为我发现是没必要的,直接输出就可以了。


修改前

修改后

因为第一版的板子已经打出来了,所以我需要简单修改一下背面电路,错位焊接C1电容器,然后再飞一条线到CH340G上面就可以了

通过这样的修改后,自动复位并且上传的功能可以正常的使用了。

试了一下串口也是一切正常的很


打板前检查的必要性

虽然现在串口没问题了,但是,在LED的点亮上却有点毛病,不知道为什么PB1只有很低的电压,然后我发现为什么了,DRC没检查、网络链接没检查就送去打板子....

一共查出了四五个错误的地方,初版VA0只能这样结束了

经过飞线调整后,可以正常使用


最终测试代码

#define LED_BUILTIN PB1

#define BT1 PD5

#define BT2 PD6

#define BT3 PD7

#define BT4 PB1

 

// the setup function runs once when you press reset or power the board

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(115200);

  Serial.println("System ONLINE");

  Serial.println("Atmega8 ,I am.");

  pinMode(BT1, INPUT);

  pinMode(BT2, INPUT);

  pinMode(BT3, INPUT);

  pinMode(BT4, INPUT);

}

 

// the loop function runs over and over again forever

void loop() {

  //  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)

  //  delay(1000);                       // wait for a second

  //  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

  //  delay(1000);                       // wait for a second

  //  Serial.println("Atmega8 ,I am.");

  if (!digitalRead(BT1))

  {

    delay(10);

    if (!digitalRead(BT1))

      Serial.println("BT1 pressed");

    while (!digitalRead(BT1));

  }

  if (!digitalRead(BT2))

  {

    delay(4);

    if (!digitalRead(BT2))

      Serial.println("BT2 pressed");

    while (!digitalRead(BT2));

  }

  if (!digitalRead(BT3))

  {

    delay(4);

    if (!digitalRead(BT3))

      Serial.println("BT3 pressed");

    while (!digitalRead(BT3));

  }

  if (!digitalRead(BT4))

  {

    delay(4);

    if (!digitalRead(BT4))

      Serial.println("BT4 pressed");

    while (!digitalRead(BT4));

  }

}


几个要点:

1。一定要去确认USB的线路,D+和 D-是否有很好的连接


2.多数情况下,你一定要去确认一下按键是否正常的连接在默认开路位置


3.如果说你要使用16Mhz一定要用MiniCore这个,而不是官方的Arduino NG

关键字:Arduino  Atmega8A  快速开发 引用地址:画个板子玩玩最便宜的Arduino,Atmega8A 的使用

上一篇:基于ATMEGA8的Arduino Nano(UNO)开发板
下一篇:电调板维修之更换atmega8a主控芯片

推荐阅读最新更新时间:2024-11-13 08:56

Atmega8a的采样(查询法)
实现了ADC0和ADC1的切换采样,每个通道采样10次,累计满10次取一次平均,然后输出数据 ======================================== 在main.c中: int main(){ //此处都是初始化的函数 //........................... while (1) { ad_calc(); _delay_ms(50); PORTD |=(1 5); _delay_ms(50); PORTD &=~(1 5); } } =======================================
[单片机]
<font color='red'>Atmega8a</font>的采样(查询法)
Arduino单片机使用和开发问题记录
1、将程序上传到板子时Arduino IDE提示“avrdude: stk500_getsync(): not in sync: resp=0x00” 网上查遇到这个问题的人比较多,有说驱动问题的,有说IDE设置问题的。具体到我遇到的这个情况,原因是板子上插了RF24无线传输模块(也许线还没有插对),拔掉以后再上传程序就正常了。 2、nRF24L01+无线透传使用问题 Arduino官网上似乎推荐Mirf这个库,遇到一个问题,接收端运行几分钟后停止响应;试了另外一个RF24库,遇到传输不稳定的问题,一时没有解决,还是回到Mirf了,之前的停止响应问题没有再出现。 这个论坛关于无线透传的讨论不少,虽然用arduino的不多。 Mi
[单片机]
<font color='red'>Arduino</font>单片机使用和<font color='red'>开发</font>问题记录
RS提供新型Arduino云无线板卡
全球领先的电子与维修产品高端服务分销商Electrocomponents plc(LSE:ECM)旗下的贸易品牌RS Components(RS)目前正在备货Arduino云。Arduino云将Arduino开源体系结构与Linux系统整合在一块开发板,是Arduino家族中首个无线产品成员。 Arduino云将现有的Arduino Leonardo与一个嵌入式Atheros AR9331 Wi-Fi系统级芯片(SoC)集成到一起。Arduino Leonardo基于Atmel的ATmega32u4 8位微控制器,SoC则运行OpenWRT的MIPS GNU/Linux版本——Linino。此板的主要特色是桥接库, 通过将所有网
[嵌入式]
家用机器人也要模块化,开始DIY吧!
位于东京的设计工作室Flower Robotics正在设想一个美好的未来:像台灯和花盆之类的普通家用摆设会突然焕发生机在家里四处走动。而就在今年初,这家公司便揭示了一款叫做Patin的概念设备,它是一个可以通过特殊附件执行多种功能的服务性机器人平台。 与只执行特定任务的机器人(如扫地机器人)不同,Patin由一个带有上层甲板的移动底座组成,用户可以在上甲板链接不同的模块,而这些不同的需求附件将给予这款机器人新的功能。所以用户只需一个Patin机器人就可完成多种任务,而非以往需要数个不同的机器人各自做特定的任务。 以其人体模特机器人Palette闻名的Flower Robotics一直在研发原型底座,并计划在2016年将此机
[嵌入式]
Nordic LTE-M/NB-IoT和BLE集成模块助力Avnet Asia实现IoT产品快速开发
Nordic Semiconductor宣布全球领先的技术解决方案提供商安富利亚洲(Avnet Asia)已选择Nordic集成有LTE-M/NB-IoT调制解调器和GPS的nRF9160低功耗系统级封装(SiP),以及nRF52840蓝牙5.2/低功耗蓝牙(Bluetooth LE)先进多协议片上系统(SoC),为其“AVT9152”模块提供蜂窝IoT和短距离无线连接。 26mm x 28mm大小的AVT9152模块据信是支持LTE-M/NB-IoT、低功耗蓝牙和GPS的最小模块,可以集成到一系列嵌入式应用中,包括Covid-19接触者追踪、物流和资产跟踪、自动售货机、自助服务终端、医疗设备和智能楼宇自动化等应用。 No
[物联网]
Nordic LTE-M/NB-IoT和BLE集成模块助力Avnet Asia实现IoT产品<font color='red'>快速</font><font color='red'>开发</font>
AVR单片机系列之-Atmega8A编程入门
前言: 最近由于开始设计无刷直流电机电子调速器,参考网上的一些资料,选用了Atmega8A-AU单片机作为主控芯片。 该芯片采用8位结构,最高主频16MHz(内部振荡器则8MHz),可实现2.7V-5.5V供电,单个IO口最大可支持40mA的拉/灌电流,更难能可贵的是,价格十分便宜,我在淘宝上面购买才3块多一片。 之前从未使用过AVR系列的单片机,于是一开始编程也遇到了一些障碍,直至最终编写好第一个程序,整个过程在此记录下来,供以后参考。 一、下载器 首先我在百度上和阿莫论坛里面查询了一下AVR单片机的下载器,然后又在淘宝上面搜索对应的型号,发现目前国内主流的是ISP串口下载器,也就是和51单片机的下载器原理一样。于是乎在淘宝上面
[单片机]
AVR单片机系列之-<font color='red'>Atmega8A</font>编程入门
基于Arduino Uno平台的跌倒检测报警系统设计
本设计将加速度传感器ADXL345、GPS和GSM模块SIM908与Arduino Uno平台结合在一起,通过加速度传感器采集人体三轴加速度值,实时检测人体体态,完成对人体跌倒的检测和报警。整体设计成本低、可靠性高、算法复杂度 低、检测准确度高和可扩展的优点,具有很高的实用性,可以满足对人体跌倒检测报警的需要。 人类生活水平的不断提高,人口老龄化成为一个全球性的发展趋势。目前,我国已经进入了老龄化社会,老年人的身心健康问题得到人们更多的关注。 老年人因生理结构衰老和身体机能减退,发生意外跌倒的概率和频率非常高。跌倒可以导致老年人身体组织挫伤、骨折甚至危及生命,并从心理上给老年人造 成了压力和恐惧感。实际上很多伤亡并不是由于意外
[单片机]
基于<font color='red'>Arduino</font> Uno平台的跌倒检测报警系统设计
ARM免预付授权费拼IoT 台IP厂商推强化版快速开发方案
ARM日前宣布其DesignStart计划再升级,旗下Cortex-M0及Cortex-M3免预付授权费,将要加速迈向1兆连网装置之路。而熟悉半导体相关业者表示,对于台系IC设计与IP矽智财业者来说,对产业的影响可说是如人饮水、冷暖自知。据了解,如晶心科等台系IP业者,也会于近期推出在价格、产品效能更优化的强化版快速开发(Quick-start)方案因应,如更小体积、更低功耗的M801相关方案,也希望客户了解价格并非是唯一考量,如何兼顾产品效能来加速IC设计客户量产时程,找出最适合解决方案才是重点。   ARM DesignStart 计划扩充阵容,纳入ARM Cortex-M3处理器,IC设计客户如MCU微控制器业者无需预付授权
[半导体设计/制造]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved