mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR INT0 funktioniert nicht


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich bin gerade dabei mich in einen ATTiny25 einzuarbeiten. meine AVR 
kenntnisse lassen zu wünschen übrig und ich komme im moment einfach 
nicht weiter.

ich möchte mit hilfe von int0 einen anderen pin toggeln lassen. doch 
leider messe ich an int0 direkt immer +5v. wie kann ich denn den pin so 
konfigurieren, dass er an ausgang low bringt?
MCUCR |= (1<<ISC01) | (1<<ISC00) | (1<<PUD);
GIMSK &= ~(1<<PCIE);
GIMSK |= (1<<INT0);
SREG  |= (1<<SREG_I);

vielen dank und gruß
peter

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>meine AVR kenntnisse lassen zu wünschen übrig und ich komme im moment >einfach 
nicht weiter.

Da besteht ein innerer Zusammenhang.
Lies Dir das Datenblatt genau durch.

Mit "INT0" bezeichnet man sowohl einen Pin als auch eine Funktion. Die 
Funktion ist es, einen Interrupt auszulösen, wenn sich daran ein 
bestimmter Pegel oder ein Pegelwechsel ereignet (Ich habe gerade nich im 
Kopf, welche der beiden Alternativen zutrifft).
Wenn Du also sagst, das "INT0 nicht funktioniert" so bedeutet das im 
wesentlichen, dass der Interrupt nicht ausgelöst wird.

Nun schreibst Du aber, das Du an INT0 einen Pegel ausgeben willst. Das 
ist aber nicht die Funktion von "INT0", bzw. des Pins.

Es ist durchaus möglich an dem Pin, der mit der INT0-Funktion verknüpft 
ist einen Pegel auszugeben. Das hat nur nichts mit INT0 zu tun.
Also einfach den Portpin als Ausgang konfigurieren und das Bit setzen.

Um das Ganze klarer zu sehen, wäre es gut wenn Du eine Schaltung postest 
(Bildformate beachten) in der auch Deine Signalquellen zu sehen sind.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank für die antwort.

ich glaube ich habe mich falsch ausgedrückt, buw. die hälfte vergessen.
ich habe einen dcg77 empfänger, welcher mir immer einen impuls zwischen 
100 und 200µs bringt. nun ist es  so, dass der dcf emfänger am ausgang 
den portpin nicht auf low ziehen kann, da der controller +5v an diesem 
pin augibt.
bemerkt habe ich das ganze erst, als ich einen buffer am ausgang des 
dcf77 empängers angeschlossen habe um eine led zu betreiben. das signal 
nach dem buffer habe ich an int0 angeschlossen. nun leuchtet die led 
immer und es findet keinen wechsel auf low statt, da der controller die 
+5v ausgibt.

gruß
peter

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
übrigens funktioniert int0, wenn ich int0 mit einer drahtbrücke auf gnd 
ziehe

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abegesehen von der Gross-Kleinschreibung...
Das Ding heisst vermutlich DCF77-Empfänger und bringt Impulse von 100 
oder 200 Millisekunden Länge... Aber gut.

Viele DCF-Empfänger haben einen Open-Kollektor-Ausgang. Um das zu 
testen, trenne den Empfänger vom Controller und hänge die LED daran 
(anderer Punkt auf Masse, Plus-Seite am Empfänger). Falls Du nichts 
siehst, hänge einen 4,7kOhm Widerstand an den Empfänger und die andere 
Seite an Plus (5V?).
Spätestens dann solltest Du, eine gute Empfangsposition vorausgesetzt, 
die LED blinken sehen.

Dein Problem mit dem uC ist, das der Pin, an den Du den Empfänger 
anschliesst als Eingang konfiguriert werden muss. Zusätzlich muss, 
falls die LED bei dem obigen Experiment erst leuchtet, wenn der 
Widerstand angelötet ist, noch den Pull-Up-Widerstand aktivieren. Wie 
das geht, steht im Datenblatt. Im Einschaltzustand ist der Port 
eigentlich als Eingang konfiguriert. Daher sollten da nicht 5V anliegen. 
Zeige mal den kompletten Quellcode.

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>übrigens funktioniert int0, wenn ich int0 mit einer drahtbrücke auf gnd
>ziehe

Entschuldige, aber was ist das für ein Q...? Was meinst Du mit: "Es 
funktioniert"? Woran merkst Du das?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der empfänger funktioniert, da die led ohne controller blinkt. die isr 
wir ausgelöst, da der pin toggelt wenn ich int0 mit masse verbinde und 
dann wieder trenne. es sind nur die 5v die zusätzlich die led treiben.

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun gut. Gibt es dann noch ein Problem?

Autor: Plutimikation (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast die Antwort von "Naja" doch schon.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, da der aktive portpin nicht von dem empfänger auf low gezogen wird. 
ich werde weiter mein glück versuchen, aber danke für die hilfe.

ps
ich meinte natürlich millisekunden.
wenn ich zuhause etwas neues teste, muss ich improvisieren und mir eben 
mit ner drahtbrücke helfen. ich habe hier schließlich nicht die 
optimalsten bedingungen.

viele grüße

Autor: Plutimikation (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nochmal: SCHALTE DEN PIN AUF EINGANG

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>da der aktive portpin nicht von dem empfänger auf low gezogen wird
Hmm. Meine Glaskugel sagt, das Du das daran merkst, das der Interrupt 
nicht ausgelöst wird. Leider sagt mir die Glaskugel nicht, wie Du das 
feststellst.

Es kann sein, das der Empfängerausgang einen Pull-Down-Widerstand 
braucht.
Leider hast Du mir nicht mitgeteilt ob der zusätzliche Widerstand nötig 
war, damit die LED blinkt und wie Du die LED nun genau an den Empfänger 
geschaltet hast, als sie blinkte. Mach mal einen kleinen Schaltplan 
dazu.

Ich habe Dich auch aufgefordert den Schaltplan der Zusammenschaltung von 
Empfänger und uC und den Quellcode zu posten. Bitte tu' das.

>wenn ich zuhause etwas neues teste, muss ich improvisieren und mir eben
>mit ner drahtbrücke helfen. ich habe hier schließlich nicht die
>optimalsten bedingungen.
Kein Problem.

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>aktive portpin
Das ist auch ein irgendwie unpassender Ausdruck hier. Ein Pin der als 
Eingang konfiguriert ist, wird höchstens dann als "aktiv" bezeichnet, 
wenn er vom Inneren des uC aus gesehen, also irgendwie im Programm 
merkbar, High ist.
Das aber würde eine externe Schaltung nicht daran hindern ihn auf Low zu 
ziehen.
Was meinst Du hier mit "aktiv"?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDRB = (1<<DDB3);  //an diesem Pin steuere ich eine weiter LED an, welche in der ISR immer inertiert wird  
PORTB |= (1<<PB3);
PORTB &= ~(1<<PB2);

wenn ich INT0 mit
DDRB &= ~(1<<PB2)
als Eingang definiere und mit
PORTB &= ~(1<<PB2);
den Pull-Up deaktiviere passiert da nichts

Autor: Naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>den Pull-Up deaktiviere passiert da nichts
Entschuldige, aber es ist wirklich sehr schwer Dir zu helfen, da Du 
immer nur so halbe (wenn überhaupt) Informationen gibst. Was erwartest 
Du da? Das da ein kleines Männchen aus dem Gehäuse kommt und eine Flagge 
schwenkt?
"...passiert da nichts" ist nicht ausreichend als Beschreibung.

Du musst dem der Dir helfen soll, ganz klar legen was der Ablauf ist, 
was Du erwartest und was passiert.

Ausserdem fehlen immer noch die Schaltpläne und der komplette Code.

Ich geb's auf. Kämpf Dich alleine durch.

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.