ATMEGA324 Timer Int

OP #5435586
Lesenswert?

Hallo ….
Ich verstehe es einfach nicht, hoffe jemand kann mir helfen,
ich messe am PD6 mit Oszi, folgender Code
void Timer_Init (void)
{

TCCR2B = (1 << WGM00)
//| (1 << CS10); //489 Hz
//| (1 << CS00); //489 Hz
//| (1 << CS22); //61 Hz
//| (1 << CS01); //1,9 KHz
//| (1 << CS02); // 61 Hz
//| (0 << CS01) | (1 << CS00) | (2 << CS01); //122 Hz
| (0 << CS01) | (1 << CS01) | (2 << CS01); //15 Hz

 TIMSK2 |= (1<<TOIE0);
  // enable global interrupts
  sei();
}

ISR ( TIMER2_OVF_vect)
{

      PORTD |= (1 << PD6);//PD6 auf 1
    _delay_ms(0.1);
      PORTD &= ~(1 << PD6);//PD6 auf 0


}
Der atmega ist an Quarz 4 Mhz angeschlossen.
#5435624
Lesenswert?

Stefan E. schrieb:
> Matthias S. schrieb:
>> Du kannst an die _delay_ms() und _delay_us() Funktion keine
>> Gleitkommazahl übergeben, es sind nur Integer erlaubt.
>
> Man kann, darf, und es funktioniert auch.
> Sie sind nicht nur zum Spaß so definiert:
>
1
> void   _delay_ms (double __ms);
2
> void   _delay_us (double __us);
3
>

Das sind Macros, die nur mit Konstanten funktionieren, weil die 
tatsächlich zu wartenden Takte vom Compiler berechnet werden (müssen). 
Der kann float/double.
Gast #5435634
Lesenswert?

MWS schrieb:
> Ansonsten wäre es schlau wenn man eine Frage hat, diese auch zu stellen,
> bzw. hinzuschreiben.

Finde ich auch immer wieder faszinierend mit welcher Selbst-
verständlichkeit hier Probleme mit impliziter Fragestellung
gepostet werden bei denen sich jeder Leser selbst die
(nichtgestellte) Frage ausformulieren darf.
Gast #5435689
Lesenswert?

Uwe H. schrieb:
> TIMSK2 |= (1 << TOIE);
> TIMSK2 |= (1<<TOIE0);

MWS schrieb:
> nicht Bitnamen anderer Timer

In der Annahme, dass Du die Antworten hier liest, könnte man annehmen, 
dass Du für diese Technik leider zu begriffstutzig bist. Es gibt auch 
andere schöne und erfüllende Tätigkeiten, die vergebender sind, wie wäre 
es mit gärtnern, freie Natur, etc.?
Gast #5435885
Lesenswert?

> gern helfen wie viele andere sicherlich auch
Schon, aber gleich bei der ersten Zeile fallen die Schultern herunter 
und man pfeift durch die Nase:

> TCCR2B = (1 << WGM00)

Setzt in TCCR2B das Bit 0, also CS20.
#5436010
Lesenswert?

1
TCCR2B = (1 << WGM00)
2
//| (1 << CS10); //489 Hz
3
//| (1 << CS00); //489 Hz
4
//| (1 << CS22); //61 Hz
5
//| (1 << CS01); //1,9 KHz
6
//| (1 << CS02); // 61 Hz
7
//| (0 << CS01) | (1 << CS00) | (2 << CS01); //122 Hz
8
| (0 << CS01) | (1 << CS01) | (2 << CS01); //15 Hz

Nach Auflösung der inherenten Kryptik*:
"Timer2 wird mit Vorteiler 1024 betrieben"
4MHz // 1024 // 256 -> 15,25Hz, also wenigstens der Kommentar ist (fast) 
ok

Man kann übrigens, wenn man den kurzen Puls an PD6 zu kurz findet, den 
Pin auch einfach togglen. Statt "|=" einfach "^=" schreiben, nur diese 
eine Zeile, kein delay() mehr nötig, kein Rückseten mit "&=". Gemessen 
wurden dann 0 ms zwischen auf- und absteigender (oder umgekehrt) Flanke.

* WGM00=0
  CS01=1
  0<<1 | 1<<1 | 2<<1 = 7 oder 0b111


Schöner schreibt man z.B.:
1
enum { // Label -> Bit-Wert
2
  CS_STOP     = 0,  // oder 0b000, dann wird klar, daß es um 3Bits geht
3
  CS_DIV_1.   = 1,  //      0b001
4
  // ...
5
  CS_DIV_1024 = 7   //      0b111
6
};
7
TCCRB = (0b0         << WGM22) // WGM<4
8
      | (CS_DIV_1024 << CS20 ) // Bit-Wert an richtige Position schieben
Gast #5436089
Lesenswert?

Hallo Carl D. schrieb:
> TCCR2B = (1 << WGM00)
> //| (1 << CS10); //489 Hz
> //| (1 << CS00); //489 Hz
> //| (1 << CS22); //61 Hz
> //| (1 << CS01); //1,9 KHz
> //| (1 << CS02); // 61 Hz
> //| (0 << CS01) | (1 << CS00) | (2 << CS01); //122 Hz
> | (0 << CS01) | (1 << CS01) | (2 << CS01); //15 Hz

Es wurde ja schon mehrmals geschrieben die Kostanten (Defines) (1 << 
WGM0[0-3], CS0[0-2] gehören zu Timer0!

Diese Schreibweise ist sehr ungewöhnlich
1
(0 << CS01) | (1 << CS01) | (2 << CS01)
und steht so nicht im Datenblatt für das Einstellen des Timer2 
Prescalers.
#5436117
Lesenswert?

Karl M. schrieb:
> Hallo Carl D. schrieb:
>> TCCR2B = (1 << WGM00)
>> //| (1 << CS10); //489 Hz
>> //| (1 << CS00); //489 Hz
>> //| (1 << CS22); //61 Hz
>> //| (1 << CS01); //1,9 KHz
>> //| (1 << CS02); // 61 Hz
>> //| (0 << CS01) | (1 << CS00) | (2 << CS01); //122 Hz
>> | (0 << CS01) | (1 << CS01) | (2 << CS01); //15 Hz
Das war das Original des TOs und nicht meine darunter zu findende 
Variante.
Ok, ich hätte das mit "Achtung jetzt kommt Mist" kenntlich machen 
sollen.


> Es wurde ja schon mehrmals geschrieben die Kostanten (Defines) (1 <<
> WGM0[0-3], CS0[0-2] gehören zu Timer0!
"gehören zu" ist eher Konvetion, denn Eigenschaft. Es sind Kostanten, 
die zugegebenermaßen sehr Kreativ zur Verschlüsselung eingesetzt wurden.
Wenn man so was wie ein Typesystem hätte, ... (wäre dann aber "zu 
abstrakt")


> Diese Schreibweise ist sehr ungewöhnlich
>
1
(0 << CS01) | (1 << CS01) | (2 << CS01)
> und steht so nicht im Datenblatt für das Einstellen des Timer2
> Prescalers.
Das ist eher ein Indikator für das Unverständnisses des TO in diesem 
Fachgebiet.  Und zwar Sprache und HW.
Cut&Paste bis es zufällig geht, das gibt's sogar unter dem Label "Profi"
Gast #5436134
Lesenswert?

Carl D. schrieb:
> Das ist eher ein Indikator für das Unverständnisses des TO in diesem
> Fachgebiet.  Und zwar Sprache und HW.

Habt ihr schon mal daran gedacht dass solche Threads Fake sein
könnten? Gezielt bestimmten Mist produzieren damit hier die
Fachleute "anspringen" und damit hier auf den Seiten viel
Traffic entsteht (ist ja im Sinne des Seitenbetreibers)?

Es spricht einiges dafür, z.B. weil der TO nur immer wieder
gerade soviel Bruchstücke postet damit der Thread am Laufen
bleibt. Schon oft genug dieses Verhalten hier erlebt dass
es leider viel zu verdächtig ist. Denn der TO könnte sich
ja nach der Aufforderung durchaus einmal detaillierter
äussern.

Im Endeffekt ist es ja eine Verarschung der vielen Hilfs-
bereiten, aufgrund eines (vermuteten) Geschäftsinteresses.

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