Pada percobaan ini diukur frekuensi & perioda konversi DAC (Digital to Analog Converter) tipe MCP4725 pada modul Arduino Nano dengan prosesor ATmega328.
Rangkaian sistem adalah sebagai berikut
Kode yang dipakai untuk pengujian adalah sebagai berikut:
// idea from https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog-converter-hookup-guide/all
#define MCP4725_ADDR 0x60
#include <Wire.h> //Include the Wire library to talk I2C
int counter; // how many iterations
int time_begin = 0;
int time_end = 0;
int duration;
void setup() {
Wire.begin();
Serial.begin(115200);
counter = 0;
Serial.println("start benchmark");
}
//---------------------------------------------------
void loop() {
int value; // angka yang ditulis
value = 0; // minimum value
Wire.beginTransmission(MCP4725_ADDR);
Wire.write(64); // cmd to update the DAC
Wire.write(value >> 4); // the 8 most significant bits...
Wire.write((value & 15) << 4); // the 4 least significant bits...
Wire.endTransmission();
value = 4095; // maximum value
Wire.beginTransmission(MCP4725_ADDR);
Wire.write(64); // cmd to update the DAC
Wire.write(value >> 4); // the 8 most significant bits...
Wire.write((value & 15) << 4); // the 4 least significant bits...
Wire.endTransmission();
counter = counter + 1;
if (counter >= 10000) {
float period;
int time_now = millis();
counter = 0;
duration = time_now - time_begin;
period = duration / 10000.0 / 2.0 ;
Serial.print("period (ms): ");
Serial.println(period);
// prepare next round
time_begin = time_now;
}
}
Daftar Isi
I2C 100 kHz
ATmega328 menggunakan 2 frekuensi I2C: 100 kHz dan 400 kHz. Percoban pertama menggunakan kecepatan default adalah 100 kHz.
Sinyal yang dihasilkan pada output MCP4725 adalah sebagai berikut:
Tampilan pada serial monitor adalah sebagai berikut:
start benchmark
period (ms): 0.43
period (ms): 0.43
period (ms): 0.43
period (ms): 0.43
period (ms): 0.43
period (ms): 0.43
Pengukuran dengan osiloskop menunjukkan sinyal persegi dengan frekuensi 1,166 kHz
Jumlah transisi adalah 2x frekuensi ini, jadi frekuensi konversi adalah 1,166 x 2 = 2,332 kHz
I2C 400 kHz
Pada pengukuran ini, kecepatan I2C dinaikkan menjadi 400 kHz. Caranya menggunakan fungsi Wire.setClock()
Perioda menjadi 0,15 ms
start benchmark
period (ms): 0.15
period (ms): 0.15
period (ms): 0.15
period (ms): 0.15
period (ms): 0.15
Output DAC diukur dengan osiloskop, dengan hasil sebagai berikut
Frekuensi output adalah 3,41733 kHz, sehingga frekuensi DAC adalah 2x 3,417 = 6,834 kHz
Kesimpulan
Dengan clock I2C 100 kHz, didapatkan
- Perioda konversi ADC adalah 0,43 ms
- frekuensi konversi ADC adalah 2,332 kHz
Dengan clock I2C 400 kHz, didapatkan
- Perioda konversi ADC adalah 0,15 ms
- frekuensi konversi ADC adalah 6,384 kHz
Referensi
- Datasheet MCP4725
- DAC MCP4725
- kode di https://github.com/waskita/embedded/tree/master/nano-mcp4725