#include "MicroBit.h"
SPI spi(MOSI, MISO, SCK);
MicroBitSerial serial(USBTX, USBRX);
MicroBitPin CS(MICROBIT_ID_IO_P16,
MICROBIT_PIN_P16,
PIN_CAPABILITY_DIGITAL);
class MCP3008{
public:
MCP3008(void);
void init(void);
uint16_t read(char CH);
};
MCP3008::MCP3008(void){
}
void MCP3008::init(void){
CS.setDigitalValue(1);
}
uint16_t MCP3008::read(char CH){
char mosi[] = {1, 0b10000000 | CH<<4, 0};
char miso[3];
CS.setDigitalValue(0);
for(int i=0; i<3; i++){
miso[i] = spi.write(mosi[i]);
}
CS.setDigitalValue(1);
return (miso[1]<<8 | miso[2]) & 1023;
}
int main(void){
MCP3008 mcp;
mcp.init();
while(1){
uint16_t ADdata = mcp.read(0);
float volt = (float)ADdata * 3.23/1024.0;
serial.printf("AD %d, %.2f(v)\n", ADdata, volt);
wait(1.0);
}
release_fiber();
return 0;
}
unsigned int read(unsigned char CH){
unsigned char mosi[36] = {3,4,6,4,6,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,1};
unsigned char ch[8][6] = {{0,2,0,2,0,2},
{0,2,0,2,4,6},
{0,2,4,6,0,2},
{0,2,4,6,4,6},
{4,6,0,2,0,2},
{4,6,0,2,4,6},
{4,6,4,6,0,2},
{4,6,4,6,4,6}};
unsigned char miso[10];
unsigned char i, k;
unsigned int sum;
for(i=0; i<6; i++){
mosi[i+5] = ch[CH][i];
}
k = 9;
for(i=0; i<36; i++){
miniput(mosi[i]);
if((i>=16) && (i%2==0)){
miso[k] = miniget();
k--;
}
}
sum = 0;
for(i=0; i<10; i++){
sum |= miso[i]<<i;
}
return sum;
}
main(){
unsigned int i;
while(1){
printf("%4d, %4d, %4d, %4d\n", read(0), read(1), read(2), read(3));
for(i=0; i<500; i++){}
}
}