- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: Frage über OCF0 Checking in ATmega16 Timer0

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.06.2007
    Ort
    Hannover
    Alter
    42
    Beiträge
    12

    Frage über OCF0 Checking in ATmega16 Timer0

    Anzeige

    Praxistest und DIY Projekte
    Hallo Zusammen,

    Ich habe über Timer0 in CTC Mode versucht. Und zwar wollte OCF0 Flag
    überprüfen, ob Set oder nicht Set ist.

    Ich habe ein Programm versucht zu schreiben, aber nicht funktioniert..
    T.T
    In If Loop funktioniert nicht richtig.
    Könnten Sie mir ein Vorschlag geben, was ich machen sollte

    Gruß

    PaMan

    Code:
    #include <avr/interrupt.h>
    #include <avr/io.h>
    #include <stdint.h>
    /******************************************************************************/
    
    int main (void)
    {
      DDRA = 0xFF;             // Set PortA as Output
    
      DDRB =  0b11111010; // PB3( OC0 as Output) PB0(T0 as Input)
                                           PB2(SW as Input)
      PORTB = 0b00000101;
    
    
      while(PINB & (1<<PINB2));  // wait switch clear to start
    
    //Initial Timer/Counter0
      TCNT0  = 0x00;            // Clear counter
      OCR0   = 0xFF;            // Match at Top
      TIFR |= (1<<OCF0);    //
    
             while(1)
      {
             TCCR0 = 0b00011110;  // Start T/C0, CTC Mode, extclk T0
    
               if (OCF0==1)
              { PORTA |= (1<<PORTA1);  // show OK at PortA1 }
    
               else
              { PORTA |= (1<<PORTA2);  // show NOK at PortA2 }
      }
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    So
    if (OCF0==1)
    kann man einzelne Bits nicht abfragen.

    Besser so:
    if (TIFR&(1<<OCF0))

    [Hintergrund: das OCF0 wird von Präprozessor durch eine 1 ersetzt, weil dies die Position dieses Bits in TIFR ist. Der Vergleich wäre also immer wahr gewesen. Die korrwekte Varinate prüft, ob das Bit an der Position 1(=OCF0) in TIFR gesetzt ist.]

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Außerdem mußt Du den Flag per Hand löschen, etwa so:
    Code:
    TIFR=(1<<OCF0);
    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.06.2007
    Ort
    Hannover
    Alter
    42
    Beiträge
    12
    ohhhh so ist das, "kann man einzelne Bits nicht abfragen"

    Danke für eure Hilfe ...

    PaMan

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests