Diesmal kein Hilferuf, sondern ein Kurzbericht, der vielleicht auch jemand anderem helfen mag, bei einem PIC16F87x die I2C Funktion zu benutzen. Ich benötige in einem (privaten) Projekt mehrere Temperaturmessstellen und habe mich für den LM75 (5V Type) entschieden. Ich verwende den PIC16F876A als Master, programmiere alles in Assembler und will das auch weiter tun. Die I2C Schnittstelle ist / war für mich allerdings Neuland. Frisch gewagt, versuchte ich es mit den von Sprut für den PIC16F876 publizierten Routinen. Ich habe die Routinen 1:1 übernommen (copy / paste). Leider war mir nur ein Teilerfolg beschert. Manchmal gelang mir ein einziger Lesezyklus mit einem vernünftigen Messwert, doch dann hing der Bus mit SDA=L. Wohl fand ich im Datenblatt den Hinweis auf ‚Inadvertent 8-Bit Read from 16-Bit Register where D7 is Zero’, doch bin ich nicht sicher, ob der Fehler da zu suchen ist und ich wollte nicht noch mehr Zeit in die Sache investieren. Habe auch kein DSO. So habe ich schließlich diesen Pfad verlassen und Google sei Dank, ein Link auf einen I2C Assemblercode für den PIC18F452 gefunden. http://0x09.com/physical-computing-tutorials/using-the-i2c-bus Mit ein paar kleineren Anpassungen für den PIC16F876A funktionierte das Auslesen des LM75 auf Anhieb. Durchgeführte Änderungen: - Umschaltung auf Bank1 bei allen Zugriffen auf die Register TRISC, SSPCON2, SSPADD, SSPSTAT. - Umbenennung von SSPCON1 auf SSPCON. - Behoben: Subroutine I2C_WriteW überschreibt W durch ‚call I2C_Idle’. Maßnahme: Hilfsvariable eingeführt, die vor dem Aufruf der Routine beschrieben und in der Routine auf SSPBUF übertragen wird. - Im Code SCL und SDA durch Bit-# ersetzt (z.B. TRISC, 3). Sollte jemand erfolgreich die oben erwähnten Sprut Routinen zum Auslesen eines (oder mehrerer) LM75 verwendet haben, so interessiert mich das sehr wohl, obwohl ich jetzt eine gute Lösung habe. Ich beziehe mich jedoch explizit auf die Routinen für den PIC16F876(A) unter Benutzung des MSSP Port. Mit der Software-Schnittstelle für den PIC16F628 möchte ich mich nicht beschäftigen. Grüße, attersee
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.