0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣僅使用3個(gè)Arduino引腳控制8個(gè)輸出數(shù)量的倍數(shù)所需的硬件和代碼

454398 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-20 11:09 ? 次閱讀

步驟1:移位寄存器簡(jiǎn)介

怎樣僅使用3個(gè)Arduino引腳控制8個(gè)輸出數(shù)量的倍數(shù)所需的硬件和代碼

什么是移位寄存器:

移位寄存器的基本目的是增加微控制器的輸入/輸出引腳數(shù)。所使用的移位寄存器可以是用于增加輸出引腳的74HC595,而74HC164是用于增加輸入引腳的移位寄存器。需要注意的最重要一點(diǎn)是,可以將多個(gè)移位寄存器級(jí)聯(lián)。因此,微控制器僅使用3個(gè)引腳就可以將8個(gè)電源控制到n個(gè)輸出/輸入的電源。這種級(jí)聯(lián)也可以稱為移位寄存器的菊花鏈。

移位寄存器的引腳:

移位寄存器最重要的引腳如下:

串行輸入(PIN 14):

用于移位移位寄存器下一個(gè)輸入的引腳。

RCK(引腳12):

此引腳被拉高時(shí),將移位寄存器。

串行時(shí)鐘(PIN11):

需要拉高以將輸出設(shè)置為新的移位寄存器值,必須在SRCLK之后立即將其拉高。

QH‘(引腳9):

該引腳的意義在于可以連接到下一個(gè)移位寄存器的串行輸入(PIN14),并且菊花鏈可以增加。

移位寄存器的工作原理

可以將移位寄存器與數(shù)據(jù)游戲進(jìn)行比較沿路口移動(dòng)。當(dāng)移位寄存器的RCK引腳變?yōu)镠IGH時(shí),它們將移至另一個(gè)結(jié)點(diǎn),因此可以使用以下原理將數(shù)據(jù)傳輸?shù)饺我鈹?shù)量的移位寄存器。移位寄存器可以使用串行時(shí)鐘(PIN 11)保持這些值。每當(dāng)串行時(shí)鐘引腳變高時(shí),RCK引腳就會(huì)變低,依此類推,直到傳輸所需的數(shù)據(jù)為止。

我提供了一個(gè)123D電路圖,描述了移位寄存器與Arduino的連接。以及移位寄存器工作所需的基本連接。提供的第二個(gè)123d電路圖顯示了第二個(gè)移位寄存器的連接,依此類推。

菊花鏈移位寄存器:

可以增加移位寄存器通過(guò)將QH’引腳與第二個(gè)串行輸入的移位寄存器(PIN 14)連接。因此,輸出的數(shù)量?jī)H限于可以連接的移位寄存器的數(shù)量。選件隨附的代碼可連接多達(dá)40個(gè)以上的寄存器。我還提供了模塊的實(shí)時(shí)圖以及使用這些模塊與arduino的連接。

步驟2:模塊的組裝和焊接-1

正如我前面提到的,此Instructable具有不同的方法組裝,我使用分步焊接教程。我希望它的作用與僅提供電路并自行完成一樣有用。將來(lái),我將嘗試使其成為蝕刻過(guò)的PCB,以便使焊接變得更加容易。第一張圖片顯示了完成的模塊。

無(wú)論如何,所生產(chǎn)的模塊將是4 x 3 cm的正方形,并且可以通過(guò)菊花鏈方式鏈接更多的模塊,并且可以根據(jù)需要增加輸入量。因此,讓我們開(kāi)始組裝吧?。。?!

步驟1:

第一步是插入LED。

注1:

請(qǐng)注意,應(yīng)通過(guò)電源檢查led條形圖的位置,以便正確插入。來(lái)自arduino的5V電壓就足夠了,但請(qǐng)不要長(zhǎng)時(shí)間連接,否則LED會(huì)短路。名為 Note1 的圖顯示了我檢查模塊的方法。請(qǐng)忽略圖中的電阻,直接將其連接。

第2步:

檢查后,如圖所示插入1k電阻。需要這個(gè)電阻是因?yàn)樗鼮樽罱K的LED提供了電阻。其次是接地的4k7電阻矩陣。有關(guān)電阻的位置,請(qǐng)參見(jiàn)該圖。我在圖中顯示了10k,但請(qǐng)忽略它。

注2:

該注意事項(xiàng)非常重要,因?yàn)橹挥性贚ED亮起時(shí),電阻矩陣接地引腳(?)才應(yīng)正確連接到接地軌。這很關(guān)鍵,因?yàn)槿绻仃嚪崔D(zhuǎn),LED將會(huì)變暗。

第3步:

因此,如圖所示,將電阻矩陣的菱形端(?)插入接地端。然后焊接矩陣的引腳。您也可以通過(guò)連接電源來(lái)仔細(xì)檢查L(zhǎng)ED。

步驟3:模塊的組裝和焊接-2

注3:

在插入主IC之前,只需使用指南針或刀片進(jìn)行切割即可??梢允褂?a href="http://ttokpm.com/v/tag/796/" target="_blank">萬(wàn)用表中的連續(xù)性測(cè)試儀檢查切口。

第4步:

IC如圖所示并且使用DIP插座,以便在發(fā)生任何故障時(shí)可以更換IC。最后焊接接頭。

步驟5:

移位寄存器可以控制8個(gè)LED,但是模塊有10個(gè)LED因此,額外的兩個(gè)是由兩個(gè)公頭控制的,它們可以由Arduino控制。焊接接頭。

第6步:

需要按圖所示連接跳線。連接器的一端連接到LED條形圖,另一個(gè)連接到74HC595的第15引腳。

第7步:

接下來(lái)是電源供應(yīng)您需要如圖所示連接兩個(gè)接頭并焊接接頭。

第8步:

現(xiàn)在插入兩個(gè)如圖所示,以下引腳上的公頭連接器。然后焊接接頭。它們可以連接到Arduino或下一個(gè)模塊。

注意4:

將圖中所示的銷釘焊接到接地導(dǎo)軌上。這比連接跳線要容易。

步驟4:模塊的組裝和焊接-3

第9步:

將面包板電線作為跨接線連接起來(lái),如圖所示并將它們焊接在底部。跳線用于將Vcc發(fā)送到IC電源引腳。

步驟10:

焊接1uF電容器如圖所示,使負(fù)極側(cè)焊接到電路板的接地軌,正極軌到達(dá)引腳。只需參考先前步驟中的電路圖即可。

第11步:

使用剪刀剪切模塊并進(jìn)行剪切盡可能緊湊。然后您就完成了您的第一個(gè)模塊的準(zhǔn)備工作。

只需重復(fù)這些步驟即可創(chuàng)建所需的任意數(shù)量的模塊,并以菊花鏈的方式增加它們的輸入量。 LED的輸出可以發(fā)送到繼電器板上,并且僅使用Arduino的三個(gè)引腳就可以驅(qū)動(dòng)任意數(shù)量的繼電器。最后一張圖顯示了完成的模塊,到目前為止,我已經(jīng)制作了3個(gè)模塊。下一步,我們測(cè)試完成的模塊。

步驟5:檢查模塊

一旦完成模塊,您就可以使用此簡(jiǎn)單代碼檢查完成的模塊。該代碼顯示了led追蹤器和其他一些有趣的模式。此代碼基本上是用于檢查模塊并確保其正常工作的。

代碼:

int data = 11;

int clock = 12;

int latch = 8;

// the animation sequence for the LED display

// first column is the LED status in binary form, second column is the timing in milliseconds

byte patterns[48] = {

B00000001, 100,

B00000010, 100,

B00000100, 100,

B00001000, 100,

B00010000, 100,

B00100000, 100,

B01000000, 100,

B10000000, 100,

B01000000, 100,

B00100000, 100,

B00010000, 100,

B00001000, 100,

B00000100, 100,

B00000010, 100,

B00000001, 100,

B00011000, 200,

B00100100, 200,

B01000010, 200,

B10000001, 200,

B01000010, 200,

B10100101, 200,

B01011010, 200,

B00100100, 200,

B00011000, 200

};

// variables used for status

int pattern_index = 0;

int pattern_count = sizeof(patterns) / 2;

void setup()

{

// setup the serial output if needed

Serial.begin(9600);

// define the pin modes

pinMode( data, OUTPUT);

pinMode(clock, OUTPUT);

pinMode(latch, OUTPUT);

}

void loop()

{

// activate the patterns

digitalWrite(latch, LOW);

shiftOut(data, clock, MSBFIRST, patterns[pattern_index*2]);

digitalWrite(latch, HIGH);

// delay for the timing

delay(patterns[(pattern_index*2) + 1]);

// move to the next animation step

pattern_index ++;

// if we‘re at the end of the animation loop, reset and start again

if (pattern_index 》 pattern_count) pattern_index = 0;

}

如果一切順利,那么您將獲得與給定視頻相同的輸出。在下一步中,我將向您展示如何菊花鏈它們以及僅使用Arduino的3個(gè)引腳控制24個(gè)以上輸出的代碼。

步驟6:主代碼

如圖所示連接電路。然后上傳給定的代碼,該代碼可用于控制寄存器的各個(gè)引腳。該代碼專門(mén)用于控制繼電器。它們也可以用于制造大型LED追逐器,您只需要根據(jù)應(yīng)用程序更改代碼即可。

首先,我將解釋根據(jù)移位寄存器的數(shù)量需要更改的基本行。顧名思義,具有

//How many of the shift registers - change this

#define number_of_74hc595s 1

的代碼行應(yīng)提供您正在使用的移位寄存器模塊的數(shù)量。該程序最多只能有40個(gè)以上的移位寄存器。

setRegisterPin(2, HIGH);

setRegisterPin(3, HIGH);

setRegisterPin(4, LOW);

setRegisterPin(5, HIGH);

setRegisterPin(7, HIGH);

writeRegisters();

這行代碼是u可以用來(lái)控制移位寄存器引腳的主要功能。 “ writeRegisters()”行是為了將數(shù)據(jù)發(fā)送到移位寄存器而需要調(diào)用的函數(shù)。假設(shè)您需要控制第三個(gè)移位寄存器模塊的第24引腳,則代碼為

setRegisterPin(24, HIGH);

假設(shè)您需要重置引腳,以使所有引腳均變低,然后功能將變?yōu)?/p>

clearRegisters();

最后,下面給出了控制引腳的總體代碼,我還附帶了該程序的代碼。因此,在此代碼中,以下引腳設(shè)置為高電平,并且可以使用清除寄存器功能將其復(fù)位。我使用3個(gè)移位寄存器模塊,因此如果使用2個(gè)移位寄存器,則必須更改代碼。如果一切順利,輸出將如上面的視頻所示。使用此基本思想,您可以設(shè)計(jì)出色的微控制器項(xiàng)目。

代碼:

int SER_Pin = 11; //pin 14 on the 75HC595

int RCLK_Pin = 8; //pin 12 on the 75HC595

int SRCLK_Pin = 12; //pin 11 on the 75HC595

//How many of the shift registers - change this

#define number_of_74hc595s 3

//do not touch

#define numOfRegisterPins number_of_74hc595s * 8

boolean registers[numOfRegisterPins];

void setup(){

pinMode(SER_Pin, OUTPUT);

pinMode(RCLK_Pin, OUTPUT);

pinMode(SRCLK_Pin, OUTPUT);

//reset all register pins

clearRegisters();

writeRegisters();

}

//set all register pins to LOW

void clearRegisters(){

for(int i = numOfRegisterPins - 1; i 》= 0; i--){

registers[i] = LOW;

}

writeRegisters();

}

//Set and display registers

//Only call AFTER all values are set how you would like (slow otherwise)

void writeRegisters(){

digitalWrite(RCLK_Pin, LOW);

for(int i = numOfRegisterPins - 1; i 》= 0; i--){

digitalWrite(SRCLK_Pin, LOW);

int val = registers[i];

digitalWrite(SER_Pin, val);

digitalWrite(SRCLK_Pin, HIGH);

}

digitalWrite(RCLK_Pin, HIGH);

}

//set an individual pin HIGH or LOW

void setRegisterPin(int index, int value){

registers[index] = value;

}

void loop(){

setRegisterPin(0, LOW);

setRegisterPin(1, HIGH);

setRegisterPin(2, LOW);

setRegisterPin(3, HIGH);

setRegisterPin(4, LOW);

setRegisterPin(5, HIGH);

setRegisterPin(6, LOW);

setRegisterPin(7, HIGH);

setRegisterPin(8, LOW);

setRegisterPin(9, HIGH);

setRegisterPin(10, LOW);

setRegisterPin(11, HIGH);

setRegisterPin(12, LOW);

setRegisterPin(13, HIGH);

setRegisterPin(14, LOW);

setRegisterPin(15, HIGH);

setRegisterPin(16, LOW);

setRegisterPin(17, HIGH);

setRegisterPin(18, LOW);

setRegisterPin(19, HIGH);

setRegisterPin(20, LOW);

setRegisterPin(21, HIGH);

setRegisterPin(22, LOW);

setRegisterPin(23, HIGH);

writeRegisters();

delay(500);

clearRegisters();

setRegisterPin(0, HIGH);

setRegisterPin(1, LOW);

setRegisterPin(2, HIGH);

setRegisterPin(3, LOW);

setRegisterPin(4, HIGH);

setRegisterPin(5, LOW);

setRegisterPin(6, HIGH);

setRegisterPin(7, LOW);

setRegisterPin(8, HIGH);

setRegisterPin(9, LOW);

setRegisterPin(10, HIGH);

setRegisterPin(11, LOW);

setRegisterPin(12, HIGH);

setRegisterPin(13, LOW);

setRegisterPin(14, HIGH);

setRegisterPin(15, LOW);

setRegisterPin(16, HIGH);

setRegisterPin(17, LOW);

setRegisterPin(18, HIGH);

setRegisterPin(19, LOW);

setRegisterPin(20, HIGH);

setRegisterPin(21, LOW);

setRegisterPin(22, HIGH);

setRegisterPin(23, LOW);

writeRegisters();

delay(500);

clearRegisters();

}

步驟7:LED追逐者很有趣!

如果您已達(dá)到此測(cè)試,則說(shuō)明您已成功完成模塊。因此,讓我們做一個(gè)LED追逐器不僅是為了娛樂(lè),而且是為了進(jìn)一步理解代碼。下面給出了代碼以嘗試使用新模塊。我上傳了我的LED追逐器的視頻。

代碼:

int SER_Pin = 11; //pin 14 on the 75HC595

int RCLK_Pin = 8; //pin 12 on the 75HC595

int SRCLK_Pin = 12; //pin 11 on the 75HC595

//How many of the shift registers - change this

#define number_of_74hc595s 3

//do not touch

#define numOfRegisterPins number_of_74hc595s * 8

boolean registers[numOfRegisterPins];

void setup(){

Serial.begin(9600);

pinMode(SER_Pin, OUTPUT);

pinMode(RCLK_Pin, OUTPUT);

pinMode(SRCLK_Pin, OUTPUT);

//reset all register pins

clearRegisters();

writeRegisters();

}

//set all register pins to LOW

void clearRegisters(){

for(int i = numOfRegisterPins - 1; i 》= 0; i--){

registers[i] = LOW;

}

writeRegisters();

}

//Set and display registers

//Only call AFTER all values are set how you would like (slow otherwise)

void writeRegisters(){

digitalWrite(RCLK_Pin, LOW);

for(int i = numOfRegisterPins - 1; i 》= 0; i--){

digitalWrite(SRCLK_Pin, LOW);

int val = registers[i];

digitalWrite(SER_Pin, val);

digitalWrite(SRCLK_Pin, HIGH);

}

digitalWrite(RCLK_Pin, HIGH);

}

//set an individual pin HIGH or LOW

void setRegisterPin(int index, int value){

registers[index] = value;

}

void loop(){

for(int i = 0;i 《 numOfRegisterPins;i++)

{

setRegisterPin(i , HIGH);

Serial.println(i);

writeRegisters();

delay(70);

clearRegisters();

}

clearRegisters();

for(int i = 24; i 》 0; i--)

{

setRegisterPin(i , HIGH);

writeRegisters();

Serial.println(i);

delay(70);

clearRegisters();

}

clearRegisters();

}

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 移位寄存器
    +關(guān)注

    關(guān)注

    2

    文章

    258

    瀏覽量

    22212
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6461

    瀏覽量

    186524
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    放大倍數(shù)指的是物體的什么的放大倍數(shù)

    放大倍數(shù)是一個(gè)物理學(xué)和光學(xué)領(lǐng)域中常見(jiàn)的概念,它描述了通過(guò)顯微鏡、望遠(yuǎn)鏡或其他放大設(shè)備觀察物體時(shí),物體的尺寸相對(duì)于其原始尺寸的放大程度。 一、放大倍數(shù)的定義 放大倍數(shù)(Magnifica
    的頭像 發(fā)表于 07-30 14:15 ?1352次閱讀

    示波器衰減倍數(shù)與探頭衰減倍數(shù)之間的關(guān)系

    示波器衰減倍數(shù)與探頭衰減倍數(shù)之間是電子測(cè)量中一個(gè)重要而又容易混淆的概念。在本文中,我們將探討示波器衰減倍數(shù)與探頭衰減倍數(shù)之間的關(guān)系,以及它們
    的頭像 發(fā)表于 07-29 11:40 ?899次閱讀
    示波器衰減<b class='flag-5'>倍數(shù)</b>與探頭衰減<b class='flag-5'>倍數(shù)</b>之間的關(guān)系

    ESP32C3使用GPIO2,8,9任意一個(gè)引腳輸出低電平時(shí)功耗會(huì)增加,怎么解決?

    如題,這三個(gè)引腳當(dāng)我使用其中任意一個(gè)輸出低電平時(shí)功耗會(huì)增加,大概幾百ua左右。輸出高電平則一切正常,未見(jiàn)功耗增加。其他
    發(fā)表于 06-05 06:36

    STM8S003F3上電后怎么默認(rèn)I/O引腳輸出低電平?

    MCU型號(hào):STM8S003F3。 問(wèn)題描述:一個(gè)空程序的MCU上電后輸出高電平,通過(guò)程序配置I/O引腳輸出低電平,但這樣的話會(huì)有一
    發(fā)表于 05-10 08:23

    如何用Arduino制作一個(gè)簡(jiǎn)易自動(dòng)喂魚(yú)器

    制作硬件電路了。 第2步:電路圖和程序 我們可以將電路分為兩部分,第一部分是步進(jìn)電機(jī),另一部分是超聲波傳感器。 將步進(jìn)電機(jī)連接到驅(qū)動(dòng)器,然后根據(jù)下面的說(shuō)明將驅(qū)動(dòng)器引腳連接到Arduino: In1
    發(fā)表于 03-28 11:25

    用STM32F407控制器遙控控制3個(gè)直流電機(jī),PWM引腳輸出電壓達(dá)不到驅(qū)動(dòng)器的控制電壓為什么?

    請(qǐng)教各位大拿,我用STM32F407控制器遙控控制3個(gè)直流電機(jī),分別模擬汽車的轉(zhuǎn)向電機(jī)、制動(dòng)電機(jī)、油門(mén)電機(jī),程序沒(méi)有問(wèn)題,原車上都調(diào)試過(guò)了,采用4個(gè)
    發(fā)表于 03-20 08:07

    arduino控制步進(jìn)電機(jī)代碼

    中,我們將詳細(xì)介紹如何使用Arduino來(lái)控制步進(jìn)電機(jī)的代碼。 步進(jìn)電機(jī)通常用于需要精確控制角度和位置的應(yīng)用中,例如3D打印機(jī)、數(shù)控銑床和機(jī)
    的頭像 發(fā)表于 02-14 16:29 ?1845次閱讀

    arduino中while循環(huán)怎么跳出

    執(zhí)行某段代碼的情況。然而,如何在合適的時(shí)機(jī)跳出 while 循環(huán)是一個(gè)需要注意的問(wèn)題。本文將詳細(xì)介紹 Arduino 中 while 循環(huán)的基本概念,以及如何使用不同的技巧跳出該循環(huán)來(lái)實(shí)現(xiàn)代碼
    的頭像 發(fā)表于 02-14 16:22 ?2308次閱讀

    ESP32與Arduino板之間的區(qū)別差異

    Arduino板包括一個(gè)ATmega328P8位微控制器,具有0至13個(gè)數(shù)字引腳。這些
    的頭像 發(fā)表于 02-02 14:36 ?6738次閱讀
    ESP32與<b class='flag-5'>Arduino</b>板之間的區(qū)別差異

    AD9914的倍頻倍數(shù)怎樣計(jì)算的?

    AD9914的倍頻倍數(shù)怎樣計(jì)算的?手冊(cè)上是這樣說(shuō)的:設(shè)置PLL的反饋分頻器。分頻器范圍為8×至255xx。 位[15:8] = 0000 = 8
    發(fā)表于 12-12 08:20

    使用按鈕依次切換8個(gè)輸出且可控制輸出通道

    本案例使用按鈕依次切換8個(gè)輸出且可控制輸出通道,比如控制指示燈,可以輸入序號(hào)來(lái)點(diǎn)亮該序號(hào)指示燈,
    的頭像 發(fā)表于 12-04 15:52 ?664次閱讀
    使用按鈕依次切換<b class='flag-5'>8</b><b class='flag-5'>個(gè)</b><b class='flag-5'>輸出</b>且可<b class='flag-5'>控制</b><b class='flag-5'>輸出</b>通道

    放大倍數(shù)可調(diào)的放大器的設(shè)計(jì)

    放大倍數(shù)的設(shè)計(jì)需要考慮放大器的輸入信號(hào)、放大倍數(shù)輸出信號(hào)之間的關(guān)系。在放大器中,輸入信號(hào)經(jīng)過(guò)放大后得到一個(gè)更大的輸出信號(hào)。放大
    的頭像 發(fā)表于 12-01 15:29 ?1962次閱讀

    AD8368上下限截止頻率是通過(guò)HPFL和DECL兩個(gè)引腳控制的嗎?

    AD8368上下限截止頻率是通過(guò)HPFL和DECL兩個(gè)引腳控制的嗎,因?yàn)閐atasheet里面有兩個(gè)公式。 還有就是那自動(dòng)增益控制是怎么實(shí)
    發(fā)表于 11-27 06:08

    如何設(shè)計(jì)一個(gè)多路輸出的電源適配器?

    ,首先需要明確需求。確定適配器的輸出電壓、電流和功率等參數(shù),以及所需輸出端口的數(shù)量和類型。這些需求將直接影響到適配器的整體設(shè)計(jì)。 2. 選擇適配器類型 根據(jù)需求,選擇合適的適配器類型。
    的頭像 發(fā)表于 11-23 15:34 ?885次閱讀

    AD8629元件顯示單個(gè)通道的5個(gè)引腳,怎么能讓它同時(shí)顯示所有的8個(gè)引腳

    直接用LTSPICE從庫(kù)里導(dǎo)入AD8629放大器,AD8629本身是雙通道的,但打開(kāi)的模型僅有單個(gè)通道的5個(gè)引腳。我有兩路信號(hào)需要放大,從官方下載的AD8629cir文件也定義5個(gè)
    發(fā)表于 11-14 07:23