Konstellation: - Tiny84 - Timer 0 (8 Bit) - Timer Clock Frequenz variabel bis 10 KHz Ich möchte gerne einen externen Clock auf den Timer0 wirken lassen, und alternativ dazu diesen (externen) Clock auch unverändert auf einen Controller Pin ausgeben, sozusagen umschaltbar at runtime. Mir fehlt noch etwas die Vorstellungskraft, und bevor ich es selbst aufbaue und ausprobiere, möchte ich in die Runde Fragen ob das funktioniert - vielleicht weiss es jemand auf Anhieb: Ich setze das Output Compare Register des Timer0 auf null und leite das Output Compare Ergebnis auf den zugehörigen Pin OC0A. Erzeuge nun ich damit die Originalfrequenz oder erreiche ich nur ein Toggle, also eine Frequenz / 2. Alternative wäre: für jeden Clock einen IRQ zu erzeugen und per ISR einen Clock auszugeben ..... ist bei 10 KHz sicher machbar .... aber ich wollte es eben in Hardware machen. Oder anders ausgedrückt: Gretchenfrage was passiert eigentlich wenn die Timer Logik dauernd mit ((TIMER==0) == true) zu tun hat?
Spiele doch deine Gedanken im Simulator durch, dort kannst du alles sehen und schaue ins Datenblatt
Antwort schrieb: > Spiele doch deine Gedanken im Simulator durch, dort kannst du alles > sehen und schaue ins Datenblatt Ich weiss wie ich zu einem Ergebnis komme, dazu brauche ich deine weisen Ratschläge nicht. Offensichtlich hast du meinen Text nicht ganz gelesen und/oder verstanden. Tiny_user schrieb: > ..... und bevor ich es > selbst aufbaue und ausprobiere, möchte ich in die Runde Fragen > ob das funktioniert - vielleicht weiss es jemand auf Anhieb:
Tiny_user schrieb: > Ich weiss wie ich zu einem Ergebnis komme, dazu brauche ich > deine weisen Ratschläge nicht. Ich zumindest brauche deine Fragen auch nicht.
"11.7.2 Clear Timer on Compare Match (CTC) Mode ... The waveform generated will have a maximum frequency of 0 = fclk_I/O/2 when OCR0A is set to zero (0x00).
Danke an PeDa ... Hätte ich es doch selbst gefunden im Dschungel .....
Weiss jemand noch einen anderen Weg einen eingespeisten Clock auf einen anderen Pin weiterzuleiten (der Weg über den IRQ ist mir geläufig)?
Tiny_user schrieb: > Weiss jemand noch einen anderen Weg einen eingespeisten Clock > auf einen anderen Pin weiterzuleiten (der Weg über den IRQ > ist mir geläufig)? Das kommt darauf an, was der Controller sonst noch machen soll. Du kannst das auch in der Hauptschleife pollen:
1 | if(PINX & (1 << Px)) PORTX |= (1 << Py); else PORTX &= ~(1 << Py); |
Solange das häufig genug passiert und keine Takte verschluckt werden, ist das völlig in Ordnung. Dem Controller ist das vollkommen egal. Meistens tritt er sowieso nur auf der Stelle. Und der Port verschleisst auch nicht, wenn man ihn eine Million Mal in der Sekunde anspricht. mfg.
Thomas Eckmann schrieb: > Du kannst das auch in der Hauptschleife pollen: Ja klar, das läuft für meine Sichtweise wie unter IRQ ausgeben ab. Man würde sich allerdings die Push/Pop-Orgie in der ISR ersparen. Ich dachte es gäbe vielleicht noch einen "Schleichweg" in der Hardware den ich im Datenblatt-Dschungel noch nicht erkannt habe.
Tiny_user schrieb: > Ich dachte es gäbe vielleicht noch einen "Schleichweg" in der > Hardware den ich im Datenblatt-Dschungel noch nicht erkannt habe. Humbug. Und wer glaubt, ein AVR Datenblatt sei ein Dschungel, der sollte mal prüfen ob er nicht der Affe ist.
Tiny_user schrieb: > Alle sind Deppen, und du bist der Einäugige unter den Blinden. Warum beleidigst du das ganze Forum? Wie Undankbar kann man sein. Pfui
Ich habe nur die Sichtweise einer beteiligten Person mit meinen eigenen Worten wiedergegeben.