My Marlin configs for Fabrikator Mini and CTC i3 Pro B
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

dac_dac084s085.cpp 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /***************************************************************
  2. *
  3. * External DAC for Alligator Board
  4. *
  5. ****************************************************************/
  6. #include "Marlin.h"
  7. #if MB(ALLIGATOR)
  8. #include "stepper.h"
  9. #include "dac_dac084s085.h"
  10. dac084s085::dac084s085() {
  11. return ;
  12. }
  13. void dac084s085::begin() {
  14. uint8_t externalDac_buf[2] = {0x20,0x00};//all off
  15. // All SPI chip-select HIGH
  16. pinMode (DAC0_SYNC, OUTPUT);
  17. digitalWrite( DAC0_SYNC , HIGH );
  18. #if EXTRUDERS > 1
  19. pinMode (DAC1_SYNC, OUTPUT);
  20. digitalWrite( DAC1_SYNC , HIGH );
  21. #endif
  22. digitalWrite( SPI_EEPROM1_CS , HIGH );
  23. digitalWrite( SPI_EEPROM2_CS , HIGH );
  24. digitalWrite( SPI_FLASH_CS , HIGH );
  25. digitalWrite( SS_PIN , HIGH );
  26. spiBegin();
  27. //init onboard DAC
  28. delayMicroseconds(2U);
  29. digitalWrite( DAC0_SYNC , LOW );
  30. delayMicroseconds(2U);
  31. digitalWrite( DAC0_SYNC , HIGH );
  32. delayMicroseconds(2U);
  33. digitalWrite( DAC0_SYNC , LOW );
  34. spiSend(SPI_CHAN_DAC,externalDac_buf , 2);
  35. digitalWrite( DAC0_SYNC , HIGH );
  36. #if EXTRUDERS > 1
  37. //init Piggy DAC
  38. delayMicroseconds(2U);
  39. digitalWrite( DAC1_SYNC , LOW );
  40. delayMicroseconds(2U);
  41. digitalWrite( DAC1_SYNC , HIGH );
  42. delayMicroseconds(2U);
  43. digitalWrite( DAC1_SYNC , LOW );
  44. spiSend(SPI_CHAN_DAC,externalDac_buf , 2);
  45. digitalWrite( DAC1_SYNC , HIGH );
  46. #endif
  47. return;
  48. }
  49. void dac084s085::setValue(uint8_t channel, uint8_t value) {
  50. if(channel >= 7) // max channel (X,Y,Z,E0,E1,E2,E3)
  51. return;
  52. if(value > 255) value = 255;
  53. uint8_t externalDac_buf[2] = {0x10,0x00};
  54. if(channel > 3)
  55. externalDac_buf[0] |= (7 - channel << 6);
  56. else
  57. externalDac_buf[0] |= (3 - channel << 6);
  58. externalDac_buf[0] |= (value>>4);
  59. externalDac_buf[1] |= (value<<4);
  60. // All SPI chip-select HIGH
  61. digitalWrite( DAC0_SYNC , HIGH );
  62. #if EXTRUDERS > 1
  63. digitalWrite( DAC1_SYNC , HIGH );
  64. #endif
  65. digitalWrite( SPI_EEPROM1_CS , HIGH );
  66. digitalWrite( SPI_EEPROM2_CS , HIGH );
  67. digitalWrite( SPI_FLASH_CS , HIGH );
  68. digitalWrite( SS_PIN , HIGH );
  69. if(channel > 3) { // DAC Piggy E1,E2,E3
  70. digitalWrite(DAC1_SYNC , LOW);
  71. delayMicroseconds(2U);
  72. digitalWrite(DAC1_SYNC , HIGH);
  73. delayMicroseconds(2U);
  74. digitalWrite(DAC1_SYNC , LOW);
  75. }
  76. else { // DAC onboard X,Y,Z,E0
  77. digitalWrite(DAC0_SYNC , LOW);
  78. delayMicroseconds(2U);
  79. digitalWrite(DAC0_SYNC , HIGH);
  80. delayMicroseconds(2U);
  81. digitalWrite(DAC0_SYNC , LOW);
  82. }
  83. delayMicroseconds(2U);
  84. spiSend(SPI_CHAN_DAC,externalDac_buf , 2);
  85. return;
  86. }
  87. #endif