mikrocontroller.net

Forum: Compiler & IDEs Overflow Flag ist immer 1??


Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich habe folgendes Problem. Das Overflow Falg TOV0 ist immer eins wenn 
ich es in flag schreibe. Das verstehe ich nicht es müsste doch erstmal 
Null sein und wenn der Timer einmal bis 255 durchgelaufen ist dürfte es 
doch erst gesetzt sein. Und wenn es gestzt ist kann ich es doch mit 
schreiben einer 1 wieder zurücksetzen.

#include <avr/io.h>
//#include <stdlib.h>
//#include <stdio.h>
//#include <stdint.h>


//Start des Programms

int main (void)
{
  TCCR0B = 0x02; //Timer aktivieren
  DDRB = 0x08; //Setzt PB3 als Ausgang
  int timer;
  int flag;
  for(;;)
  {
    timer = TCNT0;
    flag = TOV0;
    PORTB ^= 0x08; //Toggle PB3 high
    if(flag == 1)
    {
      TIFR0 = 0x02;
    }
  }
//Ende des Programms
  for(;;) {
  }
}

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>flag = TOV0;

Das liest NCIHT das Flag aus, sondern nur die Konstante (Bitnummer) aus 
der Definition (die wohl zufällig eins ist)

Autor: Der Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TIFR0 = 0x01;

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Dude wrote:
> TIFR0 = 0x01;

Du weißt doch gar nicht, um welchen Controller es konkret geht.
Und wenn TOV0 wirklich 1 ist, dann ist "TIFR0 = 0x02;" richtig.
Allerdings schreibt man besser "TIFR0 = 1<<TOV0;".

Autor: Der Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, kommt auf den uC an. Beim Mega8 ist TOV0 aber Bit0, also 1.

Ausserdem heisst das entsprechende Register TIFR, nicht TIFR0.

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal Danke für die Antworten, aber wie lese ich denn jetzt das Bit 
(TOV0) aus?? Ich will ja dann etwas mit dem wechsel des Overflow-Flag 
anstellen.

Mit TIFR0 = 1<<TOV0; setzte ich das Bit ja nur wieder zurück das weiss 
ich und das funktioniert auch.

Es handelt sich übrigens um einen ATtiny13

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Dude wrote:
> Ja, kommt auf den uC an. Beim Mega8 ist TOV0 aber Bit0, also 1.
>
> Ausserdem heisst das entsprechende Register TIFR, nicht TIFR0.

Eben, deswegen kann es schon mal kein Mega8 sein.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Lobitz wrote:
> Erstmal Danke für die Antworten, aber wie lese ich denn jetzt das Bit
> (TOV0) aus?? Ich will ja dann etwas mit dem wechsel des Overflow-Flag
> anstellen.

flag = TIFR0 & (1<<TOV0);

"if(flag == 1)" funktioniert dann aber nicht. Du musst auf >0 testen, 
also einfach "if (flag)".

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo super jetzt klappt es.

Vielen Dank echt super Forum hier.

Ach kann mir vielleicht einer noch sagen wie ich die genaue CPU 
-Frequenz auslesen kann? Im Datenblatt steht nur 0-10Mhz.

Sorry aber ich bin echt neu auf dem Gebiet

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ch kann mir vielleicht einer noch sagen wie ich die genaue CPU
>-Frequenz auslesen kann? Im Datenblatt steht nur 0-10Mhz.

Garnicht. Die legst du selbst fest. Entweder mit externem Quartz oder 
mit internem RC-Oszillator

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo sehe ich wie der interne RC-Oszillator eigestellt ist?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fusebits auslesen.

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.