12 static const int Ctrduty = 6;
13 static const int Dutyperiod = 0x1010101;
19 #define SE_0 0x08 // ch0 single ended
28 #define D_01 0x00 // 0+/1- differential
29 #define D_10 0x01 // 1+/0-
30 #define D_23 0x02 // 2+/3-
31 #define D_32 0x03 // 3+/2-
32 #define D_45 0x04 // 4+/5-
33 #define D_54 0x05 // 5+/4-
34 #define D_67 0x06 // 6+/7-
35 #define D_76 0x07 // 7+/6-
37 static const int adcChannel2SE[8] = {SE_0, SE_1, SE_2, SE_3, SE_4, SE_5, SE_6, SE_7};
38 static const int clockDelay = 400;
45 void init(
int cspin,
int clkpin,
int diopin )
51 pinMode( cspin, OUTPUT );
52 digitalWrite( cspin, HIGH );
54 pinMode( clkpin, OUTPUT );
55 digitalWrite( clkpin, LOW );
61 pinMode( clk, INPUT );
62 pinMode( dio, INPUT );
65 int do_adc_cmd(
int mux )
73 digitalWrite( cs, LOW );
74 pinMode( dio, OUTPUT );
78 for ( counter = 0; counter < 5; counter++ )
80 digitalWrite(dio, (mux & 0x10) ? HIGH : LOW);
81 delayMicroseconds( clockDelay );
83 digitalWrite( clk, HIGH );
84 delayMicroseconds( clockDelay );
85 digitalWrite( clk, LOW );
90 pinMode( dio, INPUT );
94 for ( counter = 0; counter < 13; counter++ )
96 digitalWrite( clk, HIGH );
97 delayMicroseconds( clockDelay );
98 digitalWrite( clk, LOW );
99 delayMicroseconds( clockDelay );
100 level = ( level << 1 ) | digitalRead( dio );
103 digitalWrite( cs, HIGH );
105 return( level & 0x0fff );
110 int read_adc_channel(
int ch_mode )
114 adc_cmd = 0x10 | ch_mode ;
116 return do_adc_cmd( adc_cmd );
119 int analogRead(uint8_t adcChannel)
122 int value = read_adc_channel(adcChannel2SE[adcChannel]);
124 value = map(value, 0, 4095, 0, 1023);
129 void analogReference(uint8_t mode)
133 void analogWrite(uint8_t pin,
int duty)
136 FRQA = (Dutyperiod * duty);
137 CTRA = ((Ctrduty << 26) + pin);