PIC 16F870 bzw. 877 - zu langsam für Anwendung?
Hallo,
ich habe die PICs 16F870 bzw. 877.
Angeschlossen ist ein 16 MHz Quarz.
Im Datenlatt steht, daß Befehle 1 Taktzyklus brauchen, Sprungbefehle 2 Taktzyklen.
In der gewünschten Anwendung, soll eine SPI-Kommunikation abgefangen werden, d.h. zwischen einem anderen Controller und einem Sensor soll der PIC eingebaut werden.
Der andere Controller, der SPI-Master sozusagen, frägt den Sensor in Paketen zu 16 Taktzyklen mit 66 kHz ab.
serial clock & data Leitungen vom anderen Controller sowie die serical clock & data Leitung des Sensors sind an entsprechend vier I/O-Pins des PICs angeschlossen.
Ich habe nun ein kleines Programm geschrieben und auf den PIC gebrannt. (Tools: MPLAB, CCS, ICD2).
Das Programm wartet auf die steigende Taktflanke der serial clock Leitung vom anderen Controller arbeitet dann ein bisschen Code ab indem auch die Taktflanke irgendwann auf den Sensor weitergegeben wird. Auch die Datenleitungen werden abgefragt bzw. gesetzt.
Das Prorgamm besteht aus 7 kleinen Funktionen, in denen nichts großartig gemacht wird, da als erster Schritt nur die Weiterreichung der Kommunikation implementiert ist. Eingriffe in die Kommunikation sind für später geplant.
Mit einem Frequenzgenerator teste ich also den serial clock I/O-Pin des PIC welchen vom anderen Controller später kommen soll und Messe den anderen I/O-Pin des PIC der serial clock welches spätzer zum Sensor führen soll.
Ich hoffe man kann sichs Vorstellen.
Bei der Messung sollte herauskommen: jede steigende Flanke des "Eingangs" ergibt eine steigende Flanke des "Ausgangs".
Problem: Es werden Taktflanken "verschluckt".
Es scheint so als arbeite der PIC zu langsam.
Woran kann das liegen?
Wie kann ich feststellen, daß mein PIC wirklich mit 16 MHz läuft und somit pro ASM-Befehl 1/16 µs bzw. 2/16 µs dauert?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von theborg
also zur Optimierung kanste nen 20mhz noch dranhängen es gibt aber auch berichte wo welche es geschafft haben nen f877 mit 27mhz stabil zu betreiben.
Das würde mir leider wenig nützen. Aber dafür ist es einfach durchzuführen. Es würde aber mehr bringen die Anzahl der Befehle zu reduzieren. Dazu müsste ich aber wohl von C auf ASM umsteigen, was ich eigentlich vermeiden wollte.
Ich habe zur Abschätzung des Laufzeitverhaltens ein OpenOffice Calc Sheet erstellt und stelle es hier mit ohne Gewähr und ohne Garantie zur Verfügung.
Wie ihr sehen könnt müsste ich bei einem 20 MHz Quarz das Programm (hier sind nur die Befehle gemeint die Quasi-Periodisch auftreten, also ohne Initialisierungen etc.) auf 64 Befehle reduzieren.
Momentan hat es ca. 300-400. Die Abschätzungen dazu und auch zu den Warscheinlichkeiten "p" habe ich kurzerhand per "grep" auf das ASM-file ermittelt. Im Grunde kann man sagen, daß man ca. 80% Befehle hat die 1 Taktzyklus brauchen (je nach Anwendung verschieden.
Das Sheet schlägt zwei Löungen vor, die bei mir kaum zu realisieren sind um die Zeitschranke einzuhalten.