www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 440 Hz Ausgangssignal


Autor: Dirac-Impuls (Gast)
Datum:

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

Autor: Dirac-Impuls (Gast)
Datum:

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

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

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

Autor: Dirac-Impuls (Gast)
Datum:

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

Autor: Dirac-Impuls (Gast)
Datum:

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

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

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

Autor: Heiko (Gast)
Datum:

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

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.