mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit definierter Impulsdauer eines Ausgangs


Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Problem, ich verstehe nach längerer Überlegung einfach 
nicht
woran es liegt.

Folgendes möchte ich testen/realisieren:
-----------------------------------------

Ein Ausgang (RE0) des Pics 18F46J50 soll für eine genaue Zeit auf 
High/Low
gehen.

Benutzen möchte ich dazu NOP´s bzw die Delay10TCYx(50) ("delays.h")
in C mit dem MPLAB C18 Compiler
Quarz: 12Mhz
Config siehe main.c siehe Anhang
->interner Takt müsste somit 48Mhz betragen
rein rechnerich sollte ein NOP somit 1 Cycle -> 4 Takte -> und somit 
83,3
ns dauern.

Leider messe ich immer und immer wieder 335 ns pro NOP.
Da dies ja schon nicht mit der Rechnung übereinstimmt,
brauche ich mit der Delay10TCYx(50) gar nicht weitermachen.

Woran könnte das liegen?

Ist der interen Takt doch ein anderer (->Config<-)?


Vielen Dank

Autor: Dennis U. (atmegadennis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex,

Ich denke das da u.U. die Interrupts ins gewicht fallen könnten, hast du 
von denen denn irgendwelche aktiv ??

Und warum verwendest du nicht genau diese Interrupts zur Steuerung von 
deinem Ausgang ??

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kommst du auf einen internen Takt von 48MHz, wenn der Quartz 12MHz 
hat?
Ich glaube beim PIC wird der anliegende Takt immer durch 4 
geteilt...d.h. der rechnerische Takt von dem du augehen müsstest beträgt 
3MHz. s. auch bei sprut.de

Zitat:
"Die Taktraten-Falle
Microchip preist die Eigenschaft seiner Controller, fast alle Befehle in 
nur einem Zyklus ausführen zu können. Mit diesem Zyklus ist aber nicht 
ein Takt sondern 4 Takte gemeint.
Ein NOP-Befehl benötigt auf einem mit 10 MHz getakteten PIC also 
keineswegs nur 100 ns sondern 400 ns. Wer Zeitschleifen aufbaut sollte 
das berücksichtigen.
Der Timer läßt sich übrigens auch nur mit maximal 1/4 des externen 
Prozessortaktes füttern, wenn man den internen Takt verwendet."

aus: http://sprut.de/electronic/pic/fallen/fallen.html#takt

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielen dank für eure Hilfe...

Interrupts dürften eigentliche alle ausgeschaltet sein. Ich habe keine
eingeschaltet. (siehe main.c im Anhang)
Ich habe schon die Warteschleife (NOP´s) mittels Debugger getestet,
dort kommen keine Interruptroutinenaufrufe vor.
Die Impulsdauer mittels TimerInterrupt wollte ich
umgehen (zu viel Aufwand).
Ich verzweifle fast.
@Michael: Die Frequenz 48Mhz kommt durch die PLL.

Ich habe die meiner Meinung nach eingestellte Takt-Config
als Blockschaltbild hochgeladen. (roter Pfad)

Danke
Alex

Autor: Udo R. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du Dir mal angesehen, was der Compiler daraus für Assembler macht?

>Die Impulsdauer mittels TimerInterrupt wollte ich
>umgehen (zu viel Aufwand).
Wäre es nicht doch schneller gewesen der Timer zu bemühen? Zumal Du dann 
eine Funktion hättest der Du mit übergeben könntest wie lange der Puls 
dauern soll und Du gelernt hättest wie man den Timer programmiert :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.