www.mikrocontroller.net

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


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Stichwort: CTC

MfG Spess

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
s/Datenbank/Datenblatt/

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay, danke an alle, werde mich an die lösung machen...

grüße
marc

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Guido Scheidat (flintstone)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier macht was Du willst, Compare auf 99 (0-99 = Teiler 100), denn 
Du musst mit doppelter Frequenz toggeln:
Compare1a = 99
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.

Autor: MWS (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.