Forum: Mikrocontroller und Digitale Elektronik Bascom-Problem mit Timer


von samm (Gast)


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

von Falk B. (falk)


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.

von Holgi (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.