www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe gesucht


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Klappen denn andere Zeiten (10 Hundertstelsek., 20, 30, 100 usw.)
einwandfrei?

2) Welche Taktfrequenz hast du? Externer 32kHz oder DCO?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jaja, alles ok, sonst laufen die timergeschichte super....
habe einfach gerade ein solchen quarz gehabt, darum der krumme wert....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.