Делаю так
CODE
#define CS PORTB_Bit0
#define SCK PORTB_Bit1
#define SDO PINB_Bit3
unsigned long GetADC(void)
{
unsigned long data = 0;
char i = 24;
CS = 0; //convertion start
while(SDO) //wait until convertion completed
{}
while(i)
{
SCK = 0; //data shifted on SCK falling edge
delay_ms(1);
data = data | (SDO << i);
SCK = 1;
i--;
}
CS = 1;
return data;
}
void main(void)
{
key = ScanKeypad();
if(key==7)
{
unsigned long adc_data = GetADC() & 0x3FFFFF; //get 22 bits
SendString(UnsignedIntegerToAscii(adc_data));
}
}
Потом по формуле
Код
vin = 5 * adc_data / 4194304UL; //2^22 = 4194304
вычисляю входное напряжение. Получаю ошибочный результат.
Где я дурак?
Сообщение отредактировал IgorKossak - May 27 2012, 18:57
Причина редактирования: [codebox] для длинного кода