步驟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)
強(qiáng)氰基丙烯酸酯粘合劑(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并焊接。
在底部,將黃色線跟蹤到Y(jié)ELLOW5和BLUE2,然后焊接。
在底部,將黃色線跟蹤到Y(jié)ELLOW6和BLUE4,然后焊接。
在底部,將黃色線跟蹤到Y(jié)ELLOW7和BLUE6,然后焊接。
在底部,將黃色線跟蹤到Y(jié)ELLOW2和BLUE8,然后焊接。
在底部,將黃色線跟蹤到Y(jié)ELLOW8和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的引線彎曲到Y(jié)ELLOW4,然后焊接。
[LED,OPTIONAL]在頂部,將一個(gè)150歐姆的電阻跟蹤到PINK7和PINK4并焊接。
步驟3:固件上傳
使用的代碼庫已經(jīng)過了幾手牌。它從Ralph的GIT中未經(jīng)修改。
Arduino Pro Mini使用FTDI232 USB轉(zhuǎn)TTL轉(zhuǎn)換器方便地閃存。將Mini的6P直角引腳插入轉(zhuǎn)換器的母頭。
確保在FTDI232上選擇5V設(shè)置。按照以下代碼使用下面的代碼(使用GIST鏈接)。
來自https://github.com/RalphBacon/ATTiny85_Fuse_Resetter/blob/master/ATTiny85_Reset.ino。嵌入Instructables。
# include “ Arduino.h “
//最初由Paul Willoughby創(chuàng)建03/20/2010
// www.rickety.us斜線2010/03/arduino-avr-high-voltage-serial-programmer/
//受Jeff Keyzer啟發(fā)mightyohm.com
//來自ATtiny25/45/85數(shù)據(jù)表的串行編程例程
//所需的保險(xiǎn)絲配置
# define HFUSE 0xDF //默認(rèn)值for ATtiny25/45/85
#定義 LFUSE 0x62
# define RST 13 //輸出到電平轉(zhuǎn)換器!從晶體管到引腳1的RESET
#定義 CLKOUT 12 //連接到串行時(shí)鐘輸入(SCI)引腳2
#定義 DATAIN 11 //連接串行數(shù)據(jù)輸出(SDO)引腳7
# define INSTOUT 10 //連接到串行指令輸入(SII)引腳6
# define DATAOUT 9 //連接到串行數(shù)據(jù)輸入(SDI)引腳5
# define VCC 8 //連接到VCC引腳8
//由Ralph S Bacon添加,旨在增強(qiáng)用戶體驗(yàn)
# define GND 5 //用于蜂鳴器的GND
# define PWRLED 6 //上電LED
#定義 BUZZ 7 //蜂鳴器針
int inData = 0 ; //傳入的串行字節(jié)AVR
int targetValue = HFUSE;
void setup (){
//設(shè)置HV并行編程的控制線
pinMode (VCC,OUTPUT);
pinMode ( RST,OUTPUT);
pinMode (DATAOUT,OUTPUT);
pinMode (INSTOUT,OUTPUT);
pinMode (CLKOUT,OUTPUT);
pinMode (DATAIN,OUTPUT); //在編程模式下配置為輸入
// RSB”增強(qiáng)功能“
//將蜂鳴器接地
pinMode (GND,OUTPUT);
digitalWrite (GND,LOW );
//打開電源指示燈
pinMode (PWRLED,OUTPUT);
//蜂鳴器/蜂鳴器
pinMode (BUZZ,OUTPUT);
digitalWrite (PWRLED,HIGH);
//讓用戶知道我們已經(jīng)準(zhǔn)備好了
digitalWrite (BUZZ,HIGH);
延遲( 50 );
digitalWrite (BUZZ,LOW);
// RSB結(jié)束
//根據(jù)需要初始化輸出引腳
digitalWrite (RST,HIGH) ; //電平轉(zhuǎn)換器正在反相,這將關(guān)閉12V
//以9600 bps啟動(dòng)串口:
Serial。 begin ( 9600 );
}
void loop (){
switch ( establishContact ()){
case 49 :
targetValue = HFUSE;
break ;
case 50 :
targetValue = 0x5F ;
break ;
默認(rèn):
targetValue = HFUSE;
}
Serial。 println ( “進(jìn)入編程模式 \ n ” );
//初始化引腳以進(jìn)入編程模式
pinMode (DATAIN,OUTPUT); //臨時(shí)
digitalWrite (DATAOUT,LOW);
digitalWrite (INSTOUT,LOW);
digitalWrite (DATAIN,LOW);
digitalWrite (RST,HIGH); //電平轉(zhuǎn)換器正在反相,這將關(guān)閉12V
//進(jìn)入高壓串行編程模式
digitalWrite (VCC,HIGH); //應(yīng)用VCC開始編程過程
delayMicroseconds ( 20 );
digitalWrite (RST,LOW); //打開12v
delayMicroseconds ( 10 );
pinMode (DATAIN,INPUT); //發(fā)布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 );
//默認(rèn)的RESET功能
// shiftOut2(DATAOUT,INSTOUT,CLKOUT,MSBFIRST,HFUSE,0x2C);
//這會(huì)將RST引腳1變?yōu)閍(弱)IO端口
// shiftOut2(DATAOUT,INSTOUT,CLKOUT,MSBFIRST,0x5F,0x2C);
//用戶選擇的選項(xiàng)
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 );
//確認(rèn)新的播放狀態(tài)
hFuse = readFuses ();
digitalWrite (CLKOUT,LOW) ;
digitalWrite (VCC,LOW);
digitalWrite (RST,HIGH); //關(guān)閉12v
//讓用戶知道我們已經(jīng)完成
digitalWrite (BUZZ,HIGH);
延遲( 50 );
digitalWrite (BUZZ,LOW);
delay ( 50 );
《溫泉n》 digitalWrite (BUZZ,HIGH);
延遲( 50 );
digitalWrite (BUZZ,LOW);
Serial。 println ( ” \ n 編程完成。按RESET再次運(yùn)行?!?);
while ( 1 == 1 ){};
}
int establishContact (){
Serial。 println ( “打開12伏電源/ \ n \ n 您可以啟用RST引腳(作為RST)“
“允許編程 \ n 或禁用它以將其變?yōu)椋ㄈ酰〨PIO引腳。 \ n “ );
//我們必須得到1或2才能繼續(xù)
int 回復(fù);
do {
Serial。 println ( “輸入1以啟用RST引腳(恢復(fù)正常)” );
Serial。 println ( ”輸入2以禁用RST引腳(使它成為GPIO引腳)“ );
while (!Serial。 available ()){
//等待用戶輸入
}
reply = Serial。 read ();
}
while (?。ɑ貜?fù)== 49 ||回復(fù)== 50 ));
返回回復(fù);
}
int shiftOut2 ( uint8_t dataPin, uint8_t dataPin1, uint8_t clockPin, uint8_t bitOrder, byte val,byte val1){
int i;
int inBits = 0 ;
//等到DATAIN變高
-
ATtiny
+關(guān)注
關(guān)注
3文章
128瀏覽量
19534 -
復(fù)位器
+關(guān)注
關(guān)注
0文章
5瀏覽量
6804
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論