www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer1 beim ATMega 16


Autor: Wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: xlomx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Problemen am C-Port drängt sich sofort die Frage auf:
JTAG Interface abgeschaltet?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

EDIT:
Ich irre mich nicht. PC7 und 6 sollten eigentlich keine Probleme 
bereiten...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolf4124 wrote:
> Messen mit dem Oszy.

Ich hab deswegen nachgefragt, weil zwischen PC7 und PC6 ein
enormer Frequenzunterschied besteht.

Habe gerade dein Pgm, so wie es ist, in einen Mega16 gebrannt.
Die LED an PC6 blinkt definitiv.

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann kann ja nur noch das LED verpolt oder defekt sein.

MW

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habs gefunden.
Ich habe auch noch den falschen Controllertyp unter Optionen ausgewählt 
gehabt.
Danke für eure Unterstützung.

Gruß

Wolf4124

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.