Use fastio for Alligator dac084s085

This commit is contained in:
Scott Lahteine 2017-11-05 19:13:40 -06:00
parent c5d95d318b
commit 297666ea14
2 changed files with 44 additions and 57 deletions

View file

@ -13,100 +13,85 @@
#include "../../Marlin.h" #include "../../Marlin.h"
#include "../../module/stepper.h" #include "../../module/stepper.h"
dac084s085::dac084s085() { dac084s085::dac084s085() { }
return ;
}
void dac084s085::begin() { void dac084s085::begin() {
uint8_t externalDac_buf[2] = {0x20,0x00};//all off uint8_t externalDac_buf[] = { 0x20, 0x00 }; // all off
// All SPI chip-select HIGH // All SPI chip-select HIGH
pinMode(DAC0_SYNC, OUTPUT); SET_OUTPUT(DAC0_SYNC);
digitalWrite( DAC0_SYNC , HIGH );
#if EXTRUDERS > 1 #if EXTRUDERS > 1
pinMode(DAC1_SYNC, OUTPUT); SET_OUTPUT(DAC1_SYNC);
digitalWrite( DAC1_SYNC , HIGH );
#endif #endif
digitalWrite( SPI_EEPROM1_CS , HIGH ); cshigh();
digitalWrite( SPI_EEPROM2_CS , HIGH );
digitalWrite( SPI_FLASH_CS , HIGH );
digitalWrite( SS_PIN , HIGH );
spiBegin(); spiBegin();
//init onboard DAC //init onboard DAC
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite( DAC0_SYNC , LOW ); WRITE(DAC0_SYNC, LOW);
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite( DAC0_SYNC , HIGH ); WRITE(DAC0_SYNC, HIGH);
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite( DAC0_SYNC , LOW ); WRITE(DAC0_SYNC, LOW);
spiSend(SPI_CHAN_DAC,externalDac_buf , 2); spiSend(SPI_CHAN_DAC, externalDac_buf, COUNT(externalDac_buf));
digitalWrite( DAC0_SYNC , HIGH ); WRITE(DAC0_SYNC, HIGH);
#if EXTRUDERS > 1 #if EXTRUDERS > 1
//init Piggy DAC //init Piggy DAC
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite( DAC1_SYNC , LOW ); WRITE(DAC1_SYNC, LOW);
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite( DAC1_SYNC , HIGH ); WRITE(DAC1_SYNC, HIGH);
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite( DAC1_SYNC , LOW ); WRITE(DAC1_SYNC, LOW);
spiSend(SPI_CHAN_DAC,externalDac_buf , 2); spiSend(SPI_CHAN_DAC, externalDac_buf, COUNT(externalDac_buf));
digitalWrite( DAC1_SYNC , HIGH ); WRITE(DAC1_SYNC, HIGH);
#endif #endif
return; return;
} }
void dac084s085::setValue(uint8_t channel, uint8_t value) { void dac084s085::setValue(const uint8_t channel, const uint8_t value) {
if(channel >= 7) // max channel (X,Y,Z,E0,E1,E2,E3) if (channel >= 7) return; // max channel (X,Y,Z,E0,E1,E2,E3)
return;
if(value > 255) value = 255;
uint8_t externalDac_buf[2] = {0x10,0x00}; const uint8_t externalDac_buf[] = {
0x10 | ((channel > 3 ? 7 : 3) - channel << 6) | (value >> 4),
if(channel > 3) 0x00 | (value << 4)
externalDac_buf[0] |= (7 - channel << 6); };
else
externalDac_buf[0] |= (3 - channel << 6);
externalDac_buf[0] |= (value >> 4);
externalDac_buf[1] |= (value << 4);
// All SPI chip-select HIGH // All SPI chip-select HIGH
digitalWrite( DAC0_SYNC , HIGH ); cshigh();
#if EXTRUDERS > 1
digitalWrite( DAC1_SYNC , HIGH );
#endif
digitalWrite( SPI_EEPROM1_CS , HIGH );
digitalWrite( SPI_EEPROM2_CS , HIGH );
digitalWrite( SPI_FLASH_CS , HIGH );
digitalWrite( SS_PIN , HIGH );
if(channel > 3) { // DAC Piggy E1,E2,E3 if (channel > 3) { // DAC Piggy E1,E2,E3
WRITE(DAC1_SYNC, LOW);
digitalWrite(DAC1_SYNC , LOW);
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite(DAC1_SYNC , HIGH); WRITE(DAC1_SYNC, HIGH);
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite(DAC1_SYNC , LOW); WRITE(DAC1_SYNC, LOW);
} }
else { // DAC onboard X,Y,Z,E0 else { // DAC onboard X,Y,Z,E0
WRITE(DAC0_SYNC, LOW);
digitalWrite(DAC0_SYNC , LOW);
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite(DAC0_SYNC , HIGH); WRITE(DAC0_SYNC, HIGH);
delayMicroseconds(2U); delayMicroseconds(2U);
digitalWrite(DAC0_SYNC , LOW); WRITE(DAC0_SYNC, LOW);
} }
delayMicroseconds(2U); delayMicroseconds(2U);
spiSend(SPI_CHAN_DAC,externalDac_buf , 2); spiSend(SPI_CHAN_DAC, externalDac_buf, COUNT(externalDac_buf));
}
return; void dac084s085::cshigh() {
WRITE(DAC0_SYNC, HIGH);
#if EXTRUDERS > 1
WRITE(DAC1_SYNC, HIGH);
#endif
WRITE(SPI_EEPROM1_CS, HIGH);
WRITE(SPI_EEPROM2_CS, HIGH);
WRITE(SPI_FLASH_CS, HIGH);
WRITE(SS_PIN, HIGH);
} }
#endif // MB(ALLIGATOR) #endif // MB(ALLIGATOR)

View file

@ -5,7 +5,9 @@ class dac084s085 {
public: public:
dac084s085(); dac084s085();
static void begin(void); static void begin(void);
static void setValue(uint8_t channel, uint8_t value); static void setValue(const uint8_t channel, const uint8_t value);
private:
static void cshigh();
}; };
#endif // DAC084S085_H #endif // DAC084S085_H