ATTINY85保险丝复位器的制作

电子说

1.2w人已加入

描述

步骤1:材料和工具

复位器

复位器

复位器

复位器

复位器

复位器

复位器

复位器

复位器

复位器

复位器

复位器

复位器

复位器

有完整的物料清单和采购清单。

4x6cm通用PCB(1)

5V Arduino Pro Mini带公头(1)

ATTINY85-20PU(1)

8针DIL IC插座(1)

2.1 x 5.5 mm直流电源插座插座(1)

BC547 NPN晶体管(1)

1K电阻器(6)

150R电阻器(1)

5V蜂鸣器(可选)

LED (可选)

连接线(~12)

焊料和铁(1)

强氰基丙烯酸酯粘合剂(1)

12V电源(1)

RTL-232 FTDI芯片(1)

步骤2:PCB组装

复位器

复位器

复位器

复位器

复位器

下面的组件适合我的电源。电源插座和2P公头可以用螺丝端子换掉,如果它适合。..

在顶部,插入电源插座(胶水到电路板),2P插头,Arduino Pro Mini ,8P DIL插座,BC547,底部焊接。

将电源插座上的卡舌弯曲至2P引脚并焊接(+ ve至WHITE3)。

在顶部,将1K电阻跟踪到BLUE1和BLUE2并焊接。将BLUE1的引线弯曲到ORANGE9并焊接。

在顶部,将1K电阻跟踪到BLUE3和BLUE3并焊接。将BLUE3的引线弯曲到ORANGE10并焊接。

在顶部,将1K电阻跟踪到BLUE5和BLUE6并焊接。将BLUE5的引线弯曲到ORANGE11并焊接。

在顶部,将1K电阻跟踪到BLUE7和BLUE8并焊接。将BLUE7的引线弯曲到ORANGE12并焊接。

在顶部,将1K电阻跟踪到BLUE9和BLUE10并焊接。将BLUE9的引线弯曲到ORANGE13并焊接。

在顶部,将1K电阻跟踪到WHITE5和WHITE6并焊接。将WHITE5的引线弯曲到WHITE3并焊接。

在底部,将黄色线跟踪到YELLOW5和BLUE2,然后焊接。

在底部,将黄色线跟踪到YELLOW6和BLUE4,然后焊接。

在底部,将黄色线跟踪到YELLOW7和BLUE6,然后焊接。

在底部,将黄色线跟踪到YELLOW2和BLUE8,然后焊接。

在底部,将黄色线跟踪到YELLOW8和ORANGE8,然后焊接。

在底部,将黑色线跟踪到WHITE2和WHITE4,然后焊接。

在底部,将红线描绘成WHITE1和WHITE3,然后焊接。

在底部,追踪从WHITE8到BLUE10的引线,然后焊接。

在底部,追踪从WHITE7到WHITE5的引线,并焊接。

在底部,追踪从WHITE9到WHITE4的引线,并焊接。

在底部,将黑色线跟踪到WHITE4和YELLOW4,然后焊接。

在底部,将红线描绘成WHITE7和YELLOW1,然后焊接。

[蜂鸣器,可选]在顶部,将蜂鸣器插入PINK1和PINK2,焊接在底部。

[蜂鸣器,可选]在底部,将红线跟踪到PINK1和PINK3,然后焊接。

[蜂鸣器,可选]在底部,将黑色线跟踪到PINK2和PINK5,然后焊接。

[LED,OPTIONAL]在顶部,将LED插入PINK6(短阴极)和PINK7(长阳极),焊接在底部。

[LED,OPTIONAL]在底部,将PINK6的引线弯曲到YELLOW4,然后焊接。

[LED,OPTIONAL]在顶部,将一个150欧姆的电阻跟踪到PINK7和PINK4并焊接。

步骤3:固件上传

复位器

使用的代码库已经过了几手牌。它从Ralph的GIT中未经修改。

Arduino Pro Mini使用FTDI232 USB转TTL转换器方便地闪存。将Mini的6P直角引脚插入转换器的母头。

确保在FTDI232上选择5V设置。按照以下代码使用下面的代码(使用GIST链接)。

来自https://github.com/RalphBacon/ATTiny85_Fuse_Resetter/blob/master/ATTiny85_Reset.ino。嵌入Instructables。

# include “ Arduino.h “

// AVR高压串行编程器

//最初由Paul Willoughby创建03/20/2010

// www.rickety.us斜线2010/03/arduino-avr-high-voltage-serial-programmer/

//受Jeff Keyzer启发mightyohm.com

//来自ATtiny25/45/85数据表的串行编程例程

//所需的保险丝配置

# define HFUSE 0xDF //默认值for ATtiny25/45/85

#定义 LFUSE 0x62

# define RST 13 //输出到电平转换器!从晶体管到引脚1的RESET

#定义 CLKOUT 12 //连接到串行时钟输入(SCI)引脚2

#定义 DATAIN 11 //连接串行数据输出(SDO)引脚7

# define INSTOUT 10 //连接到串行指令输入(SII)引脚6

# define DATAOUT 9 //连接到串行数据输入(SDI)引脚5

# define VCC 8 //连接到VCC引脚8

//由Ralph S Bacon添加,旨在增强用户体验

# define GND 5 //用于蜂鸣器的GND

# define PWRLED 6 //上电LED

#定义 BUZZ 7 //蜂鸣器针

int inData = 0 ; //传入的串行字节AVR

int targetValue = HFUSE;

void setup (){

//设置HV并行编程的控制线

pinMode (VCC,OUTPUT);

pinMode ( RST,OUTPUT);

pinMode (DATAOUT,OUTPUT);

pinMode (INSTOUT,OUTPUT);

pinMode (CLKOUT,OUTPUT);

pinMode (DATAIN,OUTPUT); //在编程模式下配置为输入

// RSB”增强功能“

//将蜂鸣器接地

pinMode (GND,OUTPUT);

digitalWrite (GND,LOW );

//打开电源指示灯

pinMode (PWRLED,OUTPUT);

//蜂鸣器/蜂鸣器

pinMode (BUZZ,OUTPUT);

digitalWrite (PWRLED,HIGH);

//让用户知道我们已经准备好了

digitalWrite (BUZZ,HIGH);

延迟( 50 );

digitalWrite (BUZZ,LOW);

// RSB结束

//根据需要初始化输出引脚

digitalWrite (RST,HIGH) ; //电平转换器正在反相,这将关闭12V

//以9600 bps启动串口:

Serial。 begin ( 9600 );

}

void loop (){

switch ( establishContact ()){

case 49 :

targetValue = HFUSE;

break ;

case 50 :

targetValue = 0x5F ;

break ;

默认:

targetValue = HFUSE;

}

Serial。 println ( “进入编程模式 \ n ” );

//初始化引脚以进入编程模式

pinMode (DATAIN,OUTPUT); //临时

digitalWrite (DATAOUT,LOW);

digitalWrite (INSTOUT,LOW);

digitalWrite (DATAIN,LOW);

digitalWrite (RST,HIGH); //电平转换器正在反相,这将关闭12V

//进入高压串行编程模式

digitalWrite (VCC,HIGH); //应用VCC开始编程过程

delayMicroseconds ( 20 );

digitalWrite (RST,LOW); //打开12v

delayMicroseconds ( 10 );

pinMode (DATAIN,INPUT); //发布DATAIN

delayMicroseconds ( 300 );

//编程模式

int hFuse = readFuses ();

//如果还没有我们想要的值,则写入hfuse 0xDF (允许在引脚1上使用RST)

if (hFuse!= targetValue){

延迟( 1000 );

Serial。 print ( “写作hfuse as “ ); Serial。 println (targetValue,HEX);

shiftOut2 (DATAOUT,INSTOUT,CLKOUT,MSBFIRST, 0x40 , 0x4C );

//默认的RESET功能

// shiftOut2(DATAOUT,INSTOUT,CLKOUT,MSBFIRST,HFUSE,0x2C);

//这会将RST引脚1变为a(弱)IO端口

// shiftOut2(DATAOUT,INSTOUT,CLKOUT,MSBFIRST,0x5F,0x2C);

//用户选择的选项

sh iftOut2 (DATAOUT,INSTOUT,CLKOUT,MSBFIRST,targetValue, 0x2C );

shiftOut2 (DATAOUT,INSTOUT,CLKOUT,MSBFIRST, 0x00 , 0x74 );

shiftOut2 (DATAOUT,INSTOUT ,CLKOUT,MSBFIRST, 0x00 , 0x7C );

}

//写lfuse

延迟( 1000 );

Serial。 println ( “写lfuse \ n ” );

shiftOut2 (DATAOUT,INSTOUT,CLKOUT,MSBFIRST, 0x40 , 0x4C );

shiftOut2 (DATAOUT,INSTOUT,CLKOUT,MSBFIRST,LFUSE, 0x2C );

shiftOut2 (DATAOUT,INSTOUT,CLKOUT,MSBFIRST, 0x00 , 0x64 );

shiftOut2 (DATAOUT,INSTOUT,CLKOUT,MSBFIRST, 0x00 , 0x6C );

//确认新的播放状态

hFuse = readFuses ();

digitalWrite (CLKOUT,LOW) ;

digitalWrite (VCC,LOW);

digitalWrite (RST,HIGH); //关闭12v

//让用户知道我们已经完成

digitalWrite (BUZZ,HIGH);

延迟( 50 );

digitalWrite (BUZZ,LOW);

delay ( 50 );

《温泉n》 digitalWrite (BUZZ,HIGH);

延迟( 50 );

digitalWrite (BUZZ,LOW);

Serial。 println ( ” \ n 编程完成。按RESET再次运行。“ );

while ( 1 == 1 ){};

}

int establishContact (){

Serial。 println ( “打开12伏电源/ \ n \ n 您可以启用RST引脚(作为RST)“

“允许编程 \ n 或禁用它以将其变为(弱)GPIO引脚。 \ n “ );

//我们必须得到1或2才能继续

int 回复;

do {

Serial。 println ( “输入1以启用RST引脚(恢复正常)” );

Serial。 println ( ”输入2以禁用RST引脚(使它成为GPIO引脚)“ );

while (!Serial。 available ()){

//等待用户输入

}

reply = Serial。 read ();

}

while (!(回复== 49 ||回复== 50 ));

返回回复;

}

int shiftOut2 ( uint8_t dataPin, uint8_t dataPin1, uint8_t clockPin, uint8_t bitOrder, byte val,byte val1){

int i;

int inBits = 0 ;

//等到DATAIN变高

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

全部0条评论

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

×
20
完善资料,
赚取积分