PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Interrupt



Bluesmash
14.06.2005, 21:44
Hallo Zusammen!

Ich habe mir einen Bumper aus Luftschlauch und drucksensor gebaut... und lasse meinen bot durch auslösen eines interrupts ausweichen... jetzt habe ich das problem das er die anweisungen für den interrupt immer 2 mal hintereinander ausführt... könnte mal jemand mein prog anschauen ob das so richtig ist oder ob es an meinem sensor liegt... und kann man das so machen mit pinb.2 um den pull-up am interrupt einzuschalten?

vielen dank und schöne grüsse bluesmash

recycle
14.06.2005, 23:30
jetzt habe ich das problem das er die anweisungen für den interrupt immer 2 mal hintereinander ausführt... könnte mal jemand mein prog anschauen ob das so richtig ist oder ob es an meinem sensor liegt...


Ich weiss nicht, wie dein Drucksensor aussieht.
Normale Taster und Schalter prellen. Wenn man sie nicht entprellt, treten beim Ein- und Ausschalten mehrere Flanken auf und dann wird eine Interrupt-Routine auch mehrfach aufgerufen.

Um das zu vermeiden kann man den Schalter oder Taster entweder elektronisch entprellen, oder aber das Prellen in der Software berücksichtigen. Wenn du mal nach "Entprellen" suchst, müsstest du reichlich Informationen dazu finden.

Dass deine Interrupt-Routine wegen einem prellenden Druckschater mehrfach aufgerufen wird, kann ich mir vorstellen. Dass die Interrupt Routine immer 2 fach ausgeführt wird allerdings nicht, weil dein "Wendenlinks" und "Retour" über eine halbe Sekunde dauert und solange prellt ein normaler Taster oder Schalter ganz sicher nicht.

PicNick
15.06.2005, 06:22
@Bluesmash: BasCom hatt bei der Version 1.11.7.4 ein Problem mit int2.
Hast du schon 1.11.7.8 ?

Werner_Just
15.06.2005, 10:10
Hallo Robert,

>Hast du schon 1.11.7.8 ?

seit einiger Zeit lese ich immer wieder von einer 1.11.7.8er Version.
Der Update-Wizzard ist aber immer noch bei der 7.7(b) und auf der MCS-Webseite ist auch nichts zu finden.

Wie wo gibts die 7.8?

Ciao,
Werner

PicNick
15.06.2005, 10:32
.8 ist mit dem Update von Roboternetz (->Download)
akutell ist .7
Beide bearbeiten int2 richtig, soweit ich weiß

Wenn du .4 hast, solltest du upgraden.

Werner_Just
15.06.2005, 10:36
Hallo Robert,

aha, danke!

Ciao,
Werner

Bluesmash
15.06.2005, 16:14
@picnick: habe version .7

@recycle: danke für den denkanstoss!
ich habe vorher noch nie etwas von "prellen" gehört... so lehrnt man immer wieder dazu :) ich habe nun mein problem mit dem befehl "debounce" gelöst und konnte damit gleich 2 probleme lösen: der interrupt wird jetzt immer nur einmal ausgelöst, ich hatte zudem das problem das bei leichten erschüterungen der druckschalter auslöste (da ich ihn sehr fein einstellen muste...) nun braucht es schon einen kräftigen "schlag" um ihn auszulösen...
ich poste nochmal mein geändertes prog wenn es jemand interessiert...

könnte mir noch jemand sagen ob das so richtig ist mit dem pull-up am interrupt? oder gibt es da eine "bessere" methode?

DIYLAB
15.06.2005, 16:50
@Bluesmash: BasCom hatt bei der Version 1.11.7.4 ein Problem mit int2.

Moin,

ich benutze die o.g. Version und in meinem aktuellen Projekt fleißig den INT2. Kann keine Fehlfunktion feststellen.

Welchen Fehler soll sie denn haben?

LB,
Bruno

PicNick
15.06.2005, 18:32
@Bruno: ich muß dich auf morgen vertrösten, ich hab die Doku jetzt nicht bei mir

PicNick
16.06.2005, 09:15
Bei Mega64 u. 128


$regfile = "m64def.dat"
$crystal = 16000000
$baud = 9600

Config Int2 = Falling
Config Int2 = Rising
Config Int2 = Low Level

Enable Int2

Do
Loop
;----------------------------------------------
; Config Int2 = Falling
;----------------------------------------------
LDS r24,EICRA
ANDI r24,0xCF ; clear ISC20 + ISC21
;-------------------- !!!!!!!!!!!!!
ORI r24,0x10 ; set ISC20
;-------------------- !!!!!!!!!!!!!
STS EICRA,r24
;----------------------------------------------
; Config Int2 = Rising
;----------------------------------------------
LDS r24,EICRA
ANDI r24,0xCF ; clear ISC20 + ISC21
;-------------------- !!!!!!!!!!!!!
ORI r24,0x18 ; set ISC20 + ISC11
;-------------------- !!!!!!!!!!!!!

STS EICRA,r24

;----------------------------------------------
; Config Int2 = Low Level
;----------------------------------------------
LDS r24,EICRA
ANDI r24,0xCF ; clear ISC20 + ISC21
ORI r24,0x00 ; none
STS EICRA,r24

;----------------------------------------------
; Enable Int2
;----------------------------------------------
IN r24,EIMSK
ORI r24,0x04
OUT EIMSK,r24
;----------------------------------------------
Do
Loop
;----------------------------------------------
L_0x00F2:
JMP L_0x00F2

Du siehst, in der Zeile stecken ev. Probleme
ORI r24,0x10 ; set ISC20
Er setzt das reserved-Bit

Und auch das stimmt nicht
ORI r24,0x18 ; set ISC20 + ISC11
Er hat statt ISC20 + ISC21 (rising)
den Flag ISC20 gesetzt (reserved)
und das falling-Bit vom INT1

Ob das tatsächlich probleme bringt, hängt vom Einzelfall ab.

DIYLAB
16.06.2005, 14:02
Moin Robert,

dickes DANKE für die Mühe!

LG,
Bruno