-
        

+ Antworten
Ergebnis 1 bis 9 von 9

Thema: Simples waitms() mit delay.h. For Schleife Zeitraubproblem

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    29
    Beiträge
    215

    Simples waitms() mit delay.h. For Schleife Zeitraubproblem

    Anzeige

    Also ich habe mir mit den Funktionen aus delay.h eine simple waitms() Funtkion geschrieben. Damit wollte ich auf meinem RNControl die LEDs im Sekunden Takt an und wieder ausschalten. Und das eine halbe Minute.
    mit waitms(1000) dauerte es aber fast doppelt solange als fast eine Minute. Gestoppt habe ich einfach mit nem Funkweker den ich daneben gestellt hab. Durch rumrechnen und probieren ging es dann endlich mit
    waitms(647) das das ganze wirklich fast auf die Sekunde genau eine halbe Minute dauert. Anscheinend verbrauchen die for Schleifen fast die hälfte der Zeit. Meine Frage ist jetzt eigentlich ob ich in der Funktion
    waitms() nicht einfach die Variable ms mit 0,647 multiplizieren kann.
    Gruß Muraad
    Angehängte Dateien Angehängte Dateien
    • Dateityp: c delay.c (823 Bytes, 17x aufgerufen)

  2. #2
    Gast
    Bezieht sich die delay - Funktion vielleicht auf eine bestimmte Quarzfrequenz?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    29
    Beiträge
    215
    Ja tut mir leid hab ich vergessen zusagen. Ist für 16Mhz. Die Berechnung steht aber im Quelltext und müsste sich für 4Mhz und 8Mhz ziemlich leicht ändern lassen.
    Muraad

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    In deiner Funktion Waitms läufst du 1000 mal durch eine For-Schleife, die delay_loop_2(4) ausführt. Der Fehler durch die zusätzliche Zeit, die die Schleife benötigt(könnte man ja testweise mal messen), ließe sich geringer halten, wenn du 100mal delay_loop_2(40) nähmest(ich glaube, du könntest sogar ganz ohne for delay_loop_2(4000) schreiben(die Variante, die bei GCC dabei ist, hat int als Parameter.).).
    it works best if you plug it (aus leidvoller Erfahrung)

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    14.07.2004
    Alter
    27
    Beiträge
    37
    Du könntest einen Timer verwenden. Dann ist die Zeit "exakt".
    Frag aber nicht wie, ich bin gerade auch am rätseln.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    29
    Beiträge
    215
    Erstmal danken Gottfreak. delay_loop_2(4000), eigentlich zu einfach, hät ich echt selber sehen können. (*,)
    Ach und TillHoffmann, du musst den gewünschten Timer nur mit Prescaler und vielleicht richtigen Startwert auf die gebrauchte Frequenz bringen, so dass der Timer z.B. alle 1ms überläuft. Wenn du willt kann ich dir mal ein Windows Programm (rnavr.zip) mailen das ich hier irgendwo im Forum gefunden hab, aber nicht mehr weis wie der Link war. Das Programm berechnet dir bei gegebenen Parametern die Richtigen Werte (für Prescaler usw.)
    z.B. bei XMhz, TimerX soll Xmal in der Sekunde überlaufen.
    Gruß Muraad ]

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    14.07.2004
    Alter
    27
    Beiträge
    37
    Hallo muraad,

    vielen Dank für das Angebot, aber bei mir funktionieren die Timer jetzt schon.
    Aber ich hab eine Abweichung vom 10%. Katastrophe. Und ich wollte eine Uhr programmieren

  8. #8
    Gast
    Tja, dann hast du entweder den internen Oszillator verwendet oder Fehler beim Programmieren gemacht. Gib genauere Angaben zu deinem Programm und der verwendeten Hardware und dir wird geholfen.

    Gruß, Alex

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    29
    Beiträge
    215
    Oder dein Quarz hat einfach die Falsche Hertz Zahl. Dann ist es egal wie man den Timer einstellt und es kommt nie ne 100% sek,ms,us was auch immer Teilung raus.

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •