前言
我们日常如果是走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的连线方法如下
我没有预留出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
上一篇:基于ATMEGA8的Arduino Nano(UNO)开发板
下一篇:电调板维修之更换atmega8a主控芯片
推荐阅读最新更新时间:2024-11-13 08:56
设计资源 培训 开发板 精华推荐
- HK32F030M实验板
- 使用 NXP Semiconductors 的 ISP1161 的参考设计
- stc 51单片机快速烧录器
- DC1317A-C,使用 LT1952EGN-1 的演示板,Vin=18V 至 72V,Vout=12V at 10A 单开关同步正向控制器
- DC2263A-B,用于 LTC3887EUJ (DCR SENSE) 2 相 PMBU 降压转换器的演示板,7V = VIN = 18V,Vout = 0.8V 至 1.8V @ 50A
- EVB-EN5319QI,EN5319QI 1.5A 同步 DC/DC 转换器评估板
- ADR5044A 4.096 Vout精密微功率可调电压源典型应用
- 具有主备用电池的 LTC3106IFE 太阳能电池输入的典型应用电路
- LTC3119IUFD 3.3V、1.5MHz 宽输入稳压器的典型应用电路
- 风向传感器(基于KTH5701角度检测)