ADC
来自Jack's Lab
(版本间的差异)
(→Atmega328) |
(→Atmega328) |
||
第115行: | 第115行: | ||
其中REFS1和REFS0用于设置Vref,这里应该配置为01对应Vcc口 | 其中REFS1和REFS0用于设置Vref,这里应该配置为01对应Vcc口 | ||
+ | |||
[[文件:328p-admux3.png]] | [[文件:328p-admux3.png]] | ||
+ | |||
+ | MUX3…0用于选择ADC的输入Vin,这里应配置为内部1.1v对应的1110 | ||
<br><br> | <br><br> |
2019年4月15日 (一) 23:57的版本
目录 |
1 Overview
AD/DA 芯片几乎被模拟巨头 ADI 垄断了。当年因为Wassenaar Arrangement,美国要求最高端的技术要禁售给中国。
ADI 有好几百款芯片在禁售单上。其10bit 100MSPS以上的 ADC 芯片都是禁售的,甚至连 AD/DA 研发部门都罕有华人
2 MCP3421
- 18 bit ADC in a SOT-23-6 package, I²C interface
- Self calibration of internal offset and Gain per each Conversion
- On-board Voltage Reference: 2.048V +-0.05%, 5ppm/C
- On-board PGA (Programmable Gain Amplifier): x1, x2, x4, x8
- Programmable Data Rate Options:
- 3.75 SPS (18bit)
- 15 SPS (16bits)
- 60 SPS (14bits)
- 240 SPS (12bits)
- Low current consumption: 145 uA (Continuous Conversion) or 39 uA (One-Shot Conversion with 1 SPS)
- 2.7V to 5.5V power supply
- -40 - 125 C
3 CS53L30
- System Features
- Native (no PLL required) support for 6-/12-MHz, 6.144-/12.288-MHz, 5.6448-/11.2896-MHz, or 19.2-MHz master clock rates and 8- to 48-kHz audio sample rates
- Master or Slave Mode. Clock dividers can be used to generate common audio clocks from single-master clock input.
- Low power consumption
- Less than 4.5-mW stereo (16 kHz) analog mic record
- Less than 2.5-mW mono (8 kHz) analog mic record
- Selectable mic bias and digital interface logic voltages
- High-speed (400-kHz) I²C control port
https://www.cirrus.com/en/pubs/proDatasheet/CS53L30_F2.pdf
4 ADAS1000
4.1 ADS7844
4.2 ADS7688
5 Atmega328
8-channel 10-bit ADC in TQFP and QFN/MLF package
analogReference(INTERNAL);use internal 1.1V as Avref //analogReference(DEFAULT); use AVcc as AVref
or 选择内部 1.1V 作为 Vref,反算 Vin:
ADC = Vin/Vref * 2^n, n = 10 in 328p
#include "Arduino.h" #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) #define ADMUX_VCCWRT1V1 (_BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)) #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) #define ADMUX_VCCWRT1V1 (_BV(MUX5) | _BV(MUX0)) #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) #define ADMUX_VCCWRT1V1 (_BV(MUX3) | _BV(MUX2)) #else #define ADMUX_VCCWRT1V1 (_BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)) #endif float Read_Volts(void) { // Read 1.1V reference against AVcc // set the reference to Vcc and the measurement to the internal 1.1V reference if (ADMUX != ADMUX_VCCWRT1V1) { ADMUX = ADMUX_VCCWRT1V1; // Bandgap reference start-up time: max 70us // Wait for Vref to settle. delayMicroseconds(350); } // Start conversion and wait for it to finish. ADCSRA |= _BV(ADSC); while (bit_is_set(ADCSRA,ADSC)) {}; // Result is now stored in ADC. // Calculate Vcc (in V) float vcc = 1.1*1024.0 / ADC; return vcc; }
其中REFS1和REFS0用于设置Vref,这里应该配置为01对应Vcc口
MUX3…0用于选择ADC的输入Vin,这里应配置为内部1.1v对应的1110
6 参考