Недавно писал про управление семисегментным индикатором по 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.
Напомню, что шлём и получаем мы одновременно, такчто шлём ноль — это нормально.