www.mikrocontroller.net

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


Autor: Holger (Gast)
Datum:

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

Autor: Oliver (Gast)
Datum:

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

Autor: Oliver (Gast)
Datum:

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

Autor: Holger (Gast)
Datum:

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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
arbeite doch einfach mal das Tutorial hier durch...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger schrieb:
> Muss ich beim "i" ein volatile davorsetzen?

genau.

guggst du auch hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Oliver

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

Jetzt brummts :-)

Grüße,
Holger

Autor: Fred (Gast)
Datum:

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

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.