Nachdem ich wie hier beschrieben auf Probleme mit Hardware-I²C gestoßen war , entschied ich mich, Software-I²C mit den Bibliotheksfunktionen des MPLAB C18-Compilers auszuprobieren. Glücklicherweise erzeugen die Libraries gut aussehende Signale an den Pins, aber ich mache mir etwas Sorgen um die von ihnen verwendeten Timings.
Die Dokumentation und die Quelldateien des C18-Compilers geben nicht explizit an, für welche Busgeschwindigkeit und Oszillatorfrequenz die Verzögerungen in Funktionen eingestellt sind, daher frage ich mich, ob es einen besseren Weg gibt, sie anzupassen, als durch Quelldateien zu tauchen und von Hand zu berechnen Anzahl der Verzögerungen, die ich brauche.
Normalerweise erstelle ich ein Makro, das meine Systemtaktfrequenz definiert.
#define GetSytemClock() (41666667ul)
Erstellen Sie dann ein Makro mit der Formel im Datenblatt zur Berechnung der Taktfrequenz.
#define GetSSPBRG(i2c_clk) (((GetSystemClock()/i2c_clk)/4)-1)
Übergeben Sie die gewünschte i2c-Taktrate (Hz) an das Makro GetSSPBRG() und es wird den korrekten Wert für das SSPxADD-Register bereitstellen.
Die Initialisierung der Kommunikation erfordert die Überprüfung aller Ihrer Annahmen. . . Überprüfen Sie die Signalintegrität an beiden Enden mit zwei Sonden AB im Differenzmodus. Verwenden Sie Ferritperlen oder -kerne im Kommunikationsmodus, um sicherzustellen, dass kein CM-Störrauschen in ein Differenzsignal umgewandelt wird. Stellen Sie sicher, dass die Impedanz richtig abgeschlossen ist und die Pegel gut sind. . Ist die Uhr auf RTC mit Caps eingestellt? und richtig einstellen? Haben Sie das Zurücksetzen lange genug zugelassen, damit die Uhr gestartet werden kann? Läuft es mit der richtigen Rate? Überprüfen Sie beide Enden und wählen Sie einige Testmuster wie U = 55h = 01010101 3 = 33h = 00110011. Überprüfen Sie mit dem Bereich, den Sie senden.
Dann senden Sie den Generalrufbefehl 00h.
Dann rufen Sie für Pizza an.
Olin Lathrop
AndrejaKo
David
Olin Lathrop
David
Olin Lathrop