mikrocontroller.net

Forum: Compiler & IDEs ATTiny25 Timer0 Problem


Autor: kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich habe versucht, den Timer0 des ATTiny25 zum Laufen zu bringen, aber 
irgendwas klappt nicht so ganz, bzw. ich übersehe wahrscheinlich 
irgendeinen trivialen Fehler :( Das Programm soll einfach ein LED am Pin 
2 anschalten und beim Aufruf des entsprechenden Interruptvektors wieder 
ausschalten (nur um zu sehen, ob der Vektor überhaupt angesprungen 
wird). Die LED ist gegeb Masse angeschlossen, und verwendet wird der 
Timer0 im CTC-Modus. Der Rest müsste aus dem Quelltext ersichtlich sein:

#define F_CPU 8000000L   
#include <avr/io.h>
#include <avr/interrupt.h>

//Anschluss ReadyLED
#define DDR_READY_LED    DDRB
#define PORT_READY_LED   PORTB
#define PIN_READY_LED    PB3

ISR(TIMER0_COMPA_vect)
{
  PORT_READY_LED &= ~(1<<PIN_READY_LED);
}

//Timer zu debugzwecken einstellen (auf 50Hz)
void TIMER0_init(void)
{
  //CTC-Modus aktivieren
  TCCR0A |= (1<<WGM01);

  //Vorteiler auf 1024
  TCCR0B |= (1<<CS00) | (1<<CS02);

  //Vergleichsregister A beschreiben (8mhz/1024/50 ~ 160, soll ungefähr 50Hz Netzfrequenz entsprechen
  OCR0A = 160;

  //Compare A Interrupt aktivieren
  TIMSK |= (1<<OCIE0A);
}

int main(void)
{  
  uint8_t i = 0;

  //ReadyLEDpin auf Ausgang setzen
  DDR_READY_LED |= (1<<PIN_READY_LED);
  PORT_READY_LED |= (1<<PIN_READY_LED);

  TIMER0_init();
  sei();

  while(1)
  {
    i++;
  }

return 0;
}


Die LED geht an, aber dann nicht mehr aus. Daraus schließe ich, dass der 
Vektor nie angesprungen wird. Findet jemand den Fehler? Vielen Dank 
schon mal im Voraus!

Grüße,
Kai

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn ich das bei mir durch den Compiler schicke, warnt er:

"kai.c:10: Warnung: »TIMER0_COMPA_vect« scheint ein falsch geschriebener 
Signal-Handler zu sein"

Autor: MachMalSo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ISR(TIMER0_COMPA_vect)
{
  PORT_READY_LED ^= (1<<PIN_READY_LED);
}

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die LED geht an, aber dann nicht mehr aus.

Sehe im Moment keinen Fehler in Deinem Programm.  Hast Du mal die zu 
erwartende LED-Blinkfrequenz ausgerechnet?  Wenn die zu hoch ist, ist 
das Blinken von einem Dauer-An für das menschliche Auge nicht zu 
unterscheiden.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, sorry, da stehts ja im Kommentar... 50 Hz.

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

Bewertung
0 lesenswert
nicht lesenswert
Beim Tiny25 heißt der Vektor TIM0_COMPA und nicht TIMER0_COMPA ...

(Warum das in dem Fall so ist, weiß ich nicht. In diesem Fall scheint 
die Übereinstimmung mit dem Datenblatt nicht gegeben, was ungewöhnlich 
ist)

Allerdings sollte man generell Warnmeldungen des Compilers nicht einfach 
ignorieren...

Autor: kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnellen Antworten!
Es war tatsächlich die Bezeichnung des Vektors, die nicht mit dem Dbl. 
übereinstimmt. Die Warnmeldung des Compilers hab ich übersehen, ich bin 
wohl zu sehr auf die "Error:" Meldungen fixiert gewesen :) Jetzt klapts 
auf jeden Fall. Wo findet man eigentlich unter Linux die Dateien, die 
die Zuordnungen für den jeweiligen Controller enthalten? Da hätte ich 
dann wohl nachschauen können, wie der Vektor speziell beim Tiny25 
heißt...

Grüße,
Kai

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wo findet man eigentlich unter Linux die Dateien, die die Zuordnungen
> für den jeweiligen Controller enthalten?

Das kommt drauf an. Bei Distributionspaketen ist es meist 
/usr/avr/include/avr. Wenn du die Toolchain selbst übersetzt hast und 
kein Ziel-Prefix angegeben hast, wäre es /usr/local/avr/include/avr.

> Da hätte ich dann wohl nachschauen können, wie der Vektor speziell beim
> Tiny25 heißt...

Einfacher wäre, das in der avr-libc-Doku nachzulesen.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kai wrote:
> Wo findet man eigentlich unter Linux die Dateien, die
> die Zuordnungen für den jeweiligen Controller enthalten?

gib einfach als gcc-Option -save-temps an und cshau mal ins i-File. Das 
ist die Quelldatei nach auflösen der Präprozessor-Direktiven. Da steht 
dann auch drin, wo was hergenommen wird:
# 1 "countdown.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "countdown.c"
# 1 "countdown.h" 1



# 1 "E:/WinAVR_20060421/avr/include/inttypes.h" 1 3
# 37 "E:/WinAVR_20060421/avr/include/inttypes.h" 3
# 1 "E:/WinAVR_20060421/avr/include/stdint.h" 1 3
# 116 "E:/WinAVR_20060421/avr/include/stdint.h" 3
typedef int int8_t __attribute__((__mode__(__QI__)));
...

Ist zwar unter Win32 und n alter avr-gcc, aber das sieht überall gleich 
aus.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kai wrote:

> Es war tatsächlich die Bezeichnung des Vektors, die nicht mit dem Dbl.
> übereinstimmt.

Die Änderung ist erst im XML von AVR Studio 4.13 Build 571 drin
gewesen, in Build 528 hatten die Vektoren beim ATtinyX5 noch die
kurzen Namen.  Von da hat sie die avr-libc geerbt.

Bitte schreibe einen avr-libc-Bugreport, da müssen wir wohl in
Zukunft wiedermal zwei Namen pflegen. :-(

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.