Forum: Mikrocontroller und Digitale Elektronik Timer1 beim ATMega 16


von Wolf4124 (Gast)


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);
}

von Johannes M. (johnny-m)


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).

von xlomx (Gast)


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.

von Karl H. (kbuchegg)


Lesenswert?

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

von Johannes M. (johnny-m)


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...

von Karl H. (kbuchegg)


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.

von Wolf4124 (Gast)


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ß

von Karl H. (kbuchegg)


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.

von Michael Wilhelm (Gast)


Lesenswert?

Dann kann ja nur noch das LED verpolt oder defekt sein.

MW

von wolf4124 (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.