Привет коллеги.
Читал даташит. Током инфы не нашел про регистры и как их считывать.
Мое железо Аtmega16 4.0Mhz
Соорудил код на основе картинок в даташите и какого то китайского сырца, но то ли тайменги не выдерживаю то ли еще что но чип не отвечает. Единственное что вижу на осциллографе реакцию DRDY падает в ноль. Вот мой код.
Функция инициализации
Функция записи
Функция чтения
Читал даташит. Током инфы не нашел про регистры и как их считывать.
Мое железо Аtmega16 4.0Mhz
Соорудил код на основе картинок в даташите и какого то китайского сырца, но то ли тайменги не выдерживаю то ли еще что но чип не отвечает. Единственное что вижу на осциллографе реакцию DRDY падает в ноль. Вот мой код.
Код: Выделить всё
#define adc_CLK (PORTB.0)
#define adc_CS (PORTB.1)
#define adc_DRDY (PORTB.2)
#define adc_DOUT (PORTB.3)
#define adc_DIN (PORTB.4)
Код: Выделить всё
void My_Init()
{
My_WritoTo_adc(0x27);
My_WritoTo_adc(0x4f);
My_WritoTo_adc(0x37);
My_WritoTo_adc(0x0a0);
My_WritoTo_adc(0x17);
My_WritoTo_adc(0x20);
}
Код: Выделить всё
void My_WritoTo_adc(unsigned char byte)
{
int i;
unsigned char maska;
unsigned char sbuff;
bit sBit;
adc_CLK = 1;
adc_CS = 0;
maska = 0x80;;
sbuff = byte;
sBit = sbuff & maska;
for(i=0;i<8;i++)
{
adc_CLK = 0;
adc_DIN = sBit;
sbuff = sbuff >> 1;
sBit = sbuff & maska;
adc_CLK = 1;
}
adc_CLK = 1;
adc_CS = 1;
}
Код: Выделить всё
unsigned char My_Read_adc()
{
bit sBit;
unsigned char result;
while(adc_DRDY == 1){delay_ms(1);}
My_WritoTo_adc(0x5c);
result = 0;
adc_CLK = 1;
adc_CS = 0;
for(i=0;i<8;i++)
{
adc_CLK = 0;
sBit = adc_DOUT;
if(sBit)
{
result += 2^(7-i);
}
adc_CLK = 1;
}
adc_CLK = 1;
adc_CS = 1;
return result;
}
