// Copyright 2009 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// -----------------------------------------------------------------------------
//
// Driver for a MCP492x DAC (SPI single/dual 12-bits DAC).
#ifndef AVRLIB_DEVICES_MCP492X_H_
#define AVRLIB_DEVICES_MCP492X_H_
#include "avrlib/spi.h"
#include "avrlib/op.h"
using namespace avrlib;
namespace avrlib {
static const uint8_t kDacSpeed = 2;
enum DacVoltageReference {
BUFFERED_REFERENCE,
UNBUFFERED_REFERENCE
};
template
class Dac {
public:
enum {
buffer_size = 0,
data_size = 8,
};
Dac() { }
static void Init() {
Interface::Init();
}
static inline void Write(uint8_t value) {
Write(value, 0);
}
static inline void Write(uint8_t value, uint8_t channel) {
value = U8Swap4(value);
uint8_t command;
command = (value & 0x0f) | 0x10;
if (channel) {
command |= 0x80;
}
if (voltage_reference == BUFFERED) {
command |= 0x40;
}
if (gain == 1) {
command |= 0x20;
}
Interface::WriteWord(command, value & 0xf0);
}
};
} // namespace avrlib
#endif // AVRLIB_DEVICES_MCP492X_H_