PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Interrupts



robotikfan
01.03.2007, 00:08
Hallo,
wie muss ich generell einen Taster an einem Interrupteingang anschließen? Kann ich über die Pull-up Widerstände des ATMegas die Pins auf high ziehen und dann über einen Taster auf Ground? Kann ich hier die fallende Flanke nehmen? Oder was wäre den besser? Brauche ich auch eine externe Beschaltung??

Kann es sein, dass ein Befehlssatz in einer Interruptschleife nur eine gewisse Zeit dauern darf? Kann man in einer Interruptschleife auf alle Variablen zugreifen?

ich hoffe ihr könnt mir weiterhelfen.
mfg

for_ro
01.03.2007, 00:48
Du kannst den Taster sicherlich so anschliessen. Beim Drücken kommt dann die fallende Flanke, beim Loslassen die steigende. Wie du das machst hängt meistens davon ab, wie man die äußere Schaltung am einfachsten hinbekommt.
Im Interrupt ist es immer gut, so schnell wie möglich fertig zu sein, weil der µC so lange auf nichts anderes reagiert. Aber wenn er nichts anderes machen muss, kannst du auch für immer da drin bleiben.
Auf welche Variablen du zugreifen kannst, hängt wohl mal von der verwendeten Programmiersprache ab. Bascom z.B. ist da sehr freizügig, weil alle Variablen automatisch global sind, wenn sie nicht explizit in einer Sub oder Funktion als LOCAL dimensioniert wurden. In C ist das etwas anders, aber das können die Experten sicherlich besser erklären.

Gruß Rolf

robotikfan
01.03.2007, 01:18
vielen dank für die Antwort.
Brauche ich als externe Beschaltung irgendwelche Widerstände, Kondensatoren, ... ?
Ja, ich verwende Bascom. Wieso ist es zum Beispiel nicht möglich einen Port (LED am Ausgang) über einen Interrupt zu togglen?? Es funktioniert bei mir nicht!!! Wie könnte ich den den Taster entprellen? Schaltung?

mfg

for_ro
01.03.2007, 08:10
Nein, nur für die Taster brauchst du nichts an externen Bauelementen.
Zum Entprellen schau mal in der Help unter DEBOUNCE. Das kannst du auch software-mäßig machen.
Der Interrupt kann sicherlich den Ausgang toggeln.
Poste mal den Code, dann kann man sehen, was falsch ist. Und gib ein paar Details zu der Beschaltung der LED und woher der Interrupt kommt.

Gruß

Rolf

robotikfan
01.03.2007, 09:00
On Int0 Taste_rot
On Int1 Taste_gruen

Enable Interrupts

Enable Int1
Enable Int0

Config Int0 = Falling
Config Int1 = Falling

----

Taste_rot:
Toggle Portd.5
Return

ich schalte mit dem Ausgang nur eine LED, aber es funktioniert nicht. Man kann die LED nur einschalten, aber nicht mehr ausschalten.

Wie funkt. das mit dem DEBOUNCE? muss ich das in eine schleife tun?

robotikfan
01.03.2007, 23:54
kann mir bitte wer die "debounce" Funktion erklären?

CR-Racing
02.03.2007, 07:51
Ist in der Hilfe perfekt beschrieben.

MfG

robotikfan
02.03.2007, 17:26
stimmt der Code so:
Config Debounce = 30

Debounce Pind.2 , 0 , Taste_gruen
Debounce Pind.3 , 0 , Taste_rot

es funktioniert nicht!! Muss ich das in eine While Schleife schreiben?

robotikfan
03.03.2007, 20:19
funktioniert die "debounce" Funktion auch bei interrupts?