Timer1 beim ATMega 16

Gast #715715
Lesenswert?
• ▲
▼
Hallo

Ich bekomme meinen Timer nicht zum laufen.
Vielleicht habe ich einen Denkfehler.
Habe schon mit diversen Beispielen verglichen aber nichts gefunden.
Kann mir jemand drüberschauen.
ATMega 16 mit interner Taktgeber 1MHz.
Ich bekomme keine einzige Flanke auf PIN 6
PIN 7 hat ein Signal.



#include <avr/io.h>
#include <avr/interrupt.h>


int main (void) {

   DDRA  = 0x00;    //Port A als Input schalten
  DDRB  = 0x00;    //Port B als Input schalten
     DDRC  = 0xff;               //Port C auf Output schalten
  DDRD  = 0xff;               //Port D auf Output schalten


     PORTC = 0x00;         //Port C löschen
  PORTD = 0x00;    //Port D löschen

//Timer
TCNT1H = 0xFC;
TCNT1L = 0x18;
TCCR1B |=(0<<CS12);           //Einstellung des Vorteiler
TCCR1B |=(1<<CS11);
TCCR1B |=(0<<CS10);
TIMSK |=(1<<TOIE1);    // Timer1 Interupt freigeben

sei();        //Globale Interrups zulassen


   while(1)
   {
      PORTC ^= (1<<PB7);
   }

   return 0;
}



SIGNAL (SIG_OVERFLOW1)    //Interuptvektor für Timer0
{
cli ();        /Gloale interupt deaktivieren
TCNT1H = 0xFC;
TCNT1L = 0x18;
sei();


PORTC ^= (1<<PB6);
}
#715722
Lesenswert?
• ▲
▼
Wolf4124 wrote:
> PORTC ^= (1<<PB6);
Auch wenn es an der Funktion nichts ändert: Schreib rechts entweder 
"PC6" oder einfach nur "6" hin. Gibt sonst nur Verwirrung!

Das cli() und sei() im Interrupt Handler gehört da gar nicht hin, das 
macht der Controller automatisch.

> TCCR1B |=(0<<CS12);
Und diese Anweisung macht gar nichts. Ein ODER mit einer Null hat 
keinerlei Effekt. Wenn Du das Bit löschen willst, musst Du eine andere 
Verknüpfung benutzen (siehe AVR-GCC-Tutorial und 
Bitmanipulation).

SIGNAL wird zwar aktuell von WINAVR noch unterstützt, ist aber veraltet 
und sollte nicht mehr verwendet werden (siehe AVR-GCC-Tutorial).
Gast #715736
Lesenswert?
• ▲
▼
Du kannst low und highbyte auf einmal laden, um die zerlegung kümmert 
sich der compiler.

und lade mal nicht den zähler. wenn du auf ein overflowinterrupt wartest 
dann lasse ihn zählen. für das was du machen möchtest gibt es andere 
interrupts beim zähler, gucke dir mal das kapitel die genaue uhr. im 
tutorial auf dieser seite an.
#715902
Lesenswert?
• ▲
▼
Johannes M. wrote:
> Karl heinz Buchegger wrote:
>> Bei Problemen am C-Port drängt sich sofort die Frage auf:
>> JTAG Interface abgeschaltet?
> Naja, JTAG ist an PC5..2, oder irre ich mich da?

Kann sein. Ich schalte das Ding immer ab.

@Wolfxxxx
Mal was anderes: Wie misst du?

Laut AVR Studio funktioniert dein Pgm. Du solltes an
PC6 eine Frequenz von ca. 62 Hz erhalten.
Gast #715932
Lesenswert?
• ▲
▼
Mahlzeit.

Ich habe an den Ausgängen eine Pullup-Widerstand.
An PC7 habe ich einen Rechteckimpuls.
An PC6 leider nicht.
Habe auch schon mal die Pins getauscht. Das gleiche Problem.
Messen mit dem Oszy.

Gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.