Forum: Compiler & IDEs Programm mag ISR nicht


von Anfänger (Gast)


Lesenswert?

Hallo Spezialisten

Habe da ein Problem mit der ISR.
Wenn ich das Programm simuliere im AVR Studio 4.12 und WIN-AVR,
wird immer beim Timeroverflow zum Programmbeginn bei Main gesprungen.
Die ISR wird also nicht ausgeführt.
Beim Test auf dem STK500 tut sich auch nichts, außer daß die LED's
leuchten.

µC -> ATtiny2313

Was ist, mache ich falsch?
Weiß jemand etwas?

Schonmal vielen Dank


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

volatile int8_t   enc_delta=0;      // -128 ... 127

int main( void )
{
  // rotary switch connection
  DDRD &= ~(_BV(PD0) | _BV(PD1)); // set to input
  PORTD |=(_BV(PD0) | _BV(PD1));  // enable pull up

  TCCR0B = 0x01;//1<<CS01;          //divide by 8 * 256
  TIMSK = 1<<TOIE0;         //enable timer interrupt

  DDRB = 0xFF;
  sei();
  for(;;)               // main loop
    PORTB = enc_delta;
}

ISR(TIMER0_OVF_vect)
{
  static uint8_t last_state = 0,last_cnt = 0;
  uint8_t new_state;

  new_state=PIND & (_BV(PIND1) | _BV(PIND0));
  if ((new_state^last_cnt)==(_BV(PIND1) | _BV(PIND0)) )
  {
    if ((new_state ^ last_state)==_BV(PIND1))
      enc_delta+=1;
    else
      enc_delta-=1;
    last_cnt=new_state;
  }
  last_state=new_state;
}

von Rahul D. (rahul)


Lesenswert?

Hast du mal einen Blick auf das Compilat geworfen? Ist da überhaupt der 
ISR-Vector eingetragen?

von Dirk (Gast)


Lesenswert?

tausch mal die main mit der ISR

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Funktioniert problemlos bei mir.  OK, das Ersetzen des rotary encoders
mit den Tasten des STK500 ist bissel gewöhnungsbedürftig. ;-)

Du benutzt die neue Interruptvektor-Syntax, hast du eine hinreichend
aktuelle toolchain dafür (avr-libc >= 1.4.x)?

von Anfänger (Gast)


Lesenswert?

Guten Morgen

Vielen Dank für die schnellen Antworten.
ein rotary encoder ist schon angeschlossen.
Einer mit 00/11 von Conrad.
Das Problem ist nur, daß die ISR nicht ausgeführt wird.
Auch nicht wenn in der ISR etwas ganz einfaches steht.
Z.B.: enc_delta = 0xAA und sonst nichts.
Unten stehende Warnungen werden noch ausgegeben.


../test999.c:11: warning: return type defaults to `int'
../test999.c: In function `ISR':
../test999.c:25: warning: control reaches end of non-void function

P.S.:
Wie stelle ich fest welche Vers. die Lib. hat?

Danke

von Karl H. (kbuchegg)


Lesenswert?

Anfänger wrote:
> Unten stehende Warnungen werden noch ausgegeben.
>
>
> ../test999.c:11: warning: return type defaults to `int'
> ../test999.c: In function `ISR':
> ../test999.c:25: warning: control reaches end of non-void function

Das heist der Compiler hat deine Funktion nicht
als ISR erkannt.
Eine ISR hat korrekterweise keinen return type und wenn
alles richtig läuft, dann weiss der Compiler das auch.

Zieh die ISR mal vor das main. Überprüfe akribisch
jeden einzelnen Buchstaben der Interruptbezeichnung.
( Am besten schaust du in die io2313.h hinein, suchst
dir dort das #define dafür und kopierst den Namen mittels
Cut&Paste in dein Programm. )

von Anfänger (Gast)


Lesenswert?

Habe jetzt die Include Dateien mit den ioxxx.h von WinAvr 4.11 genommen.
Damit funktioniert es. Keine Warnungen mehr. Die LED's zählen nun schön 
auf und ab.
Ich bin begeistert.

Herr Karl heinz GROßEN DANK für den Tipp.

Auch an die Anderen die geantwortet haben.

Wieder was gelernt. Klasse Forum.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Habe jetzt die Include Dateien mit den ioxxx.h von WinAvr 4.11 genommen.

Schlechte Lösung.  Bitte installier' dir die komplette toolchain,
zumindest jedoch eine in sich konsistente Bibliothek.  Die gibt's
auch als binary distribution unter

http://download.savannah.gnu.org/releases/avr/

Kann man prinzipiell über die existierende (z. B. von WinAVR) drüber
installieren.

Ein Headerfile steht nicht im luftleeren Raum, es hat immer einen
Bezug zur Bibliothek, zu der es gehört.

von Anfänger (Gast)


Lesenswert?

Aha..
Was sind die .sig dateien?
Kann die mit nichts öffnen.
Habe jetzt einen Ordner mit Namen "avr-libc-bin-1.4.5" wwohin damit?
Entschuldigung wenn ich so viel frage.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Anfänger wrote:

> Was sind die .sig dateien?

Kryptographische Signaturen.  Damit sind die Archive unterschrieben.

> Kann die mit nichts öffnen.

GnuPG.

> Habe jetzt einen Ordner mit Namen "avr-libc-bin-1.4.5" wwohin damit?

Dahin, wo die bisherige Bibliothek installiert war.  C:/WinAVR
vermutlich.  Also nur die Dateien aus den Unterverzeichnissen
dorthin schaffen, da bleibt dann wohl ein leeres Verzeichnis
avr-libc-bin-1.4.5 übrig am Ende.

von Anfänger (Gast)


Lesenswert?

Danke für die schnelle Antwort.

55 & 73

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.