Всем привет.
Подключил АЦП 12 битовый к ATmega32 по SPI. Но никак не могу понять как принимать данные с АЦП.
У SPI есть 8-разрядный сдвиговый регистр, мне же надо принять сразу 12 (точнее 16, но первые 4 бита нули). Каким образом? Как двигать и записывать эти биты. Прикрепляю datasheet АЦП, может кто захочет взглянуть.
Инициализация SPI вроде правильна:
Код
// Установить PB5(MOSI), PB7(SCK) как выходы
DDRB = (1<<PB5)|(1<<PB7)|(1<<PB4);
PORTB = 0xFF;
DDRC = (1 << PC0); // PС0(/СS) выход
PORTC |= (1 << PC0);
// Включаю SPI в режиме мастер с SCK = CK/4 = 4МГц
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL);
SPSR = (1<<SPI2X); // Удваиваю скорость до 8МГц
После этого написал так, светодиоды использ. для проверки.
Код
while(1)
{
PORTC &= ~(1 << 0); // Включаю АЦП
_delay_ms(1);
//while(PINB6 == 0);
while (!(SPSR & (1<<SPIF)));
PORTC |= (1 << 0); // Отключил АЦП
if (SPDR <= 256)
{
// Мигаю светодиодом
_delay_ms(50);
PORTA |= (1 << 1);
_delay_ms(500);
PORTA &= ~(1 << 1);
}
else
{
// Подмигиваю
_delay_ms(50);
PORTA |= (1 << 2);
_delay_ms(50);
PORTA &= ~(1 << 2);
}
}
Знаю, что не правильно, поэтому спрашиваю. Буду очень признателен за помощь, а то уже не знаю сколько перечитал всего, так и не разобрался.
Было бы совсем не плохо, если бы выложили код.
А и еще, программатор подключен тоже по SPI. Могут ли возникнуть с этим проблемы? На всякий случай отрубаю его от схемы перед подачей сигнала на АЦП.
Спасибо, Сергей.