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
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?
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...
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
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.
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.
@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.
okay, danke an alle, werde mich an die lösung machen... grüße marc
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.
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.