Forum: Mikrocontroller und Digitale Elektronik PIC 18F4620 mit SPI und I2C


von Marc (Gast)


Lesenswert?

Hallo,

ich habe folgendes Problem:

An einen PIC 18F4620 ist ein Funkempfänger über SPI angeschlossen.
Jetzt soll nach mehrere Sensoren über I2C mit dem PIC verbunden werden.
Allderings benötigen sowohl SPI als auch I2C die Pins RC3 und RC4.

Ist es möglich den I2C-Bus auch über anderer Pins des Mikrocontroller
anzuschließen? Wenn ja, wie?

Danke schon im Vorraus!

Marc

von Geri (Gast)


Lesenswert?

Hallo

I2C lässt sich auch per Software implementieren. Routinen findest du in
den MCC18 libraries.

Beste Grüsse
Geri

von Marc (Gast)


Lesenswert?

Und an welche Pins des PICs schließt man dann SCL und SDA an???

von Bernhard (Gast)


Lesenswert?

Hallo Marc,

dein PIC hat nur ein MSSP-Modul, d. h. du kannst nur ein mal
hardwaremäßig I²C oder SPI verwenden. Größere PICs (z.B. 18F6620) haben
zwei dieser Einheiten.

Man kann (s. Geri) diese Schnittstellen auch per Software realisieren,
dann ist die Wahl der Pins dir überlassen. Aber: Das frisst Speicher
und Rechenzeit und ist VIEL langsamer.

Beispiele dafür findest du beim C18-Compiler oder unter den Application
notes.

Viele Grüße,
Bernhard

von Marc (Gast)


Lesenswert?

Hallo Bernhard,

weißt du auch um welchen Faktor die Software-Implementierung langsamer
ist???

Gruß Marc

von Schoasch (Gast)


Lesenswert?

Die 400kHz sollte man aber doch recht leicht schaffen können. Das Bringt
man sogar mit einem 8051er zusammen (ohne Hardware I2C).

von Marc (Gast)


Lesenswert?

Weiß jemand, ob man noch zusätzliche widerstände braucht, wenn man den
I2C-Bus beim PIC per Software realisiert???

von Bernhard (Gast)


Lesenswert?

Hallo Marc,

den Faktor kann ich dir natürlich nicht nennen, weil ich nicht weiß,
welche Schnittstelle du wie realisieren möchtest.
Nur so viel: Unter Verwendung des MSSP-Moduls brauchst du, zumindest
bei 8-Bit Adressierung, fast keine Rechenzeit.

Dein PIC hat so weit ich weiß nur einen Pin in
Open-Collector-Ausführung. Demnach benötigst du für IIC zwei
Transistoren und vier Widerstände. SPI ist demnach vom Hardwareaufwand
vorzuziehen, außerdem ist für SPI der Programmieraufwand geringer, da
du keine Adressierung benötigst. Andererseits überträgst du zum
Funkmodul sicherlich mehr Daten als zu den Sensoren.

@ Schoasch
Du hast recht, für ein paar Bytes mit 400 kHz ist Software-IIC
unproblematisch. Wenn Marc aber große Datenmengen zeitkritisch
übertragen und gleichzeitig z.B. regeln muss, dann sieht die Sache
schon ganz anders aus.

Viele Grüße,
Bernhard

von Marc (Gast)


Lesenswert?

Hallo,

erstmal danke für eure Hilfe!

Mir ist leider noch nicht klar, ob ich für einen I2C-Bus in Software 2
oder 4 Pins an meinem PIC brauche?

In dem Beispiel unter dieser URL werden 4 Pins benötigt:
http://www.sprut.de/electronic/pic/programm/thermo75/thermo75.htm

In den C18 Libaries hingegen wird davon augegangen, daß der PIC über 2
Pins mit dem I2C-Bus verbunden ist.

Braucht man nun 2 oder 4 Pins? Oder ist das egal?

Gruß Marc

von arc (Gast)


Lesenswert?

2 Pins.
Das Open-Collector-Verhalten erreicht man normalerweise dadurch, daß
man die Datenrichtung des Ports ändert. Datenrichtung: Eingang -> Pegel
auf dem Bus wird durch den Pull-up High, Datenrichtung: Ausgang -> Pegel
= Low

von Bernhard (Gast)


Lesenswert?

@ arc
Du hast recht.

@ Marc
Zwei Pins, wie kommst du auf vier?

von Marc (Gast)


Lesenswert?

Ich habe Beispiele für einen I2C-Bus in Software gesucht, dabei bin ich
auf auf diese beiden Seinten gestoßen:
http://www.fernando-heitor.de/component/option,com_smf/Itemid,100/topic,1170.0
http://www.sprut.de/electronic/pic/programm/thermo75/thermo75.htm

Beides mal wurden für die SDA Leitung 2 Pins am PIC gebraucht. Einer
als Ausgang und einer als eingang für die Daten.

von Bernhard (Gast)


Lesenswert?

Also vor Sprut habe ich großen Respekt und behaupte nicht, es besser zu
wissen.
Seine Version hat den Vorteil, dass bei einem Programmfehler (PIC zieht
Pegel auf H) kein Kurzschluss entstehen kann.

Ich hab's, wie die Microchip-Examples, mit zwei Pins gemacht, am
Anfang habe ich 470 Ohm in Reihe zum Controller als Kurzschlussschutz
geschaltet.

von Marc (Gast)


Lesenswert?

hast du zufällig den Link zu dem Microchip example?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.