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.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /***************************************************************
  2. *
  3. * External DAC for Alligator Board
  4. *
  5. ****************************************************************/
  6. #include "../../inc/MarlinConfig.h"
  7. #if MB(ALLIGATOR)
  8. #include "dac_dac084s085.h"
  9. #include "../../MarlinCore.h"
  10. #include "../../HAL/shared/Delay.h"
  11. dac084s085::dac084s085() { }
  12. void dac084s085::begin() {
  13. uint8_t externalDac_buf[] = { 0x20, 0x00 }; // all off
  14. // All SPI chip-select HIGH
  15. SET_OUTPUT(DAC0_SYNC_PIN);
  16. #if HAS_MULTI_EXTRUDER
  17. SET_OUTPUT(DAC1_SYNC_PIN);
  18. #endif
  19. cshigh();
  20. spiBegin();
  21. //init onboard DAC
  22. DELAY_US(2);
  23. WRITE(DAC0_SYNC_PIN, LOW);
  24. DELAY_US(2);
  25. WRITE(DAC0_SYNC_PIN, HIGH);
  26. DELAY_US(2);
  27. WRITE(DAC0_SYNC_PIN, LOW);
  28. spiSend(SPI_CHAN_DAC, externalDac_buf, COUNT(externalDac_buf));
  29. WRITE(DAC0_SYNC_PIN, HIGH);
  30. #if HAS_MULTI_EXTRUDER
  31. //init Piggy DAC
  32. DELAY_US(2);
  33. WRITE(DAC1_SYNC_PIN, LOW);
  34. DELAY_US(2);
  35. WRITE(DAC1_SYNC_PIN, HIGH);
  36. DELAY_US(2);
  37. WRITE(DAC1_SYNC_PIN, LOW);
  38. spiSend(SPI_CHAN_DAC, externalDac_buf, COUNT(externalDac_buf));
  39. WRITE(DAC1_SYNC_PIN, HIGH);
  40. #endif
  41. return;
  42. }
  43. void dac084s085::setValue(const uint8_t channel, const uint8_t value) {
  44. if (channel >= 7) return; // max channel (X,Y,Z,E0,E1,E2,E3)
  45. const uint8_t externalDac_buf[] = {
  46. 0x10 | ((channel > 3 ? 7 : 3) - channel << 6) | (value >> 4),
  47. 0x00 | (value << 4)
  48. };
  49. // All SPI chip-select HIGH
  50. cshigh();
  51. if (channel > 3) { // DAC Piggy E1,E2,E3
  52. WRITE(DAC1_SYNC_PIN, LOW);
  53. DELAY_US(2);
  54. WRITE(DAC1_SYNC_PIN, HIGH);
  55. DELAY_US(2);
  56. WRITE(DAC1_SYNC_PIN, LOW);
  57. }
  58. else { // DAC onboard X,Y,Z,E0
  59. WRITE(DAC0_SYNC_PIN, LOW);
  60. DELAY_US(2);
  61. WRITE(DAC0_SYNC_PIN, HIGH);
  62. DELAY_US(2);
  63. WRITE(DAC0_SYNC_PIN, LOW);
  64. }
  65. DELAY_US(2);
  66. spiSend(SPI_CHAN_DAC, externalDac_buf, COUNT(externalDac_buf));
  67. }
  68. void dac084s085::cshigh() {
  69. WRITE(DAC0_SYNC_PIN, HIGH);
  70. #if HAS_MULTI_EXTRUDER
  71. WRITE(DAC1_SYNC_PIN, HIGH);
  72. #endif
  73. WRITE(SPI_EEPROM1_CS_PIN, HIGH);
  74. WRITE(SPI_EEPROM2_CS_PIN, HIGH);
  75. WRITE(SPI_FLASH_CS_PIN, HIGH);
  76. WRITE(SD_SS_PIN, HIGH);
  77. }
  78. #endif // MB(ALLIGATOR)