RP6 - ATMEGA32 externer interrupt??

OP #1149560
Hallo Leute!!!

Hab mir vor ein paar tagen einen RP6 roboter bei conrad gekauft. Der
arbeitet mit einem ATMEGA32L µC. Es sind zwar viele funktionen
mitgeliefert, aber ich versuch alles selber zu programmieren, währ ja
sonst nur der halbe spass :-)

Also ich versuche gerade die Radumdrehungen zu messen und das ganze
läuft über die externen interrups INT0 und INT1. der roboter soll eine
gewisse strecke zurücklegen und dann stehen bleiben.

Mein problem ist, dass das programm nicht in die ISR springt.

der Code:

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

int encl = 0;
int encr = 0;

ISR (INT0_vect)
{
  PORTB &= (0<<PB0);
  encl++;
}

ISR (INT1_vect)
{
  encr++;
}

int main (void)
{
  DDRB |= (1<<DDB0); //led zum test
  PORTB |= (1<<PB0);
  DDRD |= (1<<DDD4) | (1<<DDD5);
  PORTD |= (1<<PD4) | (1<<PD5);  //beide räder einschalten

  //interrupt initialisieren
  MCUCR = (0 << ISC11) | (1 << ISC10) | (0 << ISC01) | (1 << ISC00);
  GICR = (1 << INT1) | (1 << INT0);
  sei();

  while(1)
  {
    if (encl == 1000)
    {
      PORTD |= (0<<PD4);
      encl = 0;
    }
    if (encr == 1000)
    {
      PORTD |= (0<<PD5);
      encr = 0;
    }
  }
}

hab ich irgend etwas vergessen, oder falsch initialisiert??
Vielleicht hat oder hatte jemand das selbe problem??

bitte um hilfe!!!

danke
martin91
#1149569
Ich denke schon, dass in die ISR gesprungn wird (es spricht im Programm 
eigentlich nichts dagegen), allerdings hat das, was in der ISR gemacht 
wird, keinen Einfluss auf den Rest des Programms, weil die Zählvariable 
nicht volatile deklariert ist und dementsprechend im Hauptprogramm 
vermutlich die Abfrage wegoptimiert wurde...

Variablen, die sowohl im Hauptprogramm als auch in Interrupt Handlern 
verwendet werden, müssen volatile sein.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.