Hilfe gesucht

Gast #99107
Lesenswert?
• ▲
▼
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
Gast #99109
Lesenswert?
• ▲
▼
ja, die anderen zeiten klappen so lala. wenn ich zum beispiel 300
eingebe und parallel mit der stoppuhr stoppe, sind es mehr als 4s
obwohl es nur 3 sein sollten.
ich glaube irgendwo verzögert sich das ganze...

ich habe einen externen 7,3728MHz Quarz...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren