Forum: Mikrocontroller und Digitale Elektronik globale Variable


von Patrick C. (orange94)


Lesenswert?

moin,

ich finde leider meinen Fehler nicht und suche jetzt schon seit einer 
Stunde. ich hab den mikrokontroller auch bereits mehrfach ein und 
ausgeschaltet. und voltaire habe ich nun auch schon ausprobiert:

#include <avr/io.h>
#include <avr/interrupt.h>  //Interrupts ermöglichen

volatile uint8_t jojo=0;
void setup (void);

ISR (INT0_vect){
  jojo=1;
}
int main(void)
{
  setup();
   while (1)
    {
    if (jojo==1) {
      PORTB |= 1;
    }
    }
}

void setup (void){
  DDRB|=1;
  DDRD &=~4; //Hall-Sensor als Eingang (INT0)
  PORTD |=4; //Pull-Up Widerstand am Hall Sensor (INT0)
  EICRA =0x02; //fallende Flanke von Hall Sensor(INT0) erzeugt ISR
  EIMSK |=3; //aktiviert Hall Sensor (INT 0)
  sei();}

an PortB an Pin0 ist eine LED und diese soll nach einer Umdrehung an 
gehen. An PortD ist der HallSensor an Pin2. Sobald ich "PortB |= 1" in 
die ISR einschreibe funktioniert das. Wenn ich sie jedoch in ISR und 
main() aufteile funktioniert es nicht.

Danke schonmal!

von Mitlesa (Gast)


Lesenswert?

Patrick C. schrieb:
> DDRD &=~4; //Hall-Sensor als Eingang (INT0)
> PORTD |=4; //Pull-Up Widerstand am Hall Sensor (INT0)

Für die 4 müsstest du vermutlich etwas in der Form

1<<4

schreiben

bei

  EICRA =0x02; //fallende Flanke von Hall Sensor(INT0) erzeugt ISR
  EIMSK |=3; //aktiviert Hall Sensor (INT 0)

hab ich nicht nachgeschaut, vielleicht muss da auch was
geändert sein.

von Carl D. (jcw2)


Lesenswert?

Benutz die Schreibweise "(1<<BitName)", dann muß keiner rätseln, auch du 
nicht, und der Compiler erledigt den Rest.

BTW, sieht OffTopic oder nörgelig aus, soll aber Hilfe zur Fehlersuche 
sein. Nur so lernt man nämlich was.

von fop (Gast)


Lesenswert?

Hm,
ich sehe so auf Anhieb auch den Fehler noch nicht. Und die 2 ersten 
Antworten sind ja auch nix Konkretes....
Hast Du einen Debugger zur Hilfe ? Oder eventuell noch mehr Leds an 
anderen Portpins ? Würde mal eine Led toggeln bei jedem Durchgang durch 
die while-Schleife, eine andere beim Durchgang durch die 
Interrupt-Routine.
Oder setz mal eine Led so lange jojo gleich 0 ist.
Mein Lieblingsfehler ist, den Code zu korrigieren und dann entweder das 
Compilieren oder das Flashen zu vergessen, so dass ich nicht verstehe, 
warum der Fehler immer noch da ist.
Dein Hall hängt am Portpin D2, oder ?
Verrate auch mal um welchen AVR es konkret geht.

von lern...was (Gast)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Patrick C. schrieb:
> EIMSK |=3; //aktiviert Hall Sensor (INT 0)
Aber nicht nur den allein.

BTW: welchen Controller verwendest du denn? Das mit dem AVR kann man ja 
noch erraten. Aber die passende Zahl dazu? Schwierig...

: Bearbeitet durch Moderator
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.