Welche Formel und eine genaue Freuenz zu haben

Gast #1310667
Lesenswert?

Hallo zusammen,

ich werde hier seit Stunden nicht schlau.

Ich betreibe den tiny2313 mit 8MHz int.

Ich würde jetzt gerne einen Pin mit 40kHz togeln lassen.

Ich krieg einfach keine Formel hin, mit der ich das Problem lösen kann, 
also den passenden Prescaler und den Wert, mit dem ich den Timer 
vorbelegen muss, damit dieser 80000/sekunde mein Interupt auslöst.

Das muss ja auch ohne PWM gehen, oder nicht?

Kann mir bitte jemand von euch helfen und mir erklären, wie man sowas 
ermittelt.

Trotz mehrerer Brichte im Internet komme ich nicht drauf.

Danke

Marc
Persönliche Seite #1310679
Lesenswert?

Tiny hat nen Timer mit OutputCompare Funktion die ist dafür Ideal.
Du stellst den dann auf ClearOnCompare, Toggle Port on COmpare und schon 
erzeugt er dir die Frequenz.

Ausrechnen kannst du das so:
Du hast die Taktfrequenz = X Mhz.
Die Teilst du durch den Vorteiler (z.B. 1024) was deine 
TimerZählfrequenz ergibt also Y = X / Vorteiler.
Nun weißt du das dein Timer in einer Sekunde um Y erhöht wird.
Zusammen mit deiner gewünschten Frequenz kannst du dir jezt den 
Comparewert ausrechen, nocheinmal durch 2 teilen (durch das toggeln 
verdoppelt sich ja die Frequenz) und schon bist du fertig :)

Im Datenblatt ist mein ich aber auch ne Formel angegeben. Seite 99 in 
meinem Datenbaltt was ich auf dem Rechner habe...
Gast #1310689
Lesenswert?

Hallo  Läubi,

das klingt wirklich gut, aber hast du mal ein kurzes Beispiel, wie du 
das mit "ClearOnCompare, Toggle Port on COmpare" meinst.

Ich komme das nicht zurecht, bzw. finde diese Befehle nicht unter 
Bascom.

Wenn ich sogar "ClearOnCompare" in Google angebe ist die einzige Suche 
Dein BEitrag hier ;o)

Wäre es möglich, ein Codeschnipsel reinzusetzen, wie der aus 8MHz 40kHz 
macht?

Grüße

Marc

@spess53: Danke, aber CTC wird von Bascom nicht unterstützt
Gast #1310697
Lesenswert?

ja Bascom ist scheinbar nicht alles, wenn du wissen willst was ein Tiny 
kann solltest du das Datenbank vom Tiny lesen, zur not musst du dann in 
Bascom halt assembler einsetzen wenn es nicht anders geht.
#1310737
Lesenswert?

Marc schrieb:

> @spess53: Danke, aber CTC wird von Bascom nicht unterstützt

Das glaub ich nicht.
Die Option "CLEAR TIMER = 1" macht genau das: Wenn der Zählerstand einen 
Compare A Match auslöst, wird der Timer auf 0 zurückgesetzt.

Wir nennen das CTC, weil es auch Atmel so nennt. BASCOM benutzt manchmal 
einfach nur eigene Begriffe. Die Funktionalität ist aber dieselbe.
#1310754
Lesenswert?

Hallo Marc!

Ich habe soetwas mal für einen ATmega8 gemacht.
Hier wird Timer1 im 16Bit-Modus verwendet.

Initialisierung:
'*** Timer 1 einstellen
   'Vorteiler auf 1
   Set Tccr1b.cs10
   Reset Tccr1b.cs11
   Reset Tccr1b.cs12

   'Toggle OC1A on Compare Match
   Reset Tccr1a.com1a1
   Set Tccr1a.com1a0

   'Waveform Generation Mode --> Mode 4; CTC
   'WGM13 = 0
   'WGM12 = 1
   'WGM11 = 0
   'WGM10 = 0
   Reset Tccr1b.wgm13
   Set Tccr1b.wgm12
   Reset Tccr1a.wgm10
   Reset Tccr1a.wgm11

Im Programm:
   Ocr1ah = WertH
   Ocr1al = WertL
   Set Tccr1b.cs10                           'CTC ein
   Config Portb.1 = Output

Das komplette Programm findest du unter: 
Beitrag "Melodieklingel BASCOM ATmega8"

Gruß
Guido
#1310822
Lesenswert?

Hallo,
da die Rechnerei ja öfter auftritt...
Ich halte es bei CTC so:

Takt/ 2x Zielfrequenz 8000000/ 80000 = 100
Wenn es nicht ganzzahllig ist, geht es nicht genau auf die Frequenz.

Jetzt die 100 nacheinander durch die verfügbaren kleineren Prescaler 
teilen, bis ein ganzzahliger Wert ruaskommt.
100/ 64 = 1,5.. is nicht
100 / 32
..
100 / 4 = 25 geht.
Prescaler 4, Counter auf 25-1 = 24, 8Bit-Counter reicht.

Geht am übersichtlichsten finde ich.

Gruß aus Berlin
Michael
Gast #1310846
Lesenswert?

Das hier macht was Du willst, Compare auf 99 (0-99 = Teiler 100), denn 
Du musst mit doppelter Frequenz toggeln:
1
Compare1a = 99
2
Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1

Der 8bit Timer0 ginge auch dafür, laut Bascom Hilfe scheint er nicht 
direkt unterstützt zu werden, muss also durch Beschreiben der 
entsprechenden Register konfiguriert werden.

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