- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: PIC 16F870 bzw. 877 - zu langsam für Anwendung?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16

    PIC 16F870 bzw. 877 - zu langsam für Anwendung?

    Anzeige

    Powerstation Test
    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?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    41
    Beiträge
    1.013
    Der PIC benutzt nen 1:4 teiler d.h. das heist das nur alle 4 takte ein Befehl ausgeführt wird vielleicht reicht es bei deiner Anwendung auch wenn du die 16mhz Quarz gegen einen 20mhz tauscht ansonsten Firste wohl nen 18f oder nen dspic benutzen müssen vileicht ist auch dein code noch optimierbar.
    Legastheniker on Bord !

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16
    Im Datenblatt steht aber, daß nur im RC-Mode der 1/4-Teiler aktiv ist. (so les ich das), Orginal Text:

    OSC1/CLKI 9 9 I ST/CMOS(3) Oscillator crystal input/external clock source input.
    OSC2/CLKO 10 10 O — Oscillator crystal output. Connects to crystal or resonator in
    Crystal Oscillator mode. In RC mode, the OSC2 pin outputs
    CLKO, which has 1/4 the frequency of OSC1, and denotes the
    instruction cycle rate.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    41
    Beiträge
    1.013
    ne da steht das im RC mode OSC2 / CLKO 1/4 der Freqenz ausgeben die an OSC1 anliegt aber eigentlich ist es bei PICs Grundsetzlich so das der 1/4 Teiler immer benutzt wird.
    Legastheniker on Bord !

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16
    Stimmt, ich hatte das hier aus dem Datenblatt übersehen:

    ...
    One instruction cycle consists of four oscillator periods. Thus, for an oscillator frequency of 4 MHz, the normal instruction execution time is 1 µs. If a conditional test is true, or the program counter is changed as a result of an instruction, the instruction execution time is 2 µs.
    ...

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    41
    Beiträge
    1.013
    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.
    Legastheniker on Bord !

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16
    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.
    Angehängte Dateien Angehängte Dateien

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2007
    Beiträge
    16
    Nachtrag: meine Angabe zur Anzhal der Instruktionen ist falsch. Ich habe die Instruktionen für 16 Taktflanken des zu verarbeitenen Signals angegeben.
    Das lag an der Aufgaben stellung, da der Sensor in einem Paket von 16 Taktflanken abgefragt wird.

    d.h. ich habe in das Sheet ca. 70 instructions statt 300 einzutragen.

    Demzufolge würde eine Erhöhung des Quarz auf 22 MHz eien Lösung sein.

    In dem Sheet ist ein kleiner Bug: In der Formel in C21 muss man die 300 durch C8 ersetzen!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress