mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik globale Variable


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Patrick C. (orange94)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Mitlesa (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Carl D. (jcw2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: fop (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: lern...was (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

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.