Archiv verlassen und diese Seite im Standarddesign anzeigen : Schalter K6 löst SIG_INTERRUPT1 nicht aus [gelöst]
Hallo,
ich habe ein kleines Problem mit dem K6.
SIG_INTERRUPT1 wird nicht ausgelöst, wenn der Schalter gedrückt wird.
(Bei allen anderen Schaltern funktioniert es.)
Der Wert von K6 kann mit PollSwitch() richtig gelesen werden - der Schalter ansich funktioniert also.
Ist dieses Problem jemanden bekannt?
damaltor
28.04.2007, 19:09
der interrupt wird durch einen spannungsabfall am prozessor ausgelöst. vielleicht ist der widerstand zu groß. schliesse den widerstand des tasters kurz (siehe schaltplan) und drücke dann nochmal. es könnte auch sein dass der interrupt etwas zeitverzögert ausgelöst wird.
...schönen Dank für die schnelle Antwort und den guten Tip ;o)
Wenn der Widerstand kurzgeschlossen ist, kommt das Signal tatsächlich durch.
Der eingebaute Widerstand ist von den Farben her richtig, aber vielleicht reizt er ja die Toleranz aus. Ich werde ihn mal ersetzen.
Danke nochmal und Gruss,
schobi
damaltor
28.04.2007, 21:02
ja genau, versuch das. miss den neuen aber vorher durch...
Arexx-Henk
28.04.2007, 23:25
Hallo,
Ich habe ein kleines Problem mit dem K6.
SIG_INTERRUPT1 wird nicht ausgelöst, wenn der Schalter gedrückt wird.
(Bei allen anderen Schaltern funktioniert es.)
Es konnte vielleicht sein dass es kein hardware fehler ist aber dass es davon abhangt wie dein Program geschrieben ist.
Postet sonst mal dein Code da kann mann vielleicht etwas mehr daruber sagen.
Gruss
Henk
Hallo Henk,
der Code, den ich zum Testen genommen habe wertet eigentlich nur den Interrupt aus und schaltet bei empfangenem Interrupt die Status-LED für eine gewisse Zeit aus:
#include "asuro.h"
/* ===================== */
/* ---- INTERRUPTS ---- */
/* ===================== */
volatile unsigned char lastSwitch;
volatile unsigned char switchPressed;
SIGNAL(SIG_INTERRUPT1){
lastSwitch=1;
switchPressed=TRUE;
}
/* ===================== */
/* ---- MAIN ---- */
/* ===================== */
int main(void)
{
Init();
StartSwitch();
sei();
lastSwitch=0;
while(1){
int i;
StartSwitch();
StatusLED(RED);
if(switchPressed){
StatusLED(OFF);
switchPressed=FALSE;
for(i=0;i<300;i++)
Sleep(0xD8);
}
}
return 0;
}
Ich habe den R30 inzwischen auch mal gemessen: 66,5kOhm ... eigentlich hatte ich (auch nach damaltors Antwort) erwartet, dass er höher als 68k ist. Soll ich jetzt gleich einen neuen einsetzen, der kleiner als die originalen 68k ist? (Habe auch mal R24 gemessen, der vor dem Interrupt Eingang hängt: 992Ohm - das ist innerhalb der Toleranz).
Gruss,
schobi
damaltor
29.04.2007, 13:41
hmm.. versuch mal einen möglichst genau passenden zu bekommen....
wenn der widerstand zu groß ist, kommt weniger spannung an bzw fliesst durch, es wird weniger gemessen... und die pollswitch-zahl ist um 1 niedriger =)
Arexx-Henk
29.04.2007, 17:40
Hallo,
Da sehe ich kein Prizipiele Fehler im Program. Nur die zweite 'StartSwitch' ist uberflussig aber dass macht nichts.
Bei mir funktionieren mit deinem Program alle Tasten gleich inklusief K6.
Funktioniert deine K6 doch mit dem Selbsttest?
Es scheint mir wie damaltor schrieb dass irgendwo die R30 Wert viel gross ist oder die Wert von R23 (1M) viel zu klein oder deine Taste K6 hat irgendwo ein zo grossen Wiederstand beim drucken.
Vielleicht mal alle Wiederstanden durchmessen.
http://home.planet.nl/~winko001/Asuro/Info/AsuInfPagFrm.htm
(Measure Asuro Switches Resistor's (.jpg))
Gruss
Henk
Hallo Henk,
ja, der Schalter-Selbsttest hat funktioniert.
Ich habe jetzt auch nochmal den R23 gemessen: der ist viel zu klein (obwohl auch bei dem die Farben stimmen... ).
Ich werde also nächste Woche mal erst den R23 wechseln. Und wenn es dann immer noch nicht geht, dann den R30 wie von damaltor vorgeschlagen.
Gruss und Danke,
schobi
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.