Forum: Mikrocontroller und Digitale Elektronik AVR INT0 funktioniert nicht


von Peter (Gast)


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?
1
MCUCR |= (1<<ISC01) | (1<<ISC00) | (1<<PUD);
2
GIMSK &= ~(1<<PCIE);
3
GIMSK |= (1<<INT0);
4
SREG  |= (1<<SREG_I);

vielen dank und gruß
peter

von Naja (Gast)


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.

von Peter (Gast)


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

von Peter (Gast)


Lesenswert?

übrigens funktioniert int0, wenn ich int0 mit einer drahtbrücke auf gnd 
ziehe

von Naja (Gast)


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.

von Naja (Gast)


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?

von Peter (Gast)


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.

von Naja (Gast)


Lesenswert?

Nun gut. Gibt es dann noch ein Problem?

von Plutimikation (Gast)


Lesenswert?

Du hast die Antwort von "Naja" doch schon.

von Peter (Gast)


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

von Plutimikation (Gast)


Lesenswert?

nochmal: SCHALTE DEN PIN AUF EINGANG

von Naja (Gast)


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.

von Naja (Gast)


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"?

von Peter (Gast)


Lesenswert?

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

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

von Naja (Gast)


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.

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.