/*
SHIFT
Routines, die Madwizard aansturen als een schuifregister
Pros 2007
*/
void shift2MW(unsigned char command, unsigned int data)
{
unsigned char cnt;
unsigned int DEL, INT;
double tmp;
tmp = DDS_frequency / 1000.0; // 6250000 -> 6250
tmp = 2000000.0 / tmp; // 2000000 / 6250 = 320
if (tmp > 65535.0) {
tmp = 65535.0;
} else if (tmp < 400.0) {
tmp = 400.0;
}
DEL = (unsigned int) tmp;
INT = DEL / 400;
for (cnt = 0; cnt < 4; cnt++) { // 4 command-bits
if ((command & 0x08) == 0x08) {
sbi(SHIFTPORT, MW_DATA); // Data-bit = 1
} else {
cbi(SHIFTPORT, MW_DATA); // Data-bit = 0
}
delay_us(INT);
cbi(SHIFTPORT, MW_INT0); // INT0 van Madwizard laag maken
delay_us(INT);
sbi(SHIFTPORT, MW_INT0); // INT0 van Madwizard terug hoog maken
delay_us(DEL);
command = command << 1;
}
for (cnt = 0; cnt < 16; cnt++) { // 16 data-bits
if ((data & 0x8000) == 0x8000) {
sbi(SHIFTPORT, MW_DATA); // Data-bit = 1
} else {
cbi(SHIFTPORT, MW_DATA); // Data-bit = 0
}
delay_us(INT);
cbi(SHIFTPORT, MW_INT0); // INT0 van Madwizard laag maken
delay_us(INT);
sbi(SHIFTPORT, MW_INT0); // INT0 van Madwizard terug hoog maken
delay_us(DEL);
data = data << 1;
}
cbi(SHIFTPORT, MW_INT1); // INT1 van Madwizard laag maken
delay_us(INT);;
sbi(SHIFTPORT, MW_INT1); // INT1 van Madwizard terug hoog maken
delay_us(DEL * 2);
}