Цитата(Чип-Хрум @ Apr 2 2007, 19:42)

Нужен цикл отправки переменной char по тому же SPI в программной реализации ,а не в аппоратной!!!
Для вашей задачи нет различия между программным и аппаратным SPI. Просто аппаратный намного проше, быстрее и занимеет меньше памяти.
Микросхема ADC124s101 работает с пакетами данных длиной 16 бит.
Временную диаграмму можно посмотреть в Datasheete. Вначале отправляется упрявляющий байт, а затем нулевой байт. И соответственно в этой посылке принимаются 16 бит данных (по 2 байта), 12 бит которых являются информативными.
Что-бы микросхема выдала напряжение какого-либо канала неабходимо закинуть ей в первом пакете 2 байта с номером канала (например 0x08 0x00 - ADD0), затем ждем преобразования ADC124s101 (примерно 50 мкс), и читаем полученный результат следующей посылкой (0x08, 0x00 - здесь можно указать следующий канал ADC - в данном случае это ADD0), затем ждем преобразования ... и т.д.
Вот примерный код
Код
int ReadFromAdc(unsigned char Chanel){
int OUT;
if(Chanel>2) return -1;
CS=0; //чип селект на микросхеме
SPDR =( (0x01<<3)<<Chanel);
while ((SPSR & 0x80) == 0); // wait SPIF
SPSR&=~0x80;
OUT=SPDR;
OUT=OUT<<8;
SPDR = 0x00;
while ((SPSR & 0x80) == 0); // wait SPIF
SPSR&=~0x80;
OUT |=SPDR;
CS=1; //чип селект на микросхеме
return OUT;
}
main(void)
int ADC1;
......//настройка
bitclr(SREG,7); //не включаем прерывание
ReadFromAdc(1); // настройка на канал 1
delay_mks(50);
while(1) // вечный цикл
{
ADC1=ReadFromAdc(1);
delay_mks(50);
}
Если вас все же интересует программная реализация, то могу выложить.
Сообщение отредактировал Kolia - Apr 3 2007, 11:17