电子工程师自制AVR手表

这是一个非常简单的项目。如果您认为这个简单的项目无需学习,那么,您错了。我们将通过记录8MHz内部时钟引导加载程序来学习如何在没有外部时钟的情况下使用ATmega328p-AU芯片。该芯片将在纽扣电池的3.2伏电压下工作。电池容量比较低,因此我们需要低功耗。

电子工程师自制AVR手表


第1部分 - 原理图

使用简单的EDA创建原理图。如果你想制作同一个项目,可以在下面找到原理图。我放置了ATmega328p-AU芯片,LED和电阻,几个电容和按钮。原理图非常简单。

电子工程师自制AVR手表

第2部分 - PCB

如您所见,设计很简单。中间有ATmega芯片,周围有12个LED,每个LED都有一个200欧姆的电阻来限制电流。我们还有一个带下拉的按钮,可以进行控制。在背面,有一个3V的纽扣电池插座的空间和一些用于SPI和UART通信的焊盘。

电子工程师自制AVR手表

ATmega328芯片必须是全新的芯片才能烧录8Mhz内部时钟引导加载程序。

电子工程师自制AVR手表

然后为每个LED焊接200欧姆电阻。使用了非常非常小的0402尺寸,所以不得不使用焊膏和热风枪来焊接这个项目的所有组件。现在对于LED来说,订购了20个红色0402 LED,但卖家只发给我10个。因此,不得不使用更大的0805尺寸,使用一些焊膏并仔细加热每个LED,这些元件从下面焊接。焊接按钮及其下拉电阻,在背面,焊接电池插座,准备烧坏引导加载程序。

3部 - 8MHz内部时钟Bootloader

为此,使用了Arduino UNO。从Arduino UNO和手表背面的SPI焊盘进行下面的连接。确保焊接GND和Vcc引脚正确。

电子工程师自制AVR手表


现在运行Arduino IDE。如果我现在去工具→电路板,我将ATmega328安装在带有8MHz内部时钟板的面包板上。现在转到示例→Arduino ISP并打开该示例。将Arduino UNO连接到PC,选择com并将代码上传到Arduino UNO。

现在,转到工具,再次确保选择8Mhz板,并将编程器从Arduino AVR ISP更改为Arduino as ISP。再去工具并选择,烧录引导加载程序,Arduino的LED将快速闪烁,现在引导加载程序被烧录到新的ATMEGA芯片。断开接线,让我们上传代码。为此,您需要一个FTDI编程器或者使用Arduino UNO UART引脚。有以下两种方法。

电子工程师自制AVR手表

第4部 - 代码

将FTDI编程器连接到UART引脚。在Arduino IDE中,将编程器更改回AVR ISP并上传8MHz内部时钟板的新代码,就是这样。我做了自己的手表。注意,在DTR引脚和复位引脚之间肯定需要100nF电容才能上传代码,因此请确保在上传之前焊接了100nF电容。

电子工程师自制AVR手表


void setup() {
//Serial.begin(9600);
PCICR |= B00000111; //enable port C o have interrupts
PCMSK1 |= B00000001; //Set pin D11 (increase button) trigger an interrupt on state change.

power_adc_disable(); // ADC converter
power_spi_disable(); // SPI
power_usart0_disable();// Serial (USART)
//power_timer0_disable();// Timer 0
power_timer1_disable();// Timer 1
power_timer2_disable();// Timer 2
power_twi_disable(); // TWI (I2C)


DDRD = B11111100; //Set pins D2-D7 as outputs
DDRB = B00111111; //Set pins D8-D13 as outputs
pinMode(A0,INPUT);
}

由于为每个LED和每小时或每分钟做出相同的指令,因此很多程序出现重复。为了降低功耗,禁用了ADC,SPI和UART通信以及定时器1和2,将定时器0激活,因为它将控制时间函数。我使用该功能来计算经过的秒数,分钟数和小时数。由于ADC被禁用,并且按钮连接到模拟输入A0,因此我使用这些寄存器激活了该引脚的中断。

在中断向量中,启用ADC,在完成小时显示后,将其禁用。每1000毫秒,将秒值增加1。并且每60秒增加分钟值和每60分钟增加小时值。

第5部 - 测试

现在测量电池电压,它是3.47伏。使用芯片的低功耗模式,在该电压下,电路板消耗大约3.5mA的电流或大约6-7mA的电流。电池容量为320mAh,因此应该持续约90小时接近4天。但是,由于电压会下降,芯片不能在低于2.7V的电压下工作,所以说它可以持续2天左右。

电子工程师自制AVR手表

所以这就是我如何制作这个简单而小巧的项目。现在知道没有外部晶体的芯片如何使用,以及如何为低功耗模式添加几行代码。我不得不说我也尝试过超低功耗模式,电流仅为0.8uA,非常低。但是,遗憾的是,在该模式下,计数器和代码的所有额外部分都无法工作,因此时间值不会增加。


分享到:


相關文章: