Kann ich I2C und SPI gleichzeitig mit PIC16F1503 verwenden

Ich bin neu bei Microchip-Mikrocontrollern und suche ein sehr kostengünstiges Gerät mit I2C und SPI. Ich möchte ein I2C (ADC) und ein SPI-Gerät (LCD) anschließen.

Ich habe dieses sehr günstige Gerät gefunden:

Geben Sie hier die Bildbeschreibung ein

Es sieht jedoch so aus, als ob sich I2C und SPI dieselbe Hardware teilen.

Frage: Kann ich Hardware I2C und SPI in einem Schaltkreis verwenden?

Antworten (3)

Ich stimme dem Beitrag von @Olin zu. Gleichzeitig gibt es eine andere Sichtweise, welche I 2 C oder SPI in Software und welche in Hardware implementiert werden sollen.

I 2 C-Bus hat eine niedrigere Höchstgeschwindigkeit als SPI. Ein typischer I 2 C-Bus hat eine maximale Datenrate von 400 kbps **. Ein typisches SPI kann problemlos mit 4 Mbit / s ausgeführt werden. Einige Anwendungen erfordern eine Hochgeschwindigkeitsübertragung über SPI. Zum Beispiel: SD-Karten, Funkkommunikation. Ein Bit-Banged SPI wäre zu langsam. Folglich müsste der SPI mit Hardware-MSSP implementiert werden, und der langsamere I 2 C würde in Software implementiert werden.

Manchmal ist die Geschwindigkeit nicht wichtig. Beispielsweise erzeugt ein Bus-Slave Daten langsam, sodass die Busgeschwindigkeit nicht der begrenzende Faktor ist.

** Es gibt Hochgeschwindigkeitsversionen von I2C, aber sie sind zum Zeitpunkt des Schreibens nicht sehr verbreitet.

Ich habe meine akzeptierte Antwort geändert. Ich denke, Bit-Banging-SPI wird in meinem Fall zu viel CPU-Zeit in Anspruch nehmen - ich muss viele Daten über SPI senden (504 Bytes mindestens einige Male pro Sekunde) und wenig Datenrate auf I2C (langsamer ADC).

Ja, Sie können dieses Teil verwenden, um sowohl einen IIC-Bus als auch einen SPI-Bus in derselben Schaltung zu betreiben. Sie können jedoch nicht (vernünftigerweise) das einzelne MSSP-Modul dieses Geräts verwenden, um beide Busse anzusteuern.

Meine empfohlene Lösung besteht darin, den MSSP für IIC und den SPI durch Firmware-Bit-Banging separater E / A-Pins zu verwenden. SPI ist ein sehr einfach zu implementierendes Protokoll, wenn Sie der Master sind, was Sie zu sein scheinen. Da der Master die Uhr besitzt, gibt es kein Problem, wenn Ihr SPI-Code unterbrochen und dadurch willkürliche Verzögerungen eingefügt werden. Schauen Sie sich an, wie SPI funktioniert. Es ist wirklich sehr einfach und leicht direkt in Firmware zu implementieren.

Sie könnten natürlich den IIC in Firmware ausführen und den SPI-Bus vom MSSP verwalten lassen. Ich habe beides geschrieben, und SPI ist in Firmware einfacher zu realisieren als IIC, also würde ich die MSSP für IIC sorgen lassen. IIC ist nicht schwer, aber es ist etwas kniffliger, robust zu arbeiten.

Obwohl sie in dem von Ihnen hervorgehobenen Absatz das Wort verwenden and:

Das MSSP-Modul kann in einem von zwei Modi betrieben werden:

  • Serielle Peripherieschnittstelle (SPI)
  • Interintegrierter Schaltkreis (I2C™)

Datenblatt , Seite 164.

Sie können das I2C-Protokoll jedoch per Software auf anderen Pins implementieren.

Jedoch:

Normalerweise können Sie I2C und SPI auf denselben Pins mischen. I2C macht nur etwas zwischen START und STOP.

Laut http://www.i2cchip.com/mix_spi_i2c.html

Überprüfen Sie auch dies: I2C und SPI, wenn sie dieselbe Verbindung teilen, gibt es einen Konflikt oder nicht