Advertisement
Guest User

DAC8812 with encoder

a guest
Feb 1st, 2015
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.50 KB | None | 0 0
  1. #include "SPI.h"
  2.  
  3. // Pin 10 = CS
  4. // Pin 11 = Serial data out
  5. // Pin 13 = CLK
  6. // Pin 8 = DACResetPin
  7.  
  8. const int slaveSelectPin = 10;
  9. const int DACResetPin = 8;
  10. int timedelay = 500;
  11. double dbLevel = -30;
  12. double dbIncrement = 0.5;
  13. unsigned int dac_level;
  14. // Address code 3 = Both A and B DACs
  15. int addr_decode = 3;
  16. // Encoder stuff
  17. const int encoderPowerPin = 4;
  18. const int encoderGroundPin = 5;
  19. int encoder0PinA = 6;
  20. int encoder0PinB = 7;
  21. int encoder0Pos = 0;
  22. int encoder0PinALast = LOW;
  23. int n = LOW;
  24.  
  25. void setup() {
  26.   // set the slaveSelectPin as an output:
  27.   pinMode (slaveSelectPin, OUTPUT);
  28.   // Set DAC reset pin high to disable that feature
  29.   pinMode (DACResetPin, OUTPUT);
  30.   digitalWrite(DACResetPin, HIGH);
  31.   // Set up pins for encoder:
  32.   pinMode (encoder0PinA,INPUT);
  33.   pinMode (encoder0PinB,INPUT);
  34.   pinMode (encoderPowerPin, OUTPUT);
  35.   pinMode (encoderGroundPin, OUTPUT);
  36.   digitalWrite(encoderPowerPin,HIGH);
  37.   digitalWrite(encoderGroundPin,LOW);
  38.   // Serial
  39.   Serial.begin (9600);
  40.   // Sleep
  41.   delay(1000);
  42.   Serial.println ("Starting SPI..");
  43.   SPI.begin();
  44.   Serial.println ("Setting volume to 0..");
  45.   DACWrite(addr_decode, 0);
  46. }
  47. //////////////////////////////////////////////////////////////////////////////////////////////
  48. int WriteAndPrintLevel(){
  49.   Serial.print ("dB: ");
  50.   Serial.print (dbLevel);
  51.   Serial.print (" / DAC Level: ");
  52.   Serial.println (dac_level);
  53.   DACWrite(addr_decode, dac_level);
  54. }
  55. int VolumeUp() {
  56.   if (dbLevel < (0-dbIncrement)) {
  57.     dbLevel = dbLevel + dbIncrement;
  58.     dac_level = 65536*(pow(10, (dbLevel/20)));
  59.     WriteAndPrintLevel();
  60.   }
  61. }
  62. int VolumeDown() {
  63.   if (dbLevel > -102.5) {
  64.     dbLevel = dbLevel - dbIncrement;
  65.     dac_level = 65536*(pow(10, (dbLevel/20)));
  66.     WriteAndPrintLevel();
  67.   }
  68. }
  69.  
  70.  
  71. ///////////////////////////////
  72. // Main loop
  73. ////////////////////////////////
  74. void loop() {
  75.   n = digitalRead(encoder0PinA);
  76.   if ((encoder0PinALast == LOW) && (n == HIGH)) {
  77.     if (digitalRead(encoder0PinB) == LOW) {
  78.       VolumeUp();
  79.     } else {
  80.       VolumeDown();
  81.     }
  82.   }
  83.   encoder0PinALast = n;
  84. }
  85.  
  86. ///////////////////////////////
  87. // Function to set DAC level
  88. ////////////////////////////////
  89. void DACWrite(int addr_decode, unsigned int level) {
  90.   digitalWrite(slaveSelectPin,LOW);
  91.   SPI.transfer(addr_decode);
  92.   byte highByte = level >> 8;  
  93.   unsigned int lowBytetemp = level << 8;
  94.   byte lowByte = lowBytetemp >> 8;
  95.   SPI.transfer(highByte);
  96.   SPI.transfer(lowByte);
  97.   digitalWrite(slaveSelectPin,HIGH);
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement