|
- // 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 <http://www.gnu.org/licenses/>.
- //
- // -----------------------------------------------------------------------------
- //
- // 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<typename Interface,
- DacVoltageReference voltage_reference = UNBUFFERED_REFERENCE,
- uint8_t gain = 1>
- 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_
|