PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt bei PWM geht nicht aus



kautz
24.06.2009, 20:55
Hallo,
ich möchte 2 Motoren über PWM ansteuern. Ich lasse beide Motoren für par Sekunden laufen und dann schalte ich sie wieder aus und das in der for(ever)-Schleife.
Sobald ich aber die globalen Interrupts enable, laufen die Motoren schneller und schalten sich an und aus im schnelleren Takt.

Es kommt also ein Interrupt.
Ich schalte schon die Interrupts aus:


TIMSK &= ~(1<<OCIE1A);
TIMSK &= ~(1<<OCIE1B);
TIMSK &= ~(1<<TOIE1);
TIMSK &= ~(1<<TOIE0);
TIMSK &= ~(1<<TICIE1);


Doch irgendwie passiert es immer noch.Sobald ich sei() ausführe.

Woran kann denn das liegen?

kautz
24.06.2009, 21:12
Die Richtungen bestimme ich über die PINS:
PORTD5;PORTD6 und PORTD7;PORTB0

Auf PORTB0 liegt auch ICP1.
Kann das etwas beeinflussen?

Irgendwie habe ich das aber doch durch TIMSK disabled oder?

yaro
24.06.2009, 22:24
Du brauchst die Interrupts nicht ausschalten, sie sind bei Anschalten der Versorgungsspannung schon ausgeschaltet.

Hilfreich wäre es vielleicht, den ganzen Code zu posten, denn so, wie du es beschrieben hast, dürfte sei() absolut keinen Einfluss auf dein Programm nehmen.

Gruß, Yaro

panier
25.06.2009, 07:28
Ich suche momentan an der gleichen Stelle, nur im Anfängermodus (Bascom)
:-#
Wenn ich den Port auf 0 setze, dann sollt eigentlich alles aus sein, aber der Motor dreht auf volle Leistung hoch. Das Stoppen des Timers hat geholfen, aber den konnte ich dann nicht mehr einschalten.
An dem C-Code wäre ich auch interessiert, da ich mich frage ob Bascom oder C (ich war früher in der Windows C++ programmierung)

kautz
25.06.2009, 11:05
ich werde mal alle signalhandler einrichten und gucken woher das kommt und eventuell noch im oszi mir genau anschauen, was an den ports passiert.

Irgendwie funktioniert es nur 1 - 2 mal und dann dreht der Motor voll auf (wie du auch sagtest).

Aber es liegt eigentlich definitiv am Interrupt, denn ohne sei() (also default) geht alles super.

Es kann nur ein Interrupt sein.

Ceos
25.06.2009, 11:09
Es kann nur ein ... sein.

wie oft hab cih diese aussage nur gehört und selber schon geäußert und dann wars doch ne triviale sache bei der initialisierung ... blöd nur, man kann net helfen, wenn man keinen code lesen kann um den fehler zu suchen ^^