Processorn som används är 12F675 @ 4MHz, med portar hakade som angivna nedan.
loadDA([ett värde 0-4095],[kanal 0-1],[förstärkning (1=1X 0=2X]);
och sen
clockDA();
för att smacka ut värdena på utgångarna synkat.
Kod: Markera allt
#define testbit(data,bitno) ((data>>bitno)&0x01)
#define hibyte(x) (unsigned char)(x>>8)
#define lobyte(x) (unsigned char)(x & 0xFF)
void loadDA(int value, char channel, char gain){
/* note: GPIO0=/CS GPIO1=SCK GPIO2=SDI GPIO4=/LDAC */
char lb_value = lobyte(value);
char hb_value = hibyte(value);
char cnt=0;
GPIO1=0;
GPIO2=0;
GPIO0=0;
if (channel==0){GPIO2=0;}
if (channel==1){GPIO2=1;}
GPIO1=1; /*channel bit being clocked in. (15)*/
GPIO1=0;
GPIO1=1; /*"Do not care" bit (14). clocked in. */
GPIO1=0;
if (gain==0){GPIO2=0;}
if (gain==1){GPIO2=1;}
GPIO1=1; /*gain bit being clocked in. (13)*/
GPIO1=0;
GPIO2=1; /*output always on*/
GPIO1=1; /*output powerdown control bit clocked in (12)*/
GPIO1=0;
/*x>>=1 div2 ; x<<=1 mul2 */
cnt = 0;
while (cnt < 4){ /*value bits (11-8) clocked in*/
GPIO2 = testbit(hb_value,3);
GPIO1 = 1;
GPIO1 = 0;
hb_value = hb_value << 1;
cnt++;
}
cnt = 0;
while (cnt < 8){ /*value bits (7-0) clocked in*/
GPIO2 = testbit(lb_value,7);
GPIO1 = 1;
GPIO1 = 0;
lb_value = lb_value << 1;
cnt++;
}
GPIO0 = 1; /*CS goes high again and data is latched.*/
}
void clockDA(){
GPIO4=0;
GPIO4=1;
}