在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-20 11:09 ? 次閱讀

步驟1:移位寄存器簡介

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

什么是移位寄存器:

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

移位寄存器的引腳:

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

串行輸入(PIN 14):

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

RCK(引腳12):

此引腳被拉高時,將移位寄存器。

串行時鐘(PIN11):

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

QH‘(引腳9):

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

移位寄存器的工作原理

可以將移位寄存器與數據游戲進行比較沿路口移動。當移位寄存器的RCK引腳變為HIGH時,它們將移至另一個結點,因此可以使用以下原理將數據傳輸到任意數量的移位寄存器。移位寄存器可以使用串行時鐘(PIN 11)保持這些值。每當串行時鐘引腳變高時,RCK引腳就會變低,依此類推,直到傳輸所需的數據為止。

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

菊花鏈移位寄存器:

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

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

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

無論如何,所生產的模塊將是4 x 3 cm的正方形,并且可以通過菊花鏈方式鏈接更多的模塊,并且可以根據需要增加輸入量。因此,讓我們開始組裝吧!!!!

步驟1:

第一步是插入LED

注1:

請注意,應通過電源檢查led條形圖的位置,以便正確插入。來自arduino的5V電壓就足夠了,但請不要長時間連接,否則LED會短路。名為 Note1 的圖顯示了我檢查模塊的方法。請忽略圖中的電阻,直接將其連接。

第2步:

檢查后,如圖所示插入1k電阻。需要這個電阻是因為它為最終的LED提供了電阻。其次是接地的4k7電阻矩陣。有關電阻的位置,請參見該圖。我在圖中顯示了10k,但請忽略它。

注2:

該注意事項非常重要,因為只有在LED亮起時,電阻矩陣接地引腳(?)才應正確連接到接地軌。這很關鍵,因為如果矩陣反轉,LED將會變暗。

第3步:

因此,如圖所示,將電阻矩陣的菱形端(?)插入接地端。然后焊接矩陣的引腳。您也可以通過連接電源來仔細檢查LED。

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

注3:

在插入主IC之前,只需使用指南針或刀片進行切割即可。可以使用萬用表中的連續性測試儀檢查切口。

第4步:

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

步驟5:

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

第6步:

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

第7步:

接下來是電源供應您需要如圖所示連接兩個接頭并焊接接頭。

第8步:

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

注意4:

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

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

第9步:

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

步驟10:

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

第11步:

使用剪刀剪切模塊并進行剪切盡可能緊湊。然后您就完成了您的第一個模塊的準備工作。

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

步驟5:檢查模塊

一旦完成模塊,您就可以使用此簡單代碼檢查完成的模塊。該代碼顯示了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個引腳控制24個以上輸出的代碼。

步驟6:主代碼

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

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

//How many of the shift registers - change this

#define number_of_74hc595s 1

的代碼行應提供您正在使用的移位寄存器模塊的數量。該程序最多只能有40個以上的移位寄存器。

setRegisterPin(2, HIGH);

setRegisterPin(3, HIGH);

setRegisterPin(4, LOW);

setRegisterPin(5, HIGH);

setRegisterPin(7, HIGH);

writeRegisters();

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

setRegisterPin(24, HIGH);

假設您需要重置引腳,以使所有引腳均變低,然后功能將變為

clearRegisters();

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

代碼:

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追逐者很有趣!

如果您已達到此測試,則說明您已成功完成模塊。因此,讓我們做一個LED追逐器不僅是為了娛樂,而且是為了進一步理解代碼。下面給出了代碼以嘗試使用新模塊。我上傳了我的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();

}

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 移位寄存器
    +關注

    關注

    3

    文章

    258

    瀏覽量

    22275
  • Arduino
    +關注

    關注

    188

    文章

    6470

    瀏覽量

    187139
收藏 人收藏

    評論

    相關推薦

    AFE5803 SPI是如何控制VCAT的,8路VCAT是只能設置同一放大倍數還是可以設置8路不同的放大倍數

    在datasheet中SPI Logic可以控制VCAT,但又沒有找到digital VCNTL mode,請問SPI是如何控制VCAT的,8路VCAT是只能設置同一放大
    發表于 12-20 11:27

    HAL庫在Arduino平臺上的使用

    HAL庫在Arduino平臺上的使用 Arduino平臺是一開源的電子原型平臺,它包括硬件(基于微控制器的電路板)和軟件(
    的頭像 發表于 12-02 14:04 ?293次閱讀

    stm32與Arduino的比較

    在微控制器的世界里,STM32和Arduino是兩經常被提及的名字。STM32是一系列由STMicroelectronics生產的高性能微控制器,而
    的頭像 發表于 11-19 15:45 ?917次閱讀

    怎么判斷電壓放大倍數的正負極

    電壓放大倍數是衡量一放大器性能的重要參數之一,它表示輸入電壓與輸出電壓之間的比例關系。在電子電路中,電壓放大倍數的正負極對于電路的設計和應用具有重要意義。 一、電壓放大
    的頭像 發表于 08-07 14:13 ?2234次閱讀

    放大倍數指的是物體的什么的放大倍數

    放大倍數是一物理學和光學領域中常見的概念,它描述了通過顯微鏡、望遠鏡或其他放大設備觀察物體時,物體的尺寸相對于其原始尺寸的放大程度。 一、放大倍數的定義 放大倍數(Magnifica
    的頭像 發表于 07-30 14:15 ?2038次閱讀

    示波器衰減倍數與探頭衰減倍數之間的關系

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

    ESP32C3使用GPIO2,8,9引腳時為什么輸出高電平比輸出低電平功耗高數百ua?

    自動睡眠模式下,使用GPIO2,8,9其中任意一時,若引腳輸出高電平,功耗在700ua左右,可一但設置引腳低電平功耗就保持在1ma左右。怎
    發表于 06-26 06:57

    為什么可以將一GPIO引腳同時配置為輸入輸出模式呢?

    的一系列高低電平。 那么對于GPIO6而言,在發送起始信號的時候,是輸出模式,接收信號的時候是輸入模式,也就是說需要將一引腳同時配置為輸入輸出模式。 我注意到,在gpio_mod
    發表于 06-05 07:37

    ESP32C3使用GPIO2,8,9任意一引腳輸出低電平時功耗會增加,怎么解決?

    如題,這三引腳當我使用其中任意一輸出低電平時功耗會增加,大概幾百ua左右。輸出高電平則一切正常,未見功耗增加。其他
    發表于 06-05 06:36

    STM8S003F3上電后怎么默認I/O引腳輸出低電平?

    MCU型號:STM8S003F3。 問題描述:一空程序的MCU上電后輸出高電平,通過程序配置I/O引腳輸出低電平,但這樣的話會有一
    發表于 05-10 08:23

    如何用Arduino制作一簡易自動喂魚器

    制作硬件電路了。 第2步:電路圖和程序 我們可以將電路分為兩部分,第一部分是步進電機,另一部分是超聲波傳感器。 將步進電機連接到驅動器,然后根據下面的說明將驅動器引腳連接到Arduino: In1
    發表于 03-28 11:25

    用STM32F407控制器遙控控制3直流電機,PWM引腳輸出電壓達不到驅動器的控制電壓為什么?

    請教各位大拿,我用STM32F407控制器遙控控制3直流電機,分別模擬汽車的轉向電機、制動電機、油門電機,程序沒有問題,原車上都調試過了,采用4
    發表于 03-20 08:07

    arduino控制步進電機代碼

    中,我們將詳細介紹如何使用Arduino控制步進電機的代碼。 步進電機通常用于需要精確控制角度和位置的應用中,例如3D打印機、數控銑床和機
    的頭像 發表于 02-14 16:29 ?2045次閱讀

    arduino中while循環怎么跳出

    執行某段代碼的情況。然而,如何在合適的時機跳出 while 循環是一需要注意的問題。本文將詳細介紹 Arduino 中 while 循環的基本概念,以及如何使用不同的技巧跳出該循環來實現代碼
    的頭像 發表于 02-14 16:22 ?2609次閱讀

    ESP32與Arduino板之間的區別差異

    Arduino板包括一ATmega328P8位微控制器,具有0至13數字引腳。這些
    的頭像 發表于 02-02 14:36 ?7514次閱讀
    ESP32與<b class='flag-5'>Arduino</b>板之間的區別差異
    主站蜘蛛池模板: 欧美不卡1卡2卡三卡老狼| 天天看视频| 黄色网址视频在线观看| 欧美一级做一级做片性十三| 69日本xxxxxxxxx96| 乱色伦图片区| 色天天干| 妇乱子伦激情| 欧美极品另类| 一区二区视频网| 男女交性特一级| 在线观看视频h| 天天做爽夜夜做爽| 欧美精品久久天天躁| 中国特黄一级片| 夜夜福利| 欧美午夜一区| 亚洲精品91大神在线观看| 狼狼鲁狼狼色| wwwwwww色| 色综合天天综合给合国产| 日本www在线观看| 色婷婷六月丁香在线观看| 亚洲色图欧美在线| 美女被强插| 亚洲bbb| 国产精品污视频| 视频在线二区| 亚洲日本在线观看视频| 综合久久婷婷| 日韩ab| 人碰人操| 国产精品主播在线观看| 久久久久久久蜜桃| 成人精品久久| 特黄特黄| xxx69欧美| 我想看一级黄色片| 久久精品综合视频| 天天毛片| 69日本xxxhd|