attempting to talk to a analogue to digital conver
i attempting talk analogue digital converter spi port looked @ examples , reading 0's registers. ads1256 24 bit adc , open source.
quote
#include "ads1256.h"
#include "extera.h"
//define pin names pin #
#define cs 10 //chip select active low on pin 10
#define neg_reset 9 //reset pin active low on pin 9 on uc
#define drdy 2 //data ready
#define sync 8 //syncronisation power down active low
#define dataout 12//mosi
#define datain 11//miso
#define spiclock 13//sck
// global variables
int val=0; //a counter
byte clr=0;//used clear registers bit trash bin.
byte x=0;
//*************************setup spi ad
void spi_to_ad_setup(){
spcr=0;//clear control register
clr=spcr; //coppy spi control register clr print out or clear similar clearing status register
spsr=0;
clr=spsr;
/*spcr
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| spie | spe | dord | mstr | cpol | cpha | spr1 | spr0 |
spie - enables spi interrupt when 1 set 0
spe - enables spi when 1 set 1
dord - sends data least significant bit first when 1, significant bit first when 0 set 0
mstr - sets arduino in master mode when 1, slave mode when 0 set 1
cpol - sets data clock idle when high if set 1, idle when low if set 0 set 0
cpha - samples data on falling edge of data clock when 1, rising edge when 0 set 0
spr1 , spr0 - sets spi speed, 00 fastest (4mhz) 11 slowest (250khz) set 11
spsr=0;//makeing shure spi not going 2x speed.
ex.01010011
*/
spcr = (1<<spe)|(1<<mstr)|(1<<spr1)|(1<<spr0);
//after setting our control register read spi status register (spsr) , data register (spdr) in junk clr variable
//to clear out spurious data past runs:
delay(10);
} //end of initilise spi
//simple spi transfer function char in char out
char spi_transfer(volatile char data)
{
spdr = data; // start transmission
while (!(spsr & (1<<spif))) // wait end of transmission
{
};
return spdr; // return received byte
}
void setup() {
// initialize communication port
serial.begin(9600);
serial.println("serial port initilised.");
serial.println("set pins data direction");
pinmode(cs,output);//10 //chip select active low on pin 10
pinmode(neg_reset,output); //reset pin active low on pin 11
pinmode(dataout,output);// mosi
pinmode(datain,input);//datain miso
pinmode(spiclock,output);// sck
pinmode(drdy,input);//data ready low
pinmode(sync,output); //sync active low powerdown
serial.println("done seting pins data direction");
serial.println("initilise pins defalt states");
digitalwrite(cs,low); //enable device
digitalwrite(spiclock,low);//defalt clock no-reset state
digitalwrite(neg_reset,high);//defalt reset state
digitalwrite(sync,high);//defalt power state
serial.println("initiliseed pins defalt states");
serial.println("setup spi port.");
spi_to_ad_setup();
serial.println("spi port setup...");
serial.print("spcr: ");
serial.println(spcr, bin);
serial.print("spsr: ");
serial.println(spsr, bin);
//reset chip
serial.println("reset chip reset pin");
digitalwrite(neg_reset,low); //disable device reset self calibration performed
delaymicroseconds(33);
digitalwrite(neg_reset,high); //enable device
}//end of setup
void loop() {
val= digitalread(drdy);
if (val==low){
x=spi_transfer(cmd_rreg);
serial.println(x, bin);
x=spi_transfer(11);
serial.println(x, bin);
delaymicroseconds(;
x=spi_transfer(0xff);
serial.println(x, bin);
x=spi_transfer(0xff);
serial.println(x, bin);
x=spi_transfer(0);
serial.println(x, bin);
x=spi_transfer(0);
serial.println(x, bin);
}
if (val==high){
serial.println("high data not ready?");
}
}//end of loop
updated post:
24 bit analogue digital converter chip , arduino help.
i using ads1256 adc , arduino , arduino ide known wiring think.
it shows reset causing data ready signal updating , going high after reset try read , write registers 0's results. please help.
results:
serial port initilised.
set pins data direction
done seting pins data direction
initilise pins defalt states
initiliseed pins defalt states
setup spi port.
spi port setup...
spcr: 1010101
spsr: 0
reset chip reset pin
write register 0-4, data=1
read registers 0-4 print them out
0
0
0
0
0
code :
24 bit analogue digital converter chip , arduino help.
i using ads1256 adc , arduino , arduino ide known wiring think.
it shows reset causing data ready signal updating , going high after reset try read , write registers 0's results. please help.
results:
serial port initilised.
set pins data direction
done seting pins data direction
initilise pins defalt states
initiliseed pins defalt states
setup spi port.
spi port setup...
spcr: 1010101
spsr: 0
reset chip reset pin
write register 0-4, data=1
read registers 0-4 print them out
0
0
0
0
0
code :
quote
//ads1256 initilisation , read , write registers in arduino wiring.
#include "ads1256.h"
#include "extera.h"
//define pin names pin #
#define cs 10 //chip select active low on pin 10
#define neg_reset 9 //reset pin active low on pin 9 on uc
#define drdy 2 //data ready
#define sync 8 //syncronisation power down active low
#define dataout 12//mosi
#define datain 11//miso
#define spiclock 13//sck
// global variables
int val=0; //a counter
byte clr=0;//used clear registers bit trash bin.
int r0=0;//register containers adc
int r1=0;
int r2=0;
int r3=0;
int r4=0;
//*************************setup spi ad
void spi_to_ad_setup(){
spcr=0;//clear control register
clr=spcr; //coppy spi control register clr print out or clear similar clearing status register
spsr=0;//clear control register
clr=spsr;//coppy spi status register clr print out or clear similar clearing status register
clr=spdr;//coppy spi data register clr print out or clear similar clearing status register
/*spcr
spie spi interrupt disabled set 0
spe - enables spi set 1
dord - significant bit first when set 0
mstr - sets arduino in master mode set 1
cpol - sets data clock idle when low set 0
cpha - samples data on falling edge of data clock set 1
spr1 , spr0 - sets spi speed, 00 fastest (4mhz) 11 slowest (250khz) set 01
spsr=0;//makeing shure spi not going 2x speed.
result = 01010011*/
spcr = (1<<spe)|(1<<mstr)|(1<<cpha)|(1<<spr0);
delay(10);
} //end of initilise spi
//simple spi transfer function char in char out
char spi_transfer(volatile char data)
{
spdr = data; // start transmission
while (!(spsr & (1<<spif))) // wait end of transmission
{
};
return spdr; // return received byte
}
void setup() {
// initialize communication port
serial.begin(9600);
serial.println("serial port initilised.");
serial.println("set pins data direction");
pinmode(cs,output);//10 //chip select active low on pin 10
pinmode(neg_reset,output); //reset pin active low on pin 11
pinmode(dataout,output);// mosi
pinmode(datain,input);//datain miso
pinmode(spiclock,output);// sck
pinmode(drdy,input);//data ready low
pinmode(sync,output); //sync active low powerdown
serial.println("done seting pins data direction");
serial.println("initilise pins defalt states");
digitalwrite(cs,low); //enable device
digitalwrite(spiclock,low);//defalt clock no-reset state
digitalwrite(neg_reset,high);//defalt reset state
digitalwrite(sync,high);//defalt power state
serial.println("initiliseed pins defalt states");
serial.println("setup spi port.");
spi_to_ad_setup();
serial.println("spi port setup...");
serial.print("spcr: ");
serial.println(spcr, bin);
serial.print("spsr: ");
serial.println(spsr, bin);
serial.println("reset chip reset pin");
digitalwrite(neg_reset,low); //disable device reset self calibration performed
delaymicroseconds(33);
digitalwrite(neg_reset,high); //enable device
while((drdy==0)) //wait chip ready acsept opcodes
{
serial.println("waiting");
}
serial.println("write register 0-4, data=1");
spi_transfer(cmd_wreg);//write register opcode
spi_transfer(6);//6-1 number of registers write to
spi_transfer(1);
spi_transfer(1);
spi_transfer(1);
spi_transfer(1);
spi_transfer(1);
while((drdy==0)) //wait chip ready acsept opcodes
{
serial.println("waiting");
}
delaymicroseconds(10);//t6 in datasheet wait before reading.
serial.println("read registers 0-4 print them out");
spi_transfer(cmd_rreg);//read register command.
spi_transfer(6);//number of registers write -1
delaymicroseconds(10);//t6 in datasheet wait before reading.
r0=spi_transfer(0xff);
r1=spi_transfer(0xff);
r2=spi_transfer(0xff);
r3=spi_transfer(0xff);
r4=spi_transfer(0xff);
serial.println(r0, dec);//without specification nothing prints... maby 0 or nul = nothing?
serial.println(r1, dec);
serial.println(r2, dec);
serial.println(r3, dec);
serial.println(r4, dec);
}//end of setup
void loop() {
val= digitalread(drdy);
if (val==low){
serial.println("low data ready?");
}
if (val==high){
serial.println("high data not ready?");
}
}//end of loop
Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > attempting to talk to a analogue to digital conver
arduino
;
Comments
Post a Comment