วันศุกร์ที่ 8 กุมภาพันธ์ พ.ศ. 2562

Pic1


การเชื่อมต่อ 74HC595 Serial Shift Register กับ PIC ไมโครคอนโทรลเลอร์

อิเล็กทรอนิกส์
โดยSourav Gupta 4
การเชื่อมต่อ 74HC595 Serial Shift Register กับ PIC ไมโครคอนโทรลเลอร์การเชื่อมต่อ 74HC595 Serial Shift Register กับ PIC ไมโครคอนโทรลเลอร์
มีความเป็นไปได้ในการออกแบบแบบฝังที่คุณมีพิน I / O ไม่เพียงพอในไมโครคอนโทรลเลอร์ อาจเป็นเพราะแอพพลิเคชั่นของคุณอาจต้องการ LED หลายอันหรือคุณต้องการใช้จอแสดงผล 7 เซกเมนต์หลายตัวแต่คุณไม่จำเป็นต้องใช้หมุด I / O ในไมโครคอนโทรลเลอร์ ที่นี่มาเป็นองค์ประกอบที่สมบูรณ์แบบลงทะเบียนเปลี่ยนแปลง Shift register ยอมรับข้อมูลอนุกรมและให้เอาต์พุตขนาน มันต้องมีเพียง3 ขาเพื่อเชื่อมต่อกับไมโครคอนโทรลเลอร์ของคุณและคุณจะได้รับมากกว่า8 พินเอาท์พุทจากมัน หนึ่งของการลงทะเบียนการเปลี่ยนแปลงที่เป็นที่นิยม74HC595 มันมีการลงทะเบียนการจัดเก็บข้อมูล 8 บิตและบิตกะลงทะเบียน เรียนรู้เพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงการลงทะเบียนที่นี่
คุณจะให้ข้อมูลอนุกรมกับ shift register และมันจะถูกlatchedบน register register จากนั้น storage register จะควบคุม 8 เอาต์พุต หากคุณต้องการเอาต์พุตเพิ่มเพียงเพิ่ม shift register ตัวอื่น โดยซ้อนสองกะลงทะเบียนคุณจะได้รับอีก 8 เอาท์พุทเอาท์พุท 16bit ทั้งหมด

ลงทะเบียนกะ 74HC595:

นี่คือแผนภาพ pin out ของ74HC595ตามแผ่นข้อมูล -
74HC595 Pinout IC ลงทะเบียนอนุกรม Pinout

HC595 มี 16 พิน ถ้าเราเห็นแผ่นข้อมูลเราจะเข้าใจฟังก์ชั่นพิน -
คำอธิบายพิน 74HC595

QA เพื่อ QHจากหมายเลข PIN 1-7 และ 15ใช้เป็นเอาท์พุทบิต 8จากการลงทะเบียนการเปลี่ยนแปลงที่เป็นขา 14ถูกนำมาใช้สำหรับการรับข้อมูลแบบอนุกรม นอกจากนี้ยังมีตารางความจริงเกี่ยวกับวิธีการใช้พินอื่น ๆ และประโยชน์อื่น ๆ ของการลงทะเบียนกะ
ตารางความจริง IC 74HC595

เมื่อเราเขียนรหัสเพื่อเชื่อมต่อ74HC595เราจะใช้ตารางความจริงนี้เพื่อรับเอาท์พุทที่ต้องการ
ตอนนี้เราจะเชื่อมต่อ 74HC595 กับ PIC16F877A และควบคุมไฟ LED 8 ดวง เราได้ทำการเชื่อมโยงการลงทะเบียนการเปลี่ยนแปลง 74HC595 กับไมโครคอนโทรลเลอร์อื่น ๆ :

ส่วนประกอบที่จำเป็น:

  1. PIC16F877A
  2. 2 ชิ้น 33pF ตัวเก็บประจุแผ่นเซรามิก
  3. คริสตัล 20MHz
  4. ตัวต้านทาน 4.7k
  5. ไฟ LED 8 ชิ้น
  6. 1k ตัวต้านทาน -1 ชิ้น (8 ชิ้นจำเป็นต้องมีตัวต้านทาน 1k หากตัวต้านทานแยกกันในแต่ละไฟ LED จำเป็น)
  7. ไอซี 74HC595
  8. อะแดปเตอร์ติดผนัง 5V
  9. สภาพแวดล้อมการเขียนโปรแกรม PIC
  10. เขียงหั่นขนมและสายไฟ

แผนภูมิวงจรรวม:

 แผนภาพวงจรสำหรับ Interfacing 74HC595 Serial Shift Register กับ PIC Microcontroller

ในแผนภาพวงจรเราได้เชื่อมต่อขาข้อมูลอนุกรม เข็มนาฬิกาและแฟลช (สลัก) ที่ขาของไมโครคอนโทรลเลอร์RB0, RB1 และ RB2ตามลำดับ ที่นี่เราใช้ตัวต้านทานหนึ่งตัวสำหรับ LED 8 ดวง ตามตารางความจริงเราเปิดใช้งานเอาต์พุตโดยเชื่อมต่อพิน 13 จาก 74HC595 กับกราวด์ QHขาเปิดทิ้งไว้ในขณะที่เราจะไม่น้ำตกอีก74HC595กับมัน เราปิดใช้งานการตั้งค่าสถานะการป้อนข้อมูลที่ชัดเจนโดยการเชื่อมต่อพิน 10 ของการลงทะเบียนกะกับ VCC
Crystal oscillator เชื่อมต่อกับพิน OSC ของไมโครคอนโทรลเลอร์ PIC16F877A ไม่มีออสซิลเลเตอร์ภายในในโครงการนี้เราจะสว่างขึ้นหนึ่งนำโดยหนึ่งจากQ0 เพื่อ Q7 ใช้ regitster
เราได้สร้างวงจรใน breadboard-
ฮาร์ดแวร์วงจรสำหรับการเชื่อมต่อ 74HC595 Serial Shift ลงทะเบียนกับไมโครคอนโทรลเลอร์ PIC

คำอธิบายรหัส:

รหัสที่สมบูรณ์สำหรับการควบคุมไฟ LED พร้อม shift register ให้ไว้ที่ท้ายบทความ และเช่นเคยเราจำเป็นต้อง ตั้งค่าบิตการกำหนดค่าในไมโครคอนโทรลเลอร์ของ PIC
#pragma config FOSC = HS // บิตตัวเลือก Oscillator (HS oscillator) 
#pragma config WDTE = ปิด // ตัวจับเวลา Watchdog เปิดใช้งานบิต (ปิดใช้งาน WDT) 
#pragma config PWRTE = ปิด // ตัวจับเวลาเปิดใช้งานพลังงาน (ปิด PWRT) 
# pragma config BOREN = ON // รีเซ็ต Brown-out เปิดใช้งานบิต (เปิดใช้งาน BOR) 
#pragma config LVP = OFF // แรงดันไฟฟ้าต่ำ (Single-Supply) การเขียนโปรแกรมแบบอนุกรมในวงจรเปิดใช้งานบิต (พิน RB3 / PGM มีฟังก์ชั่น PGM ต่ำ เปิดใช้งานการเขียนโปรแกรมไฟฟ้าแรงสูง) 
#pragma config CPD = ปิด // ข้อมูล EEPROM บิตการป้องกันรหัสหน่วยความจำ (การป้องกันรหัสข้อมูล EEPROM ปิด) 
#pragma config WRT = ปิด // โปรแกรมแฟลชเขียนหน่วยความจำเปิดใช้งานบิต (ป้องกันการเขียนออก เขียนโดย EECON control) 
#pragma config CP = OFF // Flash โปรแกรมการป้องกันโค้ดหน่วยความจำบิต (การป้องกันโค้ดปิด)

หลังจากที่เราประกาศความถี่คริสตัลซึ่งเป็นสิ่งจำเป็นสำหรับความล่าช้าและการประกาศขาออกสำหรับ74HC595
#include <xc.h> 
/ * 
คำจำกัดความที่เกี่ยวข้องกับฮาร์ดแวร์
* / 
#define _XTAL_FREQ 20000000 // ความถี่คริสตัลที่ใช้ในการหน่วง
#define DATA_595 PORTBbits.RB0 
#define STROBE_595 PORTBbits.RB1 
#define CLK_595 PORTBbits

ต่อไปเราประกาศฟังก์ชั่นsystem_init ()เพื่อเริ่มต้นทิศทางพิน
เป็นโมฆะ system_init (เป็นโมฆะ) { 
    TRISB = 0x00;   
    }

เราสร้างพัลส์นาฬิกาและพัลส์ล็อคโดยใช้ฟังก์ชั่นที่แตกต่างกันสองแบบ
/ * 
* ฟังก์ชั่นนี้จะเปิดใช้งานนาฬิกา 
* / 
void clock (void) { 
    CLK_595 = 1; 
    __delay_us (500); 
    CLK_595 = 0; 
    __delay_us (500); 
}
และ
/ * 
* ฟังก์ชั่นนี้จะใช้แฟลชและเปิดใช้งานทริกเกอร์เอาท์พุท 
* /

void strobe (void) { 
    STROBE_595 = 1; 
    __delay_us (500); 
    STROBE_595 = 0; 
    }

หลังจากนี้ทั้งสองฟังก์ชั่นที่เราประกาศdata_submit (ข้อมูล int ไม่ได้ลงนาม)ฟังก์ชั่นในการส่งข้อมูลแบบอนุกรมกับ74HC595
เป็นโมฆะ data_submit (ข้อมูล int ที่ไม่ได้ลงชื่อ) { 
    สำหรับ (int i = 0; i <8; i ++) { 
        DATA_595 = (data >> i) & 0x01; 
        นาฬิกา(); 
    } 
    strobe (); // ส่งข้อมูลแล้ว
}

ในฟังก์ชั่นนี้เรารับข้อมูล 8 บิตและส่งแต่ละบิตโดยใช้ตัวดำเนินการสองบิตซ้ายเลื่อนและและตัวดำเนินการ ครั้งแรกที่เราเปลี่ยนข้อมูลหนึ่งโดยหนึ่งและหาบิตที่แน่นอนไม่ว่าจะเป็น 0 หรือ 1 ใช้และผู้ประกอบการที่มี 0x01แต่ละข้อมูลจะถูกจัดเก็บโดยพัลส์นาฬิกาและส่งออกข้อมูลสุดท้ายทำได้โดยใช้สลักหรือแฟลชชีพจร ในขั้นตอนนี้ส่งออกข้อมูลจะMSB (Bit ที่สำคัญที่สุด) เป็นครั้งแรก

ในฟังก์ชั่นหลักเราส่งไบนารี่และทำให้พินเอาต์พุตสูงทีละอัน
    system_init (); // ระบบเตรียมพร้อม     
    ในขณะที่ (1) { 
        data_submit (0b00000000); 
        __delay_ms (200); 
        data_submit (0b10000000); 
        __delay_ms (200); 
        data_submit (0b01000000); 
        __delay_ms (200); 
        data_submit (0b00100000); 
        __delay_ms (200); 
        data_submit (0b00010000); 
        __delay_ms (200); 
        data_submit (0b00001000); 
        __delay_ms (200);        
        data_submit (0b00000100); 
        __delay_ms (200); 
        data_submit (0b00000010); 
        __delay_ms (200); 
        data_submit (0b00000001); 
        __delay_ms (200); 
        data_submit (0xFF);        
        __delay_ms (200); 
     } 
    กลับมา; 
    }

นั่นคือวิธีที่shift register สามารถใช้เพื่อรับ I / O พินได้ฟรีในไมโครคอนโทรลเลอร์ใด ๆสำหรับการเชื่อมต่อเซ็นเซอร์มากขึ้น
รหัส
/ * 
 * ไฟล์: main.c 
 * ผู้แต่ง: Sourav Gupta 
 * โดย: - circuitdigest.com 
 * สร้างเมื่อ 30 พฤษภาคม 2018, 2:26 PM 
 * /
// PIC16F877A การตั้งค่าบิตการกำหนดค่า
// คำสั่งการกำหนดค่าบรรทัดซอร์ส 'C'
// CONFIG 
#pragma config FOSC = HS // บิตการเลือก Oscillator (HS oscillator) 
#pragma config WDTE = OFF // ตัวจับเวลา Watchdog เปิดใช้งานบิต (ปิดใช้งาน WDT) 
#pragma config PWRTE = OFF // ตัวจับเวลาเปิดใช้งานบิต (PWRT) ปิดใช้งาน) 
#pragma config BOREN = ON // รีเซ็ต Brown-out เปิดใช้งานบิต (เปิดใช้งาน BOR) 
#pragma config LVP = OFF // แรงดันไฟฟ้าต่ำ (Single-Supply) การเขียนโปรแกรมอนุกรมในวงจรเปิดใช้งานบิต (pin RB3 / PGM PGM มี PGM ฟังก์ชั่นการตั้งโปรแกรมแรงดันต่ำเปิดใช้งาน
#pragma config CPD = ปิด // ข้อมูล EEPROM บิตการป้องกันรหัสหน่วยความจำ (การป้องกันรหัส EEPROM ข้อมูลปิด) 
#pragma config WRT = ปิด // โปรแกรมแฟลชหน่วยความจำเขียนเปิดใช้งานบิต (ป้องกันการเขียนออก; หน่วยความจำอาจถูกเขียนถึงโดยการควบคุม EECON) 
#pragma config CP = OFF // โปรแกรมแฟลชบิตการป้องกันโค้ดหน่วยความจำ (การป้องกันโค้ดปิด)

#include <xc.h> 
/ * 
 คำจำกัดความที่เกี่ยวข้องกับฮาร์ดแวร์
 * / 
#define _XTAL_FREQ 20000000 // ความถี่คริสตัลที่ใช้ในการหน่วงเวลา
#define DATA_595 PORTBbits.RB0 
#define STROBE_595 PORTBbits.RB1 
#define CLK_595 
PORTBbitsdits3
/ * 
 คำจำกัดความเฉพาะอื่น ๆ
 * / 
void system_init (void);
/ * 
 * ฟังก์ชั่นนี้จะเปิดใช้งานนาฬิกา 
 * / 
void clock (void) { 
    CLK_595 = 1; 
    __delay_us (500); 
    CLK_595 = 0; 
    __delay_us (500); 
}
/ * 
 * ฟังก์ชั่นนี้จะใช้แฟลชและเปิดใช้งานทริกเกอร์เอาท์พุท 
 * /
void strobe (void) { 
    STROBE_595 = 1; 
    __delay_us (500); 
    STROBE_595 = 0; 
    }
/ * 
 * ฟังก์ชั่นนี้จะส่งข้อมูลเพื่อเลื่อน register 
 * / 
void data_submit (ข้อมูล int ที่ไม่ได้ลงนาม) { 
    สำหรับ (int i = 0; i <8; i ++ 8) { 
        DATA_595 = (data >> i) & 0x01; 
        นาฬิกา(); 
    } 
    strobe (); // ส่งข้อมูลแล้ว  
}
เป็นโมฆะ main (void) { 
    system_init (); // ระบบเตรียมพร้อม     
    ในขณะที่ (1) { 
        data_submit (0b00000000); 
        __delay_ms (200); 
        data_submit (0b10000000); 
        __delay_ms (200); 
        data_submit (0b01000000); 
        __delay_ms (200); 
        data_submit (0b00100000); 
        __delay_ms (200); 
        data_submit (0b00010000); 
        __delay_ms (200); 
        data_submit (0b00001000); 
        __delay_ms (200);        
        data_submit (0b00000100); 
        __delay_ms (200); 
        data_submit (0b00000010); 
        __delay_ms (200); 
        data_submit (0b00000001); 
        __delay_ms (200); 
        data_submit (0xFF);        
        __delay_ms (200); 
     } 
    กลับมา; 
    } 
    
/ * 
 ฟังก์ชั่นนี้มีไว้สำหรับการเริ่มต้นระบบ 
 * /
เป็นโมฆะ system_init (เป็นโมฆะ) { 
    TRISB = 0x00;   
    }
วีดีโอ

รับจดหมายข่าวรายสัปดาห์ของเรา!

สมัครสมาชิกด้านล่างเพื่อรับข่าวสารบทความและโครงการ DIY ยอดนิยมจาก Circuit Digest

ความคิดเห็น

  • รูปภาพของ Laci
    Laci
    18 มิ.ย. 2018
    Hi! 
    วันนี้ฉันทำเกือบเหมือนกัน แต่ด้วย CD4094 และการแยกวิเคราะห์เล็กน้อยฉันต้องใช้ MSB วิธีแรกเพื่อแสดง ok 
    คุณเลื่อนไปทางซ้ายก่อนด้วย 0 ดังนั้นอันดับแรกและการส่งคือ LSB บางทีฉันอาจไม่ถูกต้อง คุณอธิบายได้ไหม
  • รูปภาพของ zouss
    zouss
    23 มิ.ย. 2018

    สวัสดีฉันอ่าน "Tuto " ของคุณแต่ฉันไม่รู้ว่าห้องสมุด"XC.h" อยู่ที่ไหน

    ดังนั้นโปรดแนะนำฉัน!!

  • รูปภาพของ Jayant
    Jayant
    Jun 25, 2018
    มันจะถูกติดตั้งเมื่อคุณติดตั้งคอมไพเลอร์ เริ่มจากขั้นพื้นฐานในการติดตั้ง MPLABX และ XC8
  • รูปภาพของ Anne Kleijheeg
    Anne Kleijheeg
    04 ส.ค. 2018
    รหัสนี้ใช้งานได้ดีถ้าฉันใช้ shift shift ตัวเดียว 
    ฉันคิดว่ามันจะง่ายต่อการเปลี่ยนรหัสเมื่อฉันต้องการใช้ shift shift หลายตัว 
    คุณสามารถให้เบาะแสเกี่ยวกับวิธีการใช้หลายทะเบียน

เข้าสู่ระบบหรือลงทะเบียนเพื่อแสดงความคิดเห็น

ซูโม่
16
หุ้น
Facebook16พูดเบาและรวดเร็วGoogle+Pinterestอีเมล์

ไม่มีความคิดเห็น:

แสดงความคิดเห็น