www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisproblem bei Erzeugung eines 36kHz Signals mit ATMega8


Autor: Silk7 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine IR-Hinderniserkennung nach folgender Anleitung gebaut:

http://www.societyofrobots.com/member_tutorials/fi...

Dabei wird mit einem ATMega8/8MHz mit dem Timer2 ein 36KHz-Signal 
erzeugt.
TCCR2=0b00001010 bedeutet, das ein Prescaler von 8 und der CTC Modus 
verwendet wird.
Also zählt der Timer2 in einer Sekunde 1 Mio Schritte. Demzufolge dauert 
ein Schritt 1 Mikrosekunde. Bei Zählerstand=OCR2 wird ein Interrupt 
ausgelöst und die Zählung beginnt wieder bei 0.

Bei einer Frequenz von 36kHz muß der Ausgangspin aller 13,9 
Mikrosekunden toggeln -> 1/(36000*2)

OCR2 sollte doch dann den Wert 13 erhalten, oder?
Der Timer2 zählt von 0 bis 13 => 14 Schritte a 1 Mikrosekunde = 14 
Mikrosekunden.
Warum ist in dem Code der zehnfache Wert?

Seltsam ist, dass die Schaltung mit OCR2=139 funktioniert und mit 
OCR2=13 nicht?

Kann mir jemand erklären, ob ich hier einen Denkfehler habe.

Danke.

Autor: kavalar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...schon mal mit dem Oszi gemessen?

Autor: Harald M. (mare_crisium)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Silk7,

die Formel für die Timer2-CTC-Interruptfrequenz als Funktion vom OCR2 
findest Du auf Seite 109 des Manuals. Bei MC-Takt = 8MHz, Vorteiler = 8 
einer gewünschten Frequenz von 2*36kHz bekomme ich da einen Wert von 
OCR2 = 6 heraus.

Ich würde auch die Fuses nochmal kontrollieren. Mir ist es schon 
vorgekommen, dass ich meinte, der MC liefe auf dem externen Quarz - 
tatsächlich war's aber der interne RC-Taktgenerator und mit einer ganz 
anderen Frequenz.

TCCR2=0b00001010 bedeutet auch, dass das Signal an Pin PORTB3 nicht 
ausgegeben wird. Nix Oskar.

Ciao,

mare_crisium

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>die Formel für die Timer2-CTC-Interruptfrequenz als Funktion vom OCR2
>findest Du auf Seite 109 des Manuals. Bei MC-Takt = 8MHz, Vorteiler = 8
>einer gewünschten Frequenz von 2*36kHz bekomme ich da einen Wert von
>OCR2 = 6 heraus.

Nein. Mit VT=8 und 8MHz ist ein OC-Wert von 13 notwendig. Bei VT=1 
ergibt sich ein Wert von 110. Beides Mit Oszi überprüft. Der Wert 139 
aus dem Link passt maximal für VT=1 und einen stark verstimmten internen 
Oszillator.

>TCCR2=0b00001010 bedeutet auch, dass das Signal an Pin PORTB3 nicht
>ausgegeben wird. Nix Oskar.

Wieso?

>// timer 2 interrupt routine
>ISR(TIMER2_COMP_vect)
>{PORTC=PORTC^(flag); // if bit 3 of “flag” is set, PORTC3

Geht auch in Software. Doch Oskar.

Allerdings ist unklar, warum es beim TO nicht funktioniert.

MfG Spess

Autor: Harald M. (mare_crisium)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spess53 schrieb:
> Mit VT=8 und 8MHz ist ein OC-Wert von 13 notwendig.

damit hättest Du recht, wenn Silk eine Interruptfrequenz von 36kHz 
erzeugen wollte. Aber:

Silk7 schrieb:
> Bei einer Frequenz von 36kHz muß der Ausgangspin aller 13,9
> Mikrosekunden toggeln -> 1/(36000*2)

Damit der Ausgangspin mit 36kHz zwischen 0 und 1 wechselt, muss Silk ihn 
mit einer Interruptfrequenz von 72kHz togglen. Und für 72kHz muss er 
OCR2 = 6 nehmen. Klar?

Silk7 schrieb:
> TCCR2=0b00001010
Die Funktion des OCR2-Pins wird von COM20 (Bit4) und COM21 (Bit5) im 
TCCR2 bestimmt. Laut Tabelle 43 auf Seite 116 im Datenblatt:
COM20 = 0 und COM21 = 0 bedeutet: Normal port operation, OC2 
disconnected.
Ich hätte erwartet, dass Silk COM20 = 0 COM21 = 1 (Toggle OC2 on Compare 
Match) nähme. Es kann natürlich sein, dass er einen anderen Pin per 
Software toggeln will. Der ist dann wieder was für den Oskar.

Ciao,

mare_crisium

Autor: Silk7 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald M. schrieb:
> Ich würde auch die Fuses nochmal kontrollieren. Mir ist es schon
> vorgekommen, dass ich meinte, der MC liefe auf dem externen Quarz -
> tatsächlich war's aber der interne RC-Taktgenerator und mit einer ganz
> anderen Frequenz.

...genau hier lag das Problem.
Der MC lief nicht mit dem externen Takt.

Jetzt habe ich die Einstellungen auf einen externen Takt von 16MHz 
eingestellt (was auch angeschlossen ist). Mit einem kleinen Testprogramm 
kontrolliert -> LED blinkt im 1 Sekunden-Rhytmus.

OCR2=28 / Prescaler=8 (ca. 36kHz) war für den TSOP zu empfindlich. Bei 
OCR2=30 (ca. 33kHz) und den entspr. Pausen funktioniert es super.

Danke.

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.