- MCP4921 DAC (Digital to Analog Converter)
- Kinakailangan ang Mga Bahagi
- Skematika
- Paliwanag sa Code
- Pagsubok sa Digital to Analog Conversion gamit ang PIC
Ang Digital at Analog ay isang mahalagang bahagi ng Electronics. Karamihan sa mga aparato ay may parehong ADC pati na rin ang DAC at ginagamit ang mga ito kapag may pangangailangan ng pag-convert ng mga signal alinman sa analog sa digital o digital sa analog. Gayundin ang mga tunay na signal ng mundo tulad ng tunog at ilaw ay analog sa likas na katangian, kaya't tuwing kailangang gamitin ang mga tunay na signal ng mundo, ang mga digital signal ay dapat na mai-convert sa analog, halimbawa upang makagawa ng tunog gamit ang mga Speaker at upang makontrol ang isang mapagkukunan ng ilaw.
Ang isa pang uri ng DAC ay isang Pulse Width Modulator (PWM). Ang isang PWM ay tumatagal ng isang digital na salita at bumubuo ng isang digital na pulso na may variable na lapad ng pulso. Kapag ang signal na ito ay naipasa sa pamamagitan ng isang filter, ang resulta ay magiging purong analog. Ang isang analog signal ay maaaring magkaroon ng maraming uri ng data sa isang senyas.
Sa tutorial na ito, isasabay namin ang DAC MCP4921 sa Microchip PIC16F877A para sa digital sa analog na conversion.
Dito sa tutorial na ito i-convert namin ang digital signal sa isang analog signal at ipapakita ang input na digital na halaga at output na halagang analog sa 16x2 LCD. Magbibigay ito ng 1V, 2V, 3V, 4V, at 5V bilang pangwakas na output ng analog na ipinakita sa video na ibinigay sa dulo. Maaari mo pang malaman ang tungkol sa DAC sa aming mahalagang tutorial ng DAC na nakikipag-ugnay sa mga board na Raspberry Pi, Arduino at STM32.
Maaaring magamit ang DAC sa maraming mga application tulad ng Motor control, Control Brightness ng LED Lights, Audio Amplifier, Video Encoder, Mga Data Acqu acquisition System atbp Bago direktang tumalon sa bahagi ng interfacing, mahalagang magkaroon ng isang pangkalahatang ideya tungkol sa MCP4921.
MCP4921 DAC (Digital to Analog Converter)
Ang MCP4921 ay isang 12 bit DAC, kaya't ang MCP4921 ay magbibigay ng 12 piraso ng resolusyon ng output. Ang resolusyon ng DAC ay nangangahulugang bilang ng mga digital bit na maaaring mai-convert sa analog signal. Ilan ang mga halagang maaari nating makamit mula dito ay batay sa pormula. Para sa 12-bit, ito ay = 4096. Nangangahulugan ito na ang 12-bit na resolusyon ng DAC ay maaaring gumawa ng 4096 iba't ibang mga output.
Sa pamamagitan ng paggamit ng halagang ito, madali makakalkula ng isang boltahe ng analog na hakbang. Para sa pagkalkula ng mga hakbang, kinakailangan ang boltahe ng sanggunian. Tulad ng boltahe ng lohika para sa aparato ay 5V, ang boltahe ng hakbang ay 5/4095 (4096-1 dahil ang panimulang punto para sa digital ay hindi 1, ito ay 0), na kung saan ay 0.00122100122 millivolt. Kaya, ang isang pagbabago ng 1 bit ay magbabago ng output ng analog na may 0.00122100122.
Kaya, iyon ang bahagi ng conversion. Ang MCP4921 ay isang 8-pin IC. Ang diagram ng pin at ang paglalarawan ay matatagpuan sa ibaba.
Ang MCP4921 IC ay nakikipag-usap sa microcontroller ng SPI protocol. Para sa komunikasyon ng SPI, ang isang aparato ay dapat na master, na nagsusumite ng data o utos sa panlabas na aparato na konektado bilang isang alipin. Sa sistema ng komunikasyon ng SPI, maraming mga aparato ng alipin ang maaaring maiugnay sa iisang Master Device.
Upang isumite ang data at ang utos, mahalagang maunawaan ang rehistro ng utos.
Sa imahe sa ibaba, ipinakita ang rehistro ng utos,
Ang rehistro ng utos ay isang 16-bit na rehistro. Ang bit-15 hanggang bit-12 ay ginagamit para sa utos ng pagsasaayos. Ang input ng data at ang pagsasaayos ay malinaw na ipinakita sa imahe sa itaas. Sa proyektong ito, ang MCP4921 ay gagamitin bilang sumusunod na pagsasaayos-
Bilang ng Bit |
Pag-configure |
Halaga ng Pag-configure |
Bit 15 |
Ang DAC A |
0 |
Bit 14 |
Hindi pinigilan |
0 |
Bit 13 |
1x (V OUT * D / 4096) |
1 |
Bit 12 |
Output Power Down Control Bit |
1 |
Kaya't ang Binary ay 0011 kasama ang data na tinutukoy ng D11 hanggang D0 na mga piraso ng rehistro. Ang 16-bit data 0011 xxxx xxxx xxxx ay kailangang isumite kung saan ang unang 4 na bit ng MSB ay ang pagsasaayos at ang natitira ay ang LSB. Ito ay magiging mas malinaw sa pamamagitan ng pagtingin sa sumulat ng diagram ng orasan ng utos.
Tulad ng diagram ng tiyempo at datasheet, ang CS pin ay mababa para sa buong panahon ng pagsulat ng utos sa MCP4921.
Ngayon na ang oras upang i-interface ang aparato sa hardware at pagsulat ng mga code.
Kinakailangan ang Mga Bahagi
Para sa proyektong ito, ang mga sumusunod na sangkap ay kinakailangan-
- MCP4921
- PIC16F877A
- 20 MHz Crystal
- Isang Display 16x2 character LCD.
- 2k risistor -1 pc
- 33pF capacitor - 2 mga PC
- 4.7k risistor - 1 pc
- Isang multi-meter upang masukat ang output boltahe
- Isang breadboard
- 5V power supply, maaaring gumana ang isang charger ng telepono.
- Maraming mga wire ng hookup o berg wires.
- Kapaligiran ng programa ng microchip na may Programmer kit at IDE na may tagatala
Skematika
Ang Circuit Diagram para sa interfacing DAC4921 sa PIC Microcontroller ay ibinibigay sa ibaba:
Ang circuit ay itinayo sa Breadboard-
Paliwanag sa Code
Ang kumpletong code para sa pag - convert ng mga Digital signal sa analog na may PIC16F877A ay ibinigay sa pagtatapos ng artikulo. Tulad ng nakasanayan, kailangan muna naming itakda ang mga config bit sa PIC microcontroller.
// PIC16F877A Configuration Bit Setting // 'C' source line config statements // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT naka-disable) # pragma config PWRTE = OFF // Power-up Timer Paganahin ang bit (hindi pinagana ang PWRT) #pragma config BOREN = ON // Brown-out I-reset Paganahin ang bit (pinagana ang BOR) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Paganahin ang bit (Ang RB3 / PGM pin ay may function na PGM; pinagana ang mababang-boltahe na programa) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Proteksyon ang code ng EEPROM code) #pragma config WRT = OFF // Flash Program Memory Sumulat Paganahin ang mga bit (Isulat ang proteksyon; ang lahat ng memorya ng programa ay maaaring maisulat ng kontrol ng EECON) #pragma config CP = OFF // Flash Program Memory Code Protection Protection (Proteksyon ang code)
Ang mga linya ng code sa ibaba ay ginagamit para sa pagsasama ng mga file ng header ng LCD at SPI, din ang XTAL Frequency at ang koneksyon ng CS pin ng DAC ay idineklara.
Ang PIC SPI tutorial at library ay matatagpuan sa ibinigay na link.
# isama
Ang Funciton ang SPI_Initialize_Master () ay bahagyang nabago para sa isang kakaibang pagsasaayos na kinakailangan para sa proyektong ito. Sa kasong ito, ang rehistro ng SSPSTAT ay na-configure sa isang paraan na ang data ng pag-input ay na-sample sa pagtatapos ng oras ng output ng data at ang naka-configure ring SPI na orasan habang ang Transmit ay nangyayari sa paglipat mula sa aktibo hanggang sa idle na mode ng estado ng orasan. Ang iba ay pareho.
walang bisa SPI_Initialize_Master () { TRISC5 = 0; // Itakda bilang output SSPSTAT = 0b11000000; // pg 74/234 SSPCON = 0b00100000; // pg 75/234 TRISC3 = 0; // Itakda bilang output para sa mode ng alipin }
Gayundin, para sa pagpapaandar sa ibaba, ang SPI_Write () ay binago nang bahagya. Magaganap ang paghahatid ng data pagkatapos ma-clear ang buffer para sa pagtiyak na perpektong paghahatid ng data sa SPI.
walang bisa SPI_Write (char papasok) { SSPBUF = papasok; // Isulat ang ibinigay na data ng gumagamit sa buffer habang (! SSPSTATbits.BF); }
Ang mahalagang bahagi ng programa ay ang driver ng MCP4921. Ito ay bahagyang mapaglalang bahagi habang ang utos at digital na data ay na-punched nang magkasama upang magbigay ng kumpletong 16-bit na data sa SPI. Gayunpaman, ang lohika na iyon ay malinaw na ipinapakita sa mga komento sa code.
/ * Ang Function na ito ay para sa pag-convert ng digital na halaga sa analog. * / void convert_DAC (unsigned int halaga) { / * Laki ng Hakbang = 2 ^ n, Samakatuwid 12bit 2 ^ 12 = 4096 Para sa 5V na sanggunian, ang hakbang ay 5/4095 = 0.0012210012210012V o 1mV (tinatayang) * / unsigned int container; unsigned int MSB; unsigned int LSB; / * Hakbang: 1, naimbak ang 12 bit na data sa lalagyan Ipagpalagay na ang data ay 4095, sa binary 1111 1111 1111 * / container = halaga; / * Hakbang: 2 Lumilikha ng Dummy 8 nang kaunti. Kaya, sa pamamagitan ng paghahati ng 256, ang itaas na 4 na piraso ay nakuha sa LSB LSB = 0000 1111 * / LSB = container / 256; / * Hakbang: 3 Ipinapadala ang pagsasaayos gamit ang pagsuntok sa 4 na data. LSB = 0011 0000 O 0000 1111. Ang resulta ay 0011 1111 * / LSB = (0x30) - LSB; / * Hakbang: 4 na lalagyan ay mayroon pa ring 21bit na halaga. Kinukuha ang mas mababang 8 piraso. 1111 1111 AT 1111 1111 1111. Ang resulta ay 1111 1111 na kung saan ay MSB * / MSB = 0xFF & container; / * Hakbang: 4 Ipinapadala ang data ng 16bits sa pamamagitan ng paghahati sa dalawang byte. * / DAC_CS = 0; // Ang CS ay mababa habang nagpapadala ng data. Tulad ng bawat sheet ng data kinakailangan ang SPI_Write (LSB); SPI_Write (MSB); DAC_CS = 1; }
Sa pangunahing pagpapaandar, ginagamit ang isang 'para sa loop' kung saan nilikha ang digital data para sa paglikha ng output ng 1V, 2V, 3V, 4V, at 5V. Ang digital na halaga ay kinakalkula laban sa Output boltahe / 0.0012210012210012 millivolt.
void main () { system_init (); panimula_screen (); int number = 0; int volt = 0; habang (1) { para sa (volt = 1; volt <= MAX_VOLT; volt ++) { number = volt / 0.0012210012210012; malinaw na screen(); lcd_com (FIRST_LINE); lcd_puts ("DATA Sent: -"); lcd_print_number (numero); lcd_com (SECOND_LINE); lcd_puts ("Output: -"); lcd_print_number (volt); lcd_puts ("V"); convert_DAC (numero); __delay_ms (300); } } }
Pagsubok sa Digital to Analog Conversion gamit ang PIC
Ang built circuit ay nasubok gamit ang Multi-meter. Sa mga imaheng nasa ibaba, ang boltahe ng output at ang digital data ay ipinapakita sa LCD. Ang Multi-meter ay nagpapakita ng malapit na pagbabasa.
Ang kumpletong Code na may gumaganang video ay nakakabit sa ibaba.