mikrocontroller.net

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


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Geri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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

Beste Grüsse
Geri

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und an welche Pins des PICs schließt man dann SCL und SDA an???

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernhard,

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

Gruß Marc

Autor: Schoasch (Gast)
Datum:

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

Autor: Marc (Gast)
Datum:

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

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/thermo...

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

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ arc
Du hast recht.

@ Marc
Zwei Pins, wie kommst du auf vier?

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
http://www.sprut.de/electronic/pic/programm/thermo...

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

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du zufällig den Link zu dem Microchip example?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.