Forum: Mikrocontroller und Digitale Elektronik Welche Formel und eine genaue Freuenz zu haben


von Marc (Gast)


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

von Christopher G. (cbg)


Lesenswert?

Kenne die tiny nicht aber genauer als mit einem PWM Modus 
(hardwareseitig) gehts nicht. Vorladen ist nicht so toll, gibts bei 
denen kein FastPWM oder so wo man einfach den TOP Wert setzt?

von spess53 (Gast)


Lesenswert?

Hi

Stichwort: CTC

MfG Spess

von Läubi .. (laeubi) Benutzerseite


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...

von Marc (Gast)


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

von Peter (Gast)


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.

von Peter (Gast)


Lesenswert?

s/Datenbank/Datenblatt/

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

CTC ist schon das richtige Stichwort, du mußt unter Bascom dan halt ggf 
die Register per hand beschreiben. Soweit ich weiß kann man Assembler 
befehle direkt in Bascom verwenden.

von Simon K. (simon) Benutzerseite


Lesenswert?

@Marc: Versuche dich davon loszulösen, was BASCOM unterstützt und lese 
das Datenblatt und setze die Register händisch ohne über BASCOM 
Funktionen zu gehen.

von Marc (Gast)


Lesenswert?

okay, danke an alle, werde mich an die lösung machen...

grüße
marc

von Karl H. (kbuchegg)


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.

von Guido S. (flintstone)


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

von Michael U. (amiga)


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

von MWS (Gast)


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.

von MWS (Gast)


Lesenswert?

Und zur ursprünglichen Frage nach der Formel: die steht auf Seite 99 des 
Tiny2313 Datenblattes.

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.