сдвиговый регистр (74hc595) и картинка в ccs

Когда я записываю 8 бит в регистр сдвига hc595, последний бит i2c переходит в Q0 во втором hc595.

Почему?

Схема:

введите здесь описание изображения

Мой код:

i2c_write(0b10101010);

latch_led_sensors_out();

delay_ms(200);

person Meysam Talebi    schedule 22.05.2018    source источник
comment
74HC595 не является устройством i2c. Обычно он подключается как устройство SPI. Я подозреваю, что это во многом связано с проблемами, с которыми вы сталкиваетесь.   -  person Peter Camilleri    schedule 22.05.2018
comment
Не могли бы вы опубликовать свою инициализацию I2C (или SPI?)   -  person Mike    schedule 23.05.2018
comment
Просто вручную пропишите биты в 74HC595.   -  person GJ.    schedule 26.05.2018


Ответы (1)


Это из-за протокола I2C. Даже если вы хотите отправить 8 бит, на самом деле вы отправляете 9. Принцип работы I2C заключается в том, что начальный кадр содержит 7 (или 10) бит адреса плюс один бит для чтения/записи. После того, как эти начальные 8 битов тактируются, мастер отправляет дополнительный тактовый импульс для считывания бита ACK/NACK с ведомого устройства. Помните, что мастер управляет часами, даже когда ведомый управляет выводом данных.

person Joe Thomas    schedule 23.05.2018
comment
этот код: данные = 0x80; spi_write (данные); - person Meysam Talebi; 23.05.2018
comment
у вас все будет хорошо с SPI, так как SPI не синхронизирует бит ACK/NACK, а только биты данных. - person Joe Thomas; 23.05.2018
comment
этот код неправильный, что? : данные1 = 0xBF; spi_write (данные1); - person Meysam Talebi; 24.05.2018
comment
пожалуйста, пришлите мне пример True следующим образом: data1 = 0xBF; spi_write (данные1); - person Meysam Talebi; 24.05.2018
comment
извините, я не знаю, что вы просите. - person Joe Thomas; 24.05.2018
comment
Что написать в скобках, чтобы получить в получателе следующую информацию - person Meysam Talebi; 24.05.2018