మీ మైక్రోకంట్రోలర్లో తగినంత I / O పిన్లు అందుబాటులో లేని ఎంబెడెడ్ డిజైన్లో అవకాశాలు ఉన్నాయి. అది ఏ కారణం చేతనైనా కావచ్చు, మీ అనువర్తనానికి బహుళ LED లు అవసరం కావచ్చు లేదా మీరు బహుళ 7-సెగ్మెంట్ డిస్ప్లేలను ఉపయోగించాలనుకుంటున్నారు, కానీ మీ మైక్రోకంట్రోలర్లో మీకు I / O పిన్లు అవసరం లేదు. ఇక్కడ ఒక ఖచ్చితమైన భాగం, షిఫ్ట్ రిజిస్టర్ వస్తుంది. షిఫ్ట్ రిజిస్టర్ సీరియల్ డేటాను అంగీకరిస్తుంది మరియు సమాంతర అవుట్పుట్ ఇస్తుంది. మీ మైక్రోకంట్రోలర్తో కనెక్ట్ అవ్వడానికి దీనికి 3 పిన్లు మాత్రమే అవసరం మరియు మీరు దాని నుండి 8 కంటే ఎక్కువ అవుట్పుట్ పిన్లను పొందుతారు. ప్రసిద్ధ షిఫ్ట్ రిజిస్టర్లో ఒకటి 74 హెచ్సి 595. ఇది 8 బిట్ స్టోరేజ్ రిజిస్టర్ మరియు 8 బిట్ షిఫ్ట్ రిజిస్టర్ కలిగి ఉంది. షిఫ్ట్ రిజిస్టర్ల గురించి ఇక్కడ మరింత తెలుసుకోండి.
మీరు షిఫ్ట్ రిజిస్టర్కు సీరియల్ డేటాను అందిస్తారు మరియు అది స్టోరేజ్ రిజిస్టర్లో లాచ్ చేయబడుతుంది మరియు తరువాత స్టోరేజ్ రిజిస్టర్ 8 అవుట్పుట్లను నియంత్రిస్తుంది. మీకు మరింత అవుట్పుట్ కావాలంటే మరొక షిఫ్ట్ రిజిస్టర్ జోడించండి. రెండు షిఫ్ట్ రిజిస్టర్లను క్యాస్కేడ్ చేయడం ద్వారా, మీకు అదనపు 8 అవుట్పుట్లు, మొత్తం 16 బిట్ అవుట్పుట్ లభిస్తుంది.
షిఫ్ట్ రిజిస్టర్ 74HC595:
డేటాషీట్ ప్రకారం 74HC595 యొక్క పిన్ అవుట్ రేఖాచిత్రం ఇక్కడ ఉంది
HC595 లో 16 పిన్స్ ఉన్నాయి; మేము డేటాషీట్ చూస్తే పిన్ ఫంక్షన్లను అర్థం చేసుకుంటాము-
కు QH QA పిన్ సంఖ్యలు నుండి, 1 కు 7 మరియు 15 వంటి ఉపయోగిస్తారు 8 బిట్ అవుట్పుట్ గా పేరు షిఫ్ట్ రిజిస్టర్ నుండి పిన్ 14 అందుకోవడానికి ఉపయోగిస్తారు సీరియల్ డేటా. ఇతర పిన్లను ఎలా ఉపయోగించాలో మరియు షిఫ్ట్ రిజిస్టర్ యొక్క ఇతర విధులను ఎలా పొందాలో సత్య పట్టిక కూడా ఉంది.
74HC595 ను ఇంటర్ఫేస్ చేయడానికి మేము కోడ్ను వ్రాసినప్పుడు, కావలసిన ఫలితాలను పొందడానికి ఈ సత్య పట్టికను వర్తింపజేస్తాము.
ఇప్పుడు, మేము 74HC595 ను PIC16F877A తో ఇంటర్ఫేస్ చేస్తాము మరియు 8 LED లను నియంత్రిస్తాము. మేము ఇతర మైక్రోకంట్రోలర్లతో 74HC595 షిఫ్ట్ రిజిస్టర్ను ఇంటర్ఫేస్ చేసాము:
- రాస్ప్బెర్రీ పైతో ఇంటర్ఫేసింగ్ 74 హెచ్ సి 595 సీరియల్ షిఫ్ట్ రిజిస్టర్
- Arduino Uno తో Shift Register 74HC595 ను ఎలా ఉపయోగించాలి?
- షిఫ్ట్ రిజిస్టర్ ఉపయోగించి నోడ్ఎంసియుతో ఎల్సిడిని ఇంటర్ఫేసింగ్
అవసరమైన భాగాలు:
- PIC16F877A
- 2 పిసిలు 33 పిఎఫ్ సిరామిక్ డిస్క్ కెపాసిటర్లు
- 20Mhz క్రిస్టల్
- 4.7 కే రెసిస్టర్
- 8 పిసిల ఎల్ఇడిలు
- 1 కె రెసిస్టర్ -1 పిసి (ప్రతి లెడ్స్లో ప్రత్యేక రెసిస్టర్లు అవసరమైతే 8 పిసిలు 1 కె రెసిస్టర్లు అవసరం)
- 74 హెచ్సి 595 ఐసి
- 5 వి వాల్ అడాప్టర్
- PIC ప్రోగ్రామింగ్ వాతావరణం
- బ్రెడ్బోర్డ్ మరియు వైర్లు
సర్క్యూట్ రేఖాచిత్రం:
సర్క్యూట్ రేఖాచిత్రంలో, మేము సీరియల్ డేటా పిన్ను కనెక్ట్ చేసాము ; మైక్రోకంట్రోలర్ యొక్క RB0, RB1 మరియు RB2 పిన్పై వరుసగా గడియారం మరియు స్ట్రోబ్ (గొళ్ళెం) పిన్. ఇక్కడ మేము 8 LED లకు ఒక రెసిస్టర్ని ఉపయోగించాము. సత్య పట్టిక ప్రకారం, 74HC595 యొక్క పిన్ 13 ని భూమికి కనెక్ట్ చేయడం ద్వారా మేము అవుట్పుట్ను ప్రారంభించాము. QH మేము మరొక కోన కాదు వంటి పిన్ తెరిచి వదిలి 74HC595 అది వేరే సంగతి. షిఫ్ట్ రిజిస్టర్ యొక్క పిన్ 10 ను VCC తో కనెక్ట్ చేయడం ద్వారా మేము స్పష్టమైన ఇన్పుట్ ఫ్లాగ్ను నిలిపివేసాము .
క్రిస్టల్ ఓసిలేటర్ మైక్రోకంట్రోలర్ యొక్క OSC పిన్స్ పై అనుసంధానించబడి ఉంది. PIC16F877A కి అంతర్గత ఓసిలేటర్ లేదు. ఈ ప్రాజెక్ట్లో మేము షిఫ్ట్ రెజిస్టర్ను ఉపయోగించి క్యూ 0 నుండి క్యూ 7 వరకు లీడ్ను ఒక్కొక్కటిగా వెలిగిస్తాము.
మేము బ్రెడ్బోర్డ్లో సర్క్యూట్ను నిర్మించాము-
కోడ్ వివరణ:
షిఫ్ట్ రిజిస్టర్తో LED లను నియంత్రించడానికి పూర్తి కోడ్ వ్యాసం చివరలో ఇవ్వబడింది. ఎప్పటిలాగే, మేము PIC మైక్రోకంట్రోలర్లో కాన్ఫిగరేషన్ బిట్లను సెట్ చేయాలి.
#pragma config FOSC = HS // ఓసిలేటర్ ఎంపిక బిట్స్ (HS ఓసిలేటర్) #pragma config WDTE = OFF // వాచ్డాగ్ టైమర్ బిట్ను ప్రారంభించండి (WDT నిలిపివేయబడింది) #pragma config PWRTE = OFF // పవర్-అప్ టైమర్ ఎనేబుల్ బిట్ (PWRT డిసేబుల్) # pragma config బోరెన్ = ON // బ్రౌన్ అవుట్ రీసెట్ బిట్ (బోర్ ఎనేబుల్) ప్రారంభించు #pragma config LVP OFF = // తక్కువ వోల్టేజ్ (సింగిల్-సప్లై) లో-సర్క్యూట్ సీరియల్ ప్రోగ్రామింగ్ బిట్ (RB3 / PGM పిన్ PGM ఫంక్షన్ ఉంది ప్రారంభించు; తక్కువ -voltage ప్రోగ్రామింగ్ ఎనేబుల్) #pragma config CPD OFF = // డేటా EEPROM మెమరీ కోడ్ రక్షణ బిట్ (డేటా EEPROM కోడ్ రక్షణ ఆఫ్) #pragma config wrt OFF = // ఫ్లాష్ ప్రోగ్రామ్ మెమరీ వ్రాయండి బిట్స్ (వ్రాయండి రక్షణను ప్రారంభించు ఆఫ్; అన్ని కార్యక్రమం జ్ఞాపకాలలోనూ EECON నియంత్రణ ద్వారా వ్రాయబడింది) # ప్రాగ్మా కాన్ఫిగర్ CP = OFF // ఫ్లాష్ ప్రోగ్రామ్ మెమరీ కోడ్ ప్రొటెక్షన్ బిట్ (కోడ్ ప్రొటెక్షన్ ఆఫ్)
ఆ తరువాత మేము ఆలస్యం మరియు 74HC595 కోసం పిన్-అవుట్ డిక్లరేషన్ కోసం అవసరమైన క్రిస్టల్ ఫ్రీక్వెన్సీని ప్రకటించాము.
# చేర్చండి
తరువాత పిన్ దిశను ప్రారంభించడానికి system_init () ఫంక్షన్ను ప్రకటించాము.
శూన్యమైన సిస్టమ్_ఇనిట్ (శూన్యమైనది) { TRISB = 0x00; }
మేము రెండు వేర్వేరు ఫంక్షన్లను ఉపయోగించి క్లాక్ పల్స్ మరియు గొళ్ళెం పల్స్ సృష్టించాము
/ * * ఈ ఫంక్షన్ గడియారాన్ని ప్రారంభిస్తుంది. * / శూన్య గడియారం (శూన్యమైనది) { CLK_595 = 1; __ ఆలస్యం_యూస్ (500); CLK_595 = 0; __ ఆలస్యం_యూస్ (500); }
మరియు
/ * * ఈ ఫంక్షన్ స్ట్రోబ్ చేస్తుంది మరియు అవుట్పుట్ ట్రిగ్గర్ను ప్రారంభిస్తుంది. * / శూన్యమైన స్ట్రోబ్ (శూన్యమైనది) { STROBE_595 = 1; __ ఆలస్యం_యూస్ (500); STROBE_595 = 0; }
ఈ రెండు ఫంక్షన్ల తరువాత మేము 74HC595 కు సీరియల్ డేటాను సమర్పించడానికి డేటా_సబ్మిట్ (సంతకం చేయని పూర్ణాంక డేటా) ఫంక్షన్ను ప్రకటించాము.
(int i = 0; i <8; i ++) { DATA_595 = (డేటా >> i) & 0x01; కోసం void data_submit (సంతకం చేయని Int డేటా) . గడియారం(); } స్ట్రోబ్ (); // డేటా చివరకు సమర్పించబడింది }
ఈ ఫంక్షన్లో మేము 8 బిట్ డేటాను అంగీకరిస్తాము మరియు ప్రతి బిట్ను రెండు బిట్వైస్ ఆపరేటర్లు ఎడమ షిఫ్ట్ మరియు AND ఆపరేటర్ ఉపయోగించి పంపుతాము. మేము మొదట డేటాను ఒక్కొక్కటిగా మార్చాము మరియు 0x01 తో AND ఆపరేటర్ ఉపయోగించి 0 లేదా 1 కాదా అని ఖచ్చితమైన బిట్ను కనుగొంటాము. ప్రతి డేటా గడియారం పల్స్ మరియు గొళ్ళెం లేదా స్ట్రోబ్ పల్స్ ఉపయోగించి చేసిన తుది డేటా అవుట్పుట్ ద్వారా నిల్వ చేయబడుతుంది. ఈ ప్రక్రియలో డేటా అవుట్పుట్ మొదట MSB (మోస్ట్ సిగ్నిఫికెంట్ బిట్) అవుతుంది.
లో ప్రధాన ఫంక్షన్ మేము బైనరీ సమర్పించిన మరియు ఒక ద్వారా అవుట్పుట్ పిన్స్ అధిక నిలిపింది.
system_init (); // సిస్టమ్ సిద్ధమవుతున్నప్పుడు (1) { data_submit (0b00000000); __ ఆలస్యం_ఎంఎస్ (200); డేటా_సమిట్ (0 బి 10000000); __ ఆలస్యం_ఎంఎస్ (200); data_submit (0b01000000); __ ఆలస్యం_ఎంఎస్ (200); data_submit (0b00100000); __ ఆలస్యం_ఎంఎస్ (200); data_submit (0b00010000); __ ఆలస్యం_ఎంఎస్ (200); data_submit (0b00001000); __ ఆలస్యం_ఎంఎస్ (200); data_submit (0b00000100); __ ఆలస్యం_ఎంఎస్ (200); data_submit (0b00000010); __ ఆలస్యం_ఎంఎస్ (200); data_submit (0b00000001); __ ఆలస్యం_ఎంఎస్ (200); డేటా_సమిట్ (0xFF); __ ఆలస్యం_ఎంఎస్ (200); } తిరిగి; }
ఎక్కువ సెన్సార్లను కనెక్ట్ చేయడానికి ఏదైనా మైక్రోకంట్రోలర్లో మరింత ఉచిత I / O పిన్లను పొందడానికి షిఫ్ట్ రిజిస్టర్ను ఎలా ఉపయోగించవచ్చు.