步驟1:計(jì)數(shù)問(wèn)題
使用ATtiny84或ATtiny85時(shí),很可能使用自己設(shè)計(jì)的試驗(yàn)板或電路。與Arduino Uno不同,標(biāo)題上的插腳編號(hào)與Arduino IDE中的插腳編號(hào)匹配,您必須將“微小的東西”連接到實(shí)際的物理插腳。
軟件中的物理引腳和引腳編號(hào)非常不同。例如,在ATtiny84上,物理引腳1用于Vcc,而在軟件中,數(shù)字引腳1實(shí)際上是物理引腳12。您必須從上下文中了解正在討論的是哪個(gè)引腳(物理或軟件)(提示,大多數(shù)參考文獻(xiàn))。用于軟件引腳)。在解釋過(guò)程中,最好參考圖表。
為了增加混亂,在相同的物理位置,模擬引腳可以具有與數(shù)字引腳不同的數(shù)字。 ATtiny85就是這種情況。例如,物理引腳7既是數(shù)字引腳2,又是模擬引腳1。數(shù)字引腳1是物理引腳6,它沒(méi)有模擬輸入。 (我只希望芯片設(shè)計(jì)人員為這可能造成的混亂為公司節(jié)省很多錢。)
這種情況是由于芯片設(shè)計(jì)人員而不是Arduino軟件引起的。引腳號(hào)基于端口B和ADC的映射方式。引腳7是PB2(數(shù)字引腳2)和ADC1(模擬引腳1)。
步驟2:使用Arduino軟件出現(xiàn)毛刺
在具有Arduino v1.0 +的Mac上,如果輸入“ A1”的變量語(yǔ)句,則會(huì)出現(xiàn)錯(cuò)誤“未聲明A1”,請(qǐng)參見(jiàn)下面的代碼。奇怪的是,在編程Arduino Uno時(shí),模擬引腳引用為“ A1”,“ A2”等。
int AnalogPin1 = 1時(shí),這將產(chǎn)生錯(cuò)誤;//而是選擇A1,物理引腳7
int val = 0;
void loop()
{val = AnalogRead(analogPin1) ;//這給出了物理引腳7上A1的模擬讀數(shù)。}
這是令人困惑的事情;您還可以調(diào)出數(shù)字引腳1。
int digitalPin1 = 1;//這是物理引腳6
void setup()
{pinMode(digitalPin1,OUTPUT);//將引腳1聲明為輸出}
void loop()
{digitalWrite(digitalPin1,HIGH);//開(kāi)啟}
如果您的Windows或Mac帶有Arduino 1.5.6,則可以改用“ A1”并減少它與數(shù)字pin1之間的混淆。但是,如果您習(xí)慣了另一種方法,它應(yīng)該可以繼續(xù)工作。
步驟3:使用SoftwareSerial進(jìn)行通信
假設(shè)您想使用ATtiny85從其模擬引腳發(fā)送讀數(shù),您將如何處理?它具有有限的串行通信。 Arduino附帶有一個(gè)軟件庫(kù),可讓您向草圖添加串行通信,即SoftwareSerial。它很容易添加,但是它確實(shí)占用程序空間,您必須聲明一些細(xì)節(jié)。
對(duì)于下面的ATtiny85示例,刻錄引導(dǎo)程序以使用8 MHz內(nèi)部晶體。否則,晶體需要相同的串行引腳。
首先,必須通過(guò)在開(kāi)始時(shí)使用#include將庫(kù)包含在草圖中。
#include“ SoftwareSerial.h”
然后為該函數(shù)創(chuàng)建變量并調(diào)用該函數(shù)。
const int Rx = 3;//這是物理引腳2
const int Tx = 4;//這是物理引腳3
SoftwareSerial mySerial(Rx,Tx);
在setup()中,輸入引腳是輸入還是輸出,并指定波特率
void setup()
{pinMode(Rx,INPUT);
pinMode(Tx,OUTPUT);
mySerial。開(kāi)始(9600);//以9600位/秒的速度發(fā)送串行數(shù)據(jù)}
調(diào)用串行打印語(yǔ)句時(shí),添加“ my”。
void loop()
{ mySerial.println(VAL);//將值發(fā)送到串行監(jiān)視器^ Cmd-M}
現(xiàn)在,打開(kāi)串行監(jiān)視器以查看來(lái)自‘tiny’的值。
相同的指令可以應(yīng)用于ATtiny84。使用該芯片,您可以擁有更多的引腳來(lái)支持外部時(shí)鐘和串行通信。如果這樣做,則需要為串行線選擇其他引腳。
步驟4:示例代碼。 ATtiny85_SoftwareSerial_Test
//對(duì)于ATtiny85打開(kāi)LED和模擬讀取
//RESET |針1針8 | 5V
//3/A3 |針2針7 | 2/A1
//4/A2 |引腳3引腳6 | 1/PWM
//GND |引腳4引腳5 | 0/PWM
//對(duì)于SoftwareSerial,您必須設(shè)置為內(nèi)部時(shí)鐘//以釋放物理引腳2和3。
//這將使物理引腳6上的LED閃爍,讀取引腳7上的模擬值,并將
//模擬值發(fā)送到串行監(jiān)視器以進(jìn)行顯示。
#include“ SoftwareSerial.h”
const int LED = 1;//這是LED的物理引腳6
const int ANTENNA = 2;//這是物理引腳7,將導(dǎo)線連接為天線
const int Rx = 3;//這是物理引腳2
const int Tx = 4;//這是物理引腳3
SoftwareSerial mySerial(Rx,Tx);
int val = 0;//用于存儲(chǔ)天線讀數(shù)的變量
void setup()
{
pinMode(LED,OUTPUT);//告訴Arduino LED是輸出
pinMode(Rx,INPUT);
pinMode(Tx,OUTPUT);
mySerial.begin(9600);//以9600位/秒的速度發(fā)送串行數(shù)據(jù)
}
void loop()
{
digitalWrite(LED,HIGH) ;//打開(kāi)LED燈
延遲(500);
digitalWrite(LED,LOW);//關(guān)閉
delay(500);
val = AnalogRead(ANTENNA);//閱讀天線
mySerial.println(val);//將值發(fā)送到串行監(jiān)視器^ Cmd-M
digitalWrite(LED,HIGH);//打開(kāi)LED燈
delay(10); digitalWrite(LED,LOW);//關(guān)閉
delay(500);
}
步驟5:示例代碼,ATtiny84_SoftwareSerial
//對(duì)于ATtiny84,打開(kāi)LED和模擬讀取
//5V |針1針14 | Gnd
//10/X1 |引腳2引腳13 | 0/A0
//9/X2 |引腳3引腳12 | 1/A1
//RESET |引腳4引腳11 | 2/A2
//8 |引腳5引腳10 | 3/A3
//A7/7 |引腳6引腳9 | 4/A4
//A6/6 |引腳7引腳8 | 5/A5
//對(duì)于SoftwareSerial,您可以使用外部時(shí)鐘,因?yàn)槲锢硪_2和3是免費(fèi)的。
#include“ SoftwareSerial.h”
const內(nèi)置LED = 5;//這是LED的物理引腳8
const int ANTENNA = 1;//這是物理引腳12,將導(dǎo)線連接為天線
const int Rx = 7;//這是物理引腳6
const int Tx = 6;//這是物理引腳7
SoftwareSerial mySerial(Rx,Tx);
int val = 0;//用于存儲(chǔ)天線讀數(shù)的變量
void setup()
{
pinMode(LED,OUTPUT);//告訴Arduino LED為輸出
pinMode(Rx,INPUT);
pinMode(Tx,OUTPUT);
mySerial.begin(9600);//以9600位/秒的速度發(fā)送串行數(shù)據(jù)
}
void loop()
{
digitalWrite(LED,HIGH) ;//打開(kāi)LED燈
delay(500);
digitalWrite(LED,LOW);//關(guān)閉
delay(500);
val = AnalogRead(ANTENNA);//讀取天線
mySerial.println(val);//將值發(fā)送到串行監(jiān)視器^ Cmd-M
digitalWrite(LED,HIGH);//打開(kāi)LED燈
delay(10);
digitalWrite(LED,LOW);//關(guān)閉
delay(500);
}
第6步:電氣問(wèn)題
我發(fā)現(xiàn)串行通信只能在公共電源和地上工作。實(shí)際上,這意味著從USB –串行通信設(shè)備獲取電源。 USB –串行通信設(shè)備可以是Arduino Uno板,獨(dú)立的USB –串行板或AVR編程器,例如Reactor Core三合一編程器。
接線就像您期望的那樣。 Arduino/USB設(shè)備的電源打開(kāi)了“微型”電源(引腳1表示“ 84”,引腳8表示“ 85”)。相同的連接方式也適用于接地(“ 84”為引腳14,“ 85”為引腳4)。您分配給Rx的引腳(示例代碼中的引腳3)連接到Arduino上的Rx線,引腳0/Rx。對(duì)分配給Tx的引腳(示例代碼中的引腳4)執(zhí)行相同的操作,將其連接到Arduino上的Tx線,引腳1/Tx。
我已閱讀有關(guān)通過(guò)串行連接串聯(lián)添加電阻的信息。 。我認(rèn)為這不是必需的。 FTDI沒(méi)有列出使用電阻器連接FT232RL USB/串行芯片的信息。從“小工具”到USB/串行設(shè)備,它們都應(yīng)該是TTL。如果要格外小心,可以添加200 – 2K歐姆電阻。
如果有人知道這樣做的充分理由,請(qǐng)發(fā)布。
我還看到在Uno板上的復(fù)位和接地之間增加了一個(gè)電容器。我不確定這應(yīng)該做什么。它可以使Uno板上的ATmega328P保持復(fù)位狀態(tài),以便Uno不會(huì)使用串行線。我認(rèn)為跳線可能會(huì)起作用。
如果您使用Arduino Uno橋接與計(jì)算機(jī)的串行通信,則需要加載一個(gè)不會(huì)干擾的草圖。如果串行監(jiān)視器上出現(xiàn)奇怪的字符,則表明信號(hào)損壞。您只需將串行線隔離為“微小”即可。如果您使用的是Reactor Core編程器,請(qǐng)斷開(kāi)串行跳線。
步驟7:其他
您是否必須使用內(nèi)部時(shí)鐘進(jìn)行串行通信?否,對(duì)于Attiny85,可以使用另外兩個(gè)引腳代替外部時(shí)鐘所需的引腳3和4。如果兩個(gè)引腳用于串行,兩個(gè)引腳用于外部晶振,那么除非禁用復(fù)位,否則只有一個(gè)空閑引腳。這就是為什么最好使用內(nèi)部時(shí)鐘的原因。它將釋放兩個(gè)引腳。
-
芯片
+關(guān)注
關(guān)注
460文章
52529瀏覽量
441292 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192264
發(fā)布評(píng)論請(qǐng)先 登錄
無(wú)法將固件刻錄到PFlash的原因?怎么解決?
請(qǐng)問(wèn)如何將DLP lightcrafter連接成為普通的投影儀使用?
使用插件將Excel連接到MySQL/MariaDB

在實(shí)際的電氣連接中,是直接將Exposed Thermal Pad連接到AGND嗎?
請(qǐng)問(wèn)如何將單端輸出運(yùn)放和真差分ADC連接?
開(kāi)源項(xiàng)目!基于 Arduino 的 MIDI 架子鼓
基于Arduino的串口通信項(xiàng)目
Arduino程序:實(shí)現(xiàn)SD NAND(貼片sd卡)的讀寫功能
將ADS8320/ADS8325連接到TMS320C6711 DSP

將ADS8401/ADS8411連接到TMS320C6713 DSP

將ADS8383連接到TMS320C6711 DSP

labview與西門子SMART通訊并上傳至MYSQL數(shù)據(jù)庫(kù)在什么情況下會(huì)導(dǎo)致PLC觸點(diǎn)抖動(dòng)
如何將LVDS/OLDI橋接到HDMI/DVI

求助,如何將定制的2級(jí)引導(dǎo)加載程序上傳到指定的2級(jí)引導(dǎo)區(qū)?
AWR294x主引導(dǎo)加載程序和輔助引導(dǎo)加載程序

評(píng)論