Forum: Compiler & IDEs Bekomme Timer von ATMega16 nicht angerissen :-(


von Holger (Gast)


Lesenswert?

Hallo liebe Mikrocontrollergemeinde,

ich habe mal vor Jahren ein bisschen mit meinem ATMega16 rumgespielt.
Jetzt hat es mich wieder gepackt und ich möchte wieder angreifen.

Jedoch gabs gleich am ersten Tag nen bösen Dämpfer da ich anscheinend zu 
blöde bin den 16-Bit Timer von meinem Mega16 anzureissen :-(
Der scheint einfach nicht loszählen zu wollen.

Kann mir einer sagen was ich vergessen habe oder falsch gemacht habe?

Vielen Dank!
Holger


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

int i=0;

ISR( TIMER1_OVF_vect )
{
  i++;
}

int main (void)
{
  DDRC=0xFF;

  sei();
  TCNT1H= 0xF0;
  TCNT1L= 0x00;
  TCCR1A=0x00;  // no compare/capture/pwm mode
  TCCR1B=0x05;  // start counter; prescale ck/1024
  TIMSK |= (1<<TOIE1);

  while(1)
  {
    PORTC=i;
    if (i>255)
    {
      i=0;
    }
  }
}

P.S.: Ich habe an PORTC eine LED-Leiste dran. Und die zeigt immer nur 
genau den PIN an mit dem ich i initialisiere.

von Oliver (Gast)


Lesenswert?

Holger schrieb:
> Kann mir einer sagen was ich vergessen habe oder falsch gemacht habe?

Vergessen: volatile.

Falsch:
Keine Ahnung. So etwas wie:
>TCCR1B=0x05;
musst du selber nachprüfen.

Holger schrieb:
> TCNT1H= 0xF0;
> TCNT1L= 0x00;

Das ist zwar nicht falsch, aber unnötig.
>TCNT1 = 0xF000;
tut es auch.

Oliver

von Oliver (Gast)


Lesenswert?

Holger schrieb:
> ich habe mal vor Jahren ein bisschen mit meinem ATMega16 rumgespielt.

Nachtrag: Vor vielen Jahren war der gcc wesentlich toleranter gegenüber 
einem vergessenen "volatile". Es kann also gut sein, daß dein Beispiel 
mit einem alten gcc funktioniert.

Oliver

von Holger (Gast)


Lesenswert?

Hallo Oliver,

danke für die rasche Antwort und dem Tip mit dem Register :-)

Muss ich beim "i" ein volatile davorsetzen?

Sorry, bin nicht so der C-Gott :-|

Viele Grüße
Holger

von Justus S. (jussa)


Lesenswert?

arbeite doch einfach mal das Tutorial hier durch...

von Oliver (Gast)


Lesenswert?

Holger schrieb:
> Muss ich beim "i" ein volatile davorsetzen?

genau.

guggst du auch hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Datenaustausch_mit_Interrupt-Routinen

Oliver

von Holger (Gast)


Lesenswert?

Vielen Dank!

Jetzt brummts :-)

Grüße,
Holger

von Fred (Gast)


Lesenswert?

Bei mir wills einfach nicht laufen ( JA-ich hab das tut gelesen und och 
viel mehr ;) )

welchen gcc benutzt du denn ??

AVR-Toolchain oder WinAvr ?

Fred

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.