Programm mag ISR nicht

Gast #528692
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;
}
Gast
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
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. )
Gast
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.
Moderator Persönliche Seite
> 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.
Gast
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.
Moderator Persönliche Seite
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.