440 Hz Ausgangssignal

Gast #1157375
Lesenswert?
• ▲
▼
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!
Gast #1157380
Lesenswert?
• ▲
▼
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;
}
Gast #1157417
Lesenswert?
• ▲
▼
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!
Gast #1157921
Lesenswert?
• ▲
▼
> 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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren