mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie am besten 32,768 kHz mit Atmel erzeugen?


Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe hier eine vorgegebene Schaltung mit einem Atmega1281 und einem 
Drucksensor. Der Atmega1281 läuft mit 10MHz. Ich muss jetzt für den 
Sensor ein stabiles Taktsignal im Bereich zwischen 30 bis 35 kHz 
erzeugen. Die Taktleitung vom Sensor hängt beim Atmega am Pin PE5 (OC3C, 
INT5), das kann ich leider nicht mehr ändern.

Wichtig ist, dass der Atmega allerhand im Hintergrund berechnet, ich 
aber trotzdem ein stabiles Taktsignal bekomme, mit möglichst wenig 
Jitter. Also toggeln fällt wohl aus.

Wie man einen Timer auf die Frequenz programmiert, weiß ich... Aber wie 
bekommt man das Ausgangssignal auf den Pin?

Bin für jede Hilfe dankbar.

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit,

Pin in einer Timer ISR toggeln?

MfG

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

Bewertung
0 lesenswert
nicht lesenswert
Gerhard schrieb:

> erzeugen. Die Taktleitung vom Sensor hängt beim Atmega am Pin PE5 (OC3C,
> INT5), das kann ich leider nicht mehr ändern.

OC3C
also Output Compare vom Timer 3

Dann ist doch alles in Butter!
Das müsste doch mit dem Teufel zugehen, wenn man den Timer nicht dazu 
bringt, diesen Pin ganz von alleine zu toggeln.

> Wie man einen Timer auf die Frequenz programmiert, weiß ich... Aber wie
> bekommt man das Ausgangssignal auf den Pin?

Das kann doch der Timer ganz von alleine machen.
Du musst ihn nur richtig konfigurieren.
Details weiß das Datenblatt im Abschnitt über den Timer 3

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Gerhard (Gast)

>Wie man einen Timer auf die Frequenz programmiert, weiß ich... Aber wie
>bekommt man das Ausgangssignal auf den Pin?

Mit der Output Compare Funktion. RTFM.

MFG
Falk

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Mit der Output Compare Funktion.

"Toggle on compare match"

Autor: Paul Baumann (paul_baumann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt im Register TCCR3C die obersten 3 Bit angucken. Weiter bin ich 
auch
noch nicht gekommen, -ein Datenblatt mit 444 Seiten kann einen schon
weich machen...

MfG Paul

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genauer, man muss zwei Dinge tun:

. den CTC-Modus einschalten, damit der Timer sich nach Erreichen
  des compare match Wertes rücksetzt

. das besagte "toggle on compare match" für den gewünschen Pin
  anschalten (den man aber noch manuell als Ausgang konfigurieren
  muss)

Außerdem muss man natürlich die Taktquelle einschalten und einen
compare match Wert vorgeben. ;-)

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das hilft. Diese Timer können eine Menge und das Datenblatt ist 
etwas unübersichtlich, wenn man damit zum ersten Mal arbeitet.

Ich tauche mal ab und probiere...

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So Leute, danke! Natürlich habe ich zwischendurch noch etwas anderes 
gemacht, aber vorhin habe ich mich noch einmal an die Sache drangesetzt, 
das Datenblatt studiert und jetzt funktioniert es wunderbar:
#define F_MCLK      32768
#define OCR3A_VALUE F_CPU / 2 / 32768

void mclk_init(void)
{
  OCR3A   =  OCR3A_VALUE;
  TCCR3A  =  (1<<COM3C0);
  TCCR3B  =  (1<<WGM32) |
             (1<<CS30);
  PRR1   &= ~(1<<PRTIM3);
  DDRE   |=  (1<<PINE5);
}

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich muss das zweite 32768 noch durch F_MCLK ersetzt werden ;)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst dabei allerdings aufpassen, wenn die Taktfrequenz kein 
vielfaches von 32768 Hz ist. Dann kriegst du Rundungsfehler.

Außerdem hast du noch einen Fehler:
#define OCR3A_VALUE F_CPU / 2 / F_MCLK

muss:
#define OCR3A_VALUE F_CPU / 2 / F_MCLK - 1

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.