www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keil: Geschwindigkeit bei Timern


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich muss ein Projekt für den 80535 realisieren unter Verwendung des
Timer 2. Vorerst möchte ich nur R0 alle 3 Sekunden inkrementieren, was
ich über die 16-Bit Auto-Reload-Funktion des Timer 2 realisieren
möchte.

Leider zählt R0 aber extrem schnell hoch. Kann es sein, dass Keil im
Debug-Mode nicht mit 12 Mhz sondern viel schneller arbeitet? Oder
liegts doch an meinem Code (siehe Anhang)?

Falls es an Keil liegt: Welche Möglichkeiten gibt es, das Programm mit
12 MHz Oszillatorfrequenz zu testen?

Vielen Dank für eure Hilfe!

Gruß
Markus

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du denn überhaupt keine Kenntnisse über den grundsätzlichen
Programmaufbau ?

- Main-Schleife fehlt
- zu Anfang sollte man hinter die Interruptvektoren springen


Peter

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

Bewertung
0 lesenswert
nicht lesenswert
Hab den Code nur auf das Wesentliche gekürzt...
Aber jetzt nochmal mit mehr Code :)

Markus

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne den 535 nicht, aber beim AT89C52 komme ich auf:

12MHz  2  50000 / 60 = 2Hz


Peter

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal vielen Dank für deine Antwort!

Könntest du die Rechnung bitte kurz erklären? Unser Dozent hat uns das
folgendermaßen erklärt:
Wenn man als Autoreloadwert 15.536 festlegt, zählt der 16-Bit-Timer
noch 50.000 Schritte ms hoch (da er ja bis 65.536 zählt). Bei 12 MHz
benötigt er für 50.000 Schritte 50 ms (pro Schritt 1 us).

Stimmt das so nicht?

Jedenfalls zählt das Register trotzdem sehr viel schneller hoch.. 1 kHz
käme da eher hin :/

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
" 1 kHz käme da eher hin"

Achso, hätste doch gleich sagen können.

Du must noch das Interruptflag zurücksetzen.
Nur bei T0 und T1 wird es automatisch gelöscht, nicht aber bei T2.


Peter

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1000 Dank!

Jetzt funktioniert's wunderbar :)

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir vielleicht noch mal jemand erklären / resp. bestätigen, dass
ich das mit den Interrupt-Zeiten richtig verstanden habe ?

Bei einem 4 MHz-Takt und einer Vorteilung von 256 komme ich auf einen
Takt von 15,625kHz.
Das ist die Frequenz, mit der das Register von 255 bis 0 runtergezählt
wird.
Bei 0 erfolgt dann erst der Interrupt ?
d.h. Der Interrupttakt läge dann bei 61,27 Hz (15625/255) oder ist das
dann 15625/256 ?

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.