Недавно писал про управление семисегментным индикатором по SPI при помощи сдвигового регистра.
Так уж повелось, что зачастую необходимо не только отправлять данные но и получить их с кнопок.. Ног как всгда не хватает но проблема решается также как и в предыдушем случае — при помощи сдвигового регистра. Но на этот раз регистр понадобится с паралельной загрузкой и последовательной выдачей. Будем использовать 74hc165.
Вот схема подключения:
Как видите схема простенькая. Управление ей не намного сложнее.
Пример под ATmega8:
int main(void){
PORTD = 0;
DDRD = 0xff;
PORTB=0;
DDRB=0x2C; //Настраиваем порт для SPI
ACSR=0x80; //Отключаем компаратор
//Включаем SPI
//Биты будем отправлять LSB-MSB, т.е. от младших к старшим
SPCR=0x70;
SPSR=0;
PORTB |= (1<<2); // включаем
while(1) {
PORTB &= ~(1<<2); // выключаем SH/LD
PORTB |= (1<<2); // включаем SH/LD
char str = spi_transfer(0);
//PORTB |= (1<<2); // включаем
PORTD = str;
}
}
Алгоритм простой:
дёргоем ногой подключеной к SH/LD (сдвиг-загрузка), затем считываем регистр SPI.
Напомню, что шлём и получаем мы одновременно, такчто шлём ноль — это нормально.






