- MCP4921 DAC (డిజిటల్ నుండి అనలాగ్ కన్వర్టర్)
- భాగాలు అవసరం
- స్కీమాటిక్
- కోడ్ వివరణ
- PIC ఉపయోగించి డిజిటల్ టు అనలాగ్ మార్పిడిని పరీక్షిస్తోంది
డిజిటల్ మరియు అనలాగ్ ఎలక్ట్రానిక్స్లో అంతర్భాగం. చాలా పరికరాల్లో ADC మరియు DAC రెండూ ఉన్నాయి మరియు అనలాగ్ నుండి డిజిటల్ లేదా డిజిటల్ అనలాగ్కు సంకేతాలను మార్చాల్సిన అవసరం ఉన్నప్పుడు అవి ఉపయోగించబడతాయి. ధ్వని మరియు కాంతి వంటి వాస్తవ ప్రపంచ సంకేతాలు ప్రకృతిలో అనలాగ్, కాబట్టి ఈ వాస్తవ ప్రపంచ సంకేతాలను ఉపయోగించాల్సి వచ్చినప్పుడు, డిజిటల్ సిగ్నల్స్ అనలాగ్గా మార్చాలి, ఉదాహరణకు స్పీకర్లను ఉపయోగించి ధ్వనిని ఉత్పత్తి చేయడానికి లేదా కాంతి వనరును నియంత్రించడానికి.
DAC యొక్క మరొక రకం పల్స్ వెడల్పు మాడ్యులేటర్ (PWM). ఒక PWM ఒక డిజిటల్ పదాన్ని తీసుకుంటుంది మరియు వేరియబుల్ పల్స్ వెడల్పుతో డిజిటల్ పల్స్ను ఉత్పత్తి చేస్తుంది. ఈ సిగ్నల్ ఫిల్టర్ ద్వారా పంపబడినప్పుడు, ఫలితం పూర్తిగా అనలాగ్ అవుతుంది. అనలాగ్ సిగ్నల్ సిగ్నల్లో పలు రకాల డేటాను కలిగి ఉంటుంది.
ఈ ట్యుటోరియల్లో, డిజిటల్ నుండి అనలాగ్ మార్పిడి కోసం మేము DAC MCP4921 ను మైక్రోచిప్ PIC16F877A తో ఇంటర్ఫేస్ చేస్తాము.
ఇక్కడ ఈ ట్యుటోరియల్ లో మేము డిజిటల్ సిగ్నల్ ను అనలాగ్ సిగ్నల్ గా మారుస్తాము మరియు ఇన్పుట్ డిజిటల్ విలువ మరియు అవుట్పుట్ అనలాగ్ విలువను 16x2 LCD లో ప్రదర్శిస్తాము. ఇది 1V, 2V, 3V, 4V, మరియు 5V లను తుది అనలాగ్ అవుట్పుట్గా అందిస్తుంది, ఇది చివరిలో ఇచ్చిన వీడియోలో ప్రదర్శించబడుతుంది. రాస్ప్బెర్రీ పై, ఆర్డునో మరియు STM32 బోర్డులతో DAC ఇంటర్ఫేసింగ్ యొక్క మా విలువైన ట్యుటోరియల్లో మీరు DAC గురించి మరింత తెలుసుకోవచ్చు.
మోటారు నియంత్రణ, ఎల్ఈడీ లైట్ల కంట్రోల్ బ్రైట్నెస్, ఆడియో యాంప్లిఫైయర్, వీడియో ఎన్కోడర్లు, డేటా అక్విజిషన్ సిస్టమ్స్ వంటి అనేక అనువర్తనాల్లో డిఎసిని ఉపయోగించవచ్చు. ఇంటర్ఫేసింగ్ భాగానికి నేరుగా దూకడానికి ముందు, ఎంసిపి 4921 గురించి అవలోకనం కలిగి ఉండటం చాలా ముఖ్యం.
MCP4921 DAC (డిజిటల్ నుండి అనలాగ్ కన్వర్టర్)
MCP4921 అనేది 12 బిట్ DAC, కాబట్టి MCP4921 12 బిట్స్ అవుట్పుట్ రిజల్యూషన్ను అందిస్తుంది. DAC రిజల్యూషన్ అంటే అనలాగ్ సిగ్నల్గా మార్చగల డిజిటల్ బిట్ల సంఖ్య. దీని నుండి మనం ఎన్ని విలువలు సాధించగలమో అది ఫార్ములా ఆధారంగా ఉంటుంది. 12-బిట్ కోసం, ఇది = 4096. దీని అర్థం 12-బిట్ రిజల్యూషన్ DAC 4096 వేర్వేరు ఫలితాలను ఉత్పత్తి చేయగలదు.
ఈ విలువను ఉపయోగించడం ద్వారా, సింగిల్ అనలాగ్ స్టెప్ వోల్టేజ్ను సులభంగా లెక్కించవచ్చు. దశలను లెక్కించడానికి, రిఫరెన్స్ వోల్టేజ్ అవసరం. పరికరం యొక్క లాజిక్ వోల్టేజ్ 5 వి కాబట్టి, స్టెప్ వోల్టేజ్ 5/4095 (4096-1 ఎందుకంటే డిజిటల్ ప్రారంభ స్థానం 1 కాదు, అది 0), ఇది 0.00122100122 మిల్లివోల్ట్. కాబట్టి, 1 బిట్ యొక్క మార్పు 0.00122100122 తో అనలాగ్ అవుట్పుట్ను మారుస్తుంది.
కాబట్టి, అది మార్పిడి భాగం. MCP4921 ఒక 8-పిన్ IC ఉంది. పిన్ రేఖాచిత్రం మరియు వివరణ క్రింద చూడవచ్చు.
MCP4921 IC SPI ప్రోటోకాల్ ద్వారా మైక్రోకంట్రోలర్ తో కమ్యూనికేట్. SPI కమ్యూనికేషన్ కోసం, ఒక పరికరం మాస్టర్ అయి ఉండాలి, ఇది బానిసగా కనెక్ట్ చేయబడిన బాహ్య పరికరానికి డేటా లేదా ఆదేశాన్ని సమర్పిస్తుంది. SPI కమ్యూనికేషన్ సిస్టమ్లో, ఒకే మాస్టర్ పరికరంతో బహుళ బానిస పరికరాలను అనుసంధానించవచ్చు.
డేటా మరియు ఆదేశాన్ని సమర్పించడానికి, కమాండ్ రిజిస్టర్ను అర్థం చేసుకోవడం ముఖ్యం.
దిగువ చిత్రంలో, కమాండ్ రిజిస్టర్ చూపబడింది,
కమాండ్ రిజిస్టర్ ఒక 16-బిట్ రిజిస్టర్లో. కాన్ఫిగరేషన్ కమాండ్ కోసం బిట్ -15 నుండి బిట్ -12 ఉపయోగించబడుతుంది. పై చిత్రంలో డేటా ఇన్పుట్ మరియు కాన్ఫిగరేషన్ స్పష్టంగా చూపబడింది. ఈ ప్రాజెక్ట్లో, MCP4921 కింది కాన్ఫిగరేషన్గా ఉపయోగించబడుతుంది-
బిట్ సంఖ్య |
ఆకృతీకరణ |
కాన్ఫిగరేషన్ విలువ |
బిట్ 15 |
డిఎసి ఎ |
0 |
బిట్ 14 |
నిర్లక్ష్యం |
0 |
బిట్ 13 |
1x (V OUT * D / 4096) |
1 |
బిట్ 12 |
అవుట్పుట్ పవర్ డౌన్ కంట్రోల్ బిట్ |
1 |
కాబట్టి బైనరీ 0011 తో పాటు రిజిస్టర్ యొక్క D11 నుండి D0 బిట్స్ ద్వారా నిర్ణయించబడుతుంది. 16-బిట్ డేటా 0011 xxxx xxxx xxxx ను సమర్పించాల్సిన అవసరం ఉంది, ఇక్కడ మొదటి 4 బిట్ MSB కాన్ఫిగరేషన్ మరియు మిగిలినది LSB. రైట్ కమాండ్ టైమింగ్ రేఖాచిత్రం చూడటం ద్వారా ఇది స్పష్టంగా కనిపిస్తుంది.
టైమింగ్ రేఖాచిత్రం మరియు డేటాషీట్ ప్రకారం, MCP4921 కు మొత్తం కమాండ్ రాసే కాలానికి CS పిన్ తక్కువగా ఉంటుంది.
పరికరాన్ని హార్డ్వేర్తో ఇంటర్ఫేస్ చేయడానికి మరియు కోడ్లను వ్రాయడానికి ఇది సమయం.
భాగాలు అవసరం
ఈ ప్రాజెక్ట్ కోసం, కింది భాగాలు అవసరం-
- MCP4921
- PIC16F877A
- 20 MHz క్రిస్టల్
- డిస్ప్లే 16x2 అక్షర LCD.
- 2 కె రెసిస్టర్ -1 పిసి
- 33 పిఎఫ్ కెపాసిటర్లు - 2 పిసిలు
- 4.7 కె రెసిస్టర్ - 1 పిసి
- అవుట్పుట్ వోల్టేజ్ను కొలవడానికి బహుళ మీటర్
- బ్రెడ్బోర్డ్
- 5 వి విద్యుత్ సరఫరా, ఫోన్ ఛార్జర్ పనిచేయగలదు.
- బోలెడంత హుక్అప్ వైర్లు లేదా బెర్గ్ వైర్లు.
- ప్రోగ్రామర్ కిట్తో మైక్రోచిప్ ప్రోగ్రామింగ్ ఎన్విరాన్మెంట్ మరియు కంపైలర్తో IDE
స్కీమాటిక్
PIC మైక్రోకంట్రోలర్తో DAC4921 ను ఇంటర్ఫేసింగ్ కోసం సర్క్యూట్ రేఖాచిత్రం క్రింద ఇవ్వబడింది:
సర్క్యూట్ బ్రెడ్బోర్డ్- లో నిర్మించబడింది
కోడ్ వివరణ
పూర్తి కోడ్ కోసం PIC16F877A తో అనలాగ్ లోకి సిగ్నల్స్ మార్చే వ్యాసం చివర ఇవ్వబడుతుంది. ఎప్పటిలాగే, మేము మొదట PIC మైక్రోకంట్రోలర్లో కాన్ఫిగరేషన్ బిట్లను సెట్ చేయాలి.
// PIC16F877A ఆకృతీకరణ బిట్ సెట్టింగులు // 'సి' వనరు రేఖ config ప్రకటనలు // config #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 ఫంక్షన్ను కలిగి ఉంది; తక్కువ-వోల్టేజ్ ప్రోగ్రామింగ్ ప్రారంభించబడింది) # ప్రాగ్మా కాన్ఫిగర్ CPD = OFF // డేటా EEPROM మెమరీ కోడ్ ప్రొటెక్షన్ బిట్ (డేటా EEPROM కోడ్ రక్షణ ఆఫ్) #pragma config WRT = OFF // ఫ్లాష్ ప్రోగ్రామ్ మెమరీ రైట్ బిట్లను ప్రారంభించండి (రక్షణను వ్రాయండి; అన్ని ప్రోగ్రామ్ మెమరీని EECON నియంత్రణ ద్వారా వ్రాయవచ్చు) #pragma config CP = OFF // ఫ్లాష్ ప్రోగ్రామ్ మెమరీ కోడ్ ప్రొటెక్షన్ బిట్ (కోడ్ ప్రొటెక్షన్ ఆఫ్)
దిగువ కోడ్ పంక్తులు LCD మరియు SPI హెడర్ ఫైళ్ళను సమగ్రపరచడానికి ఉపయోగించబడతాయి, XTAL ఫ్రీక్వెన్సీ మరియు DAC యొక్క CS పిన్ కనెక్షన్ కూడా ప్రకటించబడింది.
PIC SPI ట్యుటోరియల్ మరియు లైబ్రరీ ఇచ్చిన లింక్ వద్ద చూడవచ్చు.
# చేర్చండి
ఈ ప్రాజెక్ట్ కోసం అవసరమైన వేరే కాన్ఫిగరేషన్ కోసం ఫన్సిటన్ SPI_Initialize_Master () కొద్దిగా సవరించబడింది. ఈ సందర్భంలో, SSPSTAT రిజిస్టర్ డేటా అవుట్పుట్ సమయం చివరిలో ఇన్పుట్ డేటా నమూనాగా కాన్ఫిగర్ చేయబడింది మరియు ట్రాన్స్మిట్ వలె కాన్ఫిగర్ చేయబడిన SPI గడియారం క్రియాశీల నుండి నిష్క్రియ గడియార స్థితి మోడ్కు పరివర్తనపై సంభవిస్తుంది. మరొకటి అదే.
రద్దు SPI_Initialize_Master () { TRISC5 = 0; // అవుట్పుట్ SSPSTAT = 0b11000000 గా సెట్ చేయండి; // pg 74/234 SSPCON = 0b00100000; // pg 75/234 TRISC3 = 0; // స్లేవ్ మోడ్ కోసం అవుట్పుట్గా సెట్ చేయండి }
అలాగే, దిగువ ఫంక్షన్ కోసం, SPI_Write () కొద్దిగా సవరించబడుతుంది. SPI ద్వారా ఖచ్చితమైన డేటా ప్రసారాన్ని నిర్ధారించడానికి బఫర్ క్లియర్ అయిన తర్వాత డేటా ట్రాన్స్మిషన్ జరుగుతుంది.
రద్దు SPI_Write (చార్ ఇన్కమింగ్) { SSPBUF = ఇన్కమింగ్; // (! SSPSTATbits.BF) అయితే వినియోగదారు ఇచ్చిన డేటాను బఫర్లో వ్రాయండి ; }
ప్రోగ్రామ్ యొక్క ముఖ్యమైన భాగం MCP4921 డ్రైవర్. SPI పై పూర్తి 16-బిట్ డేటాను అందించడానికి కమాండ్ మరియు డిజిటల్ డేటా కలిసి పంచ్ చేయబడినందున ఇది కొద్దిగా గమ్మత్తైన భాగం. అయితే, కోడ్ వ్యాఖ్యలలో ఆ తర్కం స్పష్టంగా చూపబడింది.
/ * ఈ ఫంక్షన్ డిజిటల్ విలువను అనలాగ్గా మార్చడం కోసం. * / void convert_DAC (సంతకం చేయని పూర్ణాంక విలువ) { / * దశ పరిమాణం = 2 ^ n, కాబట్టి 12bit 2 ^ 12 = 4096 5V సూచన కోసం, దశ 5/4095 = 0.0012210012210012V లేదా 1mV (సుమారు) * / సంతకం చేయని పూర్ణాంక కంటైనర్; సంతకం చేయని పూర్ణాంక MSB; సంతకం చేయని పూర్ణాంక LSB; / * దశ: 1, 12 బిట్ డేటాను కంటైనర్లో నిల్వ చేసింది డేటా 4095 అని అనుకుందాం, బైనరీ 1111 1111 1111 * / కంటైనర్ = విలువ; / * దశ: 2 డమ్మీ 8 బిట్ను సృష్టిస్తోంది. కాబట్టి, 256 ను విభజించడం ద్వారా, ఎగువ 4 బిట్స్ LSB LSB = 0000 1111 * / LSB = కంటైనర్ / 256 లో సంగ్రహించబడతాయి ; / * దశ: 3 4 బిట్ డేటాను గుద్దడంతో ఆకృతీకరణను పంపుతోంది. LSB = 0011 0000 OR 0000 1111. ఫలితం 0011 1111 * / LSB = (0x30) - LSB; / * దశ: 4 కంటైనర్ ఇప్పటికీ 21 బిట్ విలువను కలిగి ఉంది. దిగువ 8 బిట్లను సంగ్రహిస్తుంది. 1111 1111 మరియు 1111 1111 1111. ఫలితం 1111 1111 ఇది MSB * / MSB = 0xFF & కంటైనర్; / * దశ: 4 రెండు బైట్లుగా విభజించి 16 బిట్స్ డేటాను పంపుతోంది. * / DAC_CS = 0; డేటా ట్రాన్స్మిషన్ సమయంలో సిఎస్ తక్కువగా ఉంటుంది. డేటా-షీట్ ప్రకారం దీనికి SPI_Write (LSB) అవసరం ; SPI_ రైట్ (MSB); DAC_CS = 1; }
ప్రధాన ఫంక్షన్లో, 1 వి, 2 వి, 3 వి, 4 వి, మరియు 5 వి యొక్క అవుట్పుట్ను సృష్టించే డిజిటల్ డేటా సృష్టించబడిన చోట 'ఫర్ లూప్' ఉపయోగించబడుతుంది. అవుట్పుట్ వోల్టేజ్ / 0.0012210012210012 మిల్లివోల్ట్కు వ్యతిరేకంగా డిజిటల్ విలువ లెక్కించబడుతుంది.
void main () { system_init (); పరిచయం_ స్క్రీన్ (); పూర్ణాంక సంఖ్య = 0; పూర్ణాంక వోల్ట్ = 0; (1) { కోసం (వోల్ట్ = 1; వోల్ట్ <= MAX_VOLT; వోల్ట్ ++) { సంఖ్య = వోల్ట్ / 0.0012210012210012; క్లియర్_స్క్రీన్ (); lcd_com (FIRST_LINE); lcd_puts ("DATA పంపబడింది: -"); lcd_print_number (సంఖ్య); lcd_com (SECOND_LINE); lcd_puts ("అవుట్పుట్: -"); lcd_print_number (వోల్ట్); lcd_puts ("V"); convert_DAC (సంఖ్య); __ ఆలస్యం_ఎంఎస్ (300); } } }
PIC ఉపయోగించి డిజిటల్ టు అనలాగ్ మార్పిడిని పరీక్షిస్తోంది
మల్టీ మీటర్ ఉపయోగించి నిర్మించిన సర్క్యూట్ పరీక్షించబడుతుంది. దిగువ చిత్రాలలో, అవుట్పుట్ వోల్టేజ్ మరియు డిజిటల్ డేటా LCD లో చూపబడతాయి. మల్టీ మీటర్ దగ్గరి పఠనాన్ని చూపుతోంది.
పని చేసే వీడియోతో పూర్తి కోడ్ క్రింద జోడించబడింది.