mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupts testen mit atmega8515


Autor: juliana (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autor: juliana (Gast)
Datum: 27.10.2009 21:45

hallo, ich  hab angefangen ein bisschen mit den interrupts rumzuspielen.
hab aber folgendes problem.
benutze atmeg8515 und avrstudio mit winavr und stk500
den folgenden code habe ich aus einem buch abgeschrieben. aktiviert wird
der INT0. bei drücken des taster2(PIND2) soll an portB raufgezählt
werden. raufzählen funktioniert soweit ganz gut, nur manchmal wird
einmal gezählt wenn ich draufdrücke und einmal wenn ich wieder loslasse,
aber ich denke das kommt vom prellen, oder??

weiter im text: bei drücken des taster4 soll der zähler gelöscht werden.
da tut sich aber überhaupt nix. kann mir vielleicht einer sagen wiseo??

vielen dank

CODE:

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

SIGNAL(SIG_INTERRUPT0)
{PORTB--;
_delay_ms(3000);}

void main(void){

    DDRB=0xff;
    PORTB=0xff;
    PORTD=0xff;


    MCUCR|=(1<<ISC01);

    GICR|=(1<<INT0);

    SREG|=(1<<7);

    while(1)
    { while(!PIND & (1<<PD4))
    PORTB=0;
    while((PIND & (1<<PD4)));  }

    }

Autor: Dennis U. (atmegadennis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Juliana,

Dein Problem liegt in deinen ganzen while Schleifen.

    while(1)
    {
       if(!PIND & (1<<PD4))
       PORTB=0;
    }


Probiers so und dann sollts funzen.

Autor: juliana (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi habs jetz so:

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

SIGNAL(SIG_INTERRUPT0)
{PORTB--;
_delay_ms(1000);}

void main(void){

    DDRB=0xff;
    PORTB=0xff;



    MCUCR|=(1<<ISC01);

    GICR|=(1<<INT0);

    SREG|=(1<<7);



    while(1)
    {
       if(!PIND & (1<<4))
       PORTB++;
    }
}

aber funktioniert leider auch net. hab im simulator rausgefunden das er 
gar net in den rumpf von der if bedingung reingeht, woran kann des 
liegen???
vielen dank

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.