-         

Ergebnis 1 bis 6 von 6

Thema: AVR Codevision Interrupts

  1. #1

    AVR Codevision Interrupts

    Anzeige

    Hallo!

    Ich programmiere auf einem Atmel STK500 Board einen ATmega162 im AVR Codevision Compiler.

    Kann mir jemand sagen, wie ich im Codevision einen einfachen Interrupt schreibe, der Pulse zählen kann? Als Test habe ich einen Interrupt geschrieben in dem eine zahl einfach hochgezählt wird. Den Interrupt löse ich dabei mit einer Taste am STK500 Board aus, jedoch funktioniert das ganze nicht so wie ich will.

    mfg

    mr.Fashion

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    29
    Beiträge
    194
    Könntest du das ganze vielleicht etwas beschreiben, was nicht funktioniert, damit wir dir besser helfen können.

    Wird die Zahl einfach gar nicht hochgezählt oder wird sie zu oft hochgezählt (eventuell entprellen !??)...

    mfg skillii

  3. #3
    Hallo!

    Die Zahl wird gar nicht hoch gezählt, der µC gibt am Terminal nur den Anfangswert aus, also 0!

    Hier ist mein Programm code:

    #include <mega162.h>
    #include <stdio.h>

    int zahl=0;

    interrupt [EXT_INT0] void ext_int0_isr(void)
    {


    }

    interrupt [PCINT0] void pin_change_isr0(void)
    {

    zahl++;
    }

    //Initialisierung der USART Schnittstelle fürs Terminal


    void warte(unsigned int msec) //Damit die zahl ca. im sekunden takt ausgegeben wird

    { unsigned int i;
    for (msec; msec!=0; msec--) for (i=0; i<8; i++);
    }

    void main(void)
    {
    //Initialisierung der PORTS und Timer, ...; dabei brauch ich aber nur den PORTA.1, weil der für den Interrupt 0 zuständig ist

    //Interrupt initialisierung
    GICR|=0x48;
    PCMSK0=0x03;
    GIFR=0x48;

    #asm("sei"); // Global enable interrupts

    while (1)
    {
    // Place your code here
    printf("\n\r%d",zahl);
    warte(1000);


    };
    }

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    29
    Beiträge
    194
    Versuch einmal vor die Variablendeklaration das Schlüsselwort volatile zu schreiben.

    EDIT:
    also so:
    volatile int zahl=0;

  5. #5
    Hallo!

    Hab ich jetz ausprobiert, funktioniert aber noch immer nicht ganz! Das komische ist, dass wenn ich das Board ausschalte und dann wieder einschalte funktioniert zählt er kurz zeitig mit der Taste hoch, jedoch wenn ich Reset drücke, gibt es mir die ganze zeit nur 0 aus und beim drücken der Taste geschieht gar nichts.

    mfg

    klaus

  6. #6
    hallo!

    hab das problem gefunden, aber trotzdem danke für deine hilfe.
    komischer weise hat das codewizard bei der initialisiung ein register nicht hin geschrieben, das mcucr. das hab ich jetzt dazu geschrieben und jetzt funzts!

    mfg

    klaus

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •