mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
e2cd8c1a75
+ added powerDownCode (code/interface is experimental, test + refactor needed) + added RDY test in several places + removed smooth2Value() => sample sketch + extended test sketch + tested on 100, 400, 800 KHz (works)
99 lines
1.9 KiB
C++
99 lines
1.9 KiB
C++
//
|
|
// FILE: smooth2Value.ino
|
|
// AUTHOR: Rob Tillaart
|
|
// VERSION: 0.1.00
|
|
// PURPOSE: test mcp4725 lib
|
|
// DATE: 2013-12-01
|
|
// URL:
|
|
//
|
|
// Released to the public domain
|
|
//
|
|
|
|
#include <Wire.h>
|
|
#include "MCP4725.h"
|
|
|
|
MCP4725 DAC(0x62); // 0x62 or 0x63
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
|
|
Serial.print("MCP4725 test program: ");
|
|
Serial.println(MCP4725_VERSION);
|
|
|
|
DAC.begin();
|
|
|
|
Serial.print("\nValue:\t");
|
|
Serial.println(DAC.getValue());
|
|
Serial.println();
|
|
|
|
|
|
Serial.println("smooth2Value(2000, 10)");
|
|
DAC.smooth2Value(2000, 10);
|
|
Serial.print("Value:\t");
|
|
Serial.println(DAC.getValue());
|
|
Serial.println();
|
|
|
|
Serial.println("smooth2Value(100, 50)");
|
|
DAC.smooth2Value(100, 10);
|
|
Serial.print("Value:\t");
|
|
Serial.println(DAC.getValue());
|
|
Serial.println();
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
Serial.println("\n\nPERFORMANCE\n");
|
|
Serial.print("TWBR:\t");
|
|
Serial.println(TWBR);
|
|
Serial.println();
|
|
|
|
uint32_t start = micros();
|
|
for (int i=0; i< 100; i++)
|
|
{
|
|
DAC.smooth2Value(i*10, 10);
|
|
}
|
|
uint32_t end = micros();
|
|
Serial.print("100x DAC.smooth2Value(i*10, 10):\t");
|
|
Serial.println(end - start);
|
|
|
|
Serial.print("\nDone... (start triangle mode)");
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
// different gradients
|
|
DAC.smooth2Value(4095, 4096);
|
|
DAC.smooth2Value(0, 4096);
|
|
DAC.smooth2Value(4095, 2048);
|
|
DAC.smooth2Value(0, 2048);
|
|
DAC.smooth2Value(4095, 1024);
|
|
DAC.smooth2Value(0, 1024);
|
|
}
|
|
|
|
|
|
int smooth2Value(uint16_t value, uint8_t steps)
|
|
{
|
|
static int _lastValue = 0;
|
|
|
|
// speed optimization
|
|
if (value == _lastValue) return 0;
|
|
if (value > MCP4725_MAXVALUE) return MCP4725_VALUE_ERROR;
|
|
if (steps == 0) steps++;
|
|
|
|
uint16_t delta = (value - _lastValue)/steps;
|
|
if (delta > 0)
|
|
{
|
|
uint16_t v = _lastValue;
|
|
for (int i=0; i < steps-1; i++)
|
|
{
|
|
v += delta;
|
|
DAC.setValue(v);
|
|
}
|
|
}
|
|
// be sure to get the end value right
|
|
int rv = DAC.setValue(value);
|
|
_lastValue = value;
|
|
return rv;
|
|
}
|
|
|