Gast
#99107
Hallo zusammen bin mal wieder auf dieser seite, weil mein code spukt... habe folgendes problem: Prozessor MSP430F149 ich habe eine kleine timer routine programiert.... void ventil_oeffnen (unsigned int soll_oeffnungszeit) { TBCTL = 0x0144; //Timer konfigurieren TBCCTL0 = 0x0010; //Timer Interrupt enable TBCCR0 = 36863; TBCTL |= 0x0050; //Timer start do { P2OUT|=0x80; //Ventil öffnen bis Zeit abgelaufen ist }while (ist_oeffnungszeit<soll_oeffnungszeit); //Wert der hier eingesetzt wird entspricht der anz. 1/100s lcd_dispint(1,ist_oeffnungszeit); P2OUT&=0x7F; //Ventil wieder schliessen wenn Zeit abgelaufen ist_oeffnungszeit=0; TBCTL&=0xFFCF; //Timer stopen TBCCTL0&=0x0000; //Timerinterrupt disable } dazu die passende interrupt routine... #pragma vector=TIMERB0_VECTOR __interrupt void Timer_B (void) { ist_oeffnungszeit++; } als globale variabel wird volatile unsigned int ist_oeffnungszeit=0; verwendet nun mein problem. wenn ich den funktionsaufruf ventil_oeffnen (1000); schreibe, heisst das, dass das ventil welches ich ansteuere 10s offen ist da ich den timer so konfiguriert habe, dass er alle 1/100s einen interrupt auslöst und die variabel "ist_oeffnungszeit" um eins erhöht. doch leider bleibt das ventil aus unerklärlichen gründen sehr lange offen wenn ich "ventil_oeffnen (1);"schreibe. hier sollte das ventil ja nur 1e hundertstellsekunde offen bleiben. da ich dem timer nicht getraut habe, machte ich folgendes TBCTL = 0x0144; //Timer konfigurieren TBCCTL0 = 0x0010; //Timer Interrupt enable TBCCR0 = 36863; TBCTL |= 0x0050; //Timer start do { P1OUT|=0x80; }while(ist_oeffnungszeit<100); P1OUT&=0x7F; diese funktion macht einen 1s langen impuls an P1.7 ich habe dies mit dem KO überprüft und es stimmte. der timer arbeitet also ok?? Hat jemand eine ahnung bei diesem problem danke für eure hilfe