Код для MCP3201
- Войдите на сайт для отправки комментариев
Чт, 09/10/2014 - 21:31
Появилась необходимость использовать MCP3201, по началу решил, что проблем с кодом не должно возникнуть, т.к. в сети куча примеров работы с серией MCP320X, да только вот все примеры для MCP3208/3204, у них есть одно аппаратное отличие - наличие пина Din или MOSI, а вот в MCP3201 его нет. Как отредактировать код под MCP3201
#define SELPIN 10 //Selection Pin #define DATAOUT 11//MOSI #define DATAIN 12//MISO #define SPICLOCK 13//Clock int readvalue; void setup(){ //set pin modes pinMode(SELPIN, OUTPUT); pinMode(DATAOUT, OUTPUT); pinMode(DATAIN, INPUT); pinMode(SPICLOCK, OUTPUT); //disable device to start with digitalWrite(SELPIN,HIGH); digitalWrite(DATAOUT,LOW); digitalWrite(SPICLOCK,LOW); Serial.begin(9600); } int read_adc(int channel){ int adcvalue = 0; byte commandbits = B11000000; //command bits - start, mode, chn (3), dont care (3) //allow channel selection commandbits|=((channel-1)<<3); digitalWrite(SELPIN,LOW); //Select adc // setup bits to be written for (int i=7; i>=3; i--){ digitalWrite(DATAOUT,commandbits&1<<i); //cycle clock digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,LOW); } digitalWrite(SPICLOCK,HIGH); //ignores 2 null bits digitalWrite(SPICLOCK,LOW); digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,LOW); //read bits from adc for (int i=11; i>=0; i--){ adcvalue+=digitalRead(DATAIN)<<i; //cycle clock digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,LOW); } digitalWrite(SELPIN, HIGH); //turn off device return adcvalue; } void loop() { readvalue = read_adc(1); Serial.println(readvalue,DEC); readvalue = read_adc(2); Serial.println(readvalue,DEC); Serial.println(" "); delay(250); }
http://ww1.microchip.com/downloads/en/DeviceDoc/21290F.pdf - даташит MCP3201
http://ww1.microchip.com/downloads/en/DeviceDoc/21298c.pdf - даташит MCP3204/3208
Нашел в гугле следующий вариант кода для работы непосредственно с MCP3201, но он не рабочий
И в чем проблема?
Spi без одного пина. Потому что АЦП нечего от вас получать. Как только вы выбираете его чип селектом. Он сразу начинает слать вам чего у него там на входе. Почитайте протокол spi.