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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren