#define LDACPIN_LOW ( PORTB &= B11111011 ) // pin 10
#define LDACPIN_HIGH ( PORTB |= B00000100 )
#define SDIPIN_LOW ( PORTB &= B11110111 ) // pin 11
#define SDIPIN_HIGH ( PORTB |= B00001000 )
#define SCKPIN_LOW ( PORTB &= B11101111 ) // pin 12
#define SCKPIN_HIGH ( PORTB |= B00010000 )
#define CSPIN_LOW ( PORTB &= B11011111 ) // pin 13
#define CSPIN_HIGH ( PORTB |= B00100000 )
#define CLOCK SCKPIN_HIGH; SCKPIN_LOW;
#define SET_HIGH SDIPIN_HIGH; CLOCK;
#define SET_LOW SDIPIN_LOW; CLOCK;
void setup(){
DDRB = DDRB | B11111111;
CSPIN_HIGH;
SCKPIN_LOW;
SDIPIN_LOW;
LDACPIN_HIGH;
}
void set_dac_2 ( int value_a, int value_b ){
// --- output A ---
CSPIN_LOW;
SDIPIN_HIGH; CLOCK; // 15
SDIPIN_LOW; CLOCK; // 14
SDIPIN_HIGH; CLOCK; // 13
CLOCK; // 12
SDIPIN_LOW; if ( 2048 & value_a ){ SDIPIN_HIGH; } CLOCK; // 11
SDIPIN_LOW; if ( 1024 & value_a ){ SDIPIN_HIGH; } CLOCK; // 10
SDIPIN_LOW; if ( 512 & value_a ){ SDIPIN_HIGH; } CLOCK; // 09
SDIPIN_LOW; if ( 256 & value_a ){ SDIPIN_HIGH; } CLOCK; // 08
SDIPIN_LOW; if ( 128 & value_a ){ SDIPIN_HIGH; } CLOCK; // 07
SDIPIN_LOW; if ( 64 & value_a ){ SDIPIN_HIGH; } CLOCK; // 06
SDIPIN_LOW; if ( 32 & value_a ){ SDIPIN_HIGH; } CLOCK; // 05
SDIPIN_LOW; if ( 16 & value_a ){ SDIPIN_HIGH; } CLOCK; // 04
SDIPIN_LOW; if ( 8 & value_a ){ SDIPIN_HIGH; } CLOCK; // 03
SDIPIN_LOW; if ( 4 & value_a ){ SDIPIN_HIGH; } CLOCK; // 02
SDIPIN_LOW; if ( 2 & value_a ){ SDIPIN_HIGH; } CLOCK; // 01
SDIPIN_LOW; if ( 1 & value_a ){ SDIPIN_HIGH; } CLOCK; // 00
CSPIN_HIGH;
// --- output B ---
CSPIN_LOW;
SDIPIN_LOW; CLOCK; // 15
CLOCK; // 14
SDIPIN_HIGH; CLOCK; // 13
CLOCK; // 12
SDIPIN_LOW; if ( 2048 & value_b ){ SDIPIN_HIGH; } CLOCK; // 11
SDIPIN_LOW; if ( 1024 & value_b ){ SDIPIN_HIGH; } CLOCK; // 10
SDIPIN_LOW; if ( 512 & value_b ){ SDIPIN_HIGH; } CLOCK; // 09
SDIPIN_LOW; if ( 256 & value_b ){ SDIPIN_HIGH; } CLOCK; // 08
SDIPIN_LOW; if ( 128 & value_b ){ SDIPIN_HIGH; } CLOCK; // 07
SDIPIN_LOW; if ( 64 & value_b ){ SDIPIN_HIGH; } CLOCK; // 06
SDIPIN_LOW; if ( 32 & value_b ){ SDIPIN_HIGH; } CLOCK; // 05
SDIPIN_LOW; if ( 16 & value_b ){ SDIPIN_HIGH; } CLOCK; // 04
SDIPIN_LOW; if ( 8 & value_b ){ SDIPIN_HIGH; } CLOCK; // 03
SDIPIN_LOW; if ( 4 & value_b ){ SDIPIN_HIGH; } CLOCK; // 02
SDIPIN_LOW; if ( 2 & value_b ){ SDIPIN_HIGH; } CLOCK; // 01
SDIPIN_LOW; if ( 1 & value_b ){ SDIPIN_HIGH; } CLOCK; // 00
CSPIN_HIGH;
LDACPIN_LOW;
SCKPIN_HIGH;
LDACPIN_HIGH;
SCKPIN_LOW;
}
void loop() {
set_dac_2 (4095,4095);
set_dac_2 (0,0);
}
What I don't get is how do the bits to set the value get sent to the serial data in pin? Where is the value passed?
Also what does this do if ( 2048 & value_b )
Does it just say if value_b = 2048 then do whats in the curly braces?