www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CTC Modus kleines Beispiel


Autor: CTC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

hat zufällig jemand ein kleines Beispiel für den CTC Modus um einfach 
Impulse
zu erzeugen?
bin gerade bei diesem Thema und versuch emich einzuarbeiten, aber ohne 
konkrete beispiele ( C-Code) fällt es mir schwer zu verstehen.

Gruss
C.

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

Bewertung
0 lesenswert
nicht lesenswert
Der CTC-Modus hat ja erst einmal nicht viel mit der Impulsgenerierung
zu tun.  CTC bedeutet nur, dass man den Timer per Hardware beim
Erreichen eines bestimmten Zählerstandes zurück setzt und damit die
Zählweite verkürzt.

Den Begriff CTC kenne ich nur vom AVR (in dieser Bedeutung -- beim Z80
war es der "counter timer circuit"), insofern solltest du wohl mal
genauer sagen, welchen AVR du benutzen willst und was für eine
Impulsfolge du haben möchtest.

Ob du das in C oder Assembler programmieren willst, ist dabei praktisch
wurscht: die Programmierung beschränkt sich im Wesentlich auf das
Setzen diverser IO-Register.

Autor: Stefan Noll (nollsen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

ich glaube es ist nicht möglich hier ein beispiel zu zeigen das genau 
das zeigt was du möchtest.

wenn du einen timer konfigurieren möchtest, dann geh in das datenblatt 
undschau die entsprechenden Register an. dann gehe alle register durch, 
und schau bei jedem bit die beschreibung an und überlege ob du das 
brauchst.

dass du trotzdem ein beispiel hast,
dies ist ein ctc timer der mit einem extra quarz 256 interrupts die 
sekunde auslöst:
  ASSR |= _BV(AS2);
  TCNT2 = 0; loop_until_bit_is_clear(ASSR, TCN2UB);
  OCR2A = TIMER_DIVIDER;   loop_until_bit_is_clear(ASSR, OCR2AUB);
  TCCR2A  = _BV(WGM21);   loop_until_bit_is_clear(ASSR, TCR2AUB);
  // prescaler /8
  TCCR2B  = _BV(CS21); loop_until_bit_is_clear(ASSR, TCR2BUB);
  TIMSK2 |= _BV(OCIE2A)  ;


ISR(TIMER2_COMPA_vect)
{
}

Autor: ctc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich verwende einen Atmega8L und möchte Impulse in der Grössenordnung 5 
ms erzeugen.

habe versucht das datenblatt zu verstehen aber, das wird man wohl erst 
verstehen, wenn man es fertig hat ;) zumindest ist es bei mir so....erst 
im nachhinein macht es oft Klick.

Wie würdet ihr s machen wenn ihr 5ms (also 2,5 ms High Potential und 2,5 
ms Low Poetential) erzeugen wolttet  mt de ctc modus?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage ist unvollständig solange du nicht die Taktrate nennst.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wie würdet ihr s machen wenn ihr 5ms (also 2,5 ms High Potential und 2,5
>ms Low Poetential) erzeugen wolttet  mt de ctc modus?

Wie wäre es mit mit ein paar Angaben: Controller,Timer,Taktfrequenz...

MfG Spess

Autor: ctc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohh sorry :P

Atmega8L
Interner RC: 1000.000 Hz
Timer2 (oder Timer0)

Hoffe das reicht.

Grüsse aus NRW

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

Bewertung
0 lesenswert
nicht lesenswert
2,5 ms lassen sich nicht exakt mit einem 8-bit-Timer bei 1 MHz
erzeugen, zumindest nicht auf einfache Weise.
#include <avr/io.h>

#define F_CPU 1000000ul

static void
timerinit(void)
{
  OCR2 = (F_CPU / 32 / 400) - 1;
  TCCR2 = _BV(WGM21) /* CTC */ |
    _BV(COM20) /* toggle OC2 on compare match */ |
    _BV(CS21) | _BV(CS20) /* f_cpu / 32 */;
  DDRB = _BV(PB3); /* OC2 as output */
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ctc wrote:
> Timer2 (oder Timer0)
Timer 0 kann beim ATMega8 kein CTC. Ansonsten solltest Du Dir im 
AVR-GCC-Tutorial das Kapitel Timer mal ansehen. Da steht, wie's 
geht.

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.