Bascom-Problem mit Timer

Gast #3184574
Lesenswert?
• ▲
▼
Hallo,

ich habe folgendes Problem mit meinem ATMega32@16MHz:
Ich versuche mit Bascom ein 1MHZ-Signal zu erzeugen.
Wenn ich einfach dauernd einen Pin toggle, komme ich auf ca. 1,1 MHz 
(bei 16MHz externer Quarz).
Wenn ich jetzt einen Timer überlaufen lasse und per Interrupt in eine 
Toggle-Sub springe komme ich niemals über 64 kHz.
Egal, ob ich das mit einem 8-Bit oder einen 16-Bit Timer mache und ihn 
nur um eins hochzählen lasse bis zum überlaufen (also auf 254 oder 65534 
setze). Die Frequenz kommt niemals über die besagten 64kHz. Ich habe den 
Prescaler selbstverständlich auf 1 gesetzt
Habe ich einen Denkfehler oder fehlt mir nur eine Information, die alles 
erklärt?

Danke für die Hilfe

Samm
#3184588
Lesenswert?
• ▲
▼
@ samm (Gast)

>ich habe folgendes Problem mit meinem ATMega32@16MHz:
>Ich versuche mit Bascom ein 1MHZ-Signal zu erzeugen.

Sportlich. Damit hast du für Port setzen, löschen und Rücksprung der 
Schleife gerade mal 16 Takte. Reicht, aber dann gent nix anderes mehr.

>Wenn ich jetzt einen Timer überlaufen lasse und per Interrupt in eine
>Toggle-Sub springe komme ich niemals über 64 kHz.

Wenn wir mal einen Programmfehler ausschließen, müssen wir mal rechnen.

64 kHz / 16 MHz = 250 Takte. Pro Periode braucht man zwei Interrupts, 
jeweis zu setzten und und zum löschen, macht 125 Takte.
Da BASCOM bekanntermassen beim Interrupt fast alle Register sichert, 
brauch es ca. 32 (Register) x2 (speichern und wiederherstellen) x2 (2 
Takte für push/pop) Takte, macht 128. Passt.

Wenn man so einen schnellen Takt erzeugen will, macht man das so oder so 
nicht in Software, sondern per Timer im CTC Modus und Output Compare 
Funktion.
Gast #3184593
Lesenswert?
• ▲
▼
Die ISR, Ansprung, Rücksprung zusammen mit Register auf Stack sichern 
und Rückholen benötigt Zeit. Somit kommst du nicht über die 64kHz. Mit 
20MHz Quarz ging es etwas schnelle aber auch nicht weit über die 64kHz.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.