Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MCP3550
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Jenya7
Привет всем! Я хочу поработать с MCP3550.
Это 22-х битный АЦП с серийным выходом. По клоку он выдает биты наружу.
Вопрос как лучше с ним работать? Через SPI или написать простую функцию - в лупе 22 раза сгенерировать клок и записать дату с пина DOUT.
_Pasha
Странный вопрос. Как хотите, так и работаете. Вопросы вызывает только двухпроводный режим, когда CS железно в нуле. Что-то он у мну так и не заработал. smile3046.gif
Jenya7
Цитата(_Pasha @ May 24 2012, 23:07) *
Странный вопрос. Как хотите, так и работаете. Вопросы вызывает только двухпроводный режим, когда CS железно в нуле. Что-то он у мну так и не заработал. smile3046.gif


Вообще то я так и хотел работать в Continuous Conversion Mode когда CS на нуле. В принципе я могу и дергать ногу CS, не страшно.
А вопрос как мне кажется обычный. Опыта работы с внешним АЦП нет вот и спрашиваю более опытных товарищей.
Jenya7
Делаю так

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

вычисляю входное напряжение. Получаю ошибочный результат.
Где я дурак?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.