Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Interrupt
Bluesmash
14.06.2005, 22: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
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.
@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, 11: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
.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, 11:36
Hallo Robert,
aha, danke!
Ciao,
Werner
Bluesmash
15.06.2005, 17: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?
@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
@Bruno: ich muß dich auf morgen vertrösten, ich hab die Doku jetzt nicht bei mir
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.
Moin Robert,
dickes DANKE für die Mühe!
LG,
Bruno
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.