Hallo! Ich will Lichtstärke-Mess-Modul GY-302 (Chip = BH1750; (slave-)I2C-Modul) mit PIC16F1704 ansteuern (Master). Kurzbeschreibung: Chip BH1750 braucht max. 3,3V und das Modul GY-302 hat 3,3V Regler, sodass seine I2C-Anschluße 0V oder 3,3V liefern. PIC und LCD laufen von 5V, mit den GY-302-Modul versorgt wird. Für I2C-Kommunikation wurde ein Pegel-Wandler 3/5V zw. PIC und Modul GY-302 eingebaut und es läuft alles mit anderem PIC. Das komplette Programm habe ich zuerst für PIC16F1512 (28-Pin-Gehäuse) geschrieben und getestet und da funktioniert alles. Jetzt will ich das mit PIC16F1704 betreiben, weil seine 14 Pins reichen, er hat I2C (MSSP-Modul) und ist kostengünstig. Ich würde auch später gerne diesen Controller für andere Projekte nehmen. Mit I2C von PIC16F1704 stoße ich abber auf Probleme, und ich vermute wegen falscher Initialisierung (Einstellung) von I2C-Modul. Der PIC16F1704 hat mehr Register zum Initialisieren von I2C und allgemein etwas mehr an Perepherie als PIC16F1512. Mit jetzigen Einstellungen kann ich Adresse und Daten an GY-302-Modul anscheinend fehlerfrei senden, das Auslesen liefert aber 0-Wert (16-Bit-Wert). Ich suche länger nach Fehler und finde nichts. Beispiele im Netz zu PIC16F1704 und seinem MSSP auch nicht gefunden. Habe wohl etwas übersehen. Muss man vielleicht andere Perepherie-Elemente extra abschalten? Also SMBus ist aus. Das ist von I2C abgeleitete Bus mit anderen Pegeln und langsamen ist er auch (10...100KHz). Ich habe aus Programm-Dateien wegen besseren Übersicht viel raus gekürzt, sodass möglichst nur I2C-Funktionen und deren Aufrufe im Hauptprogramm zu sehen geblieben sind. Ich hoffe das reicht so fürs Übersicht. Eigentlich kommt nur die erste Funktion "InitI2C()" (I2C- Initialisierung) aus der Datei "i2c.c" in Frage. Sie ist für die Einstellungen von I2C-Bus (hier Master-Mode) verantwortlich. Können Sie mir dabei helfen Fehler zu finden?
Danke Leute; Hat sich erledigt! Hab selbst Übel gefunden. Es waren an PORTC außer Datenleitungen von LC-Display angeschlossen. Beim Auslesen von Display wurde Interruptflag von I2C gesetzt. Stand klein im Datenblatt von PIC, dass mit Peripherie verbundene Pins nicht als Ausgang benutzt werden können zwar, können aber immer als Eingang ausgelesen werden. Ich habe I2C-Funktionen so umgeschrieben, dass SSP1IF unmittelbar vor Aktionsbefehl auf '0' gesetzt wird. Dann hat alles wie gewünscht funktioniert.
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.