Frage:
Kommunikation mit dem Bild 16F913
onaclov2000
2010-07-19 07:41:25 UTC
view on stackexchange narkive permalink

Ich habe diese Frage beim Stapelüberlauf gestellt, sie jedoch in einigen Kommentaren zu einigen der Mikrochip-Fragen gefunden: https://stackoverflow.com/questions/3276297/communicating-with-the-pic- 16f913

Hier ist mein Problem: Es scheint, dass sich alle Kommunikationsleitungen für den PIC 16F913 auf demselben Satz von Pins befinden. Dies ist praktisch, da ich keine GPIO-Pins opfern muss Nur um Kommunikation zu machen, aber das Problem, das ich jetzt habe, ist, wenn ich das SPI auf dem Chip verwende, wie kann ich Informationen an den RS232 senden?

Der Grund, warum dieses Problem aufgetreten ist, ist der folgende Ich habe gerade einen CAN-Bus-Chip gekauft, der über SPI kommuniziert, und ich möchte wirklich die Daten auf RS232 sehen, damit ich Nachrichten sehen kann. (Ich weiß wirklich noch nicht viel über CAN, also wer weiß, ob dies überhaupt noch Sinn macht.)

Hier sind die Optionen, die ich sehe, und vielleicht hat jemand anderes bessere Ideen, als ich einfach bin fehlt.

Richten Sie irgendwie ein Zeitschema ein, das jedes Mal zwischen SPI und RS232 wechselt, wenn ich Daten erhalte. - Dies scheint nicht schwer zu sein und sollte funktionieren, aber vorausgesetzt, ich möchte keine Nachricht verpassen Was ist, wenn eine Nachricht geschrieben wird, während ich an RS232 schreibe? Ist es möglich, dass ich sie verpasse?

2. Ich kann immer SPI verwenden, aber dann über 8 von meinen eigenen Kommunikationsbus bauen die GPIO-Leitungen zu einem anderen PIC 16F913, wobei nur die GPIO-Leitungen verwendet werden. Da die RS232-Leitungen auf dem zweiten PIC frei sind, kann ich die Daten einfach lesen und ausspucken.

- Diese ist machbar Aber jetzt verschwenden wir 2 Chips UND alle GPIO-Leitungen.

Es muss einen besseren Weg geben. Oder gibt es das?

Jede Hilfe wird sehr geschätzt.

Ich möchte auch klarstellen, dass eine Lösung offensichtlich einen völlig anderen Chip verwendet (was tatsächlich das sein kann, was ich am Ende habe Wenn ich den 18F programmieren kann, interessiere ich mich jedoch für das Worst-Case-Szenario, in dem ich nur über begrenzte Ressourcen verfüge und nur einige 913 habe. Dies ist der oben beschriebene Weg, der einzige Weg, dies mit diesem Chip zu tun. oder gibt es einen besseren Weg?

Zwei antworten:
#1
+6
Leon Heller
2010-07-19 09:39:12 UTC
view on stackexchange narkive permalink

Sie können diese Pins für SPI verwenden und einen Software-UART auf einem anderen Pin-Paar implementieren. Ich habe das schon früher gemacht, als ich zwei UARTs auf einem Chip brauchte, der nur einen Hardware-UART hatte.

Sie müssen den Software-UART "bit-bang". Ich habe versucht, einen Code zu veröffentlichen, den ich verwendet habe, aber er wird nicht richtig formatiert. Hier ist ein Beispiel.

Irgendwelche Links zu so etwas? Ich habe so etwas noch nie implementiert und weiß nicht, wo ich anfangen soll.
Welchen Compiler verwenden Sie? Es besteht eine gute Chance, dass der von Ihnen verwendete Compiler Software für Sie erstellt.
hitech c Ich glaube, was auch immer die kostenlose Version ist, und in mplab dazu.
#2
+4
Kortuk
2010-07-19 20:00:43 UTC
view on stackexchange narkive permalink

Um die erste Frage zu beantworten, die ich bekommen habe. Wenn Sie ein Gerät auf SPI haben und nach dem Lesen von diesem in UART schreiben.

Sie können beim Schreiben in UART keine Nachricht "verpassen", da das andere Gerät auf Sie warten muss, wenn Sie Master in SPI sind . Wenn es sich um ein Gerät handelt, das schnell und ständig abtastet, müssen Sie nur sicherstellen, dass Sie es häufiger abtasten, dann ersetzt es seine Werte. Wenn es sich um ein Gerät handelt, das Daten für Sie in einem Puffer speichert, sollten Sie problemlos hin und her wechseln können.

Ich bin es gewohnt, diese Aktion bei der Arbeit auszuführen. Wir haben ein Gerät mit zwei Kommunikationskanälen . Ein Kanal verfügt über 5 verschiedene Geräte, die er steuern kann, 4 über SPI und eines über UART. Der andere Kanal hat zwei. Einer auf SPI, einer auf UART. Der Code ist etwas komplexer, da die Firmware-Controller für jedes Gerät nach dem Zugriff auf Ressourcen fragen und diese empfangen müssen, bevor sie etwas unternehmen können. Das System funktioniert jedoch weiterhin einwandfrei.

Ich würde vorschlagen, dass Sie einen kurzen Versuch unternehmen nur umschalten. Sie sollten es schnell genug implementieren können.

Die andere Option besteht darin, einen Software-UART zu erstellen. Dies kann durchaus machbar sein. Es wird normalerweise als Bit-Banging bezeichnet und ist eine gängige Praxis, wenn es nur zum Debuggen dient und für ein Endprodukt nicht benötigt wird.

Ich würde Bit-Banging empfehlen, um faul zu sein. Die Leute übersehen oft das Bit-Bangen.

Du weißt, ich habe von Bitbangen gehört, habe mich aber nie darum gekümmert, es nachzuschlagen. Nachdem ich den Wiki-Eintrag gesehen habe, ist es ein interessantes Konzept und ich vermute, dass dies ein zukünftiges Projekt für mich sein könnte, um meine Fähigkeiten zu verbessern. Danke dafür !!!
Es mag aufregend aussehen, aber Sie werden es sehr schnell in Ihr Repertoire aufnehmen und weitermachen. Ich gratuliere Ihnen, dass Sie sich die Zeit dafür genommen haben.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...