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
Hallo I2C lässt sich auch per Software implementieren. Routinen findest du in den MCC18 libraries. Beste Grüsse Geri
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
Hallo Bernhard, weißt du auch um welchen Faktor die Software-Implementierung langsamer ist??? Gruß Marc
Die 400kHz sollte man aber doch recht leicht schaffen können. Das Bringt man sogar mit einem 8051er zusammen (ohne Hardware I2C).
Weiß jemand, ob man noch zusätzliche widerstände braucht, wenn man den I2C-Bus beim PIC per Software realisiert???
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
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
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.