电子说
步骤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变高
全部0条评论
快来发表一下你的评论吧 !