Line: 1 to 1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Slide 1: Digital to Analogue ConversionDigital to Analogue Conversion:the mcp4275Lecture 10
Slide 2: Analogue versus digitalUp to now we only treated digital signals:
The world is mostly analogue:
Slide 3: Converting from digital to analogueSince our computer is a digital device we must
Slide 4: Digital to analogue conversionA digital to analogue converter does not really convert into a continuous waveformSince we have digital values as a base, there will be steps in the output waveform The size of these steps depends on the resolution of the DAC What is the smallest step a 12 bit DAC can produce on a 0..5V scale? Slide 5: Can we smooth the output signal?Yes, it is possible to smooth out these steps. We need a low-pass filter, which filters out high frequencies (the abrupt steps we have in the output signal) and lets pass only slower transitions. When looking carefully at the output of our sine generator you will also see these steps. In this case however they come from the limited number of sine values (100) we calculate. To improve the resolution we would have to increase the number of samples and the frequency with which we send these values to the DAC.Slide 6: How does a DAC work?If you want to know more about DAC technology (and you should!) have a look at this excellent tutorial, from which I have copied the above illustration.Slide 7: The MCP4725 12 bit DACAs a demo device we bought the MCP4725 DACThis is a 12 bit DAC which can be accesses by the I2C bus Here is its data sheet and here a photo of the device Slide 8: The I2C busThe I2C bus is an industrial standard 2 wire bus using a data (SDA) and a clock (SCL) line. Adding Vcc and Gnd we need a mere 4 wires to connect a I2C device to the Raspberry Pi cobbler The I2C bus was invented by PhilipsSlide 9: Typical I2C connectionsSlide 10: Open drain signalsOpen drain signals mean that you can pull a line down but you cannot set it to a high level. If nobody pulls the line down, then it is at Vcc level, pulled up by a pull-up register. Like this the contention problem is solved where one device tries to set a line to a high level, while another sets it to low, thus creating a short circuit.Slide 11: I2C Master and slaveThe I2C bus has at least one master (in our case the interface in the Raspberry Pi’s ARM processor) and several slaves We have the following I2C slave devices:
Slide 12: I2C addressingSince there can be several slaves on the bus there must be a means of distinguishing them through addressing: Every I2C slave has a 7 bit address associated with it Usually this address is determined by the manufacturer but often there are address pins on the devices allowing the user to have several devices of the same type on the busSlide 13: I2C buses and I2C addresses on the Raspberry PiThe Raspberry Pi has 2 I2C buses with bus 1 being put onto the cobbler You can find out the addresses of the I2C slaves are currently connected with the i2cdetect commandSlide 14: Initiating an I2C transferSlide 15: Start stop conditionsThe master starts a transfer by creating a start condition:
Slide 16: Data transmissionData are transmitted with the SDA line stable with SCL is highSlide 17: A write cycleA write cycle:After the start condition the device address. The eighth bit, the R/W bit is kept low. The second data byte is considered the register byte and the last one the data byte The slave acknowledges each byte transfer. Slide 18: The read cycleThe read cycle is a bit more complex: First the master sends the slave address with R/W set to write Then it sends the register information. After that another address byte is sent, this time with RW set to read And finally the slave sends the data. The master still sends the clock but releases the SDA line allowing the slave to control itSlide 19: I2C clock frequencyI2C bus supports different transfer speeds:
Slide 20: MCP4725Slide 21: Specs of the MCP4275Slide 22: MCP4275 registersSlide 23: MCP4275 I2C fast writeHow does the I2C write cycle look like in the MCP4275? The MCP4275 fast write cycle write only the DAC register and not the EEPROM. This is enough for what we want to do.Slide 24: MCP4275 normal write cycleSlide 25: Read back the DAC dataSlide 26: pigpio: i2c_openSlide 27: I2C access initialization with pigpioIn addition to opening the library with pigpio_start we now also must make a connection to the I2C driver:Slide 28: Accessing I2C with pigpioComing back to fast write mode, we must write 3 bytes:
Slide 29: i2c_write_byte_dataThe pigpio library provides a function This means we have to split our 12 bit DAC data into 2 parts: The highest 4 bits go into i2c_reg, the lower 8 bits into bValSlide 30: Writing the DAC value, an exampledacValue is a short, while reg and value are unsigned charSlide 31: DAC performanceThere are a number of criteria which characterize the performance of a DAC
Slide 32: Relative accuracySlide 33: Differential non-linearitySlide 34: Offset errorSlide 35: Gain errorSlide 36: Settling TimeComments
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Added: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> > |
|