SPI a I2C současně

mám tu problém: jak obsloužit programově zařízení SPI a I2C připojená na 16F877. Mám na sběrnici jedno I2C zařízení na které odesílám data (LCD grafický displej) a tři zařízní SPI (termočlánkové snímače teploty), ze kterých čtu data. Nějaký nápad? Popřípadě, chce to někdo vyzkoušet? :slight_smile:

Někde už se to tu myslím řešilo. Chce to jen najít.
Určitě není problém jedním příkazem přepínat módy MSSP. Jen nevím co udělají pullupy pro I2C sběrnici. SDO a SDI u SPI by měly být ve vysoké impedanci. Což je problém, když mají společný vývod SDA/SDI.
Ale za zkoušku nic nedáš.
A v případě, že by to nechodilo bych to viděl na vytvoření sw SPI nebo I2C - SPI asi bude jednodušší.
Samozřejmě ale příjdeš o možnost posílat a zpracovávat data v přerušení.

jsem si s tím včera hrál celý den a noc až skoro do dnešního rána. Je to asi takhle: I2C má opory na buse, které nevadí SPI. K přesunu dat se dá použít BIGBAN, jenže to má háček, že I2C zařízení (u mne konkrétně LCD displej) nemá chip select a je to přijímací zařízení a tak zmatkuje a reaguje na data na sběrnici, která jsou od zařízení SPI (nebo pro SPI). Kdyby I2C zařízení bylo jen zařízení data odesílající, tak by to bylo OK, jenže naneštěstí displej s I2C právě data přijímá a tak dělá psí kusy, jakmile SPI senzor je naselectovaný a začne vysílat data. Bude to chtít jiný MCU, s oddělenou SPI a I2C, anebo jiný displej.

No nevím jestli všechny PICy nemají ten “geniální” MSSP modul -
pak jedině AVRko to má ty dvě periferie oddělené.
A nebo, jak jsem psal dát si svoje SPI na jiné piny - za cenu ztrráty možnosti komunikaci obsluhovat v přerušení.

Já bych použil asi CMOS 4052 nebo 4053 případně něco podobného na odpojení I2C od MCU v době kdy pracuje SPI, spořebuje to jeden pin MCU navíc.

Nejjednodušeji by to šlo asi dvěma MOSFET tranzistorama.

Proč tak složitě?

PIC18F, možná v jiné cenové kategorii (100 max), disponuje 2x SPI a I2C. Možná to umí i některé s řady 16F19xx, ale nejsem si jistej.

18F46K22 - 86,-Kč
16F877 - 123,- Kč

Pozor ne ale každý 18fxxxx má dva MSSP moduly - uvedený typ ale ano.