Hallo! Ich möchte 440 Hz an PB1 ausgeben. Bisher habe ich folgenden Code #define F_CPU 3686400 #include <avr/io.h> uint8_t Modus; // Für OFF wählen wir 0, für die Modi werte über 0...(1,2,3,4....) int main(void) { DDRB |= (1<<DDB1); // OC1A als Ausgang setzen TCCR1A |= (1<<COM1A0); // Toggle OC1A on compare Match TCCR1B |= (1<<CS10); // CLK/1 while(1); // Endlosschleife return 0; } Der Ausgang hat jetzt eine Frequenz von schätungsweise 3 bis 4 Hz. Nach meinem Verständnis zählt er jetzt bis 65536 und ändert den Ausgang von High auf Low bzw Low auf High. Rechnerisch müsste er jetzt aber eine Frequenz von 3686400/65536/2=28,125 Hz haben. Übersehe ich da etwas? Vielen Dank!
Da ist noch eine Zeile zu viel drin. So sieht der Code bisher aus: #define F_CPU 3686400 #include <avr/io.h> int main(void) { DDRB |= (1<<DDB1); // OC1A als Ausgang setzen TCCR1A |= (1<<COM1A0); // Toggle OC1A on compare Match TCCR1B |= (1<<CS10); // CLK/1 while(1); // Endlosschleife return 0; }
Dirac-Impuls wrote:
> Der Ausgang hat jetzt eine Frequenz von schätungsweise 3 bis 4 Hz.
Könnten es auch so 7 bis 8 Hz sein?
rechnerisch 28.125 Hz / 3.6 = 7.irgendwas
-> Dein µC laüft nicht mit dem 3.6 Mhz Quarz sondern auf dem internen
RC-Oszillator mit 1 Mhz
Achso, verstehe. Danke. Sehe ich das richtig, dass es keinen Prescaler für einen externen Takt gibt? Ist der interne Takt ungenauer als der des Oszillators?
Ich bekomme es leider nicht hin. Kann mir vielleicht jemand helfen uns sagen wie ich am Ausgang eine Freuqenz unter 10 kHz hinbekomme? Hier der aktuelle Code: #define F_CPU 3686400 #include <avr/io.h> int main(void) { DDRB |= (1<<DDB1); // OC1A als Ausgang setzen TCCR1A |= (1<<COM1A0); // Toggle OC1A on compare Match TCCR1B |= (1<<CS10)|(1<<CS11)|(1<<CS12); // Externer Takt, Count on Rising Edge TCCR1C |= (1<<FOC1A); //Force Output Compare for Channel A TCNT1H=0xFF; TCNT1L=0xFE; while(1); // Endlosschleife return 0; } Vielen Dank!
Was ist nun? Kann es nun sein oder kann es nicht sein, dass das Ding auf internem Oszillator läuft. Ehe du diese Frage nicht definitiv verneinen kannst und der Prozessor definitiv auf 3.6 Mhz läuft macht es keinen Sinn sich über irgendwelche Timings Gedanken zu machen.
> Sehe ich das richtig, dass es keinen Prescaler für einen externen Takt gibt? Welcher externe Takt? Wenn du den uC selbst mit externem Takt oder externem Quarz laufen lässt, dann sehr wohl. Wenn du aber an dem Extra-PIN, an dem du einen Timer-Takt einspeisen kannst, einspeist, dann nicht. > Ist der interne Takt ungenauer als der des Oszillators? Das hängt vom Oszillator ab. Intern ist ein RC-Oszillator eingebaut, wenn du sowas extern anhängst, eher nicht. Gegen einen Quarz kommt er aber nicht an. MfG, Heiko
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.