www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schaltverzögerung von 200mSekunden


Autor: Ricco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mal eine kleine Frage an euch, wie kann ich eine Anweisung 
programmieren wenn ich eine maximale Schaltverzögerung von 200 mSekunde 
habe und bei manchen Zeilen bis zu vier Sekunden warte. Kennt Ihr ein 
Beispiel oder ein Befehl.
PIC: 16f873
Programmiersprache: C

Autor: Fernando Heitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Es kommt darauf welchen Compiler du verwendest .

Meistens kannst du eine Verzögerung mit den Befehlen
delay_ms(),delay_us()erreichen.

Diese Befehle sind Sonderfunktionen von manchen Compilern.
Ansonsten kannst du sowas selber machen, mit einer Schleife und ein paar 
NOPs.


MFG
Fernando

Autor: Ricco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja diesen Befehl kenne ich, jedoch ist mein Problem das ich in dieser 
Zeit nicht heraus springen kann.

Wenn ich ein delay von vier Sekunden habe, wie habe ich dann die 
Möglichkeit innert 200mSekunden in eine andere Zeile zu springen.

Es ist nämlich so. In Normalfall sollte das Programm eine Zeile nach der 
anderen ausführen, jedoch fällt ein System aus, sollte das Programm 
innert 200mSekunden zu einer anderen Zeile springen. Jedoch unter C, 
habe ich keine Ahnung wie ich dieses Problem sauber löse. Ich kann ja 
nicht alle 200mSekunden überprüfen ob der Specialfall eingetroffen ist, 
es würde Einfach das ganze sprengen, zu langer und unübersichtlicher 
Quellcode geben. Ansonsten würde ich es mit for lösen "for(i=0,i<20,i++) 
delay_ms(200);". Darum hoffe ich jemand hat eine saubere Lösung.

Autor: Fernando Heitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem ungefähr verstanden.
Was ich nicht verstehe ist, was meinst du mit System ??
Meinst du damit externe Peripherie ?

Was ist wenn du vielleicht mit Interrupts arbeitest.
Zum Beispiel RB4-RB7 konntest du dann 4 ´"Hardware-Syteme" überwachen.

Oder benutze ein Timer( wenn der frei ist), und löst alle 200 ms ein 
Interrupt aus , und in der Interruptroutine kannst du dein System 
überprüfen.


MFG
Fernando

Autor: Oryx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wenn ich die Sache richtig verstanden habe, führt kein Weg an einem 
Timerinterrupt vorbei.
Das mit den delays ist nicht gut, da Deine gesamte Rechnerzeit verbraten 
wird. Interrupts verlängern Deine Laufzeiten ins unkalkulierbare.

Konzept:

timer_interrupt_alle_10_msec(void)
{ // Interruptroutine, so kurz wie möglich
  timer_10_ms += 10;
}

void main(void)
{
  for (;;)
  {
    interrupt_sperren();
    timer += timer_10ms;
  // Den von der Interruptroutine zu ändernden Wert nur
  // einmalig auslesen

    timer_10ms = 0;
      // und wieder auf 0 setzen
    interrupt_freigeben();

    // Ab hier kanst Du mit dem Wert von timer machen, was Du
    // willst, nur abfragen if (timer == irgendwas) ist ganz
    // schlecht
    if (timer > 200)
    {
      aktion_bei_200ms();
    }
    if (timer > 4000)
    {
      aktion_bei_4_sec();
      timer = 0;
    }
  }
}


Oryx

Autor: Ricco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
merci viel mal an euch alle für eure Antworten, sie haben mir sehr 
geholfen.

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.