怎样使用ATMEGA328P-PU制作经典的Arduino克隆

电子说

1.3w人已加入

描述

步骤1:开始

Arduino

上周,我决定使用ATMEGA328P-PU制作经典的Arduino克隆。我似乎是如此的轻松和快速,但对我来说却是一个非常糟糕的惊喜:我向便宜的ATMEGA328-PU(非P !!)表示了非微微功耗。

区别:这款IC需要更多的能量,并且与arduino ISP Bootloader不兼容(请参阅错误的签名)。所以我有点失望。

我在网上寻找一种引导这种电路的方法:找到了很多方法,但是没有一个可以在Arduino 1.0.6上运行。所以我测试了我的一个:所有这些技巧之间的某种混合。我现在将其提供给您。..

步骤2:要使用的原理图和引导程序:

Arduino

Arduino

您可以在:

https://www.arduino.cc/zh/Tutorial/ArduinoISP

上轻松找到它我使用了一个原型板上连接照片上的所有电缆(板上的组件都是装饰性的)。

然后,您必须执行以下步骤:

1-在您的arduino中下载著名的示例“ arduinoISP”,然后关闭Arduino 1.0.6

2-备份arduino/hardware/tools/etc/avrdude.conf并执行以下更改(在Notepad ++中,对于我来说是8080行):

#----------------------------- -------------------------------

#ATmega328

#- -------------------------------------------------- --------

部分

id =“ m328”;

desc =“ ATmega328”;

has_debugwire =是;

flash_instr = 0xB6、0x01、0x11;

eeprom_instr = 0xBD,0xF2、0xBD,0xE1、0xBB,0xCF,0xB4、0x00,

0xBE,0x01、0x B6、0x01、0xBC,0x00、0xBB,0xBF,

0x99、0xF9、0xBB,0xAF;

stk500_devcode = 0x86;

#avr910_devcode = 0x;

签名= 0x1e 0x95 0x14; #请勿更改

pagel = 0xd7;

bs2 = 0xc2;

chip_erase_delay = 9000;

pgm_enable =“ 1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1”,

“ xxxxxxxxxxxxxxxx”;

chip_erase =“ 1 0 1 0 1 1 0 0 1 0 0 xxxxx“,

” xxxxxxxxxxxxxxxx“;

超时= 200;

stabdelay = 100;

cmdexedelay = 25;

synchloops = 32;

bytedelay = 0;

pollindex = 3;

pollvalue = 0x53;

predelay = 1;

postdelay = 1;

pollmethod = 1;

pp_controlstack =

0x0E ,0x1E,0x0F,0x1F,0x2E,0x3E,0x2F,0x3F,

0x4E,0x5E,0x4F,0x5F,0x6E,0x7E,0x6F,0x7F,

0x66、0x76, ,0x77、0x6A,0x7A,0x6B,0x7B,

0xBE,0xFD,0x00、0x01、0x00、0x00、0x00、0x00;

hventerstabdelay = 100;

progmodedelay = 0;

锁存周期= 5;

togglevtg = 1;

poweroffdelay = 15;

resetdelayms = 1;

resetdelayus = 0;

hvleavestabdelay = 15;

已重置elay = 15;

chiperasepulsewidth = 0;

chiperasepolltimeout = 10;

programfusepulsewidth = 0;

programfusepolltimeout = 5;

programlockpulsewidth = 0;

programlockpolltimeout = 5;

ocdrev = 1;

内存“ eeprom”

已分页=否;

page_size = 4;

大小= 1024;

min_write_delay = 3600;

max_write_delay = 3600;

readback_p1 = 0xff;

readback_p2 = 0xff;

read =“ 1 0 1 0 0 0 0 0”,

“ 0 0 0 xxx a9 a8“,

” a7 a6 a5 a4 a3 a2 a1 a0“,

” oooooooo“;

写=” 1 1 0 0 0 0 0 0“,

” 0 0 0 xxx a9 a8“,

” a7 a6 a5 a4 a3 a2 a1 a0“,

” iiiiiiii“;

loadpage_lo =“ 1 1 0 0 0 0 0 0 1”,

“ 0 0 0 0 0 0 0 0 0”,

“ 0 0 0 0 0 0 a1 a0“,

” iiiiiiii“;

writepage =” 1 1 0 0 0 0 0 1 0“,

” 0 0 xxxx a9 a8“ ,

“ a7 a6 a5 a4 a3 a2 0 0”,

“ xxxxxxxx”;

模式= 0x41;

延迟= 20;

块大小= 4;

readsize = 256;

;

内存“闪存”

页面=是;

大小= 32768;

page_size = 128;

num_pages = 256;

min_write_delay = 4500;

max_write_delay = 4500;

readback_p1 = 0xff;

readback_p2 = 0xff;

read_lo =“ 0 0 1 0 0 0 0 0”,

“ 0 0 a13 a12 a11 a10 a9 a8“,

” a7 a6 a5 a4 a3 a2 a1 a0“,

” oooooooo“;

read_hi =” 0 0 1 0 1 0 0 0 “,

” 0 0 a13 a12 a11 a10 a9 a8“,

” a7 a6 a5 a4 a3 a2 a1 a0“,

” oooooooo“;

loadpage_lo =“ 0 1 0 0 0 0 0 0 0”,

“ 0 0 0 xxxxx”,

“ xx a5 a4 a3 a2 a1 a0a”,

“ iiiiiiii”;

loadpage_hi =“ 0 1 0 0 1 0 0 0 0”,

“ 0 0 0 xxxxx”,

“ xx a5 a4 a3 a2 a1 a0”,

“ iiiiiiii”;

writepage =“ 0 1 0 0 1 1 0 0”,

“ 0 0 a13 a12 a11 a10 a9 a8”,

“ a7 a6 xxxxxx”,

“ xxxxxxxx”;

模式= 0x41;

延迟= 6;

块大小= 128;

读取大小= 256 ;

;

内存“ lfuse”

size = 1;

min_write_delay = 4500;

max_write_delay = 4500;

读取=“ 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0”,

“ xxxxxxxxoooooooo”;

写入=“ 1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0”,

“ xxxxxxxxiiiiiiii”;

;

内存“ hfuse”

size = 1;

min_write_delay = 4500;

max_write_delay = 4500;

read =“ 0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0“,

” xxxxxxxxoooooooo“;

写=” 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0“,

“ xxxxxxxxiiiiiiii”;

;

内存“浪费”

size = 1;

min_write_delay = 4500;

max_write_delay = 4500;

读取=“ 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0”,

“ xxxxxxxxxxxxxooo “;

写入=” 1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0“,

” xxxxxxxxxxxxxiii“;

;

内存“锁定”

size = 1;

min_write_delay = 4500;

max_write_delay = 4500;

REA d =“ 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0”,

“ xxxxxxxxxxoooooo”;

写入=“ 1 0 1 0 1 1 0 0 1 1 1 xxxxx“,

” xxxxxxxx 1 1 iiiiii“;

;

内存“校准”

size = 1;

读取=“ 0 0 1 1 1 0 0 0 0 0 0 xxxxx”,

“ 0 0 0 0 0 0 0 0 oooooooo”;

;

内存“签名”

size = 3;

读取=“ 0 0 1 1 0 0 0 0 0 0 0 xxxxx”,

“ xxxxxx a1 a0 oooooooo”;

;

;

部分父级“ m328”

id =“ m328p “;

desc =” ATmega328P“;

#signature = 0x1e 0x95 0x0F; #将其更改为:

签名= 0x1e 0x95 0x14;

ocdrev = 1;

;

#--------------- -------------------------------------------------- -----------------------------

#------------- -------------------------------------------------- -------------------------------

我给您最初的 avrdude.conf ,然后将修改后的文件保存到2个存档中。

3-运行ARDUINO 1.0.6

4-板Arduino Duemilanove或Diecemilia

5-选择合适的处理器:Atmega328

6-选择Arduino的ISP

7-刻录引导程序

8-关闭ARDUINO 1.0.6,将avrdude替换为您备份的原始文件。

9-,现在您必须更改文件arduino/hardware/arduino/avr/boards.txt,以使用这种电路显示新的电路板名称。我叫它: Arduino Uno w/ATmega328(非P)

您必须在其中插入的文本:

### ################################################## #########

uno328.name = Arduino Uno带ATmega328(非P)

uno328.upload.tool = avrdude

uno328.upload.protocol = Arduino的

uno328.upload.maximum_size = 32256

uno328.upload.speed = 115200

uno328.bootloader.low_fuses = 0xff的

uno328.bootloader.high_fuses =写0xDE

uno328.bootloader.extended_fuses = 0×05

uno328.bootloader.path = optiboot

uno328 .bootloader.file = optiboot_atmega328.hex

uno328.bootloader.unlock_bits = 0x3F的

uno328.bootloader.lock_bits =为0x0F

uno328.build.mcu = atmega328

uno328.build.f_cpu = 16000000L

uno328.build.core = Arduino的

uno328.build.variant =标准

保存

我将文件放在提供的存档中。

10-现在,您可以使用ARDUINO 1.0.6对带有Arduino uno的UNO板进行编程卡或atmega328-pu/16MHz具有在我的示例中,带有USBasp的 Arduino Uno带ATmega328(非P)卡。

步骤3:示意图克隆示例的实例:由Atmega328-PU Non P制成!课程

Arduino

此卡用于我的一个项目:6轴机器人。它需要强大的5V DC电源电压。

在图片上,我很容易在克隆的顶部安装了一个ETHERNET屏蔽,您可以看到USBasp下载相应的程序。

第4步:结论:

我希望它会帮助一些购买了错误但最便宜的atmega328-PU non P的人!

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分