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
1) Klappen denn andere Zeiten (10 Hundertstelsek., 20, 30, 100 usw.) einwandfrei? 2) Welche Taktfrequenz hast du? Externer 32kHz oder DCO?
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...
Wie kommst du denn auf diesen krummen Wert? Ist das ein USART-Teiler? grübel Läuft der Oszillator denn korrekt? BSCTL-Bits geprüft und gewartet, bis er stabil ist?
jaja, alles ok, sonst laufen die timergeschichte super.... habe einfach gerade ein solchen quarz gehabt, darum der krumme wert....
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.