mikrocontroller.net

Forum: Compiler & IDEs 8bit Timer für newbies zum testen


Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich wollte mal ein sinnvollen Beitrag reinstellen, nicht von mir
sondern von Atmel, aber was solls. Vielleicht gibt es noch mehr Leute,
die gerne in C programmieren und sich mit den AVR-funktionen nicht
auskennen, wie ich, und etwas "rumspielen" wollen.

Was macht das Programm?

init() dürfte klar sein, das kann man auch aus der ioXXXX.h rauslesen.
-man gibt den prescaler an

main() ist auch noch verständlich:
-init(): initialisiert den timer0 (TCCR0) und definiert DDRB als
Ausgang (DDRB = 0xFF)
-while(1): auch verständlich, eine Endlosschleife
-PORTB++: von PortB0-Bx, also alle Ports der Reihe nach


dann gehts bei mir aber schon los!
delay(): wenn ich delay weglasse, dann leuten alle LEDs

kann mir jemand erklären, was
#############################
void delay(void){
  while (!(TIFR&0x02));
  TIFR = 0x02; // Clearing overflow flag
}*
#############################
macht?

...Verzögerung solange bis TIFR&0x02 erreicht ist...

so verstehe ich das...

dann habe ich in ->mikrocontroller.net->artikel->C für AVR
nachgelesen:

TIFR: Timer/Counter Interrupt Flag Register
0x02 -> 1.Bit = 1
entspricht TOVR: Timer/Counter Interrupt Flag Register

"Das Flag wird automatisch gelöscht, wenn der zugehörige
Interrupt-Vektor aufgerufen wird. Es kann jedoch auch gelöscht werden,
indem eine logische 1 (!) in das entsprechende Bit geschrieben wird."

Also die Verzögerung solange bis ???

hier setzt es aus bei mir...

Kann mir jemand TIFR=&0x02 erklären, was da passiert.

Danke

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du Delay weglässt, geht alles halt "etwas" schneller. Jede Diode
geht dann %50 an und 50% aus, und zwar so schnell, dass Du es nicht
mehr siehst.

#############################
void delay(void){
  while (!(TIFR&0x02));
  TIFR = 0x02; // Clearing overflow flag
}*
#############################

  while (!(TIFR&0x02));

wartet, bis Timer überläuft, dann wird das Flag 02 in Reg. TIFR
gesetzt.

Übersetzt heisst die Zeile:

"Während Flag 2 in TIFR Null ist, tue ... nichts.

Stefan

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt spiele ich schon ne ganze weile herum...

Habe meinen 4433 mit 4MHz getaktet, aber ich würde das ganze gerne
nochmal langsamer ablaufen lassen.

Kann ich da nicht noch den 16bit Timer einsetzen um die (4MHz/1024)
nochmal durch 2 zu teilen?

Was brauche ich da für einen Ansatz?

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.