Also so weit ich das verstanden habe, brauchst du die PollSwitch() im Interrupt Betrieb nciht, da du damit manuell ne Messung anstößt.
Andun
muss man bei der benutzugn von poll switch irgendwas besonderes beachten?Code:int main(void) { Init(); EncoderInit(); StartSwitch(); unsigned char sw_data; while(TRUE) { if(sw_pressed) { MotorState(BREAK, BREAK); sw_data = PollSwitch(); // wenn ich die zeile auskommentiere gehts Rotate(180, 200); sw_pressed = FALSE; StartSwitch(); } else { MotorState(FWD, FWD); MotorSpeed(200, 200); } } return 0; }
Denn wenn ich es benutze ist sw_pressed nach dem ersten interrupt dauerhaft TRUE.
Also so weit ich das verstanden habe, brauchst du die PollSwitch() im Interrupt Betrieb nciht, da du damit manuell ne Messung anstößt.
Andun
www.subms.de
Aktuell: Flaschcraft Funkboard - Informationssammlung
das Problem ist, dass er mir im Interrupt Betrieb nur sagt, dass ein Schalter gedrückt wurde und nicht welcher.
ok, scheinbar löst er nach einem PollSwitch noch ne weile Interrupts aus.
Wenn ich demnach ein
in die sw_pressed behandlung einbaue gehts.Code:while(sw_pressed) { sw_pressed = FALSE; StartSwitch(); }
Aber wenn jemand ne elegantere Lösung hat - immer her damit...
Hi MadMan
hab grad das gleiche Problem.
wo wird die Variable sw_pressed bei dir denn gesetzt?
das macht ein interrupt in der erweiterten asurolib, siehe:
https://gna.org/projects/asuro-tools/
Danke, werd ich mir mal anschaun.
hm, ok, habs gesehen.
nun will ich mir die SIGNAL routine (ich verwende hier nich die original lib und die alte avr-libc) eigentlich selbst schreiben.
Naja, sowas wie die Interrupts abfangen ist natürlich möglich, aber ich geb dir recht, elegant ist was anderes
muss mal in mich gehen, wieso denn da am Pin noch low anliegt (nachdem der Schalter losgelassen wurde), bzw wie mans umgehen kann.
Viele Grüße
Mooses
Ok, das problem ist natürlich wieder der bewusste Kondensator. Wenn der Schalter losgelassen wird ist die Spannung da erstmal auf logisch 0 und der Kondensatur muss über den 1M Widerstand von Versorgungsspannung aufgeladen werden.
Was ich jetzt gemacht hab ist, dass ich den Asuro zurücksetzenlasse (für ne halbe sekunde) und in dieser Zeit einfach den Interruptpin wieder auf Ausgang und 1 schalte (wird ja nach PollSwitch() wieder auf Eingang gesetzt ), ich lade also den Kondensator über Versorgung und den Interruptpin, das scheint zu funktionieren.
Bis dann
Mooses
genau so ist es. der kondensator ist schuld. bei mir hat es sehr geholfen, ihn auszubauen bzw. abzukneifen.
Die signal routine kannst du natürlich selbst schreiben, öffne die asuro.c und kommentiere die alte routine aus, dann kannst du einen neue schreiben.
Lesezeichen