I2C - Temperatur kann nicht von TC74 mit PIC16F887 gelesen werden

Die Frage war:

I want to read temperature from TC74 using I2C module of PIC16F887, however, in Proteus
simulation, I see noises in I2C Debugger Tool's output.

Es sagte mir, dass ich "Spurious SCL-Übergang" hatte. Alle anderen Informationen zu der Frage wie Schemata, Code und Screenshot finden Sie in den älteren Revisionen .

Das Problem wird behoben, nachdem eine Verzögerung von 4 us nach einer Neustartbedingung hinzugefügt wurde, wie im Datenblatt angegeben:

Haltezeit der START-Bedingung - Min.: 4 us

START-Bedingungs-Setup-Zeit (für wiederholte START-Bedingungen) - Min.: 4 us

STOP-Zustands-Setup-Zeit - Min.: 4 us

Das bedeutet, dass wir immer zuerst das Datenblatt gründlich lesen sollten . Ich vermute, dass der Grund, warum Leute im Internet keinen Fehler haben, wenn sie diese Wartezeiten nicht einhalten, darin besteht, dass ihre Taktrate niedrig ist und sie keine Verzögerung in der uC vornehmen müssen.

Arbeitscode und alle anderen Informationen dieses Beitrags können in den älteren Revisionen davon gefunden werden. Um die endgültige Version der Frage vor diesem Schrumpfen zu sehen, gehen Sie einfach auf diese Seite .

Ich habe alles in eingebettete Bilder konvertiert, Sie hätten sie wahrscheinlich für uns zuschneiden sollen. Zu Ihrer Frage haben Sie nicht gesagt, was Sie versucht haben, um das Problem zu beheben. Es kann eine große Hilfe sein, diese Informationen aufzunehmen.
Ich konnte nichts tun, ich habe viel bei Google gesucht, aber es war hoffnungslos, dann habe ich meinen Code erneut mit dem PIC-Datenblatt überprüft, aber auch daraus kein Ergebnis. Dies ist das erste Mal, dass ich über I2C interagiere, also wünsche ich Hilfe von den Erfahrenen hier.
Es besteht keine Notwendigkeit für solch lächerlich große Bilder. Du hättest sie vor dem Posten leicht zuschneiden und verkleinern können.
Tut mir leid, ich habe versucht, so offen wie möglich zu sein.
Die Bilder sind in Ordnung, Jungs. Ich habe sie allerdings abgeknipst. Denken Sie daran: Es ist viel besser, dass wir viele Informationen bekommen, als dass wir zu wenig bekommen! Ich würde ein Dutzend Fragen mit Screenshots beantworten, die enger zugeschnitten werden müssten, als eine "Es funktioniert nicht, können Sie einen funktionierenden Code posten?" Frage.
@Kevin Vermeer, der Code im Beitrag scheint keine Code-Tags mehr zu haben
@abdullah - Hoppla! Ich habe in meiner Bearbeitung ein Leerzeichen entfernt. Code sollte um vier Leerzeichen eingerückt werden - drei funktionieren nicht. Das tut mir leid!
@Kevin Vermeer - Danke für deine Sorgfalt bei der Frage :)
Das Problem kann im Empfangsmodus liegen. Laut Datenblatt „wird der Empfang im Master-Modus durch Programmieren des Receive Enable-Bits RCEN (SSPCON2-Register) aktiviert. Der Baudratengenerator beginnt zu zählen, und bei jedem Rollover ändert sich der Zustand des SCL-Pins zu hoch) und Daten werden in den SSPSR verschoben.Nach der fallenden Flanke des achten Takts wird das RCEN-Bit automatisch gelöscht,der Inhalt des SSPSR wird in den SSPBUF geladen, das BF-Bit wird gesetzt, das SSPIF-Flag-Bitist eingestellt und der Baudratengenerator wird vom Zählen suspendiert, wobei SCL niedrig gehalten wird."
Ich habe überprüft, nach diesen acht Takten ist RCEN gelöscht und SCL ist niedrig und zählt nicht, das BF-Bit ist gesetzt, aber SSPBUF ist 0x00.
Hallo nochmal, ich habe kürzlich mit DS1621 kommuniziert , indem ich nur die Adressen und Befehle geändert habe (natürlich werden aufgrund von IC-Änderungen mehr Befehle eingeführt). Das bedeutet, dass es ein Problem mit der Verbindung zu TC74 gibt, aber was ich mache, ist dasselbe wie im Internet. Ich starte, sende Adresse mit Schreiben, sende Befehl (dh 0x00), dann Neustart, dann sende Adresse mit Lesen, dann Lesen, dann Stopp.
@abdullahKahraman, hast du versucht, das zu bauen? Es besteht immer die Möglichkeit, dass eine Simulation schuld ist.
@ Kortuk, ich habe im wirklichen Leben keinen TC74 IC :)
@AbdullahKahraman, es scheint, als würden sich die Zeiten ändern, es ist Zeit für eine, es sei denn, dies ist nur ein spaßiges Projekt oder eine Aufgabe in der Schule. :)
@Kortuk, ich versuche, eine I2C-Bibliothek für die zukünftige Verwendung in meiner Arbeit zu erstellen. Ich werde es brauchen, da mein Abschluss brandneu ist :)
Hat jemand TC74-Chip und PIC16F887? Hier ist die .hex-Datei, damit Sie sie für mich testen können? mediafire.com/file/va31qmjd0p07d5n/I2C.zip
Ich möchte meine endgültige Bibliothek für den Compiler "MikroC Pro for PIC" hinzufügen. Diese Bibliothek ist in Echtzeit (Multitasking). mediafire.com/?twqa31j8aoa29

Antworten (2)

Ich weiß nicht, was Sie mit "Proteus-Simulation" meinen. Auf jeden Fall gibt es einige offensichtliche Probleme im Schaltplan. Erstens fehlen eindeutig eine Reihe von Verbindungen, sodass wir nicht sagen können, was wirklich angeschlossen ist. Sie bekommen Stifte wackeln, also muss es Strom geben, der nicht gezeigt wird. Bleibt die Frage, was sonst noch nicht gezeigt wird. Und nein, sagen Sie nicht, es ist alles richtig angeschlossen und es spielt keine Rolle. Bei näherer Betrachtung hat der PIC im Schaltplan überhaupt keine Strom- und Erdungsstifte. Beheben Sie all diese offensichtlichen Dinge, bevor Sie fortfahren.

Warum die 10-kΩ-Klimmzüge? Diese können für IIC in Ordnung sein, begrenzen jedoch die Busgeschwindigkeit. Was ist die IIC-Taktrate?

Welche Spannung ist Vcc? Wie wird der PIC getaktet? Wenn dies eine Simulation ist, was macht die echte Hardware? Was ist der "I2C"-Block in der oberen rechten Ecke des Schaltplans? Wenn Sie ein Problem zwischen einem PIC und einem anderen Gerät haben, entfernen Sie während des Debuggens alles andere vom Bus.

Mir ist klar, dass dies wahrscheinlich ein Kommentar hätte sein sollen, aber es war zu viel verlangt, um in einen Kommentar zu passen.

Hallo, Proteus ist ein Simulationsprogramm von Labcenter Electronics. Die fehlenden Verbindungen (wie MCLR und OSC1) werden in Proteus nicht benötigt, ich habe viele Simulationen ohne sie gemacht und sie haben gut funktioniert. TC74 arbeitet mit 100 kHz und mein PIC mit 20 MHz. Ich habe den Wert der Pull-up-Widerstände geändert und es hat nicht funktioniert. Dieser I2C-Block ist ein Debugger-Tool im Simulationsprogramm. Ich habe im Moment keine richtige Hardware, weil ich keinen TC74-IC habe. Danke für deine Antwort :)
@AbdullahKahraman, füge der Frage interessante Informationen wie diese hinzu!
@Kortuk, keine Sorge, das vergesse ich beim nächsten Mal nicht :)

Das Problem in der Frage ist gelöst und die Details finden Sie im Beitrag selbst oder im letzten Beitrag vor dem eigentlichen. Diese Antwort dient nur dazu, diese Frage als beantwortet zu kennzeichnen, damit sie nicht umsonst die Liste der unbeantworteten Fragen füllt.